diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/CREDITS linux.16p3/CREDITS --- linux.vanilla/CREDITS Fri Apr 21 12:45:49 2000 +++ linux.16p3/CREDITS Mon May 15 12:32:29 2000 @@ -1636,6 +1636,13 @@ E: Frederic.Potter@masi.ibp.fr D: Some PCI kernel support +N: Peter Pregler +E: Peter_Pregler@email.com +D: V4L-Driver for the CPiA PPC2 driven parallel connected camera. +P: 1024D/554D35AE 1314 1889 46A5 14F3 EE4D 1958 4A9C 2B10 554D 35AE +S: (ask for current address) +S: Austria + N: Stefan Probst E: sp@caldera.de D: The Linux Support Team Erlangen, 1993-97 @@ -1743,6 +1750,13 @@ S: 21 Rue Carnot S: 95170 Deuil La Barre S: France + +N: Aristeu Sergio Rozanski Filho +E: aris@conectiva.com.br +D: Support for EtherExpress 10 ISA (i82595) in eepro driver +S: Rua Tocantins, 89 - Cristo Rei +S: 80050-430 - Curitiba - Parana +S: Brazil N: Alessandro Rubini E: rubini@ipvvis.unipv.it diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Documentation/Configure.help linux.16p3/Documentation/Configure.help --- linux.vanilla/Documentation/Configure.help Fri Apr 21 12:45:49 2000 +++ linux.16p3/Documentation/Configure.help Mon May 15 16:31:19 2000 @@ -3844,11 +3844,10 @@ IBM ServeRAID Support CONFIG_SCSI_IPS This is support for the IBM ServeRAID hardware RAID controllers. - Consult the SCSI-HOWTO, available via anonymous FTP from - ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, and the file - README.ips in drivers/scsi for more information. If this driver - does not work correctly without modification please contact the - author by email at ipslinux@us.ibm.com. + See http://www.developer.ibm.com/welcome/netfinity/serveraid.html + for more information. If this driver does not work correctly + without modification please contact the author by email at + ipslinux@us.ibm.com. BusLogic SCSI support CONFIG_SCSI_BUSLOGIC @@ -6320,9 +6319,10 @@ EtherExpress PRO support CONFIG_EEXPRESS_PRO - If you have a network (Ethernet) card of this type, say Y. Note - however that the EtherExpress PRO/100 Ethernet card has its own - separate driver. Please read the Ethernet-HOWTO, available via FTP + If you have a network (Ethernet) card of this type, say Y. This + driver supports intel i82595{FX,TX} based boards. Note however + that the EtherExpress PRO/100 Ethernet card has its own separate + driver. Please read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be @@ -7929,6 +7929,18 @@ To use the new attributes, it is recommended to use the flags '-f 600 -d 755' on the ncpmount command line. +nls default codepage +CONFIG_NLS_DEFAULT + The default NLS used when mounting filesystem. Currently, the valid + values are cp437, cp737, cp775, cp850, cp852, cp855, cp857, cp860, + cp861, cp862, cp863, cp864, cp865, cp866, cp869, cp874, cp932, cp936, + cp949, cp950, iso8859-1, iso8859-2, iso8859-3, iso8859-4, iso8859-5, + iso8859-6, iso8859-7, iso8859-8, iso8859-9, iso8859-15, koi8-r. + If you specify a wrong value, it will use the build-in NLS; compatible + with iso8859-1. + + If unsure, specify it as "cp437". + nls codepage 437 CONFIG_NLS_CODEPAGE_437 The Microsoft fat filesystem family can deal with filenames in @@ -8107,6 +8119,48 @@ only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Thai. +nls codepage 932 +CONFIG_NLS_CODEPAGE_932 + The Microsoft fat filesystem family can deal with filenames in + native language character sets. These character sets are stored in + so-called DOS codepages. You need to include the appropriate + codepage if you want to be able to read/write these filenames on + DOS/Windows partitions correctly. This does apply to the filenames + only, not to the file contents. You can include several codepages; + say Y here if you want to include the DOS codepage for Shift-JIS. + +nls codepage 936 +CONFIG_NLS_CODEPAGE_936 + The Microsoft fat filesystem family can deal with filenames in + native language character sets. These character sets are stored in + so-called DOS codepages. You need to include the appropriate + codepage if you want to be able to read/write these filenames on + DOS/Windows partitions correctly. This does apply to the filenames + only, not to the file contents. You can include several codepages; + say Y here if you want to include the DOS codepage for Simplified + Chinese(GBK). + +nls codepage 949 +CONFIG_NLS_CODEPAGE_949 + The Microsoft fat filesystem family can deal with filenames in + native language character sets. These character sets are stored in + so-called DOS codepages. You need to include the appropriate + codepage if you want to be able to read/write these filenames on + DOS/Windows partitions correctly. This does apply to the filenames + only, not to the file contents. You can include several codepages; + say Y here if you want to include the DOS codepage for UHC. + +nls codepage 950 +CONFIG_NLS_CODEPAGE_950 + The Microsoft fat filesystem family can deal with filenames in + native language character sets. These character sets are stored in + so-called DOS codepages. You need to include the appropriate + codepage if you want to be able to read/write these filenames on + DOS/Windows partitions correctly. This does apply to the filenames + only, not to the file contents. You can include several codepages; + say Y here if you want to include the DOS codepage for Traditional + Chinese(Big5). + nls iso8859-1 CONFIG_NLS_ISO8859_1 If you want to display filenames with native language characters @@ -9349,6 +9403,18 @@ module, say M here and read Documentation/modules.txt. Most people will say N. +SBC-60XX Watchdog Timer +CONFIG_60XX_WDT + This driver can be used with the watchdog timer found on some + single board computers, namely the 6010 PII based computer. + It may well work with other cards. It reads port 0x443 to enable + and re-set the watchdog timer, and reads port 0x45 to disable + the watchdog. If you have a card that behave in similar ways, + you can probably make this driver work with your card as well. + + You can compile this driver directly into the kernel, or use + it as a module. The module will be called sbc60xxwdt.o. + Enhanced Real Time Clock Support CONFIG_RTC If you say Y here and create a character special file /dev/rtc with @@ -12118,7 +12184,13 @@ FBA devices CONFIG_DASD_FBA - FBA devices are currently unsupported. + FBA devices are e.g. the Vitual disk in storage under VM/ESA and others. + +Diag access to CMS formatted minidisk +CONFIG_DASD_MDSK + By using this access method you can acess any disk supported by VM/ESA. + You have to format the disk using CMS and then specify the parameter + dasd_force_diag= in the parameter line of the kernel. Compaq SMART2 support CONFIG_BLK_CPQ_DA diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Documentation/kbuild/config-language.txt linux.16p3/Documentation/kbuild/config-language.txt --- linux.vanilla/Documentation/kbuild/config-language.txt Fri Apr 21 12:45:49 2000 +++ linux.16p3/Documentation/kbuild/config-language.txt Wed Apr 19 14:05:06 2000 @@ -1,5 +1,5 @@ Config Language Specification -21 January 1999 +18 October 1999 Michael Elizabeth Chastain, @@ -82,7 +82,10 @@ double-quoted string. If the word is unquoted or double quoted, then $-substition will be performed on the word. - A /symbol/ is a single unquoted word. + A /symbol/ is a single unquoted word. A symbol must have a name of + the form CONFIG_*. scripts/mkdep.c relies on this convention in order + to generate dependencies on individual CONFIG_* symbols instead of + making one massive dependency on include/linux/autoconf.h. A /dep/ is a dependency. Syntactically, it is a /word/. At run time, a /dep/ must evaluate to "y", "m", "n", or "". @@ -117,6 +120,7 @@ Dependent statements: dep_bool /prompt/ /symbol/ /dep/ ... + dep_mbool /prompt/ /symbol/ /dep/ ... dep_hex /prompt/ /symbol/ /word/ /dep/ ... dep_int /prompt/ /symbol/ /word/ /dep/ ... dep_string /prompt/ /symbol/ /word/ /dep/ ... @@ -355,8 +359,8 @@ number is a legal value. Configure: implemented -Menuconfig: not implemented -Xconfig: not implemented +Menuconfig: implemented +Xconfig: implemented mconfig: implemented Example: @@ -377,14 +381,14 @@ legal value. Configure: implemented -Menuconfig: not implemented -Xconfig: not implemented +Menuconfig: implemented +Xconfig: implemented mconfig: implemented Example: - # Not from the corpus - define_int CONFIG_UID_TORVALDS 2026 + # drivers/char/ftape/Config.in + define_int CONFIG_FT_ALPHA_CLOCK 0 @@ -394,8 +398,8 @@ are any ASCII string, except for the characters '"' and '\\'. Configure: implemented -Menuconfig: not implemented -Xconfig: not implemented +Menuconfig: implemented +Xconfig: implemented mconfig: implemented Example @@ -414,17 +418,22 @@ instead of define_bool to define tristate values. This aids in static type checking. -Configure: not implemented -Menuconfig: not implemented -Xconfig: not implemented +Configure: implemented +Menuconfig: implemented +Xconfig: implemented mconfig: implemented Example: - # not from the corpus - if [ "$CONFIG_ZFTAPE" != "n" ]; then - comment 'The compressor will be built as a module only!' - define_tristate CONFIG_ZFT_COMPRESSOR m + # drivers/video/Config.in + if [ "$CONFIG_FB_AMIGA" = "y" ]; then + define_tristate CONFIG_FBCON_AFB y + define_tristate CONFIG_FBCON_ILBM y + else + if [ "$CONFIG_FB_AMIGA" = "m" ]; then + define_tristate CONFIG_FBCON_AFB m + define_tristate CONFIG_FBCON_ILBM m + fi fi @@ -433,23 +442,63 @@ This verb evaluates all of the dependencies in the dependency list. Any dependency which has a value of "y" does not restrict the input -range. Any dependency which has a value of "n", or which has some -other value, restricts the input range to "n". +range. Any dependency which has an empty value is ignored. +Any dependency which has a value of "n", or which has some other value, +(like "m") restricts the input range to "n". Quoting dependencies is not +allowed. Using dependencies with an empty value possible is not +recommended. See also dep_mbool below. If the input range is restricted to the single choice "n", dep_bool silently assigns "n" to /symbol/. If the input range has more than one choice, dep_bool displays /prompt/ to the user, accepts a value from the user, and assigns that value to /symbol/. -Configure: not implemented -Menuconfig: not implemented -XConfig: not implemented +Configure: implemented +Menuconfig: implemented +XConfig: implemented mconfig: implemented - # not from the corpus - dep_bool 'RZ1000 chipset bugfix/support' CONFIG_BLK_DEV_RZ1000 $CONFIG_PCI +Example: + + # drivers/net/Config.in + dep_bool 'Aironet 4500/4800 PCI support 'CONFIG_AIRONET4500_PCI $CONFIG_PCI + +Known bugs: +- Xconfig does not write "# foo is not set" to .config (as well as + "#unset foo" to autoconf.h) if command is disabled by its dependencies. +=== dep_mbool /prompt/ /symbol/ /dep/ ... + +This verb evaluates all of the dependencies in the dependency list. +Any dependency which has a value of "y" or "m" does not restrict the +input range. Any dependency which has an empty value is ignored. +Any dependency which has a value of "n", or which has some other value, +restricts the input range to "n". Quoting dependencies is not allowed. +Using dependencies with an empty value possible is not recommended. + +If the input range is restricted to the single choice "n", dep_bool +silently assigns "n" to /symbol/. If the input range has more than +one choice, dep_bool displays /prompt/ to the user, accepts a value +from the user, and assigns that value to /symbol/. + +Notice that the only difference between dep_bool and dep_mbool +is in the way of treating the "m" value as a dependency. + +Configure: implemented +Menuconfig: implemented +XConfig: implemented +mconfig: not implemented + +Example: + + # Not from the corpus + dep_mbool 'Packet socket: mmapped IO' CONFIG_PACKET_MMAP $CONFIG_PACKET + +Known bugs: +- Xconfig does not write "# foo is not set" to .config (as well as + "#unset foo" to autoconf.h) if command is disabled by its dependencies. + === dep_hex /prompt/ /symbol/ /word/ /dep/ ... === dep_int /prompt/ /symbol/ /word/ /dep/ ... @@ -464,13 +513,15 @@ -=== dep_tristate /prompt/ /symbol /dep/ ... +=== dep_tristate /prompt/ /symbol/ /dep/ ... This verb evaluates all of the dependencies in the dependency list. -Any dependency which as a value of "y" does not restrict the input range. +Any dependency which has a value of "y" does not restrict the input range. Any dependency which has a value of "m" restricts the input range to -"m" or "n". Any dependency which has a value of "n", or which has some -other value, restricts the input range to "n". +"m" or "n". Any dependency which has an empty value is ignored. +Any dependency which has a value of "n", or which has some other value, +restricts the input range to "n". Quoting dependencies is not allowed. +Using dependencies with an empty value possible is not recommended. If the input range is restricted to the single choice "n", dep_tristate silently assigns "n" to /symbol/. If the input range has more than @@ -478,10 +529,18 @@ from the user, and assigns that value to /symbol/. Configure: implemented -Menuconfig: implemented (but silently ignores dependencies after the first) -Xconfig: implemented (but silently ignores dependencies after the first) +Menuconfig: implemented +Xconfig: implemented mconfig: implemented +Example: + + # drivers/char/Config.in + dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT + +Known bugs: +- Xconfig does not write "# foo is not set" to .config (as well as + "#unset foo" to autoconf.h) if command is disabled by its dependencies. === unset /symbol/ ... @@ -492,9 +551,16 @@ Configure: implemented Menuconfig: implemented -Xconfig: not implemented +Xconfig: implemented (with bugs) mconfig: implemented +Example: + + # arch/mips/config.in + unset CONFIG_PCI + unset CONFIG_MIPS_JAZZ + unset CONFIG_VIDEO_G364 + === choice /prompt/ /word/ /word/ @@ -525,6 +591,14 @@ Xconfig: implemented mconfig: implemented +Example: + + # arch/i386/config.in + choice ' PCI access mode' \ + "BIOS CONFIG_PCI_GOBIOS \ + Direct CONFIG_PCI_GODIRECT \ + Any CONFIG_PCI_GOANY" Any + === nchoice /prompt/ /symbol/ /prompt/ /symbol/ ... @@ -555,32 +629,40 @@ /expr/ may contain the following atoms and operators. Note that, unlike shell, you must use double quotes around every atom. - "..." a literal - "$..." a variable - - /atom/ = /atom/ true if atoms have identical value - /atom/ != /atom/ true if atoms have different value + /atom/: + "..." a literal + "$..." a variable + + /expr/: + /atom/ = /atom/ true if atoms have identical value + /atom/ != /atom/ true if atoms have different value + + /expr/: + /expr/ -o /expr/ true if either expression is true + /expr/ -a /expr/ true if both expressions are true + ! /expr/ true if expression is not true + +Note that a naked /atom/ is not a valid /expr/. If you try to use it +as such: + + # Do not do this. + if [ "$CONFIG_EXPERIMENTAL" ]; then + bool 'Bogus experimental feature' CONFIG_BOGUS + fi - /expr/ -o /expr/ true if either expression is true - /expr/ -a /expr/ true if both expressions are true - ! /expr/ true if expression is not true +... then you will be surprised, because CONFIG_EXPERIMENTAL never has a +value of the empty string! It is always "y" or "n", and both of these +are treated as true (non-empty) by the bash-based interpreters Configure +and Menuconfig. Configure: implemented Menuconfig: implemented XConfig: implemented, with bugs mconfig: implemented -Xconfig has several known bugs, and probably some unknown bugs too: - -- In a comparison, if the left-hand atom is a variable and that variable - is from a choice list, the right-hand atom must be "y". - -- In a comparison, if the right-hand atom is a variable and that variable - is from a choice list, you lose. tkparse will throw a segmentation - violation, silently generate bizarre TCL code, or something else. +Xconfig has some known bugs, and probably some unknown bugs too: -- tkparse gives the wrong precedence to -o, -a, and !. Don't use both - -o and -a in an expression. Don't use ! at all. +- literals with an empty "" value are not properly handled. diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Documentation/kernel-docs.txt linux.16p3/Documentation/kernel-docs.txt --- linux.vanilla/Documentation/kernel-docs.txt Fri Apr 21 12:45:49 2000 +++ linux.16p3/Documentation/kernel-docs.txt Wed Apr 19 13:57:45 2000 @@ -164,6 +164,18 @@ different situations. We also investigate the complex topic of DMA". + * Title: "Device Drivers Concluded" + Author: Georg v. Zezschwitz. + URL: http://www2.linuxjournal.com/lj-issues/issue28/1287.html + Keywords: address spaces, pages, pagination, page management, + demand loading, swapping, memory protection, memory mapping, mmap, + virtual memory areas (VMAs), vremap, PCI. + Description: Finally, the above turned out into a five articles + series. This latest one's introduction reads: "This is the last of + five articles about character device drivers. In this final + section, Georg deals with memory mapping devices, beginning with + an overall description of the Linux memory management concepts". + * Title: "Network Buffers And Memory Management" Author: Alan Cox. URL: http://www.ssc.com/lj/issue30/kk30.html @@ -234,11 +246,26 @@ Description: 68 pages paper on writing character drivers. A little bit old (1.993, 1.994) although still useful. + * Title: "Design and Implementation of the Second Extended + Filesystem" + Author: Rémy Card, Theodore Ts'o, Stephen Tweedie. + URL: http://web.mit.edu/tytso/www/linux/ext2intro.html + Keywords: ext2, linux fs history, inode, directory, link, devices, + VFS, physical structure, performance, benchmarks, ext2fs library, + ext2fs tools, e2fsck. + Description: Paper written by three of the top ext2 hackers. + Covers Linux filesystems history, ext2 motivation, ext2 features, + design, physical structure on disk, performance, benchmarks, + e2fsck's passes description... A must read! + Notes: This paper was first published in the Proceedings of the + First Dutch International Symposium on Linux, ISBN 90-367-0385-9. + * Title: "The Second Extended Filesystem" Author: Matthew Wilcox. URL: http://pocket.fluff.org/~mrw/linux/ext2.txt Keywords: ext2, filesystem. - Description: Description of ext2's blocks, directories, inodes ... + Description: Description of ext2's blocks, directories, inodes... + Notes: Seems to be DOWN. Anyone knows another link for it? * Title: "Analysis of the Ext2fs structure" Author: Louis-Dominique Dubeau. @@ -247,6 +274,15 @@ Description: Description of ext2's blocks, directories, inodes, bitmaps, invariants ... + * Title: "Journaling the Linux ext2fs Filesystem" + Author: Stephen C. Tweedie. + URL: + ftp://ftp.uk.linux.org:/pub/linux/sct/fs/jfs/journal-design.ps.gz + Keywords: ext3, journalist. + Description: Excellent 8-pages paper explaining the journaling + capabilities added to ext2 by the author, showing different + problems faced and the alternatives chosen. + * Title: "Kernel API changes from 2.0 to 2.2" Author: Richard Gooch. URL: @@ -258,7 +294,7 @@ * Title: "Kernel API changes from 2.2 to 2.3" Author: Richard Gooch. URL: - http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html + http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.3.html Keywords: 2.3, changes. Description: Kernel functions/structures/variables which changed from 2.2.x to 2.3.x. @@ -295,6 +331,81 @@ want a mechanism that is scalable. This means a large number of inactive FDs cost very little in memory and CPU time to manage". + * Title: "The Kernel Hacking HOWTO" + Author: Various Talented People, and Rusty. + URL: http://www.samba.org/~netfilter/kernel-hacking-HOWTO.html + Keywords: HOWTO, kernel contexts, deadlock, locking, modules, + symbols, return conventions. + Description: From the Introduction: "Please understand that I + never wanted to write this document, being grossly underqualified, + but I always wanted to read it, and this was the only way. I + simply explain some best practices, and give reading entry-points + into the kernel sources. I avoid implementation details: that's + what the code is for, and I ignore whole tracts of useful + routines. This document assumes familiarity with C, and an + understanding of what the kernel is, and how it is used. It was + originally written for the 2.3 kernels, but nearly all of it + applies to 2.2 too; 2.0 is slightly different. ". + + * Title: "ALSA 0.5.0 Developer documentation" + Author: Stephan 'Jumpy' Bartels . + URL: http://www.math.TU-Berlin.de/~sbartels/alsa/ + Keywords: ALSA, sound, soundcard, driver, lowlevel, hardware. + Description: Advanced Linux Sound Architecture for developers, + both at kernel and user-level sides. Work in progress. ALSA is + supposed to be Linux's next generation sound architecture. + + * Title: "Programming Guide for Linux USB Device Drivers" + Author: Detlef Fliegl. + URL: http://usb.in.tum.de/usbdoc/ + Keywords: USB, universal serial bus. + Description: A must-read. From the Preface: "This document should + give detailed information about the current state of the USB + subsystem and its API for USB device drivers. The first section + will deal with the basics of USB devices. You will learn about + different types of devices and their properties. Going into detail + you will see how USB devices communicate on the bus. The second + section gives an overview of the Linux USB subsystem [2] and the + device driver framework. Then the API and its data structures will + be explained step by step. The last section of this document + contains a reference of all API calls and their return codes". + Notes: Beware: the main page states: "This document may not be + published, printed or used in excerpts without explicit permission + of the author". Fortunately, it may still be read... + + * Title: "Tour Of the Linux Kernel Source" + Author: Vijo Cherian. + URL: http://www.geocities.com/vijoc/tolks/tolks.html + Keywords: . + Description: A classic of this page! Was lost for a while and is + back again. Thanks Vijo! TOLKS: the name says it all. A tour of + the sources, describing directories, files, variables, data + structures... It covers general stuff, device drivers, + filesystems, IPC and Networking Code. + + * Title: "Linux Kernel Mailing List Glossary" + Author: John Levon. + URL: http://www.movement.uklinux.net/glossary.html + Keywords: glossary, terms, linux-kernel. + Description: From the introduction: "This glossary is intended as + a brief description of some of the acronyms and terms you may hear + during discussion of the Linux kernel". + + * Title: "Linux Kernel Locking HOWTO" + Author: Various Talented People, and Rusty. + URL: + http://netfilter.kernelnotes.org/unreliable-guides/kernel-locking- + HOWTO.html + Keywords: locks, locking, spinlock, semaphore, atomic, race + condition, bottom halves, tasklets, softirqs. + Description: The title says it all: document describing the + locking system in the Linux Kernel either in uniprocessor or SMP + systems. + Notes: "It was originally written for the later (>2.3.47) 2.3 + kernels, but most of it applies to 2.2 too; 2.0 is slightly + different". Freely redistributable under the conditions of the GNU + General Public License. + BOOKS: (Not on-line) * Title: "Linux Device Drivers" @@ -366,15 +477,33 @@ * Title: "Linux Core Kernel Commentary. Guide to Insider's Knowledge on the Core Kernel od the Linux Code" Author: Scott Maxwell. - Publisher: ???. + Publisher: Coriolis. Date: 1999. Pages: 592. ISBN: 1-57610-469-9 - Notes: CD-ROM included. + Notes: CD-ROM included. Line by line commentary of the kernel + code. + + * Title: "Linux IP Stacks Commentary" + Author: Stephen Satchell and HBJ Clifford. + Publisher: Coriolis. + Date: 2000. + Pages: ???. + ISBN: 1-57610-470-2 + Notes: Line by line source code commentary book. + + * Title: "Programming for the real world - POSIX.4" + Author: Bill O. Gallmeister. + Publisher: O'Reilly & Associates, Inc.. + Date: 1995. + Pages: ???. + ISBN: I-56592-074-0 + Notes: Though not being directly about Linux, Linux aims to be + POSIX. Good reference. MISCELLANEOUS: - * Name: Linux Source Driver. + * Name: "Linux Source Driver" URL: http://lsd.linux.cz Keywords: Browsing source code. Description: "Linux Source Driver (LSD) is an application, which @@ -385,27 +514,27 @@ and variables) and LSD can generate patches for you on the fly (files, directories or kernel)". - * Name: Cross-Referencing Linux. + * Name: "Cross-Referencing Linux" URL: http://lxr.linux.no/source/ Keywords: Browsing source code. Description: Another web-based Linux kernel source code browser. Lots of cross references to variables and functions. You can see where they are defined and where they are used. - * Name: Linux Weekly News. + * Name: "Linux Weekly News" URL: http://lwn.net Keywords: latest kernel news. Description: The title says it all. There's a fixed kernel section summarizing developers' work, bug fixes, new features and versions produced during the week. Published every Thursday. - * Name: Kernel Traffic. + * Name: "Kernel Traffic" URL: http://kt.linuxcare.com Keywords: linux-kernel mailing list, weekly kernel news. Description: Weekly newsletter covering the most relevant discussions of the linux-kernel mailing list. - * Name: CuTTiNG.eDGe.LiNuX. + * Name: "CuTTiNG.eDGe.LiNuX" URL: http://edge.kernelnotes.org Keywords: changelist. Description: Site which provides the changelist for every kernel @@ -413,7 +542,7 @@ the patches and describes them. Pointers to the patches are there, too. - * Name: New linux-kernel Mailing List FAQ. + * Name: "New linux-kernel Mailing List FAQ" URL: Original site: http://www.altern.org/andrebalsa/doc/lkml-faq.html URL: U.S. mirror site: @@ -433,6 +562,45 @@ Description: Set of slides, presumably from a presentation on the Linux VFS layer. Covers version 2.1.x, with dentries and the dcache. + + * Name: "Gary's Enciclopedia - The Linux Kernel" + Author: Gary (I suppose...). + URL: http://members.aa.net/~swear/pedia/kernel.html + Keywords: links, not found here?. + Description: Gary's Enciclopedia exists to allow the rapid finding + of documentation and other information of interest to GNU/Linux + users. It has about 4000 links to external pages in 150 major + categories. This link is for kernel-specific links, documents, + sites... Look there if you could not find here whar you were + looking for. + + * Name: "The home page of Linux-MM" + Author: The Linux-MM team. + URL: http://www.linux.eu.org/Linux-MM/ + Keywords: memory management, Linux-MM, mm patches, TODO, docs, + mailing list. + Description: Site devoted to Linux Memory Mangement development. + Memory related patches, HOWTOs, links, mm developers... Don't miss + it if you are interested in memory management development! + + * Name: "Kernel Newbies IRC Channel" + URL: http://www.surriel.com/kernelnewbies.shtml + Keywords: IRC, newbies, channel, asking doubts. + Description: #kernelnewbies on irc.openprojects.net. From the web + page: "#kernelnewbies is an IRC network dedicated to the 'newbie' + kernel hacker. The audience mostly consists of people who are + learning about the kernel, working on kernel projects or + professional kernel hackers that want to help less seasoned kernel + people. [...] #kernelnewbies is on the Open Projects IRC Network, + try irc.openprojects.net or irc..openprojects.net as your + server and then /join #kernelnewbies". + + * Name: "linux-kernel mailing list archives and search engines" + URL: http://www.uwsg.indiana.edu/hypermail/linux/kernel/index.html + URL: http://www.kernelnotes.org/lnxlists/linux-kernel/ + Keywords: linux-kernel, archives, search. + Description: Some of the linux-kernel mailing list archivers. If + you have a better/another one, please let me know. _________________________________________________________________ - Document last updated on Tue Nov 30 11:20:00 CET 1999 + Document last updated on Mon Apr 17 18:07:07 CEST 2000 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Documentation/networking/shaper.txt linux.16p3/Documentation/networking/shaper.txt --- linux.vanilla/Documentation/networking/shaper.txt Fri Apr 21 12:45:49 2000 +++ linux.16p3/Documentation/networking/shaper.txt Mon May 15 12:16:59 2000 @@ -1,6 +1,6 @@ Traffic Shaper For Linux -This is the current ALPHA release of the traffic shaper for Linux. It works +This is the current BETA release of the traffic shaper for Linux. It works within the following limits: o Minimum shaping speed is currently about 9600 baud (it can only @@ -37,13 +37,12 @@ mrouted tunnels via a traffic shaper to control bandwidth usage. The shaper is device/route based. This makes it very easy to use -with any setup BUT less flexible. You may well want to combine this patch -with Mike McLagan 's patch to allow routes to be -specified by source/destination pairs. +with any setup BUT less flexible. You may need to use iproute2 to set up +multiple route tables to get the flexibility. There is no "borrowing" or "sharing" scheme. This is a simple -traffic limiter. I'd like to implement Van Jacobson and Sally Floyd's CBQ -architecture into Linux one day (maybe in 2.1 sometime) and do this with -style. +traffic limiter. We implement Van Jacobson and Sally Floyd's CBQ +architecture into Linux 2.2. THis is the preferred solution. Shaper is +for simple or back compatible setups. Alan diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Documentation/video4linux/README.cpia linux.16p3/Documentation/video4linux/README.cpia --- linux.vanilla/Documentation/video4linux/README.cpia Fri Apr 21 12:45:50 2000 +++ linux.16p3/Documentation/video4linux/README.cpia Mon May 1 01:00:03 2000 @@ -55,12 +55,12 @@ CONFIG_VIDEO_CPIA_PP=m CONFIG_VIDEO_CPIA_PP_DMA=y -For autoloading of all those modules you need to tell kerneld some -stuff. Add the following line to your kerneld config-file +For autoloading of all those modules you need to tell modutils some +stuff. Add the following line to your modutils config-file (e.g. /etc/modules.conf or wherever your distribution does store that stuff): -options parport_pc dma=3 irq=7 +options parport_pc io=0x378 irq=7 dma=3 alias char-major-81 cpia_pp The first line tells the dma/irq channels to use. Those _must_ match @@ -124,7 +124,7 @@ - a simple test application based on Xt is available at [3] - another test-application based on gqcam-0.4 (uses GTK) -- gqcam-0.5 should work +- gqcam-0.6 should work - xawtv-3.x (also the webcam) - xawtv-2.46 - w3cam (cgi-interface and vidcat, e.g. you may try out 'vidcat |xv @@ -158,7 +158,7 @@ --------------------------------------------------------------------------- TODO: -- port to linux 2.3.X ++ port to linux 2.3.X - using ieee1284 support in the kernel (when it works) - multiple camera support (struct camera or something) - This should work, but hasn't been tested yet. @@ -186,12 +186,14 @@ - Scott J. Bertin for cleanups, the proc-filesystem and much more - Jarl Totland for setting up the mailing list - and maintaining the web-server[3] + and maintaining the original web-server and for registering the + sourceforge project[3] - Manuel J. Petit de Gabriel for providing help with Isabel (http://isabel.dit.upm.es/) - Henry Bruce for providing developers information about the CPiA chip, I wish all companies would treat Linux as seriously -- FIXME for fixes related to the 1.02 firmware +- Chris Whiteford for fixes related to the + 1.02 firmware - special kudos to all the tester whose machines crashed and/or will crash. :) @@ -201,4 +203,4 @@ 1. http://www.risc.uni-linz.ac.at/people/ppregler mailto:Peter_Pregler@email.com 2. see the file COPYING in the top directory of the kernel tree - 3. http://home.eunet.no/~jtotland/vision/ + 3. http://webcam.sourceforge.net diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Documentation/watchdog.txt linux.16p3/Documentation/watchdog.txt --- linux.vanilla/Documentation/watchdog.txt Fri Apr 21 12:45:50 2000 +++ linux.16p3/Documentation/watchdog.txt Mon May 15 20:41:58 2000 @@ -79,15 +79,21 @@ People keep asking about the WDT watchdog timer hardware: The phone contacts for Industrial Computer Source are: -US: 619 677 0877 (sales) 0895 (fax) -UK: 01243 533900 -France (1) 69.18.74.30 +Industrial Computer Source +http://www.indcompsrc.com +ICS Advent, San Diego +6260 Sequence Dr. +San Diego, CA 92121-4371 +Phone (858) 677-0877 +FAX: (858) 677-0895 +> +ICS Advent Europe, UK +Oving Road +Chichester, +West Sussex, +PO19 4ET, UK +Phone: 00.44.1243.533900 -Industrial Computer Source -9950 Barnes Canyon Road -San Diego, CA - -http://www.industry.net/indcompsrc and please mention Linux when enquiring. diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/MAINTAINERS linux.16p3/MAINTAINERS --- linux.vanilla/MAINTAINERS Fri Apr 21 12:47:02 2000 +++ linux.16p3/MAINTAINERS Mon May 15 12:06:47 2000 @@ -403,7 +403,7 @@ IBM ServeRAID RAID DRIVER P: Keith Mitchell M: ipslinux@us.ibm.com -W: http://www.developer.ibm.com/welcome/netfinity/serveraid_beta.html +W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html S: Supported IDE DRIVER [GENERAL] diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Makefile linux.16p3/Makefile --- linux.vanilla/Makefile Wed May 3 21:13:34 2000 +++ linux.16p3/Makefile Thu May 4 01:00:57 2000 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 2 -SUBLEVEL = 15 -EXTRAVERSION = +SUBLEVEL = 16 +EXTRAVERSION = pre2 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/alpha/kernel/alpha_ksyms.c linux.16p3/arch/alpha/kernel/alpha_ksyms.c --- linux.vanilla/arch/alpha/kernel/alpha_ksyms.c Fri Apr 21 12:45:44 2000 +++ linux.16p3/arch/alpha/kernel/alpha_ksyms.c Mon May 15 17:43:57 2000 @@ -48,6 +48,8 @@ extern void __divqu (void); extern void __remqu (void); +EXPORT_SYMBOL(init_mm); + EXPORT_SYMBOL(alpha_mv); EXPORT_SYMBOL(enable_irq); EXPORT_SYMBOL(disable_irq); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/alpha/kernel/smp.c linux.16p3/arch/alpha/kernel/smp.c --- linux.vanilla/arch/alpha/kernel/smp.c Fri Apr 21 12:45:44 2000 +++ linux.16p3/arch/alpha/kernel/smp.c Mon May 15 17:44:41 2000 @@ -693,7 +693,7 @@ return -EBUSY; while (*(void **)lock) - schedule(); + barrier(); goto again; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/io_apic.c linux.16p3/arch/i386/kernel/io_apic.c --- linux.vanilla/arch/i386/kernel/io_apic.c Fri Apr 21 12:45:45 2000 +++ linux.16p3/arch/i386/kernel/io_apic.c Wed Apr 26 21:43:08 2000 @@ -1279,6 +1279,7 @@ /* Patch to set the IO-APIC physical IDs based on the values stored in the MPC table */ /* by Matt Domsch Tue Dec 21 12:25:05 CST 1999 */ +/* Hacked by Alan Cox to ignore drug induced BIOS tables */ static void __init setup_ioapic_ids_from_mpc(void) { @@ -1291,18 +1292,25 @@ /* Read the register 0 value */ *(int *)®_00 = io_apic_read(apic, 0); - if(reg_00.ID != mp_apics[apic].mpc_apicid) { - /* Change the value */ - printk("...changing IO-APIC physical APIC ID to %d\n", mp_apics[apic].mpc_apicid); - reg_00.ID = mp_apics[apic].mpc_apicid; - io_apic_write(apic, 0, *(int *)®_00); + if(reg_00.ID != mp_apics[apic].mpc_apicid) + { + if(mp_apics[apic].mpc_apicid>15) + printk(KERN_ERR "BIOS wants to set APIC ID to %d, ignoring and praying the BIOS setup is ok\n", + mp_apics[apic].mpc_apicid); + else + { + /* Change the value */ + printk("...changing IO-APIC physical APIC ID to %d\n", mp_apics[apic].mpc_apicid); + reg_00.ID = mp_apics[apic].mpc_apicid; + io_apic_write(apic, 0, *(int *)®_00); - /* - * Sanity check - */ - *(int *)®_00 = io_apic_read(apic, 0); - if (reg_00.ID != mp_apics[apic].mpc_apicid) - panic("could not set ID"); + /* + * Sanity check + */ + *(int *)®_00 = io_apic_read(apic, 0); + if (reg_00.ID != mp_apics[apic].mpc_apicid) + panic("could not set ID"); + } } } } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/irq.c linux.16p3/arch/i386/kernel/irq.c --- linux.vanilla/arch/i386/kernel/irq.c Fri Apr 21 12:45:45 2000 +++ linux.16p3/arch/i386/kernel/irq.c Mon May 15 18:03:50 2000 @@ -221,12 +221,12 @@ if (irq & 8) { inb(0xA1); /* DUMMY */ outb(cached_A1,0xA1); + outb(0x60+(irq&7),0xA0);/* Specific EOI to slave */ outb(0x62,0x20); /* Specific EOI to cascade */ - outb(0x20,0xA0); } else { inb(0x21); /* DUMMY */ outb(cached_21,0x21); - outb(0x20,0x20); + outb(0x60+irq,0x20); /* Specific EOI to master */ } } @@ -442,6 +442,10 @@ * Global interrupt locks for SMP. Allow interrupts to come in on any * CPU, yet make cli/sti act globally to protect critical regions.. */ +#if defined (__SMP__) || DEBUG_SPINLOCKS > 0 +spinlock_t i386_bh_lock = SPIN_LOCK_UNLOCKED; +#endif + #ifdef __SMP__ unsigned char global_irq_holder = NO_PROC_ID; unsigned volatile int global_irq_lock; @@ -449,7 +453,6 @@ atomic_t global_bh_count; atomic_t global_bh_lock; -spinlock_t i386_bh_lock = SPIN_LOCK_UNLOCKED; /* * "global_cli()" is a special case, in that it can hold the @@ -971,8 +974,24 @@ unsigned int i; unsigned long delay; + /* + * something may have generated an irq long ago and we want to + * flush such a longstanding irq before considering it as spurious. + */ + spin_lock_irq(&irq_controller_lock); + for (i = NR_IRQS-1; i > 0; i--) + if (!irq_desc[i].action) + irq_desc[i].handler->startup(i); + spin_unlock_irq(&irq_controller_lock); + + /* Wait for longstanding interrupts to trigger. */ + for (delay = jiffies + HZ/50; time_after(delay, jiffies); ) + /* about 20ms delay */ synchronize_irq(); + /* - * first, enable any unassigned irqs + * enable any unassigned irqs + * (we must startup again here because if a longstanding irq + * happened in the previous stage, it may have masked itself) */ spin_lock_irq(&irq_controller_lock); for (i = NR_IRQS-1; i > 0; i--) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/setup.c linux.16p3/arch/i386/kernel/setup.c --- linux.vanilla/arch/i386/kernel/setup.c Fri Apr 21 12:45:45 2000 +++ linux.16p3/arch/i386/kernel/setup.c Wed Apr 19 14:00:51 2000 @@ -98,7 +98,7 @@ extern int root_mountflags; extern int _etext, _edata, _end; -extern unsigned long cpu_hz; +extern unsigned long cpu_khz; /* * This is set up by the setup-routine at boot-time @@ -1005,8 +1005,8 @@ p += sprintf(p, "stepping\t: unknown\n"); if (c->x86_capability & X86_FEATURE_TSC) { - p += sprintf(p, "cpu MHz\t\t: %lu.%06lu\n", - cpu_hz / 1000000, (cpu_hz % 1000000)); + p += sprintf(p, "cpu MHz\t\t: %lu.%03lu\n", + cpu_khz / 1000, cpu_khz % 1000); } /* Cache size */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/smp.c linux.16p3/arch/i386/kernel/smp.c --- linux.vanilla/arch/i386/kernel/smp.c Fri Apr 21 12:45:45 2000 +++ linux.16p3/arch/i386/kernel/smp.c Wed Apr 19 14:00:51 2000 @@ -1358,7 +1358,7 @@ } cycles_t cacheflush_time; -extern unsigned long cpu_hz; +extern unsigned long cpu_khz; static void smp_tune_scheduling (void) { @@ -1374,7 +1374,7 @@ * the cache size) */ - if (!cpu_hz) { + if (!cpu_khz) { /* * this basically disables processor-affinity * scheduling on SMP without a TSC. @@ -1386,12 +1386,12 @@ if (cachesize == -1) cachesize = 8; /* Pentiums */ - cacheflush_time = cpu_hz/1024*cachesize/5000; + cacheflush_time = cpu_khz/1024*cachesize/5; } printk("per-CPU timeslice cutoff: %ld.%02ld usecs.\n", - (long)cacheflush_time/(cpu_hz/1000000), - ((long)cacheflush_time*100/(cpu_hz/1000000)) % 100); + (long)cacheflush_time/(cpu_khz/1000), + ((long)cacheflush_time*100/(cpu_khz/1000)) % 100); } unsigned int prof_multiplier[NR_CPUS]; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/time.c linux.16p3/arch/i386/kernel/time.c --- linux.vanilla/arch/i386/kernel/time.c Fri Apr 21 12:45:45 2000 +++ linux.16p3/arch/i386/kernel/time.c Wed Apr 19 14:00:51 2000 @@ -62,7 +62,7 @@ #include "irq.h" -unsigned long cpu_hz; /* Detected as we calibrate the TSC */ +unsigned long cpu_khz; /* Detected as we calibrate the TSC */ /* Number of usecs that the last interrupt was delayed */ static int delay_at_last_interrupt; @@ -665,12 +665,12 @@ * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) = * clock/second. Our precision is about 100 ppm. */ - { unsigned long eax=0, edx=1000000; + { unsigned long eax=0, edx=1000; __asm__("divl %2" - :"=a" (cpu_hz), "=d" (edx) + :"=a" (cpu_khz), "=d" (edx) :"r" (tsc_quotient), "0" (eax), "1" (edx)); - printk("Detected %ld Hz processor.\n", cpu_hz); + printk("Detected %ld kHz processor.\n", cpu_khz); } } } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/traps.c linux.16p3/arch/i386/kernel/traps.c --- linux.vanilla/arch/i386/kernel/traps.c Fri Apr 21 12:45:45 2000 +++ linux.16p3/arch/i386/kernel/traps.c Mon May 15 12:19:52 2000 @@ -162,33 +162,41 @@ printk("%08lx ", *stack++); } printk("\nCall Trace: "); - stack = (unsigned long *) esp; - i = 1; - module_start = PAGE_OFFSET + (max_mapnr << PAGE_SHIFT); - module_start = ((module_start + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)); - module_end = module_start + MODULE_RANGE; - while (((long) stack & 4095) != 0) { - addr = *stack++; - /* - * If the address is either in the text segment of the - * kernel, or in the region which contains vmalloc'ed - * memory, it *may* be the address of a calling - * routine; if so, print it so that someone tracing - * down the cause of the crash will be able to figure - * out the call path that was taken. - */ - if (((addr >= (unsigned long) &_stext) && - (addr <= (unsigned long) &_etext)) || - ((addr >= module_start) && (addr <= module_end))) { - if (i && ((i % 8) == 0)) - printk("\n "); - printk("[<%08lx>] ", addr); - i++; + if (!esp || (esp & 3)) + printk("Bad EIP value."); + else { + stack = (unsigned long *) esp; + i = 1; + module_start = PAGE_OFFSET + (max_mapnr << PAGE_SHIFT); + module_start = ((module_start + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)); + module_end = module_start + MODULE_RANGE; + while (((long) stack & 4095) != 0) { + addr = *stack++; + /* + * If the address is either in the text segment of the + * kernel, or in the region which contains vmalloc'ed + * memory, it *may* be the address of a calling + * routine; if so, print it so that someone tracing + * down the cause of the crash will be able to figure + * out the call path that was taken. + */ + if (((addr >= (unsigned long) &_stext) && + (addr <= (unsigned long) &_etext)) || + ((addr >= module_start) && (addr <= module_end))) { + if (i && ((i % 8) == 0)) + printk("\n "); + printk("[<%08lx>] ", addr); + i++; + } } } printk("\nCode: "); - for(i=0;i<20;i++) + if (!regs->eip || regs->eip==-1) + printk("Bad EIP value."); + else { + for(i=0;i<20;i++) printk("%02x ", ((unsigned char *)regs->eip)[i]); + } } printk("\n"); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/mips/baget/vacserial.c linux.16p3/arch/mips/baget/vacserial.c --- linux.vanilla/arch/mips/baget/vacserial.c Fri Apr 21 12:45:47 2000 +++ linux.16p3/arch/mips/baget/vacserial.c Wed Apr 19 13:54:46 2000 @@ -2162,7 +2162,7 @@ done: if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/ppc/8xx_io/uart.c linux.16p3/arch/ppc/8xx_io/uart.c --- linux.vanilla/arch/ppc/8xx_io/uart.c Fri Apr 21 12:45:47 2000 +++ linux.16p3/arch/ppc/8xx_io/uart.c Wed Apr 19 13:54:46 2000 @@ -2050,7 +2050,7 @@ done: if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/Makefile linux.16p3/arch/s390/Makefile --- linux.vanilla/arch/s390/Makefile Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/Makefile Mon May 15 16:31:19 2000 @@ -52,11 +52,15 @@ MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot +MAKESILO = $(MAKE) -C arch/$(ARCH)/tools/silo + +MAKEDASDFMT = $(MAKE) -C arch/$(ARCH)/tools/dasdfmt + silo: - @$(MAKEBOOT) silo + @$(MAKESILO) silo dasdfmt: - @$(MAKEBOOT) dasdfmt + @$(MAKEDASDFMT) dasdfmt image: vmlinux @$(MAKEBOOT) image diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/boot/Makefile linux.16p3/arch/s390/boot/Makefile --- linux.vanilla/arch/s390/boot/Makefile Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/boot/Makefile Mon May 15 16:31:19 2000 @@ -24,7 +24,7 @@ $(OBJCOPY) -O binary $< $@ image: $(CONFIGURE) $(TOPDIR)/vmlinux \ - iplfba.boot ipleckd.boot + iplfba.boot ipleckd.boot ipldump.boot $(OBJCOPY) -O binary $(TOPDIR)/vmlinux image $(NM) $(TOPDIR)/vmlinux | grep -v '\(compiled\)\|\( [aU] \)\|\(\.\)\|\(LASH[RL]DI\)' | sort > $(TOPDIR)/System.map @@ -34,5 +34,5 @@ dep: clean: - rm -f image listing iplfba.boot ipleckd.boot + rm -f image listing iplfba.boot ipleckd.boot ipldump.boot diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/boot/ipldump.S linux.16p3/arch/s390/boot/ipldump.S --- linux.vanilla/arch/s390/boot/ipldump.S Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/boot/ipldump.S Mon May 15 16:31:19 2000 @@ -0,0 +1,179 @@ +/* + * arch/s390/boot/ipldump.S + * + * S390 version + * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com), + * + * Tape dump ipl record. Put it on a tape and ipl from it and it will + * write a dump of the real storage after the ipl record on that tape. + */ + +#include +#include +#include + +#define IPL_BS 1024 + .org 0 + .long 0x00080000,0x80000000+_start # The first 24 bytes are loaded + .long 0x07000000,0x60000001 # by ipl to addresses 0-23. + .long 0x02000000,0x20000000+IPL_BS # (a PSW and two CCWs). + .long 0x00000000,0x00000000 + .long 0x00000000,0x00000000 # svc old psw + .long 0x00000000,0x00000000 # program check old psw + .long 0x00000000,0x00000000 # machine check old psw + .long 0x00000000,0x00000000 # io old psw + .long 0x00000000,0x00000000 + .long 0x00000000,0x00000000 + .long 0x00000000,0x00000000 + .long 0x000a0000,0x00000058 # external new psw + .long 0x000a0000,0x00000060 # svc new psw + .long 0x000a0000,0x00000068 # program check new psw + .long 0x000a0000,0x00000070 # machine check new psw + .long 0x00080000,0x80000000+.Lioint # io new psw + + .org 0x100 + .globl _start +_start: + l %r1,0xb8 # load ipl subchannel number +# +# find out memory size +# + mvc 104(8,0),.Lpcmem0 # setup program check handler + slr %r3,%r3 + lhi %r2,1 + sll %r2,20 +.Lloop0: + l %r0,0(%r3) # test page + ar %r3,%r2 # add 1M + jnm .Lloop0 # r1 < 0x80000000 -> loop +.Lchkmem0: + n %r3,.L4malign0 # align to multiples of 4M + st %r3,.Lmemsize # store memory size +.Lmemok: + +# +# first write a tape mark +# + bras %r14,.Ltapemark +# +# write real storage to tape +# + slr %r2,%r2 # start at address 0 + bras %r14,.Lwriter # load ramdisk +# +# write another tape mark +# + bras %r14,.Ltapemark +# +# everything written, stop processor +# + lpsw .Lstopped +# +# subroutine for writing to tape +# Paramters: +# R1 = device number +# R2 = start address +# R3 = length +.Lwriter: + st %r14,.Lldret + la %r12,.Lorbread # r12 = address of orb + la %r5,.Lirb # r5 = address of irb + st %r2,.Lccwwrite+4 # initialize CCW data addresses + lctl %c6,%c6,.Lcr6 + slr %r2,%r2 +.Lldlp: + lhi %r6,3 # 3 retries +.Lssch: + ssch 0(%r12) # write chunk of IPL_BS bytes + jnz .Llderr +.Lw4end: + bras %r14,.Lwait4io + tm 8(%r5),0x82 # do we have a problem ? + jnz .Lrecov + l %r0,.Lccwwrite+4 # update CCW data addresses + ahi %r0,IPL_BS + st %r0,.Lccwwrite+4 + clr %r0,%r3 # enough ? + jl .Lldlp +.Ldone: + l %r14,.Lldret + br %r14 # r2 contains the total size +.Lrecov: + bras %r14,.Lsense # do the sensing + brct %r6,.Lssch # dec. retry count & branch + j .Llderr +.Ltapemark: + st %r14,.Lldret + la %r12,.Lorbmark # r12 = address of orb + la %r5,.Lirb # r5 = address of irb + lctl %c6,%c6,.Lcr6 + ssch 0(%r12) # write a tape mark + jnz .Llderr + bras %r14,.Lwait4io + l %r14,.Lldret + br %r14 +# +# Sense subroutine +# +.Lsense: + st %r14,.Lsnsret + la %r7,.Lorbsense + ssch 0(%r7) # start sense command + jnz .Llderr + bras %r14,.Lwait4io + l %r14,.Lsnsret + tm 8(%r5),0x82 # do we have a problem ? + jnz .Llderr + br %r14 +# +# Wait for interrupt subroutine +# +.Lwait4io: + lpsw .Lwaitpsw +.Lioint: + c %r1,0xb8 # compare subchannel number + jne .Lwait4io + tsch 0(%r5) + slr %r0,%r0 + tm 8(%r5),0x82 # do we have a problem ? + jnz .Lwtexit + tm 8(%r5),0x04 # got device end ? + jz .Lwait4io +.Lwtexit: + br %r14 +.Llderr: + lpsw .Lcrash + + .align 8 +.Lorbread: + .long 0x00000000,0x0080ff00,.Lccwwrite + .align 8 +.Lorbsense: + .long 0x00000000,0x0080ff00,.Lccwsense + .align 8 +.Lorbmark: + .long 0x00000000,0x0080ff00,.Lccwmark + .align 8 +.Lccwwrite: + .long 0x01200000+IPL_BS,0x00000000 +.Lccwsense: + .long 0x04200001,0x00000000 +.Lccwmark: + .long 0x1f200001,0x00000000 +.Lwaitpsw: + .long 0x020a0000,0x80000000+.Lioint + +.Lirb: .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.Lcr6: .long 0xff000000 + .align 8 +.Lcrash:.long 0x000a0000,0x00000000 +.Lstopped: .long 0x000a0000,0x00001234 +.Lpcmem0:.long 0x00080000,0x80000000 + .Lchkmem0 +.L4malign0:.long 0xffc00000 +.Lmemsize:.long 0 +.Lldret:.long 0 +.Lsnsret: .long 0 + + .org IPL_BS + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/boot/ipleckd.S linux.16p3/arch/s390/boot/ipleckd.S --- linux.vanilla/arch/s390/boot/ipleckd.S Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/boot/ipleckd.S Mon May 15 16:31:19 2000 @@ -140,17 +140,16 @@ lr %r15,%r4 # save number or blocks slr %r7,%r7 icm %r7,3,.Lrdcdata+14 # load heads to r7 - clc .Lrdcdata+3(2),.L3390 - jne .L010 # 3380 or 3390 ? - lhi %r6,12 # setup r6 correct! - j .L011 -.L010: - clc .Lrdcdata+3(2),.L9343 - jne .L013 lhi %r6,9 - j .L011 -.L013: + clc .Lrdcdata+3(2),.L9343 + je .L011 lhi %r6,10 + clc .Lrdcdata+3(2),.L3380 + je .L011 + lhi %r6,12 + clc .Lrdcdata+3(2),.L3390 + je .L011 + bras %r14,.Ldisab .L011: # loop for nbl times .Lrdloop: @@ -246,9 +245,12 @@ .L3390: .word 0x3390 .L9343: - .word 0x9343 + .word 0x934a +.L3380: + .word 0x3380 .Lnull: .long 0x00000000,0x00000000 + .align 4 .Lrdcdata: .long 0x00000000,0x00000000 .long 0x00000000,0x00000000 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/config.in linux.16p3/arch/s390/config.in --- linux.vanilla/arch/s390/config.in Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/config.in Mon May 15 16:31:19 2000 @@ -43,6 +43,11 @@ endmenu source drivers/s390/Config.in +comment 'Character devices' +bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS +if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then + int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256 +fi if [ "$CONFIG_NET" = "y" ]; then source net/Config.in diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/defconfig linux.16p3/arch/s390/defconfig --- linux.vanilla/arch/s390/defconfig Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/defconfig Mon May 15 16:31:19 2000 @@ -19,7 +19,7 @@ # CONFIG_MODULES=y # CONFIG_MODVERSIONS is not set -# CONFIG_KMOD is not set +CONFIG_KMOD=y # # General setup @@ -42,10 +42,13 @@ # CONFIG_BLK_DEV_MD is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_INITRD=y -CONFIG_MDISK=y -# CONFIG_MDISK_SYNC is not set +CONFIG_BLK_DEV_XPRAM=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_MDISK is not set CONFIG_DASD=y CONFIG_DASD_ECKD=y +CONFIG_DASD_FBA=y +CONFIG_DASD_MDSK=y # # S/390 Network device support @@ -64,6 +67,8 @@ CONFIG_3215_CONSOLE=y CONFIG_HWC=y CONFIG_HWC_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 # # Networking options @@ -122,6 +127,7 @@ # CONFIG_NTFS_FS is not set # CONFIG_HPFS_FS is not set CONFIG_PROC_FS=y +# CONFIG_DEVPTS_FS is not set # CONFIG_QNX4FS_FS is not set # CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y @@ -134,8 +140,7 @@ # # CONFIG_CODA_FS is not set CONFIG_NFS_FS=y -CONFIG_NFSD=y -# CONFIG_NFSD_SUN is not set +# CONFIG_NFSD is not set CONFIG_SUNRPC=y CONFIG_LOCKD=y # CONFIG_SMB_FS is not set diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/Makefile linux.16p3/arch/s390/kernel/Makefile --- linux.vanilla/arch/s390/kernel/Makefile Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/Makefile Mon May 15 16:31:19 2000 @@ -20,7 +20,8 @@ O_TARGET := kernel.o O_OBJS := lowcore.o entry.o bitmap.o traps.o time.o process.o irq.o \ setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o \ - s390fpu.o s390io.o reipl.o + s390fpu.o s390io.o reipl.o debug.o s390_ext.o s390dyn.o \ + s390mach.o OX_OBJS := s390_ksyms.o MX_OBJS := diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/cpcmd.c linux.16p3/arch/s390/kernel/cpcmd.c --- linux.vanilla/arch/s390/kernel/cpcmd.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/cpcmd.c Mon May 15 16:31:19 2000 @@ -7,6 +7,7 @@ */ #include +#include #include #include @@ -40,14 +41,5 @@ : "a" (obuffer), "d" (olen) : "2", "3" ); } -} - -int sys_msgcp(char *str) -{ - char buffer[256]; - - sprintf(buffer, "MSG * %s", str); - cpcmd(buffer, NULL, 0); - cpcmd("STOP", NULL, 0); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/debug.c linux.16p3/arch/s390/kernel/debug.c --- linux.vanilla/arch/s390/kernel/debug.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/kernel/debug.c Mon May 15 16:31:19 2000 @@ -0,0 +1,283 @@ +#include +#include +#include +#include +#include + +#ifdef MODULE +#include +#endif + +#include + +#include "debug.h" + +debug_info_t debug_areas[MAX_DEBUG_AREAS]; +debug_info_t *free_area = 0; +static int initialized = 0; + +static spinlock_t debug_lock = SPIN_LOCK_UNLOCKED; + +debug_info_t * +debug_register (char *name, int page_order, int nr_areas) +{ + debug_info_t *rc = 0; + int i; + long flags; + + if ( ! initialized ){ + debug_init(); + initialized = 1; + } + if (!free_area) + { + printk (KERN_WARNING "No free debug area\n"); + return NULL; + } + spin_lock_irqsave (&debug_lock, flags); + rc = free_area; + free_area = *((debug_info_t **) rc); + + rc->areas = (debug_entry_t **) kmalloc (nr_areas * + sizeof (debug_entry_t *), + GFP_ATOMIC); + if (!rc->areas) + { + goto noareas; + } + + for (i = 0; i < nr_areas; i++) + { + rc->areas[i] = (debug_entry_t *) __get_free_pages (GFP_ATOMIC, + page_order); + if (!rc->areas[i]) + { + for (i--; i >= 0; i--) + { + free_pages ((unsigned long) rc->areas[i], page_order); + } + goto nopages; + } + } + + rc->page_order = page_order; + rc->nr_areas = nr_areas; + rc->name = kmalloc (strlen (name) + 1, GFP_ATOMIC); + strncpy (rc->name, name, strlen (name)); + rc->name[strlen (name)] = 0; + rc->active_entry = kmalloc (nr_areas, GFP_ATOMIC); + memset(rc->active_entry, 0, nr_areas * sizeof(int)); + printk (KERN_INFO "reserved %d areas of %d pages for debugging %s\n", + nr_areas, 1 << page_order, name); + goto exit; + +nopages: +noareas: + free_area = rc; +exit: + spin_unlock_irqrestore (&debug_lock, flags); + return rc; +} + +void +debug_unregister (debug_info_t * id, char *name) +{ + int i = id->nr_areas; + long flags; + spin_lock_irqsave (&debug_lock, flags); + printk (KERN_INFO "freeing debug area %p named '%s'\n", id, name); + if (strncmp (name, id->name, strlen (name))) + { + printk (KERN_ERR "name '%s' does not match against '%s'\n", + name, id->name); + } + for (i--; i >= 0; i--) + { + free_pages ((unsigned long) id->areas[i], id->page_order); + } + kfree (id->areas); + kfree (id->name); + *((debug_info_t **) id) = free_area; + free_area = id; + spin_unlock_irqrestore (&debug_lock, flags); + return; +} + +static inline void +proceed_active_entry (debug_info_t * id) +{ + id->active_entry[id->active_area] = + (id->active_entry[id->active_area]++) % + ((PAGE_SIZE / sizeof (debug_entry_t)) << (id->page_order)); +} + +static inline void +proceed_active_area (debug_info_t * id) +{ + id->active_area = (id->active_area++) % id->nr_areas; +} + +static inline debug_entry_t * +get_active_entry (debug_info_t * id) +{ + return &id->areas[id->active_area][id->active_entry[id->active_area]]; +} + +static inline debug_entry_t * +debug_common ( debug_info_t * id ) +{ + debug_entry_t * active; + proceed_active_entry (id); + active = get_active_entry (id); + STCK (active->id.stck); + active->id.stck = active->id.stck >> 4; + active->id.fields.cpuid = smp_processor_id (); + active->caller = __builtin_return_address (0); + return active; +} + +void +debug_event (debug_info_t * id, int level, unsigned int tag) +{ + long flags; + debug_entry_t *active; + if (!id) + { + return; + } + if (level < id->level) + { + return; + } + spin_lock_irqsave (&id->lock, flags); + active = debug_common(id); + active->tag.tag = tag; + spin_unlock_irqrestore (&id->lock, flags); + return; +} + +void +debug_text_event (debug_info_t * id, int level, char tag[4]) +{ + long flags; + debug_entry_t *active; + if (!id) + { + return; + } + if (level < id->level) + { + return; + } + spin_lock_irqsave (&id->lock, flags); + active = debug_common(id); + strncpy ( active->tag.text, tag, 4); + ASCEBC (active->tag.text, 4 ); + spin_unlock_irqrestore (&id->lock, flags); + return; +} + +void +debug_exception (debug_info_t * id, int level, unsigned int tag) +{ + long flags; + debug_entry_t *active; + if (!id) + { + return; + } + if (level < id->level) + { + return; + } + spin_lock_irqsave (&id->lock, flags); + active = debug_common(id); + active->tag.tag = tag; + proceed_active_area (id); + spin_unlock_irqrestore (&id->lock, flags); + + return; +} + +void +debug_text_exception (debug_info_t * id, int level, char tag[4]) +{ + long flags; + debug_entry_t *active; + if (!id) + { + return; + } + if (level < id->level) + { + return; + } + spin_lock_irqsave (&id->lock, flags); + active = debug_common(id); + strncpy ( active->tag.text, tag, 4); + ASCEBC (active->tag.text, 4 ); + proceed_active_area (id); + spin_unlock_irqrestore (&id->lock, flags); + return; +} + +int +debug_init (void) +{ + int rc = 0; + int i; + for (i = 0; i < MAX_DEBUG_AREAS - 1; i++) + { + *(debug_info_t **) (&debug_areas[i]) = + (debug_info_t *) (&debug_areas[i + 1]); + } + *(debug_info_t **) (&debug_areas[i]) = (debug_info_t *) NULL; + free_area = &(debug_areas[0]); + printk (KERN_INFO "%d areas reserved for debugging information\n", + MAX_DEBUG_AREAS); + return rc; +} + +#ifdef MODULE +int +init_module (void) +{ + int rc = 0; + rc = debug_init (); + if (rc) + { + printk (KERN_INFO "An error occurred with debug_init\n"); + } + + { /* test section */ + debug_info_t *a[4]; + printk (KERN_INFO "registering 1, %p\n", a[0] = + debug_register ("debug1", 1, 1)); + printk (KERN_INFO "registering 2, %p\n", a[1] = + debug_register ("debug2", 1, 2)); + printk (KERN_INFO "registering 3, %p\n", a[2] = + debug_register ("debug3", 2, 1)); + printk (KERN_INFO "registering 4, %p\n", a[3] = + debug_register ("debug4", 2, 2)); + debug_unregister (a[0], "debug1"); + debug_unregister (a[1], "debug3"); + printk (KERN_INFO "registering 1, %p\n", a[0] = + debug_register ("debug5", 1, 1)); + printk (KERN_INFO "registering 2, %p\n", a[1] = + debug_register ("debug6", 1, 2)); + debug_unregister (a[2], "debug2"); + debug_unregister (a[3], "debug4"); + debug_unregister (a[0], "debug5"); + debug_unregister (a[1], "debug6"); + } + return rc; +} + +void +cleanup_module (void) +{ + + return; +} + +#endif /* MODULE */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/debug.h linux.16p3/arch/s390/kernel/debug.h --- linux.vanilla/arch/s390/kernel/debug.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/kernel/debug.h Mon May 15 16:31:19 2000 @@ -0,0 +1,55 @@ + +#ifndef DEBUG_H +#define DEBUG_H + +#include + +#define MAX_DEBUG_AREAS 16 + +#define STCK(x) asm volatile ("STCK %0":"=m" (x)) + +typedef struct +{ + union + { + struct + { + unsigned long long cpuid:4; + unsigned long long clock:60; + } + fields; + unsigned long long stck; + } + id; + void *caller; + union + { + unsigned long tag; + char text[4]; + } + tag; +} +debug_entry_t; + +typedef struct +{ + char *name; + int level; + int nr_areas; + int page_order; + debug_entry_t **areas; + int active_area; + int *active_entry; + spinlock_t lock; +} +debug_info_t; + +int debug_init (void); +debug_info_t *debug_register (char *name, int pages_index, int nr_areas); +void debug_unregister (debug_info_t * id, char *name); +void debug_event (debug_info_t * id, int level, unsigned int tag); +void debug_text_event (debug_info_t * id, int level, char tag[4]); +void debug_exception (debug_info_t * id, int level, unsigned int tag); +void debug_text_exception (debug_info_t * id, int level, char tag[4]); + +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/ebcdic.c linux.16p3/arch/s390/kernel/ebcdic.c --- linux.vanilla/arch/s390/kernel/ebcdic.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/ebcdic.c Mon May 15 16:31:19 2000 @@ -161,7 +161,156 @@ /* - * EBCDIC 037 conversion table: + * ASCII (IBM PC 437) -> EBCDIC 500 + */ +__u8 _ascebc_500[256] = +{ + /*00 NUL SOH STX ETX EOT ENQ ACK BEL */ + 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, + /*08 BS HT LF VT FF CR SO SI */ + /* ->NL */ + 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + /*10 DLE DC1 DC2 DC3 DC4 NAK SYN ETB */ + 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, + /*18 CAN EM SUB ESC FS GS RS US */ + /* ->IGS ->IRS ->IUS */ + 0x18, 0x19, 0x3F, 0x27, 0x22, 0x1D, 0x1E, 0x1F, + /*20 SP ! " # $ % & ' */ + 0x40, 0x4F, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, + /*28 ( ) * + , - . / */ + 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, + /*30 0 1 2 3 4 5 6 7 */ + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, + /*38 8 9 : ; < = > ? */ + 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, + /*40 @ A B C D E F G */ + 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + /*48 H I J K L M N O */ + 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, + /*50 P Q R S T U V W */ + 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, + /*58 X Y Z [ \ ] ^ _ */ + 0xE7, 0xE8, 0xE9, 0x4A, 0xE0, 0x5A, 0x5F, 0x6D, + /*60 ` a b c d e f g */ + 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + /*68 h i j k l m n o */ + 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, + /*70 p q r s t u v w */ + 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, + /*78 x y z { | } ~ DL */ + 0xA7, 0xA8, 0xA9, 0xC0, 0xBB, 0xD0, 0xA1, 0x07, + /*80*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*88*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*90*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*98*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*A0*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*A8*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*B0*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*B8*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*C0*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*C8*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*D0*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*D8*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*E0 sz */ + 0x3F, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*E8*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*F0*/ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, + /*F8*/ + 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x3F, 0xFF +}; + +/* + * EBCDIC 500 -> ASCII (IBM PC 437) + */ +__u8 _ebcasc_500[256] = +{ + /* 0x00 NUL SOH STX ETX *SEL HT *RNL DEL */ + 0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F, + /* 0x08 -GE -SPS -RPT VT FF CR SO SI */ + 0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + /* 0x10 DLE DC1 DC2 DC3 -RES -NL BS -POC + -ENP ->LF */ + 0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07, + /* 0x18 CAN EM -UBS -CU1 -IFS -IGS -IRS -ITB + -IUS */ + 0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + /* 0x20 -DS -SOS FS -WUS -BYP LF ETB ESC + -INP */ + 0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B, + /* 0x28 -SA -SFE -SM -CSP -MFA ENQ ACK BEL + -SW */ + 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07, + /* 0x30 ---- ---- SYN -IR -PP -TRN -NBS EOT */ + 0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04, + /* 0x38 -SBS -IT -RFF -CU3 DC4 NAK ---- SUB */ + 0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A, + /* 0x40 SP RSP ä ---- */ + 0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86, + /* 0x48 [ . < ( + ! */ + 0x87, 0xA4, 0x5B, 0x2E, 0x3C, 0x28, 0x2B, 0x21, + /* 0x50 & ---- */ + 0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07, + /* 0x58 ß ] $ * ) ; ^ */ + 0x8D, 0xE1, 0x5D, 0x24, 0x2A, 0x29, 0x3B, 0x5E, + /* 0x60 - / ---- Ä ---- ---- ---- */ + 0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F, + /* 0x68 ---- , % _ > ? */ + 0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, + /* 0x70 ---- ---- ---- ---- ---- ---- ---- */ + 0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + /* 0x78 * ` : # @ ' = " */ + 0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, + /* 0x80 * a b c d e f g */ + 0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + /* 0x88 h i ---- ---- ---- */ + 0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1, + /* 0x90 ° j k l m n o p */ + 0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, + /* 0x98 q r ---- ---- */ + 0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07, + /* 0xA0 ~ s t u v w x */ + 0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + /* 0xA8 y z ---- ---- ---- ---- */ + 0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07, + /* 0xB0 ---- § ---- */ + 0x9B, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC, + /* 0xB8 ---- | ---- ---- ---- ---- */ + 0xAB, 0x07, 0xAA, 0x7C, 0x07, 0x07, 0x07, 0x07, + /* 0xC0 { A B C D E F G */ + 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + /* 0xC8 H I ---- ö ---- */ + 0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07, + /* 0xD0 } J K L M N O P */ + 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, + /* 0xD8 Q R ---- ü */ + 0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98, + /* 0xE0 \ S T U V W X */ + 0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + /* 0xE8 Y Z ---- Ö ---- ---- ---- */ + 0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07, + /* 0xF0 0 1 2 3 4 5 6 7 */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + /* 0xF8 8 9 ---- ---- Ü ---- ---- ---- */ + 0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07 +}; + + +/* + * EBCDIC 037/500 conversion table: * from upper to lower case */ __u8 _ebc_tolower[256] = @@ -202,7 +351,7 @@ /* - * EBCDIC 037 conversion table: + * EBCDIC 037/500 conversion table: * from lower to upper case */ __u8 _ebc_toupper[256] = diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/entry.S linux.16p3/arch/s390/kernel/entry.S --- linux.vanilla/arch/s390/kernel/entry.S Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/entry.S Mon May 15 16:31:19 2000 @@ -89,6 +89,13 @@ enable = 0x03 daton = 0x04 +/* + * Base Address of this Module --- saved in __LC_ENTRY_BASE + */ + .globl entry_base +entry_base: + +#define BASED(name) name-entry_base(%r13) #if 0 /* some code left lying around in case we need a @@ -118,59 +125,38 @@ * R15 - kernel stack pointer */ -#define SAVE_ALL1(psworg) \ - st %r15,__LC_SAVE_AREA ; \ +#define SAVE_ALL(psworg) \ + stm %r13,%r15,__LC_SAVE_AREA ; \ + stam %a2,%a4,__LC_SAVE_AREA+12 ; \ + basr %r13,0 ; /* temp base pointer */ \ + l %r13,.Lentry_base-.(%r13) ; /* load &entry_base to %r13 */ \ tm psworg+1,0x01 ; /* test problem state bit */ \ - jz 0f ; /* skip stack setup save */ \ + bz BASED(.+12) ; /* skip stack & access regs setup */ \ l %r15,__LC_KERNEL_STACK ; /* problem state -> load ksp */ \ -0: ahi %r15,-SP_SIZE ; /* make room for registers & psw */ \ - srl %r15,3 ; \ - sll %r15,3 ; /* align stack pointer to 8 */ \ - stm %r0,%r14,SP_R0(%r15) ; /* store gprs 0-14 to kernel stack */ \ + lam %a2,%a4,BASED(.Lc_ac) ; /* set ac.reg. 2 to primary space */ \ + /* and access reg. 4 to home space */ \ +0: s %r15,BASED(.Lc_spsize); /* make room for registers & psw */ \ + n %r15,BASED(.Lc0xfffffff8) ; /* align stack pointer to 8 */ \ + stm %r0,%r12,SP_R0(%r15) ; /* store gprs 0-12 to kernel stack */ \ st %r2,SP_ORIG_R2(%r15) ; /* store original content of gpr 2 */ \ - mvc SP_RF(4,%r15),__LC_SAVE_AREA ; /* move R15 to stack */ \ + mvc SP_RD(12,%r15),__LC_SAVE_AREA ; /* move R13-R15 to stack */ \ stam %a0,%a15,SP_AREGS(%r15) ; /* store access registers to kst. */ \ + mvc SP_AREGS+8(12,%r15),__LC_SAVE_AREA+12 ; /* store ac. regs */ \ mvc SP_PSW(8,%r15),psworg ; /* move user PSW to stack */ \ - xc 0(7,%r15),0(%r15) ; /* clear back chain & trap ind. */ \ - mvi SP_TRAP+3(%r15),psworg ; /* store trap indication in pt_regs */ \ - slr %r0,%r0 ; \ - sar %a2,%r0 ; /* set ac.reg. 2 to primary space */ \ - lhi %r0,1 ; \ - sar %a4,%r0 ; /* set access reg. 4 to home space */ + la %r0,psworg ; /* store trap indication */ \ + st %r0,SP_TRAP(%r15) ; \ + xc 0(4,%r15),0(%r15) ; /* clear back chain */ -#define RESTORE_ALL1 \ - mvc 0x50(8,0),SP_PSW(%r15) ; /* move user PSW to lowcore */ \ +#define RESTORE_ALL \ + mvc __LC_RETURN_PSW(8,0),SP_PSW(%r15) ; /* move user PSW to lowcore */ \ lam %a0,%a15,SP_AREGS(%r15) ; /* load the access registers */ \ lm %r0,%r15,SP_R0(%r15) ; /* load gprs 0-15 of user */ \ - ni 0x51(0),0xfd ; /* clear wait state bit */ \ - lpsw 0x50 /* back to caller */ - -#if CONFIG_REMOTE_DEBUG -#define SAVE_ALL(psworg) \ - SAVE_ALL1(psworg) \ - tm psworg+1,0x01 ; /* test problem state bit */ \ - jz 0f ; /* skip stack setup save */ \ - stctl %c0,%c15,SP_CRREGS(%r15) ; /* save control regs for remote debugging */ \ -0: - -#define RESTORE_ALL \ - tm SP_PSW+1(%r15),0x01 ; /* test problem state bit */ \ - jz 0f ; /* skip cr restore */ \ - lctl %c0,%c15,SP_CRREGS(%r15) ; /* store control regs for remote debugging */ \ -0: RESTORE_ALL1 -#else - -#define SAVE_ALL(psworg) \ - SAVE_ALL1(psworg) - -#define RESTORE_ALL \ - RESTORE_ALL1 -#endif + ni __LC_RETURN_PSW+1(0),0xfd ; /* clear wait state bit */ \ + lpsw __LC_RETURN_PSW /* back to caller */ #define GET_CURRENT /* load pointer to task_struct to R9 */ \ - lhi %r9,-8192 ; \ - nr %r9,15 - + lr %r9,%r15 ; \ + n %r9,BASED(.Lc0xffffe000) /* * Scheduler resume function, called by switch_to @@ -181,22 +167,24 @@ */ .globl resume resume: + basr %r1,0 # setup base pointer +resume_base: l %r4,_TSS_PTREGS(%r3) tm SP_PSW-SP_PTREGS(%r4),0x40 # is the new process using per ? - jz RES_DN1 # if not we're fine + bz resume_noper-resume_base(%r1) # if not we're fine stctl %r9,%r11,24(%r15) # We are using per stuff clc _TSS_PER(12,%r3),24(%r15) - je RES_DN1 # we got away without bashing TLB's + be resume_noper-resume_base(%r1) # we got away w/o bashing TLB's lctl %c9,%c11,_TSS_PER(%r3) # Nope we didn't -RES_DN1: +resume_noper: stm %r6,%r15,24(%r15) # store resume registers of prev task st %r15,_TSS_KSP(%r2) # store kernel stack ptr to prev->tss.ksp - lhi %r0,-8192 - nr %r0,%r15 + lr %r0,%r15 + n %r0,.Lc0xffffe000-resume_base(%r1) l %r15,_TSS_KSP(%r3) # load kernel stack ptr from next->tss.ksp - lhi %r1,8191 + l %r1,.Lc8191-resume_base(%r1) or %r1,%r15 - ahi %r1,1 + la %r1,1(%r1) st %r1,__LC_KERNEL_STACK # __LC_KERNEL_STACK = new kernel stack stam %a2,%a2,_TSS_AR2(%r2) # store kernel access reg. 2 stam %a4,%a4,_TSS_AR4(%r2) # store kernel access reg. 4 @@ -213,40 +201,19 @@ * are executed with interrupts enabled. */ -sysc_lit: - sysc_bhmask: .long bh_mask - sysc_bhactive: .long bh_active - sysc_do_signal: .long do_signal - sysc_do_bottom_half:.long do_bottom_half - sysc_schedule: .long schedule - sysc_trace: .long syscall_trace -#ifdef __SMP__ - sysc_schedtail: .long schedule_tail -#endif - sysc_clone: .long sys_clone - sysc_fork: .long sys_fork - sysc_vfork: .long sys_vfork - sysc_sigreturn: .long sys_sigreturn - sysc_rt_sigreturn: .long sys_rt_sigreturn - sysc_execve: .long sys_execve - sysc_sigsuspend: .long sys_sigsuspend - sysc_rt_sigsuspend: .long sys_rt_sigsuspend - .globl system_call system_call: SAVE_ALL(0x20) - XC SP_SVC_STEP(4,%r15),SP_SVC_STEP(%r15) + xc SP_SVC_STEP(4,%r15),SP_SVC_STEP(%r15) pgm_system_call: - basr %r13,0 - ahi %r13,sysc_lit-. # setup base pointer R13 to sysc_lit slr %r8,%r8 # gpr 8 is call save (-> tracesys) ic %r8,0x8B # get svc number from lowcore stosm 24(%r15),0x03 # reenable interrupts GET_CURRENT # load pointer to task_struct to R9 sll %r8,2 - l %r8,sys_call_table-sysc_lit(8,%r13) # get address of system call + l %r8,sys_call_table-entry_base(8,%r13) # get address of system call tm flags+3(%r9),0x20 # PF_TRACESYS - jnz sysc_tracesys + bnz BASED(sysc_tracesys) basr %r14,%r8 # call sys_xxxx st %r2,SP_R2(%r15) # store return value (change R2 on stack) # ATTENTION: check sys_execve_glue before @@ -255,26 +222,26 @@ sysc_return: GET_CURRENT # load pointer to task_struct to R9 tm SP_PSW+1(%r15),0x01 # returning to user ? - jno sysc_leave # no-> skip bottom half, resched & signal + bno BASED(sysc_leave) # no-> skip bottom half, resched & signal # # check, if bottom-half has to be done # - l %r1,sysc_bhmask-sysc_lit(%r13) + l %r1,BASED(.Lbhmask) l %r0,0(%r1) - l %r1,sysc_bhactive-sysc_lit(%r13) + l %r1,BASED(.Lbhactive) n %r0,0(%r1) - jnz sysc_handle_bottom_half + bnz BASED(sysc_handle_bottom_half) # # check, if reschedule is needed # sysc_return_bh: icm %r0,15,need_resched(%r9) # get need_resched from task_struct - jnz sysc_reschedule + bnz BASED(sysc_reschedule) icm %r0,15,sigpending(%r9) # get sigpending from task_struct - jnz sysc_signal_return + bnz BASED(sysc_signal_return) sysc_leave: icm %r0,15,SP_SVC_STEP(%r15) # get sigpending from task_struct - jnz pgm_svcret + bnz BASED(pgm_svcret) stnsm 24(%r15),disable # disable I/O and ext. interrupts RESTORE_ALL @@ -284,24 +251,24 @@ sysc_signal_return: la %r2,SP_PTREGS(%r15) # load pt_regs sr %r3,%r3 # clear *oldset - l %r1,sysc_do_signal-sysc_lit(%r13) - la %r14,sysc_leave-sysc_lit(%r13) + l %r1,BASED(.Ldo_signal) + la %r14,BASED(sysc_leave) br %r1 # return point is sysc_leave # # call trace before and after sys_call # sysc_tracesys: - l %r1,sysc_trace-sysc_lit(%r13) - lhi %r2,-ENOSYS + l %r1,BASED(.Ltrace) + l %r2,BASED(.Lc_ENOSYS) st %r2,SP_R2(%r15) # give sysc_trace an -ENOSYS retval basr %r14,%r1 lm %r3,%r6,SP_R3(%r15) l %r2,SP_ORIG_R2(%r15) basr %r14,%r8 # call sys_xxx st %r2,SP_R2(%r15) # store return value - l %r1,sysc_trace-sysc_lit(%r13) - la %r14,sysc_return-sysc_lit(%r13) + l %r1,BASED(.Ltrace) + la %r14,BASED(sysc_return) br %r1 # return point is sysc_return @@ -310,16 +277,16 @@ # is zero # sysc_handle_bottom_half: - l %r1,sysc_do_bottom_half-sysc_lit(%r13) - la %r14,sysc_return_bh-sysc_lit(%r13) + l %r1,BASED(.Ldo_bottom_half) + la %r14,BASED(sysc_return_bh) br %r1 # call do_bottom_half # # call schedule with sysc_return as return-address # sysc_reschedule: - l %r1,sysc_schedule-sysc_lit(%r13) - la %r14,sysc_return-sysc_lit(%r13) + l %r1,BASED(.Lschedule) + la %r14,BASED(sysc_return) br %r1 # call scheduler, return to sysc_return # @@ -328,17 +295,17 @@ .globl ret_from_fork ret_from_fork: basr %r13,0 - ahi %r13,sysc_lit-. # setup base pointer R13 to $SYSCDAT + l %r13,.Lentry_base-.(%r13) # setup base pointer to &entry_base GET_CURRENT # load pointer to task_struct to R9 stosm 24(%r15),0x03 # reenable interrupts sr %r0,%r0 # child returns 0 st %r0,SP_R2(%r15) # store return value (change R2 on stack) #ifdef __SMP__ - l %r1,sysc_schedtail-sysc_lit(%r13) - la %r14,sysc_return-sysc_lit(%r13) + l %r1,BASED(.Lschedtail) + la %r14,BASED(sysc_return) br %r1 # call schedule_tail, return to sysc_return #else - j sysc_return + b BASED(sysc_return) #endif # @@ -349,22 +316,22 @@ # sys_clone_glue: la %r2,SP_PTREGS(%r15) # load pt_regs - l %r1,sysc_clone-sysc_lit(%r13) + l %r1,BASED(.Lclone) br %r1 # branch to sys_clone sys_fork_glue: la %r2,SP_PTREGS(%r15) # load pt_regs - l %r1,sysc_fork-sysc_lit(%r13) + l %r1,BASED(.Lfork) br %r1 # branch to sys_fork sys_vfork_glue: la %r2,SP_PTREGS(%r15) # load pt_regs - l %r1,sysc_vfork-sysc_lit(%r13) + l %r1,BASED(.Lvfork) br %r1 # branch to sys_vfork sys_execve_glue: la %r2,SP_PTREGS(%r15) # load pt_regs - l %r1,sysc_execve-sysc_lit(%r13) + l %r1,BASED(.Lexecve) lr %r12,%r14 # save return address basr %r14,%r1 # call sys_execve ltr %r2,%r2 # check if execve failed @@ -374,12 +341,12 @@ sys_sigreturn_glue: la %r2,SP_PTREGS(%r15) # load pt_regs as parameter - l %r1,sysc_sigreturn-sysc_lit(%r13) + l %r1,BASED(.Lsigreturn) br %r1 # branch to sys_sigreturn sys_rt_sigreturn_glue: la %r2,SP_PTREGS(%r15) # load pt_regs as parameter - l %r1,sysc_rt_sigreturn-sysc_lit(%r13) + l %r1,BASED(.Lrt_sigreturn) br %r1 # branch to sys_sigreturn # @@ -394,7 +361,7 @@ lr %r4,%r3 # move history1 parameter lr %r3,%r2 # move history0 parameter la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter - l %r1,sysc_sigsuspend-sysc_lit(%r13) + l %r1,BASED(.Lsigsuspend) la %r14,4(%r14) # skip store of return value br %r1 # branch to sys_sigsuspend @@ -402,7 +369,7 @@ lr %r4,%r3 # move sigsetsize parameter lr %r3,%r2 # move unewset parameter la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter - l %r1,sysc_rt_sigsuspend-sysc_lit(%r13) + l %r1,BASED(.Lrt_sigsuspend) la %r14,4(%r14) # skip store of return value br %r1 # branch to sys_rt_sigsuspend @@ -415,7 +382,7 @@ .long sys_write .long sys_open /* 5 */ .long sys_close - .long sys_waitpid + .long sys_ni_syscall /* old waitpid syscall holder */ .long sys_creat .long sys_link .long sys_unlink /* 10 */ @@ -426,7 +393,7 @@ .long sys_chmod /* 15 */ .long sys_lchown .long sys_ni_syscall /* old break syscall holder */ - .long sys_stat + .long sys_ni_syscall /* old stat syscall holder */ .long sys_lseek .long sys_getpid /* 20 */ .long sys_mount @@ -436,7 +403,7 @@ .long sys_stime /* 25 */ .long sys_ptrace .long sys_alarm - .long sys_fstat + .long sys_ni_syscall /* old fstat syscall holder */ .long sys_pause .long sys_utime /* 30 */ .long sys_ni_syscall /* old stty syscall holder */ @@ -467,7 +434,7 @@ .long sys_ni_syscall /* old mpx syscall holder */ .long sys_setpgid .long sys_ni_syscall /* old ulimit syscall holder */ - .long sys_olduname + .long sys_ni_syscall /* old uname syscall holder */ .long sys_umask /* 60 */ .long sys_chroot .long sys_ustat @@ -476,8 +443,8 @@ .long sys_getpgrp /* 65 */ .long sys_setsid .long sys_sigaction - .long sys_sgetmask - .long sys_ssetmask + .long sys_ni_syscall /* old sgetmask syscall holder */ + .long sys_ni_syscall /* old ssetmask syscall holder */ .long sys_setreuid /* 70 */ .long sys_setregid .long sys_sigsuspend_glue @@ -490,9 +457,9 @@ .long sys_settimeofday .long sys_getgroups /* 80 */ .long sys_setgroups - .long old_select + .long sys_ni_syscall /* old select syscall holder */ .long sys_symlink - .long sys_lstat + .long sys_ni_syscall /* old lstat syscall holder */ .long sys_readlink /* 85 */ .long sys_uselib .long sys_swapon @@ -517,7 +484,7 @@ .long sys_newstat .long sys_newlstat .long sys_newfstat - .long sys_uname + .long sys_ni_syscall /* old uname syscall holder */ .long sys_ni_syscall /* 110 */ /* iopl for i386 */ .long sys_vhangup .long sys_idle @@ -599,22 +566,14 @@ .long sys_ni_syscall /* streams1 */ .long sys_ni_syscall /* streams2 */ .long sys_vfork_glue /* 190 */ - .rept 254-190 + .rept 255-190 .long sys_ni_syscall .endr - .long sys_msgcp /* 255 */ /* * Program check handler routine */ -pgm_lit: - pgm_handle_per: .long handle_per_exception - pgm_jump_table: .long pgm_check_table - pgm_sysc_ret: .long sysc_return - pgm_sysc_lit: .long sysc_lit - pgm_do_signal: .long do_signal - .globl pgm_check_handler pgm_check_handler: /* @@ -630,115 +589,132 @@ * we just ignore the PER event (FIXME: is there anything we have to do * for LPSW?). */ + + stm %r13,%r15,__LC_SAVE_AREA + stam %a2,%a4,__LC_SAVE_AREA+12 + basr %r13,0 # temp base pointer + l %r13,.Lentry_base-.(%r13)# load &entry_base to %r13 tm __LC_PGM_INT_CODE+1,0x80 # check whether we got a per exception - jz pgm_sv # skip if not + bz BASED(pgm_sv) # skip if not tm __LC_PGM_OLD_PSW,0x40 # test if per event recording is on - jnz pgm_sv # skip if it is + bnz BASED(pgm_sv) # skip if it is # ok its one of the special cases, now we need to find out which one clc __LC_PGM_OLD_PSW(8),__LC_SVC_NEW_PSW - je pgm_svcper + be BASED(pgm_svcper) # no interesting special case, ignore PER event + lm %r13,%r15,__LC_SAVE_AREA lpsw 0x28 # it was a single stepped SVC that is causing all the trouble pgm_svcper: - SAVE_ALL(0x20) + tm 0x21,0x01 # test problem state bit + bz BASED(.+12) # skip stack & access regs setup + l %r15,__LC_KERNEL_STACK # problem state -> load ksp + lam %a2,%a4,BASED(.Lc_ac) # set ac.reg. 2 to primary space + # and access reg. 4 to home space + s %r15,BASED(.Lc_spsize) # make room for registers & psw + n %r15,BASED(.Lc0xfffffff8) # align stack pointer to 8 + stm %r0,%r12,SP_R0(%r15) # store gprs 0-12 to kernel stack + st %r2,SP_ORIG_R2(%r15) # store original content of gpr 2 + mvc SP_RD(12,%r15),__LC_SAVE_AREA # move R13-R15 to stack + stam %a0,%a15,SP_AREGS(%r15) # store access registers to kst. + mvc SP_AREGS+8(12,%r15),__LC_SAVE_AREA+12 # store ac. regs + mvc SP_PSW(8,%r15),0x20 # move user PSW to stack + la %r0,0x20 # store trap indication + st %r0,SP_TRAP(%r15) + xc 0(4,%r15),0(%r15) # clear back chain mvi SP_SVC_STEP(%r15),1 # make SP_SVC_STEP nonzero mvc SP_PGM_OLD_ILC(4,%r15),__LC_PGM_ILC # save program check information - j pgm_system_call # now do the svc + b BASED(pgm_system_call) # now do the svc pgm_svcret: - mvc __LC_PGM_ILC(4),SP_PGM_OLD_ILC(%r15) # restore program check info - lhi %r0,0x28 - st %r0,SP_TRAP(%r15) # set new trap indicator - j pgm_no_sv + mvi SP_TRAP+3(%r15),0x28 # set trap indication back to pgm_chk + lh %r7,SP_PGM_OLD_ILC(%r15) # get ilc from stack + xc SP_SVC_STEP(4,%r15),SP_SVC_STEP(%r15) + b BASED(pgm_no_sv) pgm_sv: - SAVE_ALL(0x28) -pgm_no_sv: - XC SP_SVC_STEP(4,%r15),SP_SVC_STEP(%r15) - basr %r13,0 - ahi %r13,pgm_lit-. # setup base pointer R13 to $PGMDAT + tm 0x29,0x01 # test problem state bit + bz BASED(.+12) # skip stack & access regs setup + l %r15,__LC_KERNEL_STACK # problem state -> load ksp + lam %a2,%a4,BASED(.Lc_ac) # set ac.reg. 2 to primary space + # and access reg. 4 to home space + s %r15,BASED(.Lc_spsize) # make room for registers & psw + n %r15,BASED(.Lc0xfffffff8) # align stack pointer to 8 + stm %r0,%r12,SP_R0(%r15) # store gprs 0-12 to kernel stack + st %r2,SP_ORIG_R2(%r15) # store original content of gpr 2 + mvc SP_RD(12,%r15),__LC_SAVE_AREA # move R13-R15 to stack + stam %a0,%a15,SP_AREGS(%r15) # store access registers to kst. + mvc SP_AREGS+8(12,%r15),__LC_SAVE_AREA+12 # store ac. regs + mvc SP_PSW(8,%r15),0x28 # move user PSW to stack + la %r0,0x28 # store trap indication + st %r0,SP_TRAP(%r15) + xc 0(4,%r15),0(%r15) # clear back chain + xc SP_SVC_STEP(4,%r15),SP_SVC_STEP(%r15) lh %r7,__LC_PGM_ILC # load instruction length +pgm_no_sv: lh %r8,__LC_PGM_INT_CODE # N.B. saved int code used later KEEP it stosm 24(%r15),0x03 # reenable interrupts lr %r3,%r8 - lhi %r0,0x7f + la %r0,0x7f nr %r3,%r0 # clear per-event-bit - je pgm_dn # none of Martins exceptions occured bypass - l %r9,pgm_jump_table-pgm_lit(%r13) + be BASED(pgm_dn) # none of Martins exceptions occured bypass + l %r9,BASED(.Ljump_table) sll %r3,2 l %r9,0(%r3,%r9) # load address of handler routine la %r2,SP_PTREGS(%r15) # address of register-save area srl %r3,2 - chi %r3,0x4 # protection-exception ? - jne pgm_go # if not, + cl %r3,BASED(.Lc4) # protection-exception ? + bne BASED(pgm_go) # if not, l %r5,SP_PSW+4(15) # load psw addr sr %r5,%r7 # substract ilc from psw st %r5,SP_PSW+4(15) # store corrected psw addr pgm_go: basr %r14,%r9 # branch to interrupt-handler -pgm_dn: lhi %r0,0x80 +pgm_dn: la %r0,0x80 nr %r8,%r0 # check for per exception - je pgm_return + be BASED(pgm_return) la %r2,SP_PTREGS(15) # address of register-save area - l %r9,pgm_handle_per-pgm_lit(%r13) # load adr. of per handler - l %r14,pgm_sysc_ret-pgm_lit(%r13) # load adr. of system return - l %r13,pgm_sysc_lit-pgm_lit(%r13) + l %r9,BASED(.Lhandle_per) # load adr. of per handler + la %r14,BASED(sysc_return) # load adr. of system return br %r9 # branch to handle_per_exception # # the backend code is the same as for sys-call # pgm_return: - l %r14,pgm_sysc_ret-pgm_lit(%r13) - l %r13,pgm_sysc_lit-pgm_lit(%r13) - br %r14 - -default_trap_handler: - .globl default_trap_handler - lpsw 112 + b BASED(sysc_return) /* * IO interrupt handler routine */ -io_lit: - io_do_IRQ: .long do_IRQ - io_schedule: .long schedule - io_do_signal: .long do_signal - io_bhmask: .long bh_mask - io_bhactive: .long bh_active - io_do_bottom_half:.long do_bottom_half - .globl io_int_handler io_int_handler: SAVE_ALL(0x38) - basr %r13,0 - ahi %r13,io_lit-. # setup base pointer R13 to $IODAT la %r2,SP_PTREGS(%r15) # address of register-save area sr %r3,%r3 icm %r3,%r3,__LC_SUBCHANNEL_NR # load subchannel nr & extend to int l %r4,__LC_IO_INT_PARM # load interuption parm - l %r9,io_do_IRQ-io_lit(%r13) # load address of do_IRQ + l %r9,BASED(.Ldo_IRQ) # load address of do_IRQ basr %r14,%r9 # branch to standard irq handler io_return: GET_CURRENT # load pointer to task_struct to R9 tm SP_PSW+1(%r15),0x01 # returning to user ? - jz io_leave # no-> skip resched & signal + bz BASED(io_leave) # no-> skip resched & signal stosm 24(%r15),0x03 # reenable interrupts # # check, if bottom-half has to be done # - l %r1,io_bhmask-io_lit(%r13) + l %r1,BASED(.Lbhmask) l %r0,0(%r1) - l %r1,io_bhactive-io_lit(%r13) + l %r1,BASED(.Lbhactive) n %r0,0(%r1) - jnz io_handle_bottom_half + bnz BASED(io_handle_bottom_half) io_return_bh: # # check, if reschedule is needed # icm %r0,15,need_resched(%r9) # get need_resched from task_struct - jnz io_reschedule + bnz BASED(io_reschedule) icm %r0,15,sigpending(%r9) # get sigpending from task_struct - jnz io_signal_return + bnz BASED(io_signal_return) io_leave: stnsm 24(%r15),disable # disable I/O and ext. interrupts RESTORE_ALL @@ -748,16 +724,16 @@ # is zero # io_handle_bottom_half: - l %r1,io_do_bottom_half-io_lit(%r13) - la %r14,io_return_bh-io_lit(%r13) + l %r1,BASED(.Ldo_bottom_half) + la %r14,BASED(io_return_bh) br %r1 # call do_bottom_half # # call schedule with io_return as return-address # io_reschedule: - l %r1,io_schedule-io_lit(%r13) - la %r14,io_return-io_lit(%r13) + l %r1,BASED(.Lschedule) + la %r14,BASED(io_return) br %r1 # call scheduler, return to io_return # @@ -766,103 +742,48 @@ io_signal_return: la %r2,SP_PTREGS(%r15) # load pt_regs sr %r3,%r3 # clear *oldset - l %r1,io_do_signal-io_lit(%r13) - la %r14,io_leave-io_lit(%r13) + l %r1,BASED(.Ldo_signal) + la %r14,BASED(io_leave) br %r1 # return point is io_leave /* * External interrupt handler routine */ -ext_lit: - ext_timer_int: .long do_timer_interrupt -#ifdef __SMP__ - ext_call_int: .long do_ext_call_interrupt -#endif -#ifdef CONFIG_HWC - ext_hwc_int: .long do_hwc_interrupt -#endif -#ifdef CONFIG_MDISK - ext_mdisk_int: .long do_mdisk_interrupt -#endif -#ifdef CONFIG_IUCV - ext_iucv_int: .long do_iucv_interrupt -#endif - ext_io_lit: .long io_lit - ext_io_return: .long io_return - .globl ext_int_handler ext_int_handler: SAVE_ALL(0x18) - basr %r13,0 - ahi %r13,ext_lit-. # setup base pointer R13 to $EXTDAT la %r2,SP_PTREGS(%r15) # address of register-save area lh %r3,__LC_EXT_INT_CODE # error code -#ifdef __SMP__ - chi %r3,0x1202 # EXTERNAL_CALL - jne ext_no_extcall - l %r9,ext_call_int-ext_lit(%r13) # load ext_call_interrupt - l %r14,ext_io_return-ext_lit(%r13) - l %r13,ext_io_lit-ext_lit(%r13) - br %r9 # branch to ext call handler -ext_no_extcall: -#endif - chi %r3,0x1004 # CPU_TIMER - jne ext_no_timer - l %r9,ext_timer_int-ext_lit(%r13) # load timer_interrupt - l %r14,ext_io_return-ext_lit(%r13) - l %r13,ext_io_lit-ext_lit(%r13) - br %r9 # branch to ext call handler -ext_no_timer: -#ifdef CONFIG_HWC - chi %r3,0x2401 # HWC interrupt - jne ext_no_hwc - l %r9,ext_hwc_int-ext_lit(%r13) # load addr. of hwc routine - l %r14,ext_io_return-ext_lit(%r13) - l %r13,ext_io_lit-ext_lit(%r13) + lr %r1,%r3 # calculate index + srl %r1,8 # = (code + (code >> 8)) & 0xff + alr %r1,%r3 + n %r1,BASED(.Lc0xff) + sll %r1,2 + l %r9,BASED(.Lext_hash) + l %r9,0(%r1,%r9) # get first list entry for hash value + ltr %r9,%r9 # == NULL ? + bz BASED(io_return) # yes, nothing to do, exit +ext_int_loop: + ch %r3,8(%r9) # compare external interrupt code + be BASED(ext_int_found) + icm %r9,15,0(%r9) # next list entry + bnz BASED(ext_int_loop) + b BASED(io_return) +ext_int_found: + l %r9,4(%r9) # get handler address + la %r14,BASED(io_return) br %r9 # branch to ext call handler -ext_no_hwc: -#endif -#ifdef CONFIG_MDISK - chi %r3,0x2603 # diag 250 (VM) interrupt - jne ext_no_mdisk - l %r9,ext_mdisk_int-ext_lit(%r13) - l %r14,ext_io_return-ext_lit(%r13) - l %r13,ext_io_lit-ext_lit(%r13) - br %r9 # branch to ext call handler -ext_no_mdisk: -#endif -#ifdef CONFIG_IUCV - chi %r3,0x4000 # diag 250 (VM) interrupt - jne ext_no_iucv - l %r9,ext_iucv_int-ext_lit(%r13) - l %r14,ext_io_return-ext_lit(%r13) - l %r13,ext_io_lit-ext_lit(%r13) - br %r9 # branch to ext call handler -ext_no_iucv: -#endif - - l %r14,ext_io_return-ext_lit(%r13) - l %r13,ext_io_lit-ext_lit(%r13) - br %r14 # use backend code of io_int_handler /* * Machine check handler routines */ -mcck_lit: - mcck_crw_pending: .long do_crw_pending - .globl mcck_int_handler mcck_int_handler: SAVE_ALL(0x30) - basr %r13,0 - ahi %r13,mcck_lit-. # setup base pointer R13 to $MCCKDAT - tm __LC_MCCK_CODE+1,0x40 - jno mcck_no_crw - l %r1,mcck_crw_pending-mcck_lit(%r13) - basr %r14,%r1 # call do_crw_pending -mcck_no_crw: + l %r1,BASED(.Ls390_mcck) + basr %r14,%r1 # call machine check handler mcck_return: RESTORE_ALL @@ -877,11 +798,11 @@ lam %a0,%a15,__LC_AREGS_SAVE_AREA stosm 0(%r15),daton # now we can turn dat on lm %r6,%r15,24(%r15) # load registers from clone - bras %r14,restart_go - .long start_secondary -restart_go: - l %r14,0(%r14) + basr %r14,0 + l %r14,restart_addr-.(%r14) br %r14 # branch to start_secondary +restart_addr: + .long start_secondary #else /* * If we do not run with SMP enabled, let the new CPU crash ... @@ -898,8 +819,49 @@ #endif +/* + * Integer constants + */ + .align 4 +.Lc0xfffffff8: .long -8 # to align stack pointer to 8 +.Lc0xffffe000: .long -8192 # to round stack pointer to &task_struct +.Lc8191: .long 8191 +.Lc_spsize: .long SP_SIZE +.Lc_ac: .long 0,0,1 +.Lc_ENOSYS: .long -ENOSYS +.Lc4: .long 4 +.Lc0x1202: .long 0x1202 +.Lc0x1004: .long 0x1004 +.Lc0x2401: .long 0x2401 +.Lc0x4000: .long 0x4000 +.Lc0xff: .long 0xff +/* + * Symbol constants + */ +.Lbhactive: .long bh_active +.Lbhmask: .long bh_mask +.Ls390_mcck: .long s390_do_machine_check +.Ldo_IRQ: .long do_IRQ +.Ldo_bottom_half: + .long do_bottom_half +.Ldo_signal: .long do_signal +.Lentry_base: .long entry_base +.Lext_hash: .long ext_int_hash +.Lhandle_per: .long handle_per_exception +.Ljump_table: .long pgm_check_table +.Lschedule: .long schedule +.Lclone: .long sys_clone +.Lexecve: .long sys_execve +.Lfork: .long sys_fork +.Lrt_sigreturn:.long sys_rt_sigreturn +.Lrt_sigsuspend: + .long sys_rt_sigsuspend +.Lsigreturn: .long sys_sigreturn +.Lsigsuspend: .long sys_sigsuspend +.Ltrace: .long syscall_trace +.Lvfork: .long sys_vfork - - - +#ifdef __SMP__ +.Lschedtail: .long schedule_tail +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/head.S linux.16p3/arch/s390/kernel/head.S --- linux.vanilla/arch/s390/kernel/head.S Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/head.S Mon May 15 16:31:19 2000 @@ -481,10 +481,7 @@ .org 0x10000 .globl start start: basr %r13,0 # get base -.LPG1: lctl %c1,%c1,.Lpstd-.LPG1(%r13) # load pstd - lctl %c7,%c7,.Lpstd-.LPG1(%r13) # load sstd - lctl %c13,%c13,.Lpstd-.LPG1(%r13) # load hstd - lctl %c0,%c0,.Lcr0-.LPG1(%r13) # set CR0 +.LPG1: lctl %c0,%c15,.Lctl-.LPG1(%r13) # load all control registers l %r12,.Lparm1-.LPG1(%r13) # pointer to parameter area # @@ -529,15 +526,40 @@ adbr %f0,%f2 # test IEEE add instruction oi MACHINE_FLAGS+3-PARMAREA(%r12),2 # set IEEE fpu flag .Lchkfpu: +# +# find out if we have the CSP instruction +# + mvc 104(8,0),.Lpccsp-.LPG1(%r13) # setup program check handler + la %r0,0 + lr %r1,%r0 + la %r2,.Lflt0-.LPG1(%r13) + csp %r0,%r2 # Test CSP instruction + oi MACHINE_FLAGS+3-PARMAREA(%r12),8 # set CSP flag +.Lchkcsp: lpsw .Lentry-.LPG1(13) # jump to _stext in primary-space, # virtual and never return ... .align 8 .Lentry:.long 0x04080000,0x80000000 + _stext -.Lpstd: .long .Lpgd+0x7F # segment-table -.Lcr0: .long 0x04b50002 +.Lctl: .long 0x04b50002 # cr0: various things + .long .Lpgd+0x7f # cr1: primary space segment table + .long 0 # cr2: access register translation + .long 0 # cr3: instruction authorization + .long 0 # cr4: instruction authorization + .long 0 # cr5: various things + .long 0 # cr6: I/O interrupts + .long .Lpgd+0x7f # cr7: secondary space segment table + .long 0 # cr8: access registers translation + .long 0 # cr9: tracing off + .long 0 # cr10: tracing off + .long 0 # cr11: tracing off + .long 0 # cr12: tracing off + .long .Lpgd+0x7f # cr13: home space segment table + .long 0xc0000000 # cr14: machine check handling off + .long 0 # cr15: linkage stack operations .Lpcmem:.long 0x00080000,0x80000000 + .Lchkmem .Lpcfpu:.long 0x00080000,0x80000000 + .Lchkfpu +.Lpccsp:.long 0x00080000,0x80000000 + .Lchkcsp .Lflt0: .double 0 .Lparm1:.long PARMAREA .L4malign:.long 0xffc00000 @@ -600,9 +622,8 @@ jo .-4 # branch back, if not finish # check control registers stctl %c0,%c15,0(%r15) - l %r0,0(%r15) - o %r0,.Lcr0or-.LPG2(%r13) # enable sigp external ints. - st %r0,0(%r15) + oc 2(1,%r15),.Locbits+5-.LPG2(%r13) # enable sigp external ints. + oc 0(1,%r15),.Locbits+4-.LPG2(%r13) # low addresss proctection lctl %c0,%c15,0(%r15) # @@ -621,7 +642,7 @@ .Linittu: .long init_task_union .Lbss_bgn: .long __bss_start .Lbss_end: .long _end -.Lcr0or: .long 0x00002000 +.Locbits: .long 0x01020408,0x10204080 .align 4 .Laregs: .long 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 .align 8 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/irq.c linux.16p3/arch/s390/kernel/irq.c --- linux.vanilla/arch/s390/kernel/irq.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/irq.c Mon May 15 16:31:19 2000 @@ -372,7 +372,7 @@ if ( ioinfo[irq] == INVALID_STORAGE_AREA ) return( -ENODEV); - action = ioinfo[irq]->irq_desc.action; + action = (struct irqaction *) ioinfo[irq]->irq_desc.action; if (action) { @@ -401,7 +401,7 @@ { } -unsigned long __init init_IRQ(unsigned long memory) +__initfunc(unsigned long init_IRQ( unsigned long memory)) { return s390_init_IRQ( memory); } @@ -420,5 +420,6 @@ void *dev_id) { return( s390_request_irq( irq, handler, irqflags, devname, dev_id ) ); + } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/irqextras390.c linux.16p3/arch/s390/kernel/irqextras390.c --- linux.vanilla/arch/s390/kernel/irqextras390.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/irqextras390.c Mon May 15 16:31:19 2000 @@ -33,3 +33,4 @@ break; } } + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/process.c linux.16p3/arch/s390/kernel/process.c --- linux.vanilla/arch/s390/kernel/process.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/process.c Mon May 15 16:31:19 2000 @@ -18,6 +18,7 @@ #define __KERNEL_SYSCALLS__ #include +#include #include #include #include diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/reipl.S linux.16p3/arch/s390/kernel/reipl.S --- linux.vanilla/arch/s390/kernel/reipl.S Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/reipl.S Mon May 15 16:31:19 2000 @@ -12,6 +12,9 @@ do_reipl: basr %r13,0 .Lpg0: lpsw .Lnewpsw-.Lpg0(%r13) .Lpg1: lctl %c6,%c6,.Lall-.Lpg0(%r13) + stctl %c0,%c0,.Lctlsave-.Lpg0(%r13) + ni .Lctlsave-.Lpg0(%r13),0xef + lctl %c0,%c0,.Lctlsave-.Lpg0(%r13) lr %r1,%r2 mvc __LC_PGM_NEW_PSW(8,0),.Lpcnew-.Lpg0(%r13) stsch .Lschib-.Lpg0(%r13) @@ -41,8 +44,9 @@ .Ldisab: st %r14,.Ldispsw+4-.Lpg0(%r13) lpsw .Ldispsw-.Lpg0(%r13) .align 8 -.Lall: .long 0xff000000; +.Lall: .long 0xff000000 .Lnull: .long 0x00000000 +.Lctlsave: .long 0x00000000 .align 8 .Lnewpsw: .long 0x00080000,0x80000000+.Lpg1 .Lpcnew: .long 0x00080000,0x80000000+.Lecs diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/s390_ext.c linux.16p3/arch/s390/kernel/s390_ext.c --- linux.vanilla/arch/s390/kernel/s390_ext.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/kernel/s390_ext.c Mon May 15 16:31:19 2000 @@ -0,0 +1,77 @@ +/* + * arch/s390/kernel/s390_ext.c + * + * S390 version + * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com), + * Martin Schwidefsky (schwidefsky@de.ibm.com) + */ + +#include +#include +#include +#include + +/* + * Simple hash strategy: index = ((code >> 8) + code) & 0xff; + * ext_int_hash[index] is the start of the list for all external interrupts + * that hash to this index. With the current set of external interrupts + * (0x1202 external call, 0x1004 cpu timer, 0x2401 hwc console and 0x4000 + * iucv) this is always the first element. + */ +ext_int_info_t *ext_int_hash[256] = { 0, }; +ext_int_info_t ext_int_info_timer; +ext_int_info_t ext_int_info_hwc; + +int register_external_interrupt(__u16 code, ext_int_handler_t handler) { + ext_int_info_t *p; + int index; + + index = (code + (code >> 8)) & 0xff; + p = ext_int_hash[index]; + while (p != NULL) { + if (p->code == code) + return -EBUSY; + p = p->next; + } + if (code == 0x1004) /* time_init is done before kmalloc works :-/ */ + p = &ext_int_info_timer; + else if (code == 0x2401) /* hwc_init is done too early too */ + p = &ext_int_info_hwc; + else + p = (ext_int_info_t *) + kmalloc(sizeof(ext_int_info_t), GFP_ATOMIC); + if (p == NULL) + return -ENOMEM; + p->code = code; + p->handler = handler; + p->next = ext_int_hash[index]; + ext_int_hash[index] = p; + return 0; +} + +int unregister_external_interrupt(__u16 code, ext_int_handler_t handler) { + ext_int_info_t *p, *q; + int index; + + index = (code + (code >> 8)) & 0xff; + q = NULL; + p = ext_int_hash[index]; + while (p != NULL) { + if (p->code == code && p->handler == handler) + break; + q = p; + p = p->next; + } + if (p == NULL) + return -ENOENT; + if (q != NULL) + q->next = p->next; + else + ext_int_hash[index] = p->next; + if (code != 0x1004 && code != 0x2401) + kfree(p); + return 0; +} + + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/s390_ksyms.c linux.16p3/arch/s390/kernel/s390_ksyms.c --- linux.vanilla/arch/s390/kernel/s390_ksyms.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/s390_ksyms.c Mon May 15 16:32:46 2000 @@ -8,6 +8,14 @@ #include #include #include +#include +#if CONFIG_CHANDEV +#include +#endif +#if CONFIG_IP_MULTICAST +#include +#endif + /* * I/O subsystem @@ -24,6 +32,12 @@ EXPORT_SYMBOL(get_irq_next); /* + * External interrupts + */ +EXPORT_SYMBOL(register_external_interrupt); +EXPORT_SYMBOL(unregister_external_interrupt); + +/* * memory management */ EXPORT_SYMBOL(init_mm); @@ -57,10 +71,19 @@ EXPORT_SYMBOL(__global_save_flags); EXPORT_SYMBOL(__global_restore_flags); EXPORT_SYMBOL(global_bh_lock); +EXPORT_SYMBOL(synchronize_bh); EXPORT_SYMBOL(kernel_flag); #endif EXPORT_SYMBOL(kernel_thread); -EXPORT_SYMBOL(synchronize_bh); EXPORT_SYMBOL(csum_fold); - +#if CONFIG_CHANDEV +EXPORT_SYMBOL(chandev_register_and_probe); +EXPORT_SYMBOL(chandev_unregister); +EXPORT_SYMBOL(chandev_initdevice); +EXPORT_SYMBOL(chandev_initnetdevice); +#endif +#if CONFIG_IP_MULTICAST +/* Required for lcs gigibit ethernet multicast support */ +EXPORT_SYMBOL(arp_mc_map); +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/s390dyn.c linux.16p3/arch/s390/kernel/s390dyn.c --- linux.vanilla/arch/s390/kernel/s390dyn.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/kernel/s390dyn.c Mon May 15 16:31:19 2000 @@ -0,0 +1,206 @@ +/* + * arch/s390/kernel/s390dyn.c + * S/390 dynamic device attachment + * + * S390 version + * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Ingo Adlung (adlung@de.ibm.com) + */ + +#include +#include + +#include +#include +#include + +static devreg_t *devreg_anchor = NULL; +static spinlock_t dyn_lock = SPIN_LOCK_UNLOCKED; + +int s390_device_register( devreg_t *drinfo ) +{ + unsigned long flags; + + int ret = 0; + devreg_t *pdevreg = devreg_anchor; + + if ( drinfo == NULL ) + return( -EINVAL ); + + spin_lock_irqsave( &dyn_lock, flags ); + + while ( (pdevreg != NULL) && (ret ==0) ) + { + if ( pdevreg == drinfo ) + { + ret = -EINVAL; + } + else + { + if ( ( (pdevreg->flag & DEVREG_TYPE_DEVNO) + && (pdevreg->ci.devno ) ) + && ( (drinfo->flag & DEVREG_TYPE_DEVNO ) + && (drinfo->ci.devno ) ) ) + { + ret = -EBUSY; + } + else if ( (pdevreg->flag & DEVREG_EXACT_MATCH) + && (drinfo->flag & DEVREG_EXACT_MATCH ) ) + { + if ( memcmp( &pdevreg->ci.hc, &drinfo->ci.hc, 6) ) + ret = -EBUSY; + } + else if ( (pdevreg->flag & DEVREG_MATCH_DEV_TYPE) + && (drinfo->flag & DEVREG_MATCH_DEV_TYPE ) ) + { + if ( (pdevreg->ci.hc.dtype == drinfo->ci.hc.dtype) + && (pdevreg->ci.hc.dmode == drinfo->ci.hc.dmode) ) + ret = -EBUSY; + } + else if ( (pdevreg->flag & DEVREG_MATCH_CU_TYPE) + && (drinfo->flag & DEVREG_MATCH_CU_TYPE ) ) + { + if ( (pdevreg->ci.hc.ctype == drinfo->ci.hc.ctype) + && (pdevreg->ci.hc.cmode == drinfo->ci.hc.cmode) ) + ret = -EBUSY; + } + else if ( (pdevreg->flag & DEVREG_NO_CU_INFO) + && (drinfo->flag & DEVREG_NO_CU_INFO ) ) + { + if ( (pdevreg->ci.hnc.dtype == drinfo->ci.hnc.dtype) + && (pdevreg->ci.hnc.dmode == drinfo->ci.hnc.dmode) ) + ret = -EBUSY; + } + + pdevreg = pdevreg->next; + + } /* endif */ + + } /* endwhile */ + + /* + * only enqueue if no collision was found ... + */ + if ( ret == 0 ) + { + drinfo->next = devreg_anchor; + drinfo->prev = NULL; + + if ( devreg_anchor != NULL ) + { + devreg_anchor->prev = drinfo; + + } /* endif */ + + } /* endif */ + + spin_unlock_irqrestore( &dyn_lock, flags ); + + return( ret); +} + + +int s390_device_unregister( devreg_t *dreg ) +{ + unsigned long flags; + + int ret = -EINVAL; + devreg_t *pdevreg = devreg_anchor; + + if ( dreg == NULL ) + return( -EINVAL ); + + spin_lock_irqsave( &dyn_lock, flags ); + + while ( (pdevreg != NULL ) + && ( ret != 0 ) ) + { + if ( pdevreg == dreg ) + { + devreg_t *dprev = pdevreg->prev; + devreg_t *dnext = pdevreg->next; + + if ( (dprev != NULL) && (dnext != NULL) ) + { + dnext->prev = dprev; + dprev->next = dnext; + } + if ( (dprev != NULL) && (dnext == NULL) ) + { + dprev->next = NULL; + } + if ( (dprev == NULL) && (dnext != NULL) ) + { + dnext->prev = NULL; + + } /* else */ + + ret = 0; + } + else + { + pdevreg = pdevreg->next; + + } /* endif */ + + } /* endwhile */ + + spin_unlock_irqrestore( &dyn_lock, flags ); + + return( ret); +} + + +devreg_t * s390_search_devreg( ioinfo_t *ioinfo ) +{ + unsigned long flags; + + devreg_t *pdevreg = devreg_anchor; + + if ( ioinfo == NULL ) + return( NULL ); + + spin_lock_irqsave( &dyn_lock, flags ); + + while ( pdevreg != NULL ) + { + if ( (pdevreg->flag & DEVREG_TYPE_DEVNO ) + && (ioinfo->ui.flags.dval == 1 ) + && (ioinfo->devno == pdevreg->ci.devno) ) + { + break; + } + else if ( pdevreg->flag & DEVREG_EXACT_MATCH ) + { + if ( memcmp( &pdevreg->ci.hc, + &ioinfo->senseid.cu_type, 6 ) ) + break; + } + else if ( pdevreg->flag & DEVREG_MATCH_DEV_TYPE ) + { + if ( (pdevreg->ci.hc.dtype == ioinfo->senseid.dev_type ) + && (pdevreg->ci.hc.dmode == ioinfo->senseid.dev_model) ) + break; + } + else if ( pdevreg->flag & DEVREG_MATCH_CU_TYPE ) + { + if ( (pdevreg->ci.hc.ctype == ioinfo->senseid.cu_type ) + && (pdevreg->ci.hc.cmode == ioinfo->senseid.cu_model) ) + break; + } + else if ( pdevreg->flag & DEVREG_NO_CU_INFO ) + { + if ( (pdevreg->ci.hnc.dtype == ioinfo->senseid.dev_type ) + && (pdevreg->ci.hnc.dmode == ioinfo->senseid.dev_model) ) + break; + } + + pdevreg = pdevreg->next; + + } /* endwhile */ + + spin_unlock_irqrestore( &dyn_lock, flags ); + + return( pdevreg); +} + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/s390io.c linux.16p3/arch/s390/kernel/s390io.c --- linux.vanilla/arch/s390/kernel/s390io.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/s390io.c Mon May 15 16:31:19 2000 @@ -4,7 +4,7 @@ * * S390 version * Copyright (C) 1999, 2000 IBM Deutschland Entwicklung GmbH, - IBM Corporation + * IBM Corporation * Author(s): Ingo Adlung (adlung@de.ibm.com) */ @@ -27,26 +27,34 @@ #include #include #include +#include #include #include +#include +#include #undef CONFIG_DEBUG_IO +#define CONFIG_DEBUG_CRW #define REIPL_DEVID_MAGIC 0x87654321 -struct irqaction init_IRQ_action; +struct s390_irqaction init_IRQ_action; unsigned int highest_subchannel; ioinfo_t *ioinfo_head = NULL; ioinfo_t *ioinfo_tail = NULL; ioinfo_t *ioinfo[__MAX_SUBCHANNELS] = { [0 ... (__MAX_SUBCHANNELS-1)] = INVALID_STORAGE_AREA }; -spinlock_t sync_isc; // synchronous irq processing lock -psw_t io_sync_wait; // wait PSW for sync IO, prot. by sync_isc -psw_t io_new_psw; // save I/O new PSW, prot. by sync_isc -int cons_dev = -1; // identify console device -int init_IRQ_complete = 0; -schib_t init_schib; + +static spinlock_t sync_isc = SPIN_LOCK_UNLOCKED; + // synchronous irq processing lock +static psw_t io_sync_wait; // wait PSW for sync IO, prot. by sync_isc +static psw_t io_new_psw; // save I/O new PSW, prot. by sync_isc +static int cons_dev = -1; // identify console device +static int init_IRQ_complete = 0; +static schib_t init_schib; +static irb_t init_irb; +static __u64 irq_IPL_TOD; /* * Dummy controller type for unused interrupts @@ -63,12 +71,18 @@ }; static void init_IRQ_handler( int irq, void *dev_id, struct pt_regs *regs); -static int s390_setup_irq(unsigned int irq, struct irqaction * new); +static int s390_setup_irq(unsigned int irq, struct s390_irqaction * new); static void s390_process_subchannels( void); -static void s390_device_recognition( void); -static int s390_validate_subchannel( int irq); -static int s390_SenseID( int irq, senseid_t *sid); +static void s390_device_recognition_all( void); +static void s390_device_recognition_irq( int irq); +static int s390_validate_subchannel( int irq, int enable); +static int s390_SenseID( int irq, senseid_t *sid, __u8 lpm); +static int s390_SetPGID( int irq, __u8 lpm, pgid_t *pgid); +static int s390_SensePGID( int irq, __u8 lpm, pgid_t *pgid); static int s390_process_IRQ( unsigned int irq ); +static int disable_subchannel( unsigned int irq); + +int s390_DevicePathVerification( int irq, __u8 domask ); extern int do_none(unsigned int irq, int cpu, struct pt_regs * regs); extern int enable_none(unsigned int irq); @@ -83,6 +97,7 @@ // fix me ! must be removed with 2.3.x and follow-up releases // static void * alloc_bootmem( unsigned long size); +static int free_bootmem( unsigned long buffer, unsigned long size); static unsigned long memory_start = 0; void s390_displayhex(char *str,void *ptr,s32 cnt); @@ -90,13 +105,13 @@ void s390_displayhex(char *str,void *ptr,s32 cnt) { s32 cnt1,cnt2,maxcnt2; - u32 *currptr=(u32 *)ptr; + u32 *currptr=(__u32 *)ptr; printk("\n%s\n",str); for(cnt1=0;cnt116) maxcnt2=16; @@ -106,19 +121,21 @@ } } -int s390_request_irq( unsigned int irq, - void (*handler)(int, void *, struct pt_regs *), + +int s390_request_irq_special( int irq, + io_handler_func_t io_handler, + not_oper_handler_func_t not_oper_handler, unsigned long irqflags, const char *devname, void *dev_id) { int retval; - struct irqaction *action; + struct s390_irqaction *action; if (irq >= __MAX_SUBCHANNELS) return -EINVAL; - if ( !handler || !dev_id ) + if ( !io_handler || !dev_id ) return -EINVAL; /* @@ -128,8 +145,9 @@ */ if ( init_IRQ_complete ) { - action = (struct irqaction *) - kmalloc(sizeof(struct irqaction), GFP_KERNEL); + action = (struct s390_irqaction *) + kmalloc( sizeof(struct s390_irqaction), + GFP_KERNEL); } else { @@ -143,27 +161,64 @@ } /* endif */ - action->handler = handler; + action->handler = io_handler; action->flags = irqflags; - action->mask = 0; action->name = devname; - action->next = NULL; action->dev_id = dev_id; retval = s390_setup_irq(irq, action); - if ( retval && init_IRQ_complete ) + if ( init_IRQ_complete ) + { + if ( !retval ) + { + s390_DevicePathVerification( irq, 0 ); + } + else { kfree(action); } /* endif */ + } /* endif */ + + if ( retval == 0 ) + { + ioinfo[irq]->ui.flags.newreq = 1; + ioinfo[irq]->nopfunc = not_oper_handler; + } + return retval; } + +int s390_request_irq( unsigned int irq, + void (*handler)(int, void *, struct pt_regs *), + unsigned long irqflags, + const char *devname, + void *dev_id) +{ + int ret; + + ret = s390_request_irq_special( irq, + (io_handler_func_t)handler, + NULL, + irqflags, + devname, + dev_id); + + if ( ret == 0 ) + { + ioinfo[irq]->ui.flags.newreq = 0; + + } /* endif */ + + return( ret); +} + void s390_free_irq(unsigned int irq, void *dev_id) { - unsigned int flags; + unsigned long flags; int ret; unsigned int count = 0; @@ -198,11 +253,59 @@ do { - ret = ioinfo[irq]->irq_desc.handler->disable(irq); + ret = disable_subchannel( irq); count++; - if ( count == 3 ) + if ( ret == -EBUSY ) + { + int iret; + + /* + * kill it ! + * ... we first try sync and eventually + * try terminating the current I/O by + * an async request, twice halt, then + * clear. + */ + if ( count < 2 ) + { + iret = halt_IO( irq, + 0xC8C1D3E3, + DOIO_WAIT_FOR_INTERRUPT ); + + if ( iret == -EBUSY ) + { + halt_IO( irq, 0xC8C1D3E3, 0); + s390irq_spin_unlock_irqrestore( irq, flags); + tod_wait( 200000 ); /* 200 ms */ + s390irq_spin_lock_irqsave( irq, flags); + + } /* endif */ + } + else + { + iret = clear_IO( irq, + 0x40C3D3D9, + DOIO_WAIT_FOR_INTERRUPT ); + + if ( iret == -EBUSY ) + { + clear_IO( irq, 0xC8C1D3E3, 0); + s390irq_spin_unlock_irqrestore( irq, flags); + tod_wait( 1000000 ); /* 1000 ms */ + s390irq_spin_lock_irqsave( irq, flags); + + } /* endif */ + + } /* endif */ + + if ( count == 2 ) + { + /* give it a very last try ... */ + disable_subchannel( irq); + + if ( ioinfo[irq]->ui.flags.busy ) { printk( KERN_CRIT"free_irq(%04X) " "- device %04X busy, retry " @@ -212,6 +315,12 @@ } /* endif */ + break; /* sigh, let's give up ... */ + + } /* endif */ + + } /* endif */ + } while ( ret == -EBUSY ); if ( init_IRQ_complete ) @@ -219,12 +328,12 @@ ioinfo[irq]->irq_desc.action = NULL; ioinfo[irq]->ui.flags.ready = 0; - - ioinfo[irq]->irq_desc.handler->enable = &enable_none; - ioinfo[irq]->irq_desc.handler->disable = &disable_none; - + ioinfo[irq]->irq_desc.handler->enable = enable_none; + ioinfo[irq]->irq_desc.handler->disable = disable_none; ioinfo[irq]->ui.flags.unready = 0; /* deregister ended */ + ioinfo[irq]->nopfunc = NULL; + s390irq_spin_unlock_irqrestore( irq, flags); } else @@ -328,6 +437,7 @@ else { ioinfo[irq]->schib.pmcw.ena = 1; + ioinfo[irq]->schib.pmcw.isc = 3; do { @@ -349,9 +459,7 @@ */ ioinfo[irq]->ui.flags.s_pend = 1; - s390_process_IRQ( irq ); - ioinfo[irq]->ui.flags.s_pend = 0; ret = -EIO; /* might be overwritten */ @@ -360,6 +468,12 @@ retry--; break; + case 2: + tod_wait(100); /* allow for recovery */ + ret = -EBUSY; + retry--; + break; + case 3: ioinfo[irq]->ui.flags.oper = 0; ret = -ENODEV; @@ -452,7 +566,7 @@ s390_process_IRQ( irq ); ioinfo[irq]->ui.flags.s_pend = 0; - ret = -EBUSY; /* might be overwritten */ + ret = -EIO; /* might be overwritten */ /* ... on re-driving the */ /* ... msch() call */ retry--; @@ -471,7 +585,7 @@ "device %04X received !\n", irq, ioinfo[irq]->devstat.devno); - ret = -ENODEV; // never reached + ret = -EBUSY; break; case 3 : @@ -502,8 +616,7 @@ } - -int s390_setup_irq(unsigned int irq, struct irqaction * new) +int s390_setup_irq( unsigned int irq, struct s390_irqaction * new) { unsigned long flags; int rc = 0; @@ -522,9 +635,9 @@ { ioinfo[irq]->irq_desc.action = new; ioinfo[irq]->irq_desc.status = 0; - ioinfo[irq]->irq_desc.handler->enable = &enable_subchannel; - ioinfo[irq]->irq_desc.handler->disable = &disable_subchannel; - ioinfo[irq]->irq_desc.handler->handle = &handle_IRQ_event; + ioinfo[irq]->irq_desc.handler->enable = enable_subchannel; + ioinfo[irq]->irq_desc.handler->disable = disable_subchannel; + ioinfo[irq]->irq_desc.handler->handle = handle_IRQ_event; ioinfo[irq]->ui.flags.ready = 1; @@ -559,6 +672,22 @@ return( ret ); } +int free_bootmem( unsigned long buffer, unsigned long size) +{ + int ret = 0; + + /* + * We don't have buffer management, thus a free + * must follow the matching alloc. + */ + if ( buffer == (memory_start - size) ) + memory_start -= size; + else + ret = -EINVAL; + + return( ret ); +} + unsigned long s390_init_IRQ( unsigned long memstart) { unsigned long flags; /* PSW flags */ @@ -571,6 +700,8 @@ atomic_set(&S390_lowcore.local_bh_count,0); atomic_set(&S390_lowcore.local_irq_count,0); + asm volatile ("STCK %0" : "=m" (irq_IPL_TOD)); + /* * As we don't know about the calling environment * we assure running disabled. Before leaving the @@ -597,7 +728,7 @@ cr6 = 0x10000000; asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); - s390_device_recognition(); + s390_device_recognition_all(); init_IRQ_complete = 1; @@ -631,18 +762,17 @@ /* * The flag usage is mutal exclusive ... */ - if ( (flag & DOIO_RETURN_CHAN_END) + if ( (flag & DOIO_EARLY_NOTIFICATION) && (flag & DOIO_REPORT_ALL ) ) { return( -EINVAL ); } /* endif */ - memset( &(ioinfo[irq]->orb), '\0', sizeof( orb_t) ); - /* * setup ORB */ + ioinfo[irq]->orb.intparm = (__u32)&ioinfo[irq]->u_intparm; ioinfo[irq]->orb.fmt = 1; ioinfo[irq]->orb.pfch = !(flag & DOIO_DENY_PREFETCH); @@ -656,7 +786,7 @@ } else { - ioinfo[irq]->orb.lpm = ioinfo[irq]->schib.pmcw.pam; + ioinfo[irq]->orb.lpm = ioinfo[irq]->opm; } /* endif */ @@ -694,6 +824,12 @@ } /* endif */ + if ( flag & DOIO_DONT_CALL_INTHDLR ) + { + ioinfo[irq]->ui.flags.repnone = 1; + + } /* endif */ + /* * Issue "Start subchannel" and process condition code */ @@ -713,6 +849,10 @@ '\0', sizeof( irb_t) ); } /* endif */ + memset( &ioinfo[irq]->devstat.ii.irb, + '\0', + sizeof( irb_t) ); + /* * initialize device status information */ @@ -734,7 +874,7 @@ * or if we are to return all interrupt info. * Default is to call IRQ handler at secondary status only */ - if ( flag & DOIO_RETURN_CHAN_END ) + if ( flag & DOIO_EARLY_NOTIFICATION ) { ioinfo[irq]->ui.flags.fast = 1; } @@ -744,15 +884,7 @@ } /* endif */ - if ( flag & DOIO_VALID_LPM ) - { - ioinfo[irq]->lpm = lpm; /* specific path */ - } - else - { - ioinfo[irq]->lpm = 0xff; /* any path */ - - } /* endif */ + ioinfo[irq]->ulpm = ioinfo[irq]->orb.lpm; /* * If synchronous I/O processing is requested, we have @@ -764,13 +896,16 @@ */ if ( flag & DOIO_WAIT_FOR_INTERRUPT ) { - int io_sub; + int io_sub = -1; __u32 io_parm; psw_t io_new_psw; int ccode; + uint64_t time_start; + uint64_t time_curr; int ready = 0; struct _lowcore *lc = NULL; + int do_retry = 1; /* * We shouldn't perform a TPI loop, waiting for an @@ -812,8 +947,7 @@ break; } /* endswitch */ - io_sync_wait.addr = (unsigned long) &&io_wakeup - | 0x80000000L; + io_sync_wait.addr = FIX_PSW(&&io_wakeup); /* * Martin didn't like modifying the new PSW, now we take @@ -821,27 +955,67 @@ */ *(__u32 *)__LC_SYNC_IO_WORD = 1; + asm volatile ("STCK %0" : "=m" (time_start)); + + time_start = time_start >> 32; + + do + { + if ( flag & DOIO_TIMEOUT ) + { + tpi_info_t tpi_info; + do { + if ( tpi(&tpi_info) == 1 ) + { + io_sub = tpi_info.irq; + break; + } + else + { + tod_wait(100); /* usecs */ + asm volatile ("STCK %0" : "=m" (time_curr)); + + if ( ((time_curr >> 32) - time_start ) >= 3 ) + do_retry = 0; + + } /* endif */ + } while ( do_retry ); + } + else + { asm volatile ( "lpsw %0" : : "m" (io_sync_wait) ); + io_wakeup: - io_parm = *(__u32 *)__LC_IO_INT_PARM; io_sub = (__u32)*(__u16 *)__LC_SUBCHANNEL_NR; + } /* endif */ + + if ( do_retry ) ready = s390_process_IRQ( io_sub ); - } while ( !((io_sub == irq) && (ready == 1)) ); + /* + * surrender when retry count's exceeded ... + */ + } while ( !( ( io_sub == irq ) + && ( ready == 1 )) + && do_retry ); *(__u32 *)__LC_SYNC_IO_WORD = 0; + if ( !do_retry ) + ret = -ETIMEDOUT; + } /* endif */ break; case 1 : /* status pending */ - ioinfo[irq]->devstat.flag |= DEVSTAT_STATUS_PENDING; + ioinfo[irq]->devstat.flag = DEVSTAT_START_FUNCTION + | DEVSTAT_STATUS_PENDING; /* * initialize the device driver specific devstat irb area @@ -866,6 +1040,7 @@ ioinfo[irq]->ui.flags.s_pend = 0; ioinfo[irq]->ui.flags.busy = 0; ioinfo[irq]->ui.flags.doio = 0; + ioinfo[irq]->ui.flags.repall = 0; ioinfo[irq]->ui.flags.w4final = 0; @@ -880,11 +1055,30 @@ */ if ( ioinfo[irq]->devstat.ii.irb.scsw.cc == 3 ) { + if ( flag & DOIO_VALID_LPM ) + { + ioinfo[irq]->opm &= ~(ioinfo[irq]->devstat.ii.irb.esw.esw1.lpum); + } + else + { + ioinfo[irq]->opm = 0; + + } /* endif */ + + if ( ioinfo[irq]->opm == 0 ) + { ret = -ENODEV; - ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; ioinfo[irq]->ui.flags.oper = 0; + } + else + { + ret = -EIO; + + } /* endif */ + + ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; -#if CONFIG_DEBUG_IO +#ifdef CONFIG_DEBUG_IO { char buffer[80]; @@ -921,7 +1115,7 @@ ((devstat_t *)(ioinfo[irq]->irq_desc.action->dev_id))->ii.sense.data, ((devstat_t *)(ioinfo[irq]->irq_desc.action->dev_id))->rescnt); - } + } /* endif */ } #endif } @@ -940,18 +1134,32 @@ ret = -EBUSY; break; - default: /* device not operational */ + default: /* device/path not operational */ + + if ( flag & DOIO_VALID_LPM ) + { + ioinfo[irq]->opm &= ~lpm; + } + else + { + ioinfo[irq]->opm = 0; - ret = -ENODEV; - ioinfo[irq]->ui.flags.oper = 0; + } /* endif */ + if ( ioinfo[irq]->opm == 0 ) + { + ioinfo[irq]->ui.flags.oper = 0; ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; + } /* endif */ + + ret = -ENODEV; + memcpy( ioinfo[irq]->irq_desc.action->dev_id, &(ioinfo[irq]->devstat), sizeof( devstat_t) ); -#if CONFIG_DEBUG_IO +#ifdef CONFIG_DEBUG_IO { char buffer[80]; @@ -971,16 +1179,40 @@ } /* endswitch */ - if ( ( flag & DOIO_WAIT_FOR_INTERRUPT ) - && ( sync_isc_locked ) ) + if ( sync_isc_locked ) { - disable_cpu_sync_isc( irq ); + int iret; + int retry = 5; + int halt = 0; - spin_unlock_irqrestore( &sync_isc, psw_flags); + do + { + iret = disable_cpu_sync_isc( irq ); + retry--; + + /* try stopping it ... */ + if ( (iret == -EBUSY) && !halt ) + { + halt_IO( irq, 0x00004711, 0 ); + halt = 1; + + } /* endif */ + + tod_wait( 100); + + } while ( retry && (iret == -EBUSY ) ); sync_isc_locked = 0; // local setting ioinfo[irq]->ui.flags.syncio = 0; // global setting + spin_unlock_irqrestore( &sync_isc, psw_flags); + + } /* endif */ + + if ( flag & DOIO_DONT_CALL_INTHDLR ) + { + ioinfo[irq]->ui.flags.repnone = 0; + } /* endif */ return( ret); @@ -1005,8 +1237,8 @@ return( -ENODEV); } - /* handler registered ? */ - if ( !ioinfo[irq]->ui.flags.ready ) + /* handler registered ? or free_irq() in process already ? */ + if ( !ioinfo[irq]->ui.flags.ready || ioinfo[irq]->ui.flags.unready ) { return( -ENODEV ); @@ -1125,7 +1357,7 @@ */ int halt_IO( int irq, unsigned long user_intparm, - unsigned int flag) /* possible DOIO_WAIT_FOR_INTERRUPT */ + unsigned long flag) /* possible DOIO_WAIT_FOR_INTERRUPT */ { int ret; int ccode; @@ -1161,7 +1393,8 @@ /* * We don't allow for halt_io with a sync do_IO() requests pending. */ - else if ( ioinfo[irq]->ui.flags.syncio ) + else if ( ioinfo[irq]->ui.flags.syncio + && (flag & DOIO_WAIT_FOR_INTERRUPT)) { ret = -EBUSY; } @@ -1289,8 +1522,7 @@ break; } /* endswitch */ - io_sync_wait.addr = (unsigned long)&&hio_wakeup - | 0x80000000L; + io_sync_wait.addr = FIX_PSW(&&hio_wakeup); /* * Martin didn't like modifying the new PSW, now we take @@ -1385,14 +1617,13 @@ } /* endswitch */ - if ( ( flag & DOIO_WAIT_FOR_INTERRUPT ) - && ( sync_isc_locked ) ) + if ( sync_isc_locked ) { + disable_cpu_sync_isc( irq ); + sync_isc_locked = 0; // local setting ioinfo[irq]->ui.flags.syncio = 0; // global setting - disable_cpu_sync_isc( irq ); - spin_unlock_irqrestore( &sync_isc, psw_flags); } /* endif */ @@ -1402,1382 +1633,2740 @@ return( ret ); } - /* - * do_IRQ() handles all normal I/O device IRQ's (the special - * SMP cross-CPU interrupts have their own specific - * handlers). - * - * Returns: 0 - no ending status received, no further action taken - * 1 - interrupt handler was called with ending status + * Note: The "intparm" parameter is not used by the clear_IO() function + * itself, as no ORB is built for the CSCH instruction. However, + * it allows the device interrupt handler to associate the upcoming + * interrupt with the clear_IO() request. */ -asmlinkage void do_IRQ( struct pt_regs regs, - unsigned int irq, - __u32 s390_intparm ) +int clear_IO( int irq, + unsigned long user_intparm, + unsigned long flag) /* possible DOIO_WAIT_FOR_INTERRUPT */ { -#ifdef CONFIG_FAST_IRQ + int ret; int ccode; - tpi_info_t tpi_info; - int new_irq; -#endif - int use_irq = irq; -// __u32 use_intparm = s390_intparm; + unsigned long psw_flags; + + int sync_isc_locked = 0; + + if ( irq > highest_subchannel || irq < 0 ) + { + ret = -ENODEV; + } - // - // fix me !!! - // - // We need to schedule device recognition, the interrupt stays - // pending. We need to dynamically allocate an ioinfo structure. - // if ( ioinfo[irq] == INVALID_STORAGE_AREA ) { - return; + return( -ENODEV); } /* - * take fast exit if CPU is in sync. I/O state - * - * Note: we have to turn off the WAIT bit and re-disable - * interrupts prior to return as this was the initial - * entry condition to synchronous I/O. + * we only allow for halt_IO if the device has an I/O handler associated */ - if ( *(__u32 *)__LC_SYNC_IO_WORD ) + else if ( !ioinfo[irq]->ui.flags.ready ) { - regs.psw.mask &= ~(_PSW_WAIT_MASK_BIT | _PSW_IO_MASK_BIT); - - return; - - } /* endif */ - - s390irq_spin_lock(use_irq); - -#ifdef CONFIG_FAST_IRQ - do { -#endif /* CONFIG_FAST_IRQ */ - - s390_process_IRQ( use_irq ); - -#ifdef CONFIG_FAST_IRQ - + ret = -ENODEV; + } /* - * more interrupts pending ? + * we ignore the halt_io() request if ending_status was received but + * a SENSE operation is waiting for completion. */ - ccode = tpi( &tpi_info ); - - if ( ! ccode ) - break; // no, leave ... - - new_irq = tpi_info.irq; -// use_intparm = tpi_info.intparm; - + else if ( ioinfo[irq]->ui.flags.w4sense ) + { + ret = 0; + } /* - * if the interrupt is for a different irq we - * release the current irq lock and obtain - * a new one ... + * We don't allow for halt_io with a sync do_IO() requests pending. + * Concurrent I/O is possible in SMP environments only, but the + * sync. I/O request can be gated to one CPU at a time only. */ - if ( new_irq != use_irq ) + else if ( ioinfo[irq]->ui.flags.syncio ) { - s390irq_spin_unlock(use_irq); - use_irq = new_irq; - s390irq_spin_lock(use_irq); - - } /* endif */ - - } while ( 1 ); - -#endif /* CONFIG_FAST_IRQ */ - - s390irq_spin_unlock(use_irq); - - return; + ret = -EBUSY; } - + else + { /* - * s390_process_IRQ() handles status pending situations and interrupts - * - * Called by : do_IRQ() - for "real" interrupts - * s390_start_IO, halt_IO() - * - status pending cond. after SSCH, or HSCH - * disable_subchannel() - status pending conditions (after MSCH) - * - * Returns: 0 - no ending status received, no further action taken - * 1 - interrupt handler was called with ending status + * If sync processing was requested we lock the sync ISC, + * modify the device to present interrupts for this ISC only + * and switch the CPU to handle this ISC + the console ISC + * exclusively. */ -int s390_process_IRQ( unsigned int irq ) + if ( flag & DOIO_WAIT_FOR_INTERRUPT ) { - int ccode; /* condition code from tsch() operation */ - int irb_cc; /* condition code from irb */ - int sdevstat; /* effective struct devstat size to copy */ - unsigned int fctl; /* function control */ - unsigned int stctl; /* status control */ - unsigned int actl; /* activity control */ - struct irqaction *action; - struct pt_regs regs; /* for interface compatibility only */ - - int issense = 0; - int ending_status = 0; - int allow4handler = 1; - int chnchk = 0; -#if 0 - int cpu = smp_processor_id(); + // + // check whether we run recursively (sense processing) + // + if ( !ioinfo[irq]->ui.flags.syncio ) + { + spin_lock_irqsave( &sync_isc, psw_flags); - kstat.irqs[cpu][irq]++; -#endif - action = ioinfo[irq]->irq_desc.action; + ret = enable_cpu_sync_isc( irq); - /* - * It might be possible that a device was not-oper. at the time - * of free_irq() processing. This means the handler is no longer - * available when the device possibly becomes ready again. In - * this case we perform delayed disable_subchannel() processing. - */ - if ( action == NULL ) + if ( ret ) { - if ( !ioinfo[irq]->ui.flags.d_disable ) + spin_unlock_irqrestore( &sync_isc, + psw_flags); + return( ret); + } + else { - printk( KERN_CRIT"s390_process_IRQ(%04X) " - "- no interrupt handler registered" - "for device %04X !\n", - irq, - ioinfo[irq]->devstat.devno); + sync_isc_locked = 1; // local + ioinfo[irq]->ui.flags.syncio = 1; // global + + } /* endif */ } /* endif */ } /* endif */ /* - * retrieve the i/o interrupt information (irb), - * update the device specific status information - * and possibly call the interrupt handler. - * - * Note 1: At this time we don't process the resulting - * condition code (ccode) from tsch(), although - * we probably should. - * - * Note 2: Here we will have to check for channel - * check conditions and call a channel check - * handler. - * - * Note 3: If a start function was issued, the interruption - * parameter relates to it. If a halt function was - * issued for an idle device, the intparm must not - * be taken from lowcore, but from the devstat area. + * Issue "Halt subchannel" and process condition code */ - ccode = tsch( irq, &(ioinfo[irq]->devstat.ii.irb) ); + ccode = csch( irq ); - // - // We must only accumulate the status if initiated by do_IO() or halt_IO() - // - if ( ioinfo[irq]->ui.flags.busy ) + switch ( ccode ) { + case 0: + + ioinfo[irq]->ui.flags.haltio = 1; + + if ( !ioinfo[irq]->ui.flags.doio ) { - ioinfo[irq]->devstat.dstat |= ioinfo[irq]->devstat.ii.irb.scsw.dstat; - ioinfo[irq]->devstat.cstat |= ioinfo[irq]->devstat.ii.irb.scsw.cstat; + ioinfo[irq]->ui.flags.busy = 1; + ioinfo[irq]->u_intparm = user_intparm; + ioinfo[irq]->devstat.cstat = 0; + ioinfo[irq]->devstat.dstat = 0; + ioinfo[irq]->devstat.lpum = 0; + ioinfo[irq]->devstat.flag = DEVSTAT_CLEAR_FUNCTION; + ioinfo[irq]->devstat.scnt = 0; + } else { - ioinfo[irq]->devstat.dstat = ioinfo[irq]->devstat.ii.irb.scsw.dstat; - ioinfo[irq]->devstat.cstat = ioinfo[irq]->devstat.ii.irb.scsw.cstat; - - ioinfo[irq]->devstat.flag = 0; // reset status flags + ioinfo[irq]->devstat.flag |= DEVSTAT_CLEAR_FUNCTION; } /* endif */ - ioinfo[irq]->devstat.lpum = ioinfo[irq]->devstat.ii.irb.esw.esw1.lpum; - - if ( ioinfo[irq]->ui.flags.busy) + /* + * If synchronous I/O processing is requested, we have + * to wait for the corresponding interrupt to occur by + * polling the interrupt condition. However, as multiple + * interrupts may be outstanding, we must not just wait + * for the first interrupt, but must poll until ours + * pops up. + */ + if ( flag & DOIO_WAIT_FOR_INTERRUPT ) { - ioinfo[irq]->devstat.intparm = ioinfo[irq]->u_intparm; + int io_sub; + __u32 io_parm; + psw_t io_new_psw; + int ccode; - } /* endif */ + int ready = 0; + struct _lowcore *lc = NULL; /* - * reset device-busy bit if no longer set in irb + * We shouldn't perform a TPI loop, waiting for + * an interrupt to occur, but should load a + * WAIT PSW instead. Otherwise we may keep the + * channel subsystem busy, not able to present + * the interrupt. When our sync. interrupt + * arrived we reset the I/O old PSW to its + * original value. */ - if ( (ioinfo[irq]->devstat.dstat & DEV_STAT_BUSY ) - && ((ioinfo[irq]->devstat.ii.irb.scsw.dstat & DEV_STAT_BUSY) == 0)) - { - ioinfo[irq]->devstat.dstat &= ~DEV_STAT_BUSY; + memcpy( &io_new_psw, + &lc->io_new_psw, + sizeof(psw_t)); - } /* endif */ + ccode = iac(); + + switch (ccode) { + case 0: // primary-space + io_sync_wait.mask = _IO_PSW_MASK + | _PSW_PRIM_SPACE_MODE + | _PSW_IO_WAIT; + break; + case 1: // secondary-space + io_sync_wait.mask = _IO_PSW_MASK + | _PSW_SEC_SPACE_MODE + | _PSW_IO_WAIT; + break; + case 2: // access-register + io_sync_wait.mask = _IO_PSW_MASK + | _PSW_ACC_REG_MODE + | _PSW_IO_WAIT; + break; + case 3: // home-space + io_sync_wait.mask = _IO_PSW_MASK + | _PSW_HOME_SPACE_MODE + | _PSW_IO_WAIT; + break; + default: + panic( "halt_IO() : unexpected " + "address-space-control %d\n", + ccode); + break; + } /* endswitch */ + + io_sync_wait.addr = FIX_PSW(&&cio_wakeup); /* - * Save residual count and CCW information in case primary and - * secondary status are presented with different interrupts. + * Martin didn't like modifying the new PSW, now we take + * a fast exit in do_IRQ() instead */ - if ( ioinfo[irq]->devstat.ii.irb.scsw.stctl & SCSW_STCTL_PRIM_STATUS ) - { - ioinfo[irq]->devstat.rescnt = ioinfo[irq]->devstat.ii.irb.scsw.count; - -#if CONFIG_DEBUG_IO - if ( irq != cons_dev ) - printk( "s390_process_IRQ( %04X ) : " - "residual count from irb after tsch() %d\n", - irq, ioinfo[irq]->devstat.rescnt ); -#endif - } /* endif */ + *(__u32 *)__LC_SYNC_IO_WORD = 1; - if ( ioinfo[irq]->devstat.ii.irb.scsw.cpa != 0 ) + do { - ioinfo[irq]->devstat.cpa = ioinfo[irq]->devstat.ii.irb.scsw.cpa; - } /* endif */ + asm volatile ( "lpsw %0" : : "m" (io_sync_wait) ); +cio_wakeup: + io_parm = *(__u32 *)__LC_IO_INT_PARM; + io_sub = (__u32)*(__u16 *)__LC_SUBCHANNEL_NR; - irb_cc = ioinfo[irq]->devstat.ii.irb.scsw.cc; + ready = s390_process_IRQ( io_sub ); - // - // check for any kind of channel or interface control check but don't - // issue the message for the console device - // - if ( (ioinfo[irq]->devstat.ii.irb.scsw.cstat - & ( SCHN_STAT_CHN_DATA_CHK - | SCHN_STAT_CHN_CTRL_CHK - | SCHN_STAT_INTF_CTRL_CHK ) ) - && (irq != cons_dev ) ) - { - printk( "Channel-Check or Interface-Control-Check " - "received\n" - " ... device %04X on subchannel %04X, dev_stat " - ": %02X sch_stat : %02X\n", - ioinfo[irq]->devstat.devno, - irq, - ioinfo[irq]->devstat.dstat, - ioinfo[irq]->devstat.cstat); + } while ( !((io_sub == irq) && (ready == 1)) ); - chnchk = 1; + *(__u32 *)__LC_SYNC_IO_WORD = 0; } /* endif */ - issense = ioinfo[irq]->devstat.ii.irb.esw.esw0.erw.cons; - - if ( issense ) - { - ioinfo[irq]->devstat.scnt = - ioinfo[irq]->devstat.ii.irb.esw.esw0.erw.scnt; - ioinfo[irq]->devstat.flag |= - DEVSTAT_FLAG_SENSE_AVAIL; + ret = 0; + break; - sdevstat = sizeof( devstat_t); - -#if CONFIG_DEBUG_IO - if ( irq != cons_dev ) - printk( "s390_process_IRQ( %04X ) : " - "concurrent sense bytes avail %d\n", - irq, ioinfo[irq]->devstat.scnt ); -#endif - } - else - { - /* don't copy the sense data area ! */ - sdevstat = sizeof( devstat_t) - SENSE_MAX_COUNT; - - } /* endif */ + case 1 : /* status pending */ - switch ( irb_cc ) { - case 1: /* status pending */ + ioinfo[irq]->devstat.flag |= DEVSTAT_STATUS_PENDING; - ioinfo[irq]->devstat.flag |= DEVSTAT_STATUS_PENDING; + /* + * initialize the device driver specific devstat irb area + */ + memset( &((devstat_t *) ioinfo[irq]->irq_desc.action->dev_id)->ii.irb, + '\0', sizeof( irb_t) ); - case 0: /* normal i/o interruption */ + /* + * Let the common interrupt handler process the pending + * status. However, we must avoid calling the user + * action handler, as it won't be prepared to handle + * a pending status during do_IO() processing inline. + * This also implies that s390_process_IRQ must + * terminate synchronously - especially if device + * sensing is required. + */ + ioinfo[irq]->ui.flags.s_pend = 1; + ioinfo[irq]->ui.flags.busy = 1; + ioinfo[irq]->ui.flags.doio = 1; - fctl = ioinfo[irq]->devstat.ii.irb.scsw.fctl; - stctl = ioinfo[irq]->devstat.ii.irb.scsw.stctl; - actl = ioinfo[irq]->devstat.ii.irb.scsw.actl; + s390_process_IRQ( irq ); + + ioinfo[irq]->ui.flags.s_pend = 0; + ioinfo[irq]->ui.flags.busy = 0; + ioinfo[irq]->ui.flags.doio = 0; + ioinfo[irq]->ui.flags.repall = 0; + ioinfo[irq]->ui.flags.w4final = 0; - if ( chnchk && (ioinfo[irq]->senseid.cu_type == 0x3088)) + ioinfo[irq]->devstat.flag |= DEVSTAT_FINAL_STATUS; + + /* + * In multipath mode a condition code 3 implies the last + * path has gone, except we have previously restricted + * the I/O to a particular path. A condition code 1 + * (0 won't occur) results in return code EIO as well + * as 3 with another path than the one used (i.e. path available mask is non-zero). + */ + if ( ioinfo[irq]->devstat.ii.irb.scsw.cc == 3 ) + { + ret = -ENODEV; + ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; + ioinfo[irq]->ui.flags.oper = 0; + } + else + { + ret = -EIO; + ioinfo[irq]->devstat.flag &= ~DEVSTAT_NOT_OPER; + ioinfo[irq]->ui.flags.oper = 1; + + } /* endif */ + + break; + + case 2 : /* busy */ + + ret = -EBUSY; + break; + + default: /* device not operational */ + + ret = -ENODEV; + break; + + } /* endswitch */ + + if ( sync_isc_locked ) { - char buffer[80]; + disable_cpu_sync_isc( irq ); - sprintf( buffer, "s390_process_IRQ(%04X) - irb for " - "device %04X after channel check\n", - irq, - ioinfo[irq]->devstat.devno ); + sync_isc_locked = 0; // local setting + ioinfo[irq]->ui.flags.syncio = 0; // global setting + + spin_unlock_irqrestore( &sync_isc, psw_flags); - s390_displayhex( buffer, - &(ioinfo[irq]->devstat.ii.irb) , - sizeof(irb_t)); } /* endif */ - ioinfo[irq]->stctl |= stctl; + } /* endif */ + + return( ret ); +} - ending_status = ( stctl & SCSW_STCTL_SEC_STATUS ) - || ( stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND) ) - || ( (fctl == SCSW_FCTL_HALT_FUNC) && (stctl == SCSW_STCTL_STATUS_PEND) ); /* - * Check for unsolicited interrupts - for debug purposes only + * do_IRQ() handles all normal I/O device IRQ's (the special + * SMP cross-CPU interrupts have their own specific + * handlers). * - * We only consider an interrupt as unsolicited, if the device was not - * actively in use (busy) and an interrupt other than an ALERT status - * was received. + * Returns: 0 - no ending status received, no further action taken + * 1 - interrupt handler was called with ending status + */ +asmlinkage void do_IRQ( struct pt_regs regs, + unsigned int irq, + __u32 s390_intparm ) + { +#ifdef CONFIG_FAST_IRQ + int ccode; + tpi_info_t tpi_info; + int new_irq; +#endif + int use_irq = irq; + + // + // fix me !!! + // + // We need to schedule device recognition, the interrupt stays + // pending. We need to dynamically allocate an ioinfo structure. + // + if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { + return; /* this keeps the device boxed ... */ + } + + /* + * take fast exit if CPU is in sync. I/O state * - * Note: We must not issue a message to the console, if the - * unsolicited interrupt applies to the console device - * itself ! + * Note: we have to turn off the WAIT bit and re-disable + * interrupts prior to return as this was the initial + * entry condition to synchronous I/O. */ -#if CONFIG_DEBUG_IO - if ( ( irq != cons_dev ) - && !( stctl & SCSW_STCTL_ALERT_STATUS ) - && ( ioinfo[irq]->ui.flags.busy == 0 ) ) + if ( *(__u32 *)__LC_SYNC_IO_WORD ) { - char buffer[80]; + regs.psw.mask &= ~(_PSW_WAIT_MASK_BIT | _PSW_IO_MASK_BIT); - printk( "Unsolicited interrupt received for device %04X on subchannel %04X\n" - " ... device status : %02X subchannel status : %02X\n", - ioinfo[irq]->devstat.devno, - irq, - ioinfo[irq]->devstat.dstat, - ioinfo[irq]->devstat.cstat); + return; - sprintf( buffer, "s390_process_IRQ(%04X) - irb for " - "device %04X, ending_status %d\n", - irq, - ioinfo[irq]->devstat.devno, - ending_status); + } /* endif */ - s390_displayhex( buffer, - &(ioinfo[irq]->devstat.ii.irb) , - sizeof(irb_t)); + s390irq_spin_lock(use_irq); - } /* endif */ +#ifdef CONFIG_FAST_IRQ + do { +#endif /* CONFIG_FAST_IRQ */ + + s390_process_IRQ( use_irq ); + +#ifdef CONFIG_FAST_IRQ + + /* + * more interrupts pending ? + */ + ccode = tpi( &tpi_info ); + + if ( ! ccode ) + break; // no, leave ... + + new_irq = tpi_info.irq; + + /* + * if the interrupt is for a different irq we + * release the current irq lock and obtain + * a new one ... + */ + if ( new_irq != use_irq ) + { + s390irq_spin_unlock(use_irq); + use_irq = new_irq; + s390irq_spin_lock(use_irq); + + } /* endif */ + + } while ( 1 ); + +#endif /* CONFIG_FAST_IRQ */ + + s390irq_spin_unlock(use_irq); + + return; + } + + /* + * s390_process_IRQ() handles status pending situations and interrupts + * + * Called by : do_IRQ() - for "real" interrupts + * s390_start_IO, halt_IO() + * - status pending cond. after SSCH, or HSCH + * disable_subchannel() - status pending conditions (after MSCH) + * + * Returns: 0 - no ending status received, no further action taken + * 1 - interrupt handler was called with ending status + */ +int s390_process_IRQ( unsigned int irq ) +{ + int ccode; /* cond code from tsch() operation */ + int irb_cc; /* cond code from irb */ + int sdevstat; /* struct devstat size to copy */ + unsigned int fctl; /* function control */ + unsigned int stctl; /* status control */ + unsigned int actl; /* activity control */ + struct s390_irqaction *action; + struct pt_regs regs; /* for interface compatibility only */ + + int issense = 0; + int ending_status = 0; + int allow4handler = 1; + int chnchk = 0; +#if 0 + int cpu = smp_processor_id(); + + kstat.irqs[cpu][irq]++; #endif - /* - * Check whether we must issue a SENSE CCW ourselves if there is no - * concurrent sense facility installed for the subchannel. - * - * Note: We should check for ioinfo[irq]->ui.flags.consns but VM - * violates the ESA/390 architecture and doesn't present an - * operand exception for virtual devices without concurrent - * sense facility available/supported when enabling the - * concurrent sense facility. + + if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { + /* we can't properly process the interrupt ... */ + tsch( irq, &init_irb ); + return( 1 ); + } + else + { + action = ioinfo[irq]->irq_desc.action; + + } /* endif */ + +#ifdef CONFIG_DEBUG_IO + /* + * It might be possible that a device was not-oper. at the time + * of free_irq() processing. This means the handler is no longer + * available when the device possibly becomes ready again. In + * this case we perform delayed disable_subchannel() processing. */ - if ( ( ( ioinfo[irq]->devstat.ii.irb.scsw.dstat & DEV_STAT_UNIT_CHECK ) - && ( !issense ) ) - || ( ioinfo[irq]->ui.flags.delsense && ending_status ) ) + if ( action == NULL ) { - int ret_io; - ccw1_t *s_ccw = &ioinfo[irq]->senseccw; - unsigned long s_flag = 0; + if ( !ioinfo[irq]->ui.flags.d_disable ) + { + printk( KERN_CRIT"s390_process_IRQ(%04X) " + "- no interrupt handler registered " + "for device %04X !\n", + irq, + ioinfo[irq]->devstat.devno); + + } /* endif */ + } /* endif */ +#endif + + /* + * retrieve the i/o interrupt information (irb), + * update the device specific status information + * and possibly call the interrupt handler. + * + * Note 1: At this time we don't process the resulting + * condition code (ccode) from tsch(), although + * we probably should. + * + * Note 2: Here we will have to check for channel + * check conditions and call a channel check + * handler. + * + * Note 3: If a start function was issued, the interruption + * parameter relates to it. If a halt function was + * issued for an idle device, the intparm must not + * be taken from lowcore, but from the devstat area. + */ + ccode = tsch( irq, &(ioinfo[irq]->devstat.ii.irb) ); + + // + // We must only accumulate the status if initiated by do_IO() or halt_IO() + // + if ( ioinfo[irq]->ui.flags.busy ) + { + ioinfo[irq]->devstat.dstat |= ioinfo[irq]->devstat.ii.irb.scsw.dstat; + ioinfo[irq]->devstat.cstat |= ioinfo[irq]->devstat.ii.irb.scsw.cstat; + } + else + { + ioinfo[irq]->devstat.dstat = ioinfo[irq]->devstat.ii.irb.scsw.dstat; + ioinfo[irq]->devstat.cstat = ioinfo[irq]->devstat.ii.irb.scsw.cstat; + + ioinfo[irq]->devstat.flag = 0; // reset status flags + + } /* endif */ + + ioinfo[irq]->devstat.lpum = ioinfo[irq]->devstat.ii.irb.esw.esw1.lpum; + + if ( ioinfo[irq]->ui.flags.busy) + { + ioinfo[irq]->devstat.intparm = ioinfo[irq]->u_intparm; + + } /* endif */ + + /* + * reset device-busy bit if no longer set in irb + */ + if ( (ioinfo[irq]->devstat.dstat & DEV_STAT_BUSY ) + && ((ioinfo[irq]->devstat.ii.irb.scsw.dstat & DEV_STAT_BUSY) == 0)) + { + ioinfo[irq]->devstat.dstat &= ~DEV_STAT_BUSY; + + } /* endif */ + + /* + * Save residual count and CCW information in case primary and + * secondary status are presented with different interrupts. + */ + if ( ioinfo[irq]->devstat.ii.irb.scsw.stctl & SCSW_STCTL_PRIM_STATUS ) + { + ioinfo[irq]->devstat.rescnt = ioinfo[irq]->devstat.ii.irb.scsw.count; + +#ifdef CONFIG_DEBUG_IO + if ( irq != cons_dev ) + printk( "s390_process_IRQ( %04X ) : " + "residual count from irb after tsch() %d\n", + irq, ioinfo[irq]->devstat.rescnt ); +#endif + } /* endif */ + + if ( ioinfo[irq]->devstat.ii.irb.scsw.cpa != 0 ) + { + ioinfo[irq]->devstat.cpa = ioinfo[irq]->devstat.ii.irb.scsw.cpa; + + } /* endif */ + + irb_cc = ioinfo[irq]->devstat.ii.irb.scsw.cc; + + // + // check for any kind of channel or interface control check but don't + // issue the message for the console device + // + if ( (ioinfo[irq]->devstat.ii.irb.scsw.cstat + & ( SCHN_STAT_CHN_DATA_CHK + | SCHN_STAT_CHN_CTRL_CHK + | SCHN_STAT_INTF_CTRL_CHK ) ) + && (irq != cons_dev ) ) + { + printk( "Channel-Check or Interface-Control-Check " + "received\n" + " ... device %04X on subchannel %04X, dev_stat " + ": %02X sch_stat : %02X\n", + ioinfo[irq]->devstat.devno, + irq, + ioinfo[irq]->devstat.dstat, + ioinfo[irq]->devstat.cstat); + + chnchk = 1; + + } /* endif */ + + issense = ioinfo[irq]->devstat.ii.irb.esw.esw0.erw.cons; + + if ( issense ) + { + ioinfo[irq]->devstat.scnt = + ioinfo[irq]->devstat.ii.irb.esw.esw0.erw.scnt; + ioinfo[irq]->devstat.flag |= + DEVSTAT_FLAG_SENSE_AVAIL; + + sdevstat = sizeof( devstat_t); + +#ifdef CONFIG_DEBUG_IO + if ( irq != cons_dev ) + printk( "s390_process_IRQ( %04X ) : " + "concurrent sense bytes avail %d\n", + irq, ioinfo[irq]->devstat.scnt ); +#endif + } + else + { + /* don't copy the sense data area ! */ + sdevstat = sizeof( devstat_t) - SENSE_MAX_COUNT; + + } /* endif */ + + switch ( irb_cc ) { + case 1: /* status pending */ + + ioinfo[irq]->devstat.flag |= DEVSTAT_STATUS_PENDING; + + case 0: /* normal i/o interruption */ + + fctl = ioinfo[irq]->devstat.ii.irb.scsw.fctl; + stctl = ioinfo[irq]->devstat.ii.irb.scsw.stctl; + actl = ioinfo[irq]->devstat.ii.irb.scsw.actl; + + if ( chnchk && (ioinfo[irq]->senseid.cu_type == 0x3088)) + { + char buffer[80]; + + sprintf( buffer, "s390_process_IRQ(%04X) - irb for " + "device %04X after channel check\n", + irq, + ioinfo[irq]->devstat.devno ); + + s390_displayhex( buffer, + &(ioinfo[irq]->devstat.ii.irb) , + sizeof(irb_t)); + } /* endif */ + + ioinfo[irq]->stctl |= stctl; + + ending_status = ( stctl & SCSW_STCTL_SEC_STATUS ) + || ( stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND) ) + || ( (fctl == SCSW_FCTL_HALT_FUNC) && (stctl == SCSW_STCTL_STATUS_PEND) ) + || ( (fctl == SCSW_FCTL_CLEAR_FUNC) && (stctl == SCSW_STCTL_STATUS_PEND) ); + + /* + * Check for unsolicited interrupts - for debug purposes only + * + * We only consider an interrupt as unsolicited, if the device was not + * actively in use (busy) and an interrupt other than an ALERT status + * was received. + * + * Note: We must not issue a message to the console, if the + * unsolicited interrupt applies to the console device + * itself ! + */ +#ifdef CONFIG_DEBUG_IO + if ( ( irq != cons_dev ) + && !( stctl & SCSW_STCTL_ALERT_STATUS ) + && ( ioinfo[irq]->ui.flags.busy == 0 ) ) + { + char buffer[80]; + + printk( "Unsolicited interrupt received for device %04X on subchannel %04X\n" + " ... device status : %02X subchannel status : %02X\n", + ioinfo[irq]->devstat.devno, + irq, + ioinfo[irq]->devstat.dstat, + ioinfo[irq]->devstat.cstat); + + sprintf( buffer, "s390_process_IRQ(%04X) - irb for " + "device %04X, ending_status %d\n", + irq, + ioinfo[irq]->devstat.devno, + ending_status); + + s390_displayhex( buffer, + &(ioinfo[irq]->devstat.ii.irb) , + sizeof(irb_t)); + + } /* endif */ + +#endif + /* + * take fast exit if no handler is available + */ + if ( !action ) + return( ending_status ); + + /* + * Check whether we must issue a SENSE CCW ourselves if there is no + * concurrent sense facility installed for the subchannel. + * + * Note: We should check for ioinfo[irq]->ui.flags.consns but VM + * violates the ESA/390 architecture and doesn't present an + * operand exception for virtual devices without concurrent + * sense facility available/supported when enabling the + * concurrent sense facility. + */ + if ( ( ( ioinfo[irq]->devstat.ii.irb.scsw.dstat & DEV_STAT_UNIT_CHECK ) + && ( !issense ) ) + || ( ioinfo[irq]->ui.flags.delsense && ending_status ) ) + { + int ret_io; + ccw1_t *s_ccw = &ioinfo[irq]->senseccw; + unsigned long s_flag = 0; + + if ( ending_status ) + { + /* + * We copy the current status information into the device driver + * status area. Then we can use the local devstat area for device + * sensing. When finally calling the IRQ handler we must not overlay + * the original device status but copy the sense data only. + */ + memcpy( action->dev_id, + &(ioinfo[irq]->devstat), + sizeof( devstat_t) ); + + s_ccw->cmd_code = CCW_CMD_BASIC_SENSE; + s_ccw->cda = (char *)virt_to_phys( ioinfo[irq]->devstat.ii.sense.data); + s_ccw->count = SENSE_MAX_COUNT; + s_ccw->flags = CCW_FLAG_SLI; + + /* + * If free_irq() or a sync do_IO/s390_start_IO() is in + * process we have to sense synchronously + */ + if ( ioinfo[irq]->ui.flags.unready || ioinfo[irq]->ui.flags.syncio ) + { + s_flag = DOIO_WAIT_FOR_INTERRUPT; + + } /* endif */ + + /* + * Reset status info + * + * It does not matter whether this is a sync. or async. + * SENSE request, but we have to assure we don't call + * the irq handler now, but keep the irq in busy state. + * In sync. mode s390_process_IRQ() is called recursively, + * while in async. mode we re-enter do_IRQ() with the + * next interrupt. + * + * Note : this may be a delayed sense request ! + */ + allow4handler = 0; + + ioinfo[irq]->ui.flags.fast = 0; + ioinfo[irq]->ui.flags.repall = 0; + ioinfo[irq]->ui.flags.w4final = 0; + ioinfo[irq]->ui.flags.delsense = 0; + + ioinfo[irq]->devstat.cstat = 0; + ioinfo[irq]->devstat.dstat = 0; + ioinfo[irq]->devstat.rescnt = SENSE_MAX_COUNT; + + ioinfo[irq]->ui.flags.w4sense = 1; + + ret_io = s390_start_IO( irq, + s_ccw, + 0xE2C5D5E2, // = SENSe + 0, // n/a + s_flag); + } + else + { + /* + * we received an Unit Check but we have no final + * status yet, therefore we must delay the SENSE + * processing. However, we must not report this + * intermediate status to the device interrupt + * handler. + */ + ioinfo[irq]->ui.flags.fast = 0; + ioinfo[irq]->ui.flags.repall = 0; + + ioinfo[irq]->ui.flags.delsense = 1; + allow4handler = 0; + + } /* endif */ + + } /* endif */ + + /* + * we allow for the device action handler if . + * - we received ending status + * - the action handler requested to see all interrupts + * - we received a PCI + * - fast notification was requested (primary status) + * - unsollicited interrupts + * + */ + if ( allow4handler ) + { + allow4handler = ending_status + || ( ioinfo[irq]->ui.flags.repall ) + || ( ioinfo[irq]->devstat.ii.irb.scsw.cstat & SCHN_STAT_PCI ) + || ( (ioinfo[irq]->ui.flags.fast ) && (stctl & SCSW_STCTL_PRIM_STATUS) ) + || ( ioinfo[irq]->ui.flags.oper == 0 ); + + } /* endif */ + + /* + * We used to copy the device status information right before + * calling the device action handler. However, in status + * pending situations during do_IO() or halt_IO(), as well as + * enable_subchannel/disable_subchannel processing we must + * synchronously return the status information and must not + * call the device action handler. + * + */ + if ( allow4handler ) + { + /* + * if we were waiting for sense data we copy the sense + * bytes only as the original status information was + * saved prior to sense already. + */ + if ( ioinfo[irq]->ui.flags.w4sense ) + { + int sense_count = SENSE_MAX_COUNT-ioinfo[irq]->devstat.rescnt; + +#ifdef CONFIG_DEBUG_IO + if ( irq != cons_dev ) + printk( "s390_process_IRQ( %04X ) : " + "BASIC SENSE bytes avail %d\n", + irq, sense_count ); +#endif + ioinfo[irq]->ui.flags.w4sense = 0; + ((devstat_t *)(action->dev_id))->flag |= DEVSTAT_FLAG_SENSE_AVAIL; + ((devstat_t *)(action->dev_id))->scnt = sense_count; + + if ( sense_count >= 0 ) + { + memcpy( ((devstat_t *)(action->dev_id))->ii.sense.data, + &(ioinfo[irq]->devstat.ii.sense.data), + sense_count); + } + else + { +#if 1 + panic( "s390_process_IRQ(%04x) encountered " + "negative sense count\n", + irq); +#else + printk( KERN_CRIT"s390_process_IRQ(%04x) encountered " + "negative sense count\n", + irq); +#endif + } /* endif */ + } + else + { + memcpy( action->dev_id, &(ioinfo[irq]->devstat), sdevstat ); + + } /* endif */ + + } /* endif */ + + /* + * for status pending situations other than deferred interrupt + * conditions detected by s390_process_IRQ() itself we must not + * call the handler. This will synchronously be reported back + * to the caller instead, e.g. when detected during do_IO(). + */ + if ( ioinfo[irq]->ui.flags.s_pend + || ioinfo[irq]->ui.flags.unready + || ioinfo[irq]->ui.flags.repnone ) + { + if ( ending_status ) + { + + ioinfo[irq]->ui.flags.busy = 0; + ioinfo[irq]->ui.flags.doio = 0; + ioinfo[irq]->ui.flags.haltio = 0; + ioinfo[irq]->ui.flags.fast = 0; + ioinfo[irq]->ui.flags.repall = 0; + ioinfo[irq]->ui.flags.w4final = 0; + + ioinfo[irq]->devstat.flag |= DEVSTAT_FINAL_STATUS; + action->dev_id->flag |= DEVSTAT_FINAL_STATUS; + + } /* endif */ + + allow4handler = 0; + + } /* endif */ + + /* + * Call device action handler if applicable + */ + if ( allow4handler ) + { + + /* + * We only reset the busy condition when we are sure that no further + * interrupt is pending for the current I/O request (ending_status). + */ + if ( ending_status || !ioinfo[irq]->ui.flags.oper ) + { + ioinfo[irq]->ui.flags.oper = 1; /* dev IS oper */ + + ioinfo[irq]->ui.flags.busy = 0; + ioinfo[irq]->ui.flags.doio = 0; + ioinfo[irq]->ui.flags.haltio = 0; + ioinfo[irq]->ui.flags.fast = 0; + ioinfo[irq]->ui.flags.repall = 0; + ioinfo[irq]->ui.flags.w4final = 0; + + ioinfo[irq]->devstat.flag |= DEVSTAT_FINAL_STATUS; + ((devstat_t *)(action->dev_id))->flag |= DEVSTAT_FINAL_STATUS; + + if ( ioinfo[irq]->ui.flags.newreq ) + { + action->handler( irq, ioinfo[irq]->u_intparm ); + } + else + { + ((io_handler_func1_t)action->handler)( irq, action->dev_id, ®s ); + + } /* endif */ + + // + // reset intparm after final status or we will badly present unsolicited + // interrupts with a intparm value possibly no longer valid. + // + ioinfo[irq]->devstat.intparm = 0; + + // + // Was there anything queued ? Start the pending channel program + // if there is one. + // + if ( ioinfo[irq]->ui.flags.doio_q ) + { + int ret; + + ret = s390_start_IO( irq, + ioinfo[irq]->qcpa, + ioinfo[irq]->qintparm, + ioinfo[irq]->qlpm, + ioinfo[irq]->qflag); + + ioinfo[irq]->ui.flags.doio_q = 0; + + /* + * If s390_start_IO() failed call the device's interrupt + * handler, the IRQ related devstat area was setup by + * s390_start_IO() accordingly already (status pending + * condition). + */ + if ( ret ) + { + if ( ioinfo[irq]->ui.flags.newreq ) + { + action->handler( irq, ioinfo[irq]->u_intparm ); + } + else + { + ((io_handler_func1_t)action->handler)( irq, action->dev_id, ®s ); + + } /* endif */ + + } /* endif */ + + } /* endif */ + + } + else + { + ioinfo[irq]->ui.flags.w4final = 1; + + if ( ioinfo[irq]->ui.flags.newreq ) + { + action->handler( irq, ioinfo[irq]->u_intparm ); + } + else + { + ((io_handler_func1_t)action->handler)( irq, action->dev_id, ®s ); + + } /* endif */ + + } /* endif */ + + } /* endif */ + + break; + + case 3: /* device/path not operational */ + + ioinfo[irq]->ui.flags.busy = 0; + ioinfo[irq]->ui.flags.doio = 0; + ioinfo[irq]->ui.flags.haltio = 0; + + ioinfo[irq]->devstat.cstat = 0; + ioinfo[irq]->devstat.dstat = 0; + + if ( ioinfo[irq]->ulpm != ioinfo[irq]->opm ) + { + /* + * either it was the only path or it was restricted ... + */ + ioinfo[irq]->opm &= ~(ioinfo[irq]->devstat.ii.irb.esw.esw1.lpum); + } + else + { + ioinfo[irq]->opm = 0; + + } /* endif */ + + if ( ioinfo[irq]->opm == 0 ) + { + ioinfo[irq]->ui.flags.oper = 0; + + } /* endif */ + + ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; + ioinfo[irq]->devstat.flag |= DEVSTAT_FINAL_STATUS; + + /* + * When we find a device "not oper" we save the status + * information into the device status area and call the + * device specific interrupt handler. + * + * Note: currently we don't have any way to reenable + * the device unless an unsolicited interrupt + * is presented. We don't check for spurious + * interrupts on "not oper" conditions. + */ + + if ( ( ioinfo[irq]->ui.flags.fast ) + && ( ioinfo[irq]->ui.flags.w4final ) ) + { + /* + * If a new request was queued already, we have + * to simulate the "not oper" status for the + * queued request by switching the "intparm" value + * and notify the interrupt handler. + */ + if ( ioinfo[irq]->ui.flags.doio_q ) + { + ioinfo[irq]->devstat.intparm = ioinfo[irq]->qintparm; + + } /* endif */ + + } /* endif */ + + ioinfo[irq]->ui.flags.fast = 0; + ioinfo[irq]->ui.flags.repall = 0; + ioinfo[irq]->ui.flags.w4final = 0; + + /* + * take fast exit if no handler is available + */ + if ( !action ) + return( ending_status ); + + memcpy( action->dev_id, &(ioinfo[irq]->devstat), sdevstat ); + + ioinfo[irq]->devstat.intparm = 0; + + if ( !ioinfo[irq]->ui.flags.s_pend ) + { + if ( ioinfo[irq]->ui.flags.newreq ) + { + action->handler( irq, ioinfo[irq]->u_intparm ); + } + else + { + ((io_handler_func1_t)action->handler)( irq, action->dev_id, ®s ); + + } /* endif */ + + } /* endif */ + + ending_status = 1; + + break; + + } /* endswitch */ + + return( ending_status ); +} + +/* + * Set the special i/o-interruption sublass 7 for the + * device specified by parameter irq. There can only + * be a single device been operated on this special + * isc. This function is aimed being able to check + * on special device interrupts in disabled state, + * without having to delay I/O processing (by queueing) + * for non-console devices. + * + * Setting of this isc is done by set_cons_dev(), while + * reset_cons_dev() resets this isc and re-enables the + * default isc3 for this device. wait_cons_dev() allows + * to actively wait on an interrupt for this device in + * disabed state. When the interrupt condition is + * encountered, wait_cons_dev(9 calls do_IRQ() to have + * the console device driver processing the interrupt. + */ +int set_cons_dev( int irq ) +{ + int ccode; + unsigned long cr6 __attribute__ ((aligned (8))); + int rc = 0; + + if ( cons_dev != -1 ) + { + rc = -EBUSY; + } + else if ( (irq > highest_subchannel) || (irq < 0) ) + { + rc = -ENODEV; + } + else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { + return( -ENODEV); + } + else + { + /* + * modify the indicated console device to operate + * on special console interrupt sublass 7 + */ + ccode = stsch( irq, &(ioinfo[irq]->schib) ); + + if (ccode) + { + rc = -ENODEV; + ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; + } + else + { + ioinfo[irq]->schib.pmcw.isc = 7; + + ccode = msch( irq, &(ioinfo[irq]->schib) ); + + if (ccode) + { + rc = -EIO; + } + else + { + cons_dev = irq; + + /* + * enable console I/O-interrupt sublass 7 + */ + asm volatile ("STCTL 6,6,%0": "=m" (cr6)); + cr6 |= 0x01000000; + asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + + } /* endif */ + + } /* endif */ + + } /* endif */ + + return( rc); +} + +int reset_cons_dev( int irq) +{ + int rc = 0; + int ccode; + long cr6 __attribute__ ((aligned (8))); + + if ( cons_dev != -1 ) + { + rc = -EBUSY; + } + else if ( (irq > highest_subchannel) || (irq < 0) ) + { + rc = -ENODEV; + } + else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { + return( -ENODEV); + } + else + { + /* + * reset the indicated console device to operate + * on default console interrupt sublass 3 + */ + ccode = stsch( irq, &(ioinfo[irq]->schib) ); + + if (ccode) + { + rc = -ENODEV; + ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; + } + else + { + + ioinfo[irq]->schib.pmcw.isc = 3; + + ccode = msch( irq, &(ioinfo[irq]->schib) ); + + if (ccode) + { + rc = -EIO; + } + else + { + cons_dev = -1; + + /* + * disable special console I/O-interrupt sublass 7 + */ + asm volatile ("STCTL 6,6,%0": "=m" (cr6)); + cr6 &= 0xFEFFFFFF; + asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + + } /* endif */ + + } /* endif */ + + } /* endif */ + + return( rc); +} + +int wait_cons_dev( int irq ) +{ + int rc = 0; + long save_cr6; + + if ( irq == cons_dev ) + { + + /* + * before entering the spinlock we may already have + * processed the interrupt on a different CPU ... + */ + if ( ioinfo[irq]->ui.flags.busy == 1 ) + { + long cr6 __attribute__ ((aligned (8))); + + /* + * disable all, but isc 7 (console device) + */ + asm volatile ("STCTL 6,6,%0": "=m" (cr6)); + save_cr6 = cr6; + cr6 &= 0x01FFFFFF; + asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + + do { + tpi_info_t tpi_info; + if (tpi(&tpi_info) == 1) { + s390_process_IRQ( tpi_info.irq ); + } else { + s390irq_spin_unlock(irq); + tod_wait(100); + s390irq_spin_lock(irq); + } + eieio(); + } while (ioinfo[irq]->ui.flags.busy == 1); + + /* + * restore previous isc value + */ + asm volatile ("STCTL 6,6,%0": "=m" (cr6)); + cr6 = save_cr6; + asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + + } /* endif */ + + } + else + { + rc = EINVAL; + + } /* endif */ + + + return(rc); +} + + +int enable_cpu_sync_isc( int irq ) +{ + int ccode; + long cr6 __attribute__ ((aligned (8))); + + int count = 0; + int rc = 0; + + if ( irq <= highest_subchannel && ioinfo[irq] != INVALID_STORAGE_AREA ) + { + ccode = stsch( irq, &(ioinfo[irq]->schib) ); + + if ( !ccode ) + { + ioinfo[irq]->schib.pmcw.isc = 5; + + do + { + ccode = msch( irq, &(ioinfo[irq]->schib) ); + + if (ccode == 0 ) + { + /* + * enable interrupt subclass in CPU + */ + asm volatile ("STCTL 6,6,%0": "=m" (cr6)); + cr6 |= 0x04000000; // enable sync isc 5 + cr6 &= 0xEFFFFFFF; // disable standard isc 3 + asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + } + else if (ccode == 3) + { + rc = -ENODEV; // device not-oper - very unlikely + + } + else if (ccode == 2) + { + rc = -EBUSY; // device busy - should not happen + + } + else if (ccode == 1) + { + // + // process pending status + // + ioinfo[irq]->ui.flags.s_pend = 1; + + s390_process_IRQ( irq ); + + ioinfo[irq]->ui.flags.s_pend = 0; + + count++; + + } /* endif */ + + } while ( ccode == 1 && count < 3 ); + + if ( count == 3) + { + rc = -EIO; + + } /* endif */ + } + else + { + rc = -ENODEV; // device is not-operational + + } /* endif */ + } + else + { + rc = -EINVAL; + + } /* endif */ + + return( rc); +} + +int disable_cpu_sync_isc( int irq) +{ + int rc = 0; + int retry = 5; + int ccode; + long cr6 __attribute__ ((aligned (8))); + + if ( irq <= highest_subchannel && ioinfo[irq] != INVALID_STORAGE_AREA ) + { + ccode = stsch( irq, &(ioinfo[irq]->schib) ); + + ioinfo[irq]->schib.pmcw.isc = 3; + + do { + + ccode = msch( irq, &(ioinfo[irq]->schib) ); + + switch ( ccode ) { + case 0: + /* + * disable interrupt subclass in CPU + */ + asm volatile ("STCTL 6,6,%0": "=m" (cr6)); + cr6 &= 0xFBFFFFFF; // disable sync isc 5 + cr6 |= 0x10000000; // enable standard isc 3 + asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + break; + case 1: + ioinfo[irq]->ui.flags.s_pend = 1; + s390_process_IRQ( irq ); + ioinfo[irq]->ui.flags.s_pend = 0; + retry--; + rc = -EIO; + break; + case 2: + rc = -EBUSY; + break; + default: + rc = -ENODEV; + break; + } /* endswitch */ + + } while ( retry && (ccode ==1) ); + } + else + { + rc = -EINVAL; + + } /* endif */ + + return( rc); +} + +// +// Input : +// devno - device number +// ps - pointer to sense ID data area +// +// Output : none +// +void VM_virtual_device_info( unsigned int devno, + senseid_t *ps ) +{ + diag210_t diag_data; + int ccode; + + int error = 0; + + diag_data.vrdcdvno = devno; + diag_data.vrdclen = sizeof( diag210_t); + ccode = diag210( (diag210_t *)virt_to_phys( &diag_data ) ); + ps->reserved = 0xff; + + switch (diag_data.vrdcvcla) { + case 0x80: + + switch (diag_data.vrdcvtyp) { + case 00: + + ps->cu_type = 0x3215; + + break; + + default: + + error = 1; + + break; + + } /* endswitch */ + + break; + + case 0x40: + + switch (diag_data.vrdcvtyp) { + case 0xC0: + + ps->cu_type = 0x5080; + + break; + + case 0x80: + + ps->cu_type = 0x2250; + + break; + + case 0x04: + + ps->cu_type = 0x3277; + + break; + + case 0x01: + + ps->cu_type = 0x3278; + + break; + + default: + + error = 1; + + break; + + } /* endswitch */ + + break; + + case 0x20: + + switch (diag_data.vrdcvtyp) { + case 0x84: + + ps->cu_type = 0x3505; + + break; + + case 0x82: + + ps->cu_type = 0x2540; + + break; + + case 0x81: + + ps->cu_type = 0x2501; + + break; + + default: + + error = 1; + + break; + + } /* endswitch */ + + break; + + case 0x10: + + switch (diag_data.vrdcvtyp) { + case 0x84: + + ps->cu_type = 0x3525; + + break; + + case 0x82: + + ps->cu_type = 0x2540; + + break; + + case 0x4F: + case 0x4E: + case 0x48: + + ps->cu_type = 0x3820; + + break; + + case 0x4D: + case 0x49: + case 0x45: + + ps->cu_type = 0x3800; + + break; + + case 0x4B: + + ps->cu_type = 0x4248; + + break; + + case 0x4A: + + ps->cu_type = 0x4245; + + break; + + case 0x47: + + ps->cu_type = 0x3262; + + break; + + case 0x43: + + ps->cu_type = 0x3203; - if (ending_status) - { - /* - * We copy the current status information into the device driver - * status area. Then we can use the local devstat area for device - * sensing. When finally calling the IRQ handler we must not overlay - * the original device status but copy the sense data only. - */ - memcpy( ioinfo[irq]->irq_desc.action->dev_id, - &(ioinfo[irq]->devstat), - sizeof( devstat_t) ); + break; - s_ccw->cmd_code = CCW_CMD_BASIC_SENSE; - s_ccw->cda = (char *)virt_to_phys( ioinfo[irq]->devstat.ii.sense.data); - s_ccw->count = SENSE_MAX_COUNT; - s_ccw->flags = CCW_FLAG_SLI; + case 0x42: - /* - * If free_irq() or a sync do_IO/s390_start_IO() is in - * process we have to sense synchronously - */ - if ( ioinfo[irq]->ui.flags.unready || ioinfo[irq]->ui.flags.syncio ) - { - s_flag = DOIO_WAIT_FOR_INTERRUPT; + ps->cu_type = 0x3211; - } /* endif */ + break; - /* - * Reset status info - * - * It does not matter whether this is a sync. or async. - * SENSE request, but we have to assure we don't call - * the irq handler now, but keep the irq in busy state. - * In sync. mode s390_process_IRQ() is called recursively, - * while in async. mode we re-enter do_IRQ() with the - * next interrupt. - * - * Note : this may be a delayed sense request ! - */ - allow4handler = 0; + case 0x41: - ioinfo[irq]->ui.flags.fast = 0; - ioinfo[irq]->ui.flags.repall = 0; - ioinfo[irq]->ui.flags.w4final = 0; - ioinfo[irq]->ui.flags.delsense = 0; + ps->cu_type = 0x1403; - ioinfo[irq]->devstat.cstat = 0; - ioinfo[irq]->devstat.dstat = 0; - ioinfo[irq]->devstat.rescnt = SENSE_MAX_COUNT; + break; - ioinfo[irq]->ui.flags.w4sense = 1; - - ret_io = s390_start_IO( irq, - s_ccw, - 0xE2C5D5E2, // = SENSe - 0, // n/a - s_flag); - } - else - { - /* - * we received an Unit Check but we have no final - * status yet, therefore we must delay the SENSE - * processing. However, we must not report this - * intermediate status to the device interrupt - * handler. - */ - ioinfo[irq]->ui.flags.fast = 0; - ioinfo[irq]->ui.flags.repall = 0; + default: - ioinfo[irq]->ui.flags.delsense = 1; - allow4handler = 0; + error = 1; - } /* endif */ + break; - } /* endif */ + } /* endswitch */ - /* - * we allow for the device action handler if . - * - we received ending status - * - the action handler requested to see all interrupts - * - we received a PCI - * - fast notification was requested (primary status) - * - unsollicited interrupts - * - */ - if ( allow4handler ) - { - allow4handler = ending_status - || ( ioinfo[irq]->ui.flags.repall ) - || ( ioinfo[irq]->devstat.ii.irb.scsw.cstat & SCHN_STAT_PCI ) - || ( (ioinfo[irq]->ui.flags.fast ) && (stctl & SCSW_STCTL_PRIM_STATUS) ) - || ( ioinfo[irq]->ui.flags.oper == 0 ); + break; - } /* endif */ + case 0x08: - /* - * We used to copy the device status information right before - * calling the device action handler. However, in status - * pending situations during do_IO() or halt_IO(), as well as - * enable_subchannel/disable_subchannel processing we must - * synchronously return the status information and must not - * call the device action handler. - * - */ - if ( allow4handler ) - { - /* - * if we were waiting for sense data we copy the sense - * bytes only as the original status information was - * saved prior to sense already. - */ - if ( ioinfo[irq]->ui.flags.w4sense ) - { - int sense_count = SENSE_MAX_COUNT-ioinfo[irq]->devstat.rescnt; + switch (diag_data.vrdcvtyp) { + case 0x82: -#if CONFIG_DEBUG_IO - if ( irq != cons_dev ) - printk( "s390_process_IRQ( %04X ) : " - "BASIC SENSE bytes avail %d\n", - irq, sense_count ); -#endif - ioinfo[irq]->ui.flags.w4sense = 0; - ((devstat_t *)(action->dev_id))->flag |= DEVSTAT_FLAG_SENSE_AVAIL; - ((devstat_t *)(action->dev_id))->scnt = sense_count; + ps->cu_type = 0x3422; - if (sense_count >= 0) - { - memcpy( ((devstat_t *)(action->dev_id))->ii.sense.data, - &(ioinfo[irq]->devstat.ii.sense.data), - sense_count); - } - else - { -#if 1 - panic( "s390_process_IRQ(%04x) encountered " - "negative sense count\n", - irq); -#else - printk( KERN_CRIT"s390_process_IRQ(%04x) encountered " - "negative sense count\n", - irq); -#endif - } /* endif */ - } - else - { - memcpy( action->dev_id, &(ioinfo[irq]->devstat), sdevstat ); + break; - } /* endif */ + case 0x81: - } /* endif */ + ps->cu_type = 0x3490; - /* - * for status pending situations other than deferred interrupt - * conditions detected by s390_process_IRQ() itself we must not - * call the handler. This will synchronously be reported back - * to the caller instead, e.g. when detected during do_IO(). - */ - if ( ioinfo[irq]->ui.flags.s_pend ) - allow4handler = 0; + break; - /* - * Call device action handler if applicable - */ - if ( allow4handler ) - { + case 0x10: - /* - * We only reset the busy condition when we are sure that no further - * interrupt is pending for the current I/O request (ending_status). - */ - if ( ending_status || !ioinfo[irq]->ui.flags.oper ) - { - ioinfo[irq]->ui.flags.oper = 1; /* dev IS oper */ + ps->cu_type = 0x3420; - ioinfo[irq]->ui.flags.busy = 0; - ioinfo[irq]->ui.flags.doio = 0; - ioinfo[irq]->ui.flags.haltio = 0; - ioinfo[irq]->ui.flags.fast = 0; - ioinfo[irq]->ui.flags.repall = 0; - ioinfo[irq]->ui.flags.w4final = 0; + break; - ioinfo[irq]->devstat.flag |= DEVSTAT_FINAL_STATUS; - ((devstat_t *)(action->dev_id))->flag |= DEVSTAT_FINAL_STATUS; + case 0x02: - action->handler( irq, action->dev_id, ®s); + ps->cu_type = 0x3430; - // - // reset intparm after final status or we will badly present unsolicited - // interrupts with a intparm value possibly no longer valid. - // - ioinfo[irq]->devstat.intparm = 0; + break; - // - // Was there anything queued ? Start the pending channel program - // if there is one. - // - if ( ioinfo[irq]->ui.flags.doio_q ) - { - int ret; + case 0x01: - ret = s390_start_IO( irq, - ioinfo[irq]->qcpa, - ioinfo[irq]->qintparm, - ioinfo[irq]->qlpm, - ioinfo[irq]->qflag); + ps->cu_type = 0x3480; - ioinfo[irq]->ui.flags.doio_q = 0; + break; - /* - * If s390_start_IO() failed call the device's interrupt - * handler, the IRQ related devstat area was setup by - * s390_start_IO() accordingly already (status pending - * condition). - */ - if ( ret ) - { - action->handler( irq, action->dev_id, ®s); + case 0x42: - } /* endif */ + ps->cu_type = 0x3424; - } /* endif */ + break; - } - else - { - ioinfo[irq]->ui.flags.w4final = 1; - action->handler( irq, action->dev_id, ®s); + case 0x44: - } /* endif */ + ps->cu_type = 0x9348; - } /* endif */ + break; - break; + default: - case 3: /* device not operational */ + error = 1; - ioinfo[irq]->ui.flags.oper = 0; + break; - ioinfo[irq]->ui.flags.busy = 0; - ioinfo[irq]->ui.flags.doio = 0; - ioinfo[irq]->ui.flags.haltio = 0; + } /* endswitch */ - ioinfo[irq]->devstat.cstat = 0; - ioinfo[irq]->devstat.dstat = 0; - ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; - ioinfo[irq]->devstat.flag |= DEVSTAT_FINAL_STATUS; + break; - /* - * When we find a device "not oper" we save the status - * information into the device status area and call the - * device specific interrupt handler. - * - * Note: currently we don't have any way to reenable - * the device unless an unsolicited interrupt - * is presented. We don't check for spurious - * interrupts on "not oper" conditions. - */ + case 02: /* special device class ... */ - if ( ( ioinfo[irq]->ui.flags.fast ) - && ( ioinfo[irq]->ui.flags.w4final ) ) - { - /* - * If a new request was queued already, we have - * to simulate the "not oper" status for the - * queued request by switching the "intparm" value - * and notify the interrupt handler. - */ - if ( ioinfo[irq]->ui.flags.doio_q ) - { - ioinfo[irq]->devstat.intparm = ioinfo[irq]->qintparm; + switch (diag_data.vrdcvtyp) { + case 0x20: /* OSA */ - } /* endif */ + ps->cu_type = 0x3088; + ps->cu_model = 0x60; - } /* endif */ + break; - ioinfo[irq]->ui.flags.fast = 0; - ioinfo[irq]->ui.flags.repall = 0; - ioinfo[irq]->ui.flags.w4final = 0; + default: - memcpy( action->dev_id, &(ioinfo[irq]->devstat), sdevstat ); + error = 1; + break; - ioinfo[irq]->devstat.intparm = 0; + } /* endswitch */ - if ( !ioinfo[irq]->ui.flags.s_pend ) - action->handler( irq, action->dev_id, ®s); + break; - ending_status = 1; + default: + + error = 1; break; - } /* endswitch */ + } /* endswitch */ + + if ( error ) + {printk( "DIAG X'210' for device %04X returned (cc = %d): vdev class : %02X, " + "vdev type : %04X \n ... rdev class : %02X, rdev type : %04X, rdev model: %02X\n", + devno, + ccode, + diag_data.vrdcvcla, + diag_data.vrdcvtyp, + diag_data.vrdcrccl, + diag_data.vrdccrty, + diag_data.vrdccrmd ); + + } /* endif */ - return( ending_status ); } /* - * Set the special i/o-interruption sublass 7 for the - * device specified by parameter irq. There can only - * be a single device been operated on this special - * isc. This function is aimed being able to check - * on special device interrupts in disabled state, - * without having to delay I/O processing (by queueing) - * for non-console devices. + * This routine returns the characteristics for the device + * specified. Some old devices might not provide the necessary + * command code information during SenseID processing. In this + * case the function returns -EINVAL. Otherwise the function + * allocates a decice specific data buffer and provides the + * device characteristics together with the buffer size. Its + * the callers responability to release the kernel memory if + * not longer needed. In case of persistent I/O problems -EBUSY + * is returned. * - * Setting of this isc is done by set_cons_dev(), while - * reset_cons_dev() resets this isc and re-enables the - * default isc3 for this device. wait_cons_dev() allows - * to actively wait on an interrupt for this device in - * disabed state. When the interrupt condition is - * encountered, wait_cons_dev(9 calls do_IRQ() to have - * the console device driver processing the interrupt. + * The function may be called enabled or disabled. However, the + * caller must have locked the irq it is requesting data for. + * + * Note : It would have been nice to collect this information + * during init_IRQ() processing but this is not possible + * + * a) without statically pre-allocation fixed size buffers + * as virtual memory management isn't available yet. + * + * b) without unnecessarily increase system startup by + * evaluating devices eventually not used at all. */ -int set_cons_dev( int irq ) +int read_dev_chars( int irq, void **buffer, int length ) { - int ccode; - unsigned long cr6 __attribute__ ((aligned (8))); - int rc = 0; + unsigned int flags; + ccw1_t *rdc_ccw; + devstat_t devstat; + char *rdc_buf; + int devflag; + + int ret = 0; + int emulated = 0; + int retry = 5; - if ( cons_dev != -1 ) + if ( !buffer || !length ) { - rc = -EBUSY; - } - else if ( (irq > highest_subchannel) || (irq < 0) ) + return( -EINVAL ); + + } /* endif */ + + if ( (irq > highest_subchannel) || (irq < 0 ) ) { - rc = -ENODEV; + return( -ENODEV ); + } else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) { return( -ENODEV); } - else - { - /* - * modify the indicated console device to operate - * on special console interrupt sublass 7 - */ - ccode = stsch( irq, &(ioinfo[irq]->schib) ); - if (ccode) - { - rc = -ENODEV; - ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; - } - else + if ( ioinfo[irq]->ui.flags.oper == 0 ) { - ioinfo[irq]->schib.pmcw.isc = 7; - - ccode = msch( irq, &(ioinfo[irq]->schib) ); + return( -ENODEV ); - if (ccode) - { - rc = -EIO; - } - else - { - cons_dev = irq; + } /* endif */ /* - * enable console I/O-interrupt sublass 7 + * Before playing around with irq locks we should assure + * running disabled on (just) our CPU. Sync. I/O requests + * also require to run disabled. + * + * Note : as no global lock is required, we must not use + * cli(), but __cli() instead. */ - asm volatile ("STCTL 6,6,%0": "=m" (cr6)); - cr6 |= 0x01000000; - asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + __save_flags(flags); + __cli(); - } /* endif */ + rdc_ccw = &ioinfo[irq]->senseccw; - } /* endif */ + if ( !ioinfo[irq]->ui.flags.ready ) + { + ret = request_irq( irq, + init_IRQ_handler, + 0, "RDC", &devstat ); - } /* endif */ + if ( !ret ) + { + emulated = 1; - return( rc); -} + } /* endif */ -int reset_cons_dev( int irq) -{ - int rc = 0; - int ccode; - long cr6 __attribute__ ((aligned (8))); + } /* endif */ - if ( cons_dev != -1 ) - { - rc = -EBUSY; - } - else if ( (irq > highest_subchannel) || (irq < 0) ) + if ( !ret ) { - rc = -ENODEV; - } - else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + if ( ! *buffer ) { - return( -ENODEV); + rdc_buf = kmalloc( length, GFP_KERNEL); } else { - /* - * reset the indicated console device to operate - * on default console interrupt sublass 3 - */ - ccode = stsch( irq, &(ioinfo[irq]->schib) ); + rdc_buf = *buffer; - if (ccode) + } /* endif */ + + if ( !rdc_buf ) { - rc = -ENODEV; - ioinfo[irq]->devstat.flag |= DEVSTAT_NOT_OPER; + ret = -ENOMEM; } else { + do + { + rdc_ccw->cmd_code = CCW_CMD_RDC; + rdc_ccw->cda = (char *)virt_to_phys( rdc_buf ); + rdc_ccw->count = length; + rdc_ccw->flags = CCW_FLAG_SLI; + + memset( (devstat_t *)(ioinfo[irq]->irq_desc.action->dev_id), + '\0', + sizeof( devstat_t)); + + ret = s390_start_IO( irq, + rdc_ccw, + 0x00524443, // RDC + 0, // n/a + DOIO_WAIT_FOR_INTERRUPT + | DOIO_DONT_CALL_INTHDLR ); + retry--; + devflag = ((devstat_t *)(ioinfo[irq]->irq_desc.action->dev_id))->flag; - ioinfo[irq]->schib.pmcw.isc = 3; + } while ( ( retry ) + && ( ret || (devflag & DEVSTAT_STATUS_PENDING) ) ); - ccode = msch( irq, &(ioinfo[irq]->schib) ); + } /* endif */ - if (ccode) - { - rc = -EIO; - } - else + if ( !retry ) { - cons_dev = -1; + ret = -EBUSY; + + } /* endif */ + + __restore_flags(flags); /* - * disable special console I/O-interrupt sublass 7 + * on success we update the user input parms */ - asm volatile ("STCTL 6,6,%0": "=m" (cr6)); - cr6 &= 0xFEFFFFFF; - asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + if ( !ret ) + { + *buffer = rdc_buf; } /* endif */ + if ( emulated ) + { + free_irq( irq, &devstat); + } /* endif */ } /* endif */ - return( rc); + return( ret ); } -int wait_cons_dev( int irq ) -{ - int rc = 0; - long save_cr6; - - if ( irq == cons_dev ) - { - /* - * before entering the spinlock we may already have - * processed the interrupt on a different CPU ... + * Read Configuration data */ - if ( ioinfo[irq]->ui.flags.busy == 1 ) +int read_conf_data( int irq, void **buffer, int *length, __u8 lpm ) { - long cr6 __attribute__ ((aligned (8))); + unsigned long flags; + int ciw_cnt; - /* - * disable all, but isc 7 (console device) - */ - asm volatile ("STCTL 6,6,%0": "=m" (cr6)); - save_cr6 = cr6; - cr6 &= 0x01FFFFFF; - asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + int found = 0; // RCD CIW found + int ret = 0; // return code - do { - tpi_info_t tpi_info; - if (tpi(&tpi_info) == 1) { - s390_process_IRQ( tpi_info.irq ); - } else { - s390irq_spin_unlock(irq); - tod_wait(100); - s390irq_spin_lock(irq); + if ( (irq > highest_subchannel) || (irq < 0 ) ) + { + return( -ENODEV ); } - eieio(); - } while (ioinfo[irq]->ui.flags.busy == 1); + else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { + return( -ENODEV); + } + else if ( !buffer || !length ) + { + return( -EINVAL); + } + else if ( ioinfo[irq]->ui.flags.oper == 0 ) + { + return( -ENODEV ); + } + else if ( ioinfo[irq]->ui.flags.esid == 0 ) + { + return( -EOPNOTSUPP ); + + } /* endif */ /* - * restore previous isc value + * scan for RCD command in extended SenseID data */ - asm volatile ("STCTL 6,6,%0": "=m" (cr6)); - cr6 = save_cr6; - asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); - } /* endif */ - - } - else + for ( ciw_cnt = 0; (found == 0) && (ciw_cnt < 62); ciw_cnt++ ) { - rc = EINVAL; + if ( ioinfo[irq]->senseid.ciw[ciw_cnt].ct == CIW_TYPE_RCD ) + { + /* + * paranoia check ... + */ + if ( ioinfo[irq]->senseid.ciw[ciw_cnt].cmd != 0 ) + { + found = 1; } /* endif */ + break; + } /* endif */ - return(rc); -} - + } /* endfor */ -int enable_cpu_sync_isc( int irq ) + if ( found ) { - int ccode; - long cr6 __attribute__ ((aligned (8))); - - int count = 0; - int rc = 0; + devstat_t devstat; /* inline device status area */ + devstat_t *pdevstat; + int ioflags; + + ccw1_t *rcd_ccw = &ioinfo[irq]->senseccw; + char *rcd_buf = NULL; + int emulated = 0; /* no i/O handler installed */ + int retry = 5; /* retry count */ - if ( irq <= highest_subchannel && ioinfo[irq] != INVALID_STORAGE_AREA ) - { - ccode = stsch( irq, &(ioinfo[irq]->schib) ); + __save_flags(flags); + __cli(); - if ( !ccode ) + if ( !ioinfo[irq]->ui.flags.ready ) { - ioinfo[irq]->schib.pmcw.isc = 5; + pdevstat = &devstat; + ret = request_irq( irq, + init_IRQ_handler, + 0, "RCD", pdevstat ); - do + if ( !ret ) { - ccode = msch( irq, &(ioinfo[irq]->schib) ); + emulated = 1; - if (ccode == 0 ) - { - /* - * enable interrupt subclass in CPU - */ - asm volatile ("STCTL 6,6,%0": "=m" (cr6)); - cr6 |= 0x04000000; // enable sync isc 5 - cr6 &= 0xEFFFFFFF; // disable standard isc 3 - asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + } /* endif */ } - else if (ccode == 3) + else { - rc = -ENODEV; // device not-oper - very unlikely + pdevstat = ioinfo[irq]->irq_desc.action->dev_id; - } - else if (ccode == 2) - { - rc = -EBUSY; // device busy - should not happen + } /* endif */ + if ( !ret ) + { + if ( init_IRQ_complete ) + { + rcd_buf = kmalloc( ioinfo[irq]->senseid.ciw[ciw_cnt].count, + GFP_KERNEL); } - else if (ccode == 1) + else { - // - // process pending status - // - ioinfo[irq]->ui.flags.s_pend = 1; - - s390_process_IRQ( irq ); + rcd_buf = alloc_bootmem( ioinfo[irq]->senseid.ciw[ciw_cnt].count); - ioinfo[irq]->ui.flags.s_pend = 0; + } /* endif */ - count++; + if ( rcd_buf == NULL ) + { + ret = -ENOMEM; } /* endif */ - } while ( ccode == 1 && count < 3 ); + if ( !ret ) + { + memset( rcd_buf, + '\0', + ioinfo[irq]->senseid.ciw[ciw_cnt].count); - if ( count == 3) + do { - rc = -EIO; + rcd_ccw->cmd_code = ioinfo[irq]->senseid.ciw[ciw_cnt].cmd; + rcd_ccw->cda = (char *)virt_to_phys( rcd_buf ); + rcd_ccw->count = ioinfo[irq]->senseid.ciw[ciw_cnt].count; + rcd_ccw->flags = CCW_FLAG_SLI; - } /* endif */ + memset( pdevstat, '\0', sizeof( devstat_t)); + + if ( lpm ) + { + ioflags = DOIO_WAIT_FOR_INTERRUPT + | DOIO_VALID_LPM + | DOIO_DONT_CALL_INTHDLR; } else { - rc = -ENODEV; // device is not-operational + ioflags = DOIO_WAIT_FOR_INTERRUPT + | DOIO_DONT_CALL_INTHDLR; } /* endif */ + + ret = s390_start_IO( irq, + rcd_ccw, + 0x00524344, // == RCD + lpm, + ioflags ); + + switch ( ret ) { + case 0 : + case -EIO : + + if ( !(pdevstat->flag & ( DEVSTAT_STATUS_PENDING + | DEVSTAT_NOT_OPER + | DEVSTAT_FLAG_SENSE_AVAIL ) ) ) + { + retry = 0; // we got it ... } else { - rc = -EINVAL; + retry--; // try again ... } /* endif */ - return( rc); -} + break; -int disable_cpu_sync_isc( int irq) -{ - int rc = 0; - int ccode; - long cr6 __attribute__ ((aligned (8))); + default : // -EBUSY, -ENODEV, ??? + retry = 0; - if ( irq <= highest_subchannel && ioinfo[irq] != INVALID_STORAGE_AREA ) - { - ccode = stsch( irq, &(ioinfo[irq]->schib) ); + } /* endswitch */ - ioinfo[irq]->schib.pmcw.isc = 3; + } while ( retry ); - ccode = msch( irq, &(ioinfo[irq]->schib) ); + } /* endif */ - if (ccode) + __restore_flags( flags ); + + } /* endif */ + + /* + * on success we update the user input parms + */ + if ( ret == 0 ) + { + *length = ioinfo[irq]->senseid.ciw[ciw_cnt].count; + *buffer = rcd_buf; + } + else { - rc = -EIO; + if ( rcd_buf != NULL ) + { + if ( init_IRQ_complete ) + { + kfree( rcd_buf ); } else { + free_bootmem( (unsigned long)rcd_buf, + ioinfo[irq]->senseid.ciw[ciw_cnt].count); - /* - * enable interrupt subclass in CPU - */ - asm volatile ("STCTL 6,6,%0": "=m" (cr6)); - cr6 &= 0xFBFFFFFF; // disable sync isc 5 - cr6 |= 0x10000000; // enable standard isc 3 - asm volatile ("LCTL 6,6,%0":: "m" (cr6):"memory"); + } /* endif */ + + } /* endif */ + + *buffer = NULL; + *length = 0; } /* endif */ + if ( emulated ) + free_irq( irq, pdevstat); } else { - rc = -EINVAL; + ret = -EOPNOTSUPP; } /* endif */ - return( rc); + return( ret ); + } -// -// Input : -// devno - device number -// ps - pointer to sense ID data area -// -// Output : none -// -void VM_virtual_device_info( unsigned int devno, - senseid_t *ps ) +int get_dev_info( int irq, dev_info_t * pdi) { - diag210_t diag_data; - int ccode; - - int error = 0; - - diag_data.vrdcdvno = devno; - diag_data.vrdclen = sizeof( diag210_t); - ccode = diag210( (diag210_t *)virt_to_phys( &diag_data ) ); - ps->reserved = 0xff; - - switch (diag_data.vrdcvcla) { - case 0x80: + return( get_dev_info_by_irq( irq, pdi)); +} - switch (diag_data.vrdcvtyp) { - case 00: - ps->cu_type = 0x3215; +static int __inline__ get_next_available_irq( ioinfo_t *pi) +{ + int ret_val; + while ( TRUE ) + { + if ( pi->ui.flags.oper ) + { + ret_val = pi->irq; break; + } + else + { + pi = pi->next; - default: - - error = 1; - + // + // leave at end of list unconditionally + // + if ( pi == NULL ) + { + ret_val = -ENODEV; break; + } - } /* endswitch */ + } /* endif */ - break; + } /* endwhile */ - case 0x40: + return ret_val; +} - switch (diag_data.vrdcvtyp) { - case 0xC0: - ps->cu_type = 0x5080; +int get_irq_first( void ) +{ + int ret_irq; - break; + if ( ioinfo_head ) + { + if ( ioinfo_head->ui.flags.oper ) + { + ret_irq = ioinfo_head->irq; + } + else if ( ioinfo_head->next ) + { + ret_irq = get_next_available_irq( ioinfo_head->next ); - case 0x80: + } + else + { + ret_irq = -ENODEV; - ps->cu_type = 0x2250; + } /* endif */ + } + else + { + ret_irq = -ENODEV; - break; + } /* endif */ - case 0x04: + return ret_irq; +} - ps->cu_type = 0x3277; +int get_irq_next( int irq ) +{ + int ret_irq; - break; + if ( ioinfo[irq] != INVALID_STORAGE_AREA ) + { + if ( ioinfo[irq]->next ) + { + if ( ioinfo[irq]->next->ui.flags.oper ) + { + ret_irq = ioinfo[irq]->next->irq; + } + else + { + ret_irq = get_next_available_irq( ioinfo[irq]->next ); - case 0x01: + } /* endif */ + } + else + { + ret_irq = -ENODEV; - ps->cu_type = 0x3278; + } /* endif */ + } + else + { + ret_irq = -EINVAL; - break; + } /* endif */ - default: + return ret_irq; +} - error = 1; +int get_dev_info_by_irq( int irq, dev_info_t *pdi) +{ - break; + if ( irq > highest_subchannel || irq < 0 ) + { + return -ENODEV; + } + else if ( pdi == NULL ) + { + return -EINVAL; + } + else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { + return( -ENODEV); + } + else + { + pdi->devno = ioinfo[irq]->schib.pmcw.dev; + pdi->irq = irq; - } /* endswitch */ + if ( ioinfo[irq]->ui.flags.oper ) + { + pdi->status = 0; + memcpy( &(pdi->sid_data), + &ioinfo[irq]->senseid, + sizeof( senseid_t)); + } + else + { + pdi->status = DEVSTAT_NOT_OPER; + memcpy( &(pdi->sid_data), + '\0', + sizeof( senseid_t)); + pdi->sid_data.cu_type = 0xFFFF; - break; + } /* endif */ - case 0x20: + if ( ioinfo[irq]->ui.flags.ready ) + pdi->status |= DEVSTAT_DEVICE_OWNED; - switch (diag_data.vrdcvtyp) { - case 0x84: + return 0; - ps->cu_type = 0x3505; + } /* endif */ - break; +} - case 0x82: - ps->cu_type = 0x2540; +int get_dev_info_by_devno( unsigned int devno, dev_info_t *pdi) +{ + int i; + int rc = -ENODEV; - break; + if ( devno > 0x0000ffff ) + { + return -ENODEV; + } + else if ( pdi == NULL ) + { + return -EINVAL; + } + else + { - case 0x81: + for ( i=0; i <= highest_subchannel; i++ ) + { - ps->cu_type = 0x2501; + if ( ioinfo[i] != INVALID_STORAGE_AREA + && ioinfo[i]->schib.pmcw.dev == devno ) + { + if ( ioinfo[i]->ui.flags.oper ) + { + pdi->status = 0; + pdi->irq = i; + pdi->devno = devno; - break; + memcpy( &(pdi->sid_data), + &ioinfo[i]->senseid, + sizeof( senseid_t)); + } + else + { + pdi->status = DEVSTAT_NOT_OPER; + pdi->irq = i; + pdi->devno = devno; - default: + memcpy( &(pdi->sid_data), '\0', sizeof( senseid_t)); + pdi->sid_data.cu_type = 0xFFFF; - error = 1; + } /* endif */ + if ( ioinfo[i]->ui.flags.ready ) + pdi->status |= DEVSTAT_DEVICE_OWNED; + + rc = 0; /* found */ break; - } /* endswitch */ + } /* endif */ + + } /* endfor */ - break; + return( rc); - case 0x10: + } /* endif */ - switch (diag_data.vrdcvtyp) { - case 0x84: +} - ps->cu_type = 0x3525; +int get_irq_by_devno( unsigned int devno ) +{ + int i; + int rc = -1; - break; + if ( devno <= 0x0000ffff ) + { + for ( i=0; i <= highest_subchannel; i++ ) + { + if ( (ioinfo[i] != INVALID_STORAGE_AREA ) + && (ioinfo[i]->schib.pmcw.dev == devno) + && (ioinfo[i]->schib.pmcw.dnv == 1 ) ) + { + rc = i; + break; - case 0x82: + } /* endif */ - ps->cu_type = 0x2540; + } /* endfor */ - break; + } /* endif */ - case 0x4F: - case 0x4E: - case 0x48: + return( rc); +} - ps->cu_type = 0x3820; +unsigned int get_devno_by_irq( int irq ) +{ - break; + if ( ( irq > highest_subchannel ) + || ( irq < 0 ) + || ( ioinfo[irq] == INVALID_STORAGE_AREA ) ) + { + return -1; - case 0x4D: - case 0x49: - case 0x45: + } /* endif */ - ps->cu_type = 0x3800; + /* + * we don't need to check for the device be operational + * as the initial STSCH will always present the device + * number defined by the IOCDS regardless of the device + * existing or not. However, there could be subchannels + * defined who's device number isn't valid ... + */ + if ( ioinfo[irq]->schib.pmcw.dnv ) + return( ioinfo[irq]->schib.pmcw.dev ); + else + return -1; +} - break; +/* + * s390_device_recognition_irq + * + * Used for individual device recognition. Issues the device + * independant SenseID command to obtain info the device type. + * + */ +void s390_device_recognition_irq( int irq ) +{ + int ret; + unsigned long psw_flags; - case 0x4B: + /* + * We issue the SenseID command on I/O subchannels we think are + * operational only. + */ + if ( ( ioinfo[irq] != INVALID_STORAGE_AREA ) + && ( ioinfo[irq]->schib.pmcw.st == 0 ) + && ( ioinfo[irq]->ui.flags.oper == 1 ) ) + { + int irq_ret; + devstat_t devstat; + + irq_ret = request_irq( irq, + init_IRQ_handler, + 0, + "INIT", + &devstat); - ps->cu_type = 0x4248; + if ( !irq_ret ) + { + /* + * avoid sync processing (STSCH/MSCH) for every + * single I/O during boot (IPL) processing. + */ + spin_lock_irqsave( &sync_isc, psw_flags); - break; + ret = enable_cpu_sync_isc( irq); - case 0x4A: + if ( ret ) + { + spin_unlock_irqrestore( &sync_isc, psw_flags); + } + else + { + ioinfo[irq]->ui.flags.syncio = 1; // global - ps->cu_type = 0x4245; + memset( &ioinfo[irq]->senseid, '\0', sizeof( senseid_t)); - break; + s390_SenseID( irq, &ioinfo[irq]->senseid, 0xff ); +#if 0 /* FIXME */ + /* + * We initially check the configuration data for + * those devices with more than a single path + */ + if ( ioinfo[irq]->schib.pmcw.pim != 0x80 ) + { + char *prcd; + int lrcd; - case 0x47: + ret = read_conf_data( irq, (void **)&prcd, &lrcd, 0 ); - ps->cu_type = 0x3262; + if ( !ret ) // on success only ... + { +#ifdef CONFIG_DEBUG_IO + char buffer[80]; - break; + sprintf( buffer, + "RCD for device(%04X)/" + "subchannel(%04X) returns :\n", + ioinfo[irq]->schib.pmcw.dev, + irq ); + + s390_displayhex( buffer, prcd, lrcd ); +#endif + if ( init_IRQ_complete ) + { + kfree( prcd ); + } + else + { + free_bootmem( (unsigned long)prcd, lrcd ); - case 0x43: + } /* endif */ - ps->cu_type = 0x3203; + } /* endif */ - break; + } /* endif */ +#endif + s390_DevicePathVerification( irq, 0 ); - case 0x42: + disable_cpu_sync_isc( irq ); - ps->cu_type = 0x3211; + ioinfo[irq]->ui.flags.syncio = 0; // global - break; + spin_unlock_irqrestore( &sync_isc, psw_flags); - case 0x41: + } /* endif */ - ps->cu_type = 0x1403; + free_irq( irq, &devstat ); - break; + } /* endif */ - default: + } /* endif */ - error = 1; +} - break; +/* + * s390_device_recognition_all + * + * Used for system wide device recognition. + * + */ +void s390_device_recognition_all( void) +{ + int irq = 0; /* let's start with subchannel 0 ... */ - } /* endswitch */ + do + { + s390_device_recognition_irq( irq ); - break; + irq ++; - case 0x08: + } while ( irq <= highest_subchannel ); - switch (diag_data.vrdcvtyp) { - case 0x82: +} - ps->cu_type = 0x3422; - break; +/* + * s390_search_devices + * + * Determines all subchannels available to the system. + * + */ +void s390_process_subchannels( void) +{ + int ret; + int irq = 0; /* Evaluate all subchannels starting with 0 ... */ - case 0x81: + do + { + ret = s390_validate_subchannel( irq, 0); - ps->cu_type = 0x3490; + irq++; - break; + } while ( (ret != -ENXIO) && (irq < __MAX_SUBCHANNELS) ); - case 0x10: + highest_subchannel = --irq; - ps->cu_type = 0x3420; + printk( "\nHighest subchannel number detected: %u\n", + highest_subchannel); +} - break; +/* + * s390_validate_subchannel() + * + * Process the subchannel for the requested irq. Returns 1 for valid + * subchannels, otherwise 0. + */ +int s390_validate_subchannel( int irq, int enable ) +{ - case 0x02: + int retry; /* retry count for status pending conditions */ + int ccode; /* condition code for stsch() only */ + int ccode2; /* condition code for other I/O routines */ + schib_t *p_schib; + int ret; - ps->cu_type = 0x3430; + /* + * The first subchannel that is not-operational (ccode==3) + * indicates that there aren't any more devices available. + */ + if ( ( init_IRQ_complete ) + && ( ioinfo[irq] != INVALID_STORAGE_AREA ) ) + { + p_schib = &ioinfo[irq]->schib; + } + else + { + p_schib = &init_schib; - break; + } /* endif */ - case 0x01: + /* + * If we knew the device before we assume the worst case ... + */ + if ( ioinfo[irq] != INVALID_STORAGE_AREA ) + { + ioinfo[irq]->ui.flags.oper = 0; + ioinfo[irq]->ui.flags.dval = 0; - ps->cu_type = 0x3480; + } /* endif */ - break; + ccode = stsch( irq, p_schib); - case 0x42: + if ( !ccode ) + { + /* + * ... just being curious we check for non I/O subchannels + */ + if ( p_schib->pmcw.st ) + { + printk( "Subchannel %04X reports " + "non-I/O subchannel type %04X\n", + irq, + p_schib->pmcw.st); - ps->cu_type = 0x3424; + if ( ioinfo[irq] != INVALID_STORAGE_AREA ) + ioinfo[irq]->ui.flags.oper = 0; - break; + } /* endif */ - case 0x44: + if ( p_schib->pmcw.dnv ) + { + if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + { - ps->cu_type = 0x9348; + if ( !init_IRQ_complete ) + { + ioinfo[irq] = + (ioinfo_t *)alloc_bootmem( sizeof(ioinfo_t)); + } + else + { + ioinfo[irq] = + (ioinfo_t *)kmalloc( sizeof(ioinfo_t), + GFP_KERNEL ); - break; + } /* endif */ - default: + memset( ioinfo[irq], '\0', sizeof( ioinfo_t)); + memcpy( &ioinfo[irq]->schib, + &init_schib, + sizeof( schib_t)); + ioinfo[irq]->irq_desc.status = IRQ_DISABLED; + ioinfo[irq]->irq_desc.handler = &no_irq_type; - error = 1; + /* + * We have to insert the new ioinfo element + * into the linked list, either at its head, + * its tail or insert it. + */ + if ( ioinfo_head == NULL ) /* first element */ + { + ioinfo_head = ioinfo[irq]; + ioinfo_tail = ioinfo[irq]; + } + else if ( irq < ioinfo_head->irq ) /* new head */ + { + ioinfo[irq]->next = ioinfo_head; + ioinfo_head->prev = ioinfo[irq]; + ioinfo_head = ioinfo[irq]; + } + else if ( irq > ioinfo_tail->irq ) /* new tail */ + { + ioinfo_tail->next = ioinfo[irq]; + ioinfo[irq]->prev = ioinfo_tail; + ioinfo_tail = ioinfo[irq]; + } + else /* insert element */ + { + ioinfo_t *pi = ioinfo_head; + do + { + if ( irq < pi->next->irq ) + { + ioinfo[irq]->next = pi->next; + ioinfo[irq]->prev = pi; + pi->next->prev = ioinfo[irq]; + pi->next = ioinfo[irq]; break; - } /* endswitch */ - - break; + } /* endif */ - default: + pi = pi->next; - error = 1; + } while ( 1 ); - break; + } /* endif */ - } /* endswitch */ + } /* endif */ - if ( error ) - {printk( "DIAG X'210' for device %04X returned (cc = %d): vdev class : %02X, " - "vdev type : %04X \n ... rdev class : %02X, rdev type : %04X, rdev model: %02X\n", - devno, - ccode, - diag_data.vrdcvcla, - diag_data.vrdcvtyp, - diag_data.vrdcrccl, - diag_data.vrdccrty, - diag_data.vrdccrmd ); + // initialize some values ... + ioinfo[irq]->ui.flags.pgid_supp = 1; - } /* endif */ + ioinfo[irq]->opm = ioinfo[irq]->schib.pmcw.pim + & ioinfo[irq]->schib.pmcw.pam + & ioinfo[irq]->schib.pmcw.pom; -} + printk( "Detected device %04X on subchannel %04X" + " - PIM = %02X, PAM = %02X, POM = %02X\n", + ioinfo[irq]->schib.pmcw.dev, + irq, + ioinfo[irq]->schib.pmcw.pim, + ioinfo[irq]->schib.pmcw.pam, + ioinfo[irq]->schib.pmcw.pom); /* - * This routine returns the characteristics for the device - * specified. Some old devices might not provide the necessary - * command code information during SenseID processing. In this - * case the function returns -EINVAL. Otherwise the function - * allocates a decice specific data buffer and provides the - * device characteristics together with the buffer size. Its - * the callers responability to release the kernel memory if - * not longer needed. In case of persistent I/O problems -EBUSY - * is returned. - * - * The function may be called enabled or disabled. However, the - * caller must have locked the irq it is requesting data for. - * - * Note : It would have been nice to collect this information - * during init_IRQ() processing but this is not possible - * - * a) without statically pre-allocation fixed size buffers - * as virtual memory management isn't available yet. - * - * b) without unnecessarily increase system startup by - * evaluating devices eventually not used at all. + * initialize ioinfo structure + */ + ioinfo[irq]->irq = irq; + ioinfo[irq]->nopfunc = NULL; + ioinfo[irq]->ui.flags.busy = 0; + ioinfo[irq]->ui.flags.ready = 0; + ioinfo[irq]->ui.flags.dval = 1; + ioinfo[irq]->devstat.intparm = 0; + ioinfo[irq]->devstat.devno = ioinfo[irq]->schib.pmcw.dev; + ioinfo[irq]->devno = ioinfo[irq]->schib.pmcw.dev; + + /* + * We should have at least one CHPID ... */ -int read_dev_chars( int irq, void **buffer, int length ) + if ( ioinfo[irq]->opm ) { - unsigned int flags; - ccw1_t *rdc_ccw; - devstat_t devstat; - char *rdc_buf; - int devflag; - - int ret = 0; - int emulated = 0; - int retry = 5; - - if ( !buffer || !length ) + /* + * We now have to initially ... + * ... set "interruption sublass" + * ... enable "concurrent sense" + * ... enable "multipath mode" if more than one + * CHPID is available. This is done regardless + * whether multiple paths are available for us. + * + * Note : we don't enable the device here, this is temporarily + * done during device sensing below. + */ + ioinfo[irq]->schib.pmcw.isc = 3; /* could be smth. else */ + ioinfo[irq]->schib.pmcw.csense = 1; /* concurrent sense */ + ioinfo[irq]->schib.pmcw.ena = enable; + ioinfo[irq]->schib.pmcw.intparm = + ioinfo[irq]->schib.pmcw.dev; + + if ( ( ioinfo[irq]->opm != 0x80 ) + && ( ioinfo[irq]->opm != 0x40 ) + && ( ioinfo[irq]->opm != 0x20 ) + && ( ioinfo[irq]->opm != 0x10 ) + && ( ioinfo[irq]->opm != 0x08 ) + && ( ioinfo[irq]->opm != 0x04 ) + && ( ioinfo[irq]->opm != 0x02 ) + && ( ioinfo[irq]->opm != 0x01 ) ) { - return( -EINVAL ); + ioinfo[irq]->schib.pmcw.mp = 1; /* multipath mode */ } /* endif */ - if ( (irq > highest_subchannel) || (irq < 0 ) ) - { - return( -ENODEV ); + retry = 5; - } - else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + do { - return( -ENODEV); - } + ccode2 = msch_err( irq, &ioinfo[irq]->schib); - if ( ioinfo[irq]->ui.flags.oper == 0 ) - { - return( -ENODEV ); + switch (ccode2) { + case 0: // successful completion + // + // concurrent sense facility available ... + // + ioinfo[irq]->ui.flags.oper = 1; + ioinfo[irq]->ui.flags.consns = 1; + ret = 0; + break; - } /* endif */ + case 1: // status pending + // + // How can we have a pending status as + // device is disabled for interrupts ? + // Anyway, process it ... + // + ioinfo[irq]->ui.flags.s_pend = 1; + s390_process_IRQ( irq); + ioinfo[irq]->ui.flags.s_pend = 0; + retry--; + ret = -EIO; + break; + case 2: // busy /* - * Before playing around with irq locks we should assure - * running disabled on (just) our CPU. Sync. I/O requests - * also require to run disabled. - * - * Note : as no global lock is required, we must not use - * cli(), but __cli() instead. + * we mark it not-oper as we can't + * properly operate it ! */ - __save_flags(flags); - __cli(); + ioinfo[irq]->ui.flags.oper = 0; + tod_wait( 100); /* allow for recovery */ + retry--; + ret = -EBUSY; + break; - rdc_ccw = &ioinfo[irq]->senseccw; + case 3: // not operational + ioinfo[irq]->ui.flags.oper = 0; + retry = 0; + ret = -ENODEV; + break; - if ( !ioinfo[irq]->ui.flags.ready ) - { - ret = request_irq( irq, - init_IRQ_handler, - 0, "RDC", &devstat ); + default: +#define PGMCHK_OPERAND_EXC 0x15 - if ( !ret ) + if ( (ccode2 & PGMCHK_OPERAND_EXC) == PGMCHK_OPERAND_EXC ) { - emulated = 1; + /* + * re-issue the modify subchannel without trying to + * enable the concurrent sense facility + */ + ioinfo[irq]->schib.pmcw.csense = 0; - } /* endif */ - - } /* endif */ + ccode2 = msch_err( irq, &ioinfo[irq]->schib); - if ( !ret ) - { - if ( ! *buffer ) + if ( ccode2 != 0 ) { - rdc_buf = kmalloc( length, GFP_KERNEL); + printk( " ... msch() (2) failed with CC = %X\n", + ccode2 ); + ioinfo[irq]->ui.flags.oper = 0; + ret = -EIO; } else { - rdc_buf = *buffer; + ioinfo[irq]->ui.flags.oper = 1; + ioinfo[irq]->ui.flags.consns = 0; + ret = 0; } /* endif */ - - if ( !rdc_buf ) - { - ret = -ENOMEM; } else { - do - { - rdc_ccw->cmd_code = CCW_CMD_RDC; - rdc_ccw->cda = (char *)virt_to_phys( rdc_buf ); - rdc_ccw->count = length; - rdc_ccw->flags = CCW_FLAG_SLI; - - ret = s390_start_IO( irq, - rdc_ccw, - 0x00524443, // RDC - 0, // n/a - DOIO_WAIT_FOR_INTERRUPT ); - retry--; - devflag = ((devstat_t *)(ioinfo[irq]->irq_desc.action->dev_id))->flag; - - } while ( ( retry ) - && ( ret || (devflag & DEVSTAT_STATUS_PENDING) ) ); + printk( " ... msch() (1) failed with CC = %X\n", + ccode2); + ioinfo[irq]->ui.flags.oper = 0; + ret = -EIO; } /* endif */ - if ( !retry ) - { - ret = -EBUSY; + retry = 0; + break; - } /* endif */ + } /* endswitch */ - __restore_flags(flags); + } while ( ccode2 && retry ); - /* - * on success we update the user input parms - */ - if ( !ret ) + if ( (ccode2 != 0) && (ccode2 != 3) && (!retry) ) { - *buffer = rdc_buf; + printk( " ... msch() retry count for " + "subchannel %04X exceeded, CC = %d\n", + irq, + ccode2); } /* endif */ + } + else + { + /* no path available ... */ + ioinfo[irq]->ui.flags.oper = 0; + ret = -ENODEV; - if ( emulated ) + } /* endif */ + } + else { - free_irq( irq, &devstat); + ret = -ENODEV; } /* endif */ + } + else + { + + ret = -ENXIO; } /* endif */ @@ -2785,19 +4374,38 @@ } /* - * Read Configuration data + * s390_SenseID + * + * Try to obtain the 'control unit'/'device type' information + * associated with the subchannel. + * + * The function is primarily meant to be called without irq + * action handler in place. However, it also allows for + * use with an action handler in place. If there is already + * an action handler registered assure it can handle the + * s390_SenseID() related device interrupts - interruption + * parameter used is 0x00E2C9C4 ( SID ). */ -int read_conf_data( int irq, void **buffer, int *length ) +int s390_SenseID( int irq, senseid_t *sid, __u8 lpm ) { - int found = 0; - int ciw_cnt = 0; - unsigned int flags; + ccw1_t sense_ccw[2]; /* ccw area for SenseID command */ + senseid_t isid; /* internal sid */ + devstat_t devstat; /* required by request_irq() */ + __u8 pathmask; /* calulate path mask */ + __u8 domask; /* path mask to use */ + int inlreq; /* inline request_irq() */ + int irq_ret; /* return code */ + devstat_t *pdevstat; /* ptr to devstat in use */ + int retry; /* retry count */ + int io_retry; /* retry indicator */ - int ret = 0; + senseid_t *psid = sid;/* start with the external buffer */ + int sbuffer = 0; /* switch SID data buffer */ if ( (irq > highest_subchannel) || (irq < 0 ) ) { return( -ENODEV ); + } else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) { @@ -2811,686 +4419,720 @@ } /* endif */ - /* - * scan for RCD command in extended SenseID data - */ - for ( ; (found == 0) && (ciw_cnt < 62); ciw_cnt++ ) - { - if ( ioinfo[irq]->senseid.ciw[ciw_cnt].ct == CIW_TYPE_RCD ) - { - found = 1; - break; - } /* endif */ - - } /* endfor */ - - if ( found ) - { - ccw1_t *rcd_ccw = &ioinfo[irq]->senseccw; - devstat_t devstat; - char *rcd_buf; - int devflag; - - int emulated = 0; - int retry = 5; - - __save_flags(flags); - __cli(); - if ( !ioinfo[irq]->ui.flags.ready ) { - ret = request_irq( irq, - init_IRQ_handler, - 0, "RCD", &devstat ); - if ( !ret ) - { - emulated = 1; - - } /* endif */ - - } /* endif */ - - if ( !ret ) - { - rcd_buf = kmalloc( ioinfo[irq]->senseid.ciw[ciw_cnt].count, - GFP_KERNEL); - - do - { - rcd_ccw->cmd_code = ioinfo[irq]->senseid.ciw[ciw_cnt].cmd; - rcd_ccw->cda = (char *)virt_to_phys( rcd_buf ); - rcd_ccw->count = ioinfo[irq]->senseid.ciw[ciw_cnt].count; - rcd_ccw->flags = CCW_FLAG_SLI; - - ret = s390_start_IO( irq, - rcd_ccw, - 0x00524344, // == RCD - 0, // n/a - DOIO_WAIT_FOR_INTERRUPT ); - - retry--; - - devflag = ((devstat_t *)(ioinfo[irq]->irq_desc.action->dev_id))->flag; - - } while ( ( retry ) - && ( ret || (devflag & DEVSTAT_STATUS_PENDING) ) ); - - if ( !retry ) - ret = -EBUSY; - - __restore_flags(flags); - - } /* endif */ + pdevstat = &devstat; /* - * on success we update the user input parms + * Perform SENSE ID command processing. We have to request device + * ownership and provide a dummy I/O handler. We issue sync. I/O + * requests and evaluate the devstat area on return therefore + * we don't need a real I/O handler in place. */ - if ( !ret ) - { - *length = ioinfo[irq]->senseid.ciw[ciw_cnt].count; - *buffer = rcd_buf; - - } /* endif */ + irq_ret = request_irq( irq, init_IRQ_handler, 0, "SID", &devstat); - if ( emulated ) - free_irq( irq, &devstat); + if ( irq_ret == 0 ) + inlreq = 1; } else { - ret = -EINVAL; + inlreq = 0; + irq_ret = 0; + pdevstat = ioinfo[irq]->irq_desc.action->dev_id; } /* endif */ - return( ret ); - -} - -int get_dev_info( int irq, dev_info_t *pdi) + if ( irq_ret == 0 ) { - return( get_dev_info_by_irq( irq, pdi) ); -} + int i; + s390irq_spin_lock( irq); -static int __inline__ get_next_available_irq( ioinfo_t *pi) + // more than one path installed ? + if ( ioinfo[irq]->schib.pmcw.pim != 0x80 ) { - int ret_val; - - while ( TRUE ) - { - if ( pi->ui.flags.oper ) - { - ret_val = pi->irq; - break; + sense_ccw[0].cmd_code = CCW_CMD_SUSPEND_RECONN; + sense_ccw[0].cda = 0; + sense_ccw[0].count = 0; + sense_ccw[0].flags = CCW_FLAG_SLI | CCW_FLAG_CC; + + sense_ccw[1].cmd_code = CCW_CMD_SENSE_ID; + sense_ccw[1].cda = (char *)virt_to_phys( psid ); + sense_ccw[1].count = sizeof( senseid_t); + sense_ccw[1].flags = CCW_FLAG_SLI; } else { - pi = pi->next; - - // - // leave at end of list unconditionally - // - if ( pi == NULL ) - { - ret_val = -ENODEV; - break; - } + sense_ccw[0].cmd_code = CCW_CMD_SENSE_ID; + sense_ccw[0].cda = (char *)virt_to_phys( psid ); + sense_ccw[0].count = sizeof( senseid_t); + sense_ccw[0].flags = CCW_FLAG_SLI; } /* endif */ - } /* endwhile */ - - return ret_val; -} + for ( i = 0 ; (i < 8) ; i++ ) + { + pathmask = 0x80 >> i; + domask = ioinfo[irq]->opm & pathmask; -int get_irq_first( void ) -{ - int ret_irq; + if ( lpm ) + domask &= lpm; - if ( ioinfo_head ) - { - if ( ioinfo_head->ui.flags.oper ) - { - ret_irq = ioinfo_head->irq; - } - else if ( ioinfo_head->next ) + if ( domask ) { - ret_irq = get_next_available_irq( ioinfo_head->next ); + psid->cu_type = 0xFFFF; /* initialize fields ... */ + psid->cu_model = 0; + psid->dev_type = 0; + psid->dev_model = 0; - } - else - { - ret_irq = -ENODEV; + retry = 5; /* retry count */ + io_retry = 1; /* enable retries */ - } /* endif */ - } - else + /* + * We now issue a SenseID request. In case of BUSY, + * STATUS PENDING or non-CMD_REJECT error conditions + * we run simple retries. + */ + do { - ret_irq = -ENODEV; - - } /* endif */ + memset( pdevstat, '\0', sizeof( devstat_t) ); - return ret_irq; -} + irq_ret = s390_start_IO( irq, + sense_ccw, + 0x00E2C9C4, // == SID + domask, + DOIO_WAIT_FOR_INTERRUPT + | DOIO_TIMEOUT + | DOIO_VALID_LPM + | DOIO_DONT_CALL_INTHDLR ); -int get_irq_next( int irq ) -{ - int ret_irq; + // + // The OSA_E FE card possibly causes -ETIMEDOUT + // conditions, as the SenseID may stay start + // pending. This will cause start_IO() to finally + // halt the operation we should retry. If the halt + // fails this may cause -EBUSY we simply retry + // and eventually clean up with free_irq(). + // - if ( ioinfo[irq] != INVALID_STORAGE_AREA ) + if ( psid->cu_type == 0xFFFF ) { - if ( ioinfo[irq]->next ) + if ( pdevstat->flag & DEVSTAT_STATUS_PENDING ) { - if ( ioinfo[irq]->next->ui.flags.oper ) +#ifdef CONFIG_DEBUG_IO + printk( "SenseID : device %04X on " + "Subchannel %04X " + "reports pending status, " + "retry : %d\n", + ioinfo[irq]->schib.pmcw.dev, + irq, + retry); +#endif + } /* endif */ + + if ( pdevstat->flag & DEVSTAT_FLAG_SENSE_AVAIL ) { - ret_irq = ioinfo[irq]->next->irq; - } - else + /* + * if the device doesn't support the SenseID + * command further retries wouldn't help ... + */ + if ( pdevstat->ii.sense.data[0] + & (SNS0_CMD_REJECT | SNS0_INTERVENTION_REQ) ) { - ret_irq = get_next_available_irq( ioinfo[irq]->next ); - - } /* endif */ +#ifdef CONFIG_DEBUG_IO + printk( "SenseID : device %04X on " + "Subchannel %04X " + "reports cmd reject or " + "intervention required\n", + ioinfo[irq]->schib.pmcw.dev, + irq); +#endif + io_retry = 0; } +#ifdef CONFIG_DEBUG_IO else { - ret_irq = -ENODEV; + printk( "SenseID : UC on " + "dev %04X, " + "retry %d, " + "lpum %02X, " + "cnt %02d, " + "sns :" + " %02X%02X%02X%02X " + "%02X%02X%02X%02X ...\n", + ioinfo[irq]->schib.pmcw.dev, + retry, + pdevstat->lpum, + pdevstat->scnt, + pdevstat->ii.sense.data[0], + pdevstat->ii.sense.data[1], + pdevstat->ii.sense.data[2], + pdevstat->ii.sense.data[3], + pdevstat->ii.sense.data[4], + pdevstat->ii.sense.data[5], + pdevstat->ii.sense.data[6], + pdevstat->ii.sense.data[7]); } /* endif */ +#endif } - else + else if ( ( pdevstat->flag & DEVSTAT_NOT_OPER ) + || ( irq_ret != -ENODEV ) ) { - ret_irq = -EINVAL; +#ifdef CONFIG_DEBUG_IO + printk( "SenseID : path %02X for " + "device %04X on " + "subchannel %04X " + "is 'not operational'\n", + domask, + ioinfo[irq]->schib.pmcw.dev, + irq); +#endif - } /* endif */ + io_retry = 0; + ioinfo[irq]->opm &= ~domask; - return ret_irq; } - -int get_dev_info_by_irq( int irq, dev_info_t *pdi) -{ - - if ( irq > highest_subchannel || irq < 0 ) - { - return -ENODEV; - } - else if ( pdi == NULL ) - { - return -EINVAL; +#ifdef CONFIG_DEBUG_IO + else if ( (pdevstat->flag != + ( DEVSTAT_START_FUNCTION + | DEVSTAT_FINAL_STATUS ) ) + && !(pdevstat->flag & + DEVSTAT_STATUS_PENDING ) ) + { + printk( "SenseID : start_IO() for " + "device %04X on " + "subchannel %04X " + "returns %d, retry %d, " + "status %04X\n", + ioinfo[irq]->schib.pmcw.dev, + irq, + irq_ret, + retry, + pdevstat->flag); + + } /* endif */ +#endif } - else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) + else // we got it ... { - return( -ENODEV); - } - else + if ( !sbuffer ) // switch buffers { - pdi->devno = ioinfo[irq]->schib.pmcw.dev; - pdi->irq = irq; + /* + * we report back the + * first hit only + */ + psid = &isid; - if ( ioinfo[irq]->ui.flags.oper ) + if ( ioinfo[irq]->schib.pmcw.pim != 0x80 ) { - pdi->status = 0; - memcpy( &(pdi->sid_data), - &ioinfo[irq]->senseid, - sizeof( senseid_t)); + sense_ccw[1].cda = (char *)virt_to_phys( psid ); } else { - pdi->status = DEVSTAT_NOT_OPER; - memcpy( &(pdi->sid_data), - '\0', - sizeof( senseid_t)); - pdi->sid_data.cu_type = 0xFFFF; + sense_ccw[0].cda = (char *)virt_to_phys( psid ); } /* endif */ - if ( ioinfo[irq]->ui.flags.ready ) - pdi->status |= DEVSTAT_DEVICE_OWNED; + /* + * if just the very first + * was requested to be + * sensed disable further + * scans. + */ + if ( !lpm ) + lpm = domask; - return 0; + sbuffer = 1; } /* endif */ -} - - -int get_dev_info_by_devno( unsigned int devno, dev_info_t *pdi) + if ( pdevstat->rescnt < (sizeof( senseid_t) - 8) ) { - int i; - int rc = -ENODEV; + ioinfo[irq]->ui.flags.esid = 1; - if ( devno > 0x0000ffff ) - { - return -ENODEV; - } - else if ( pdi == NULL ) - { - return -EINVAL; - } - else - { + } /* endif */ - for ( i=0; i <= highest_subchannel; i++ ) - { + io_retry = 0; - if ( ioinfo[i] != INVALID_STORAGE_AREA - && ioinfo[i]->schib.pmcw.dev == devno ) - { - if ( ioinfo[i]->ui.flags.oper ) - { - pdi->status = 0; - pdi->irq = i; - pdi->devno = devno; + } /* endif */ - memcpy( &(pdi->sid_data), - &ioinfo[i]->senseid, - sizeof( senseid_t)); - } - else + if ( io_retry ) { - pdi->status = DEVSTAT_NOT_OPER; - pdi->irq = i; - pdi->devno = devno; + retry--; - memcpy( &(pdi->sid_data), '\0', sizeof( senseid_t)); - pdi->sid_data.cu_type = 0xFFFF; + if ( retry == 0 ) + { + io_retry = 0; } /* endif */ - if ( ioinfo[i]->ui.flags.ready ) - pdi->status |= DEVSTAT_DEVICE_OWNED; + } /* endif */ - rc = 0; /* found */ - break; + } while ( (io_retry) ); - } /* endif */ + } /* endif - domask */ } /* endfor */ - return( rc); + s390irq_spin_unlock( irq); - } /* endif */ + /* + * If we installed the irq action handler we have to + * release it too. + */ + if ( inlreq ) + free_irq( irq, pdevstat); -} + /* + * if running under VM check there ... perhaps we should do + * only if we suffered a command reject, but it doesn't harm + */ + if ( ( sid->cu_type == 0xFFFF ) + && ( MACHINE_IS_VM ) ) + { + VM_virtual_device_info( ioinfo[irq]->schib.pmcw.dev, + sid ); + } /* endif */ -int get_irq_by_devno( unsigned int devno ) + if ( sid->cu_type == 0xFFFF ) { - int i; - int rc = -1; + /* + * SenseID CU-type of 0xffff indicates that no device + * information could be retrieved (pre-init value). + * + * If we can't couldn't identify the device type we + * consider the device "not operational". + */ +#ifdef CONFIG_DEBUG_IO + printk( "SenseID : unknown device %04X on subchannel %04X\n", + ioinfo[irq]->schib.pmcw.dev, + irq); +#endif + ioinfo[irq]->ui.flags.oper = 0; - if ( devno <= 0x0000ffff ) + } /* endif */ + + /* + * Issue device info message if unit was operational . + */ + if ( ioinfo[irq]->ui.flags.oper ) { - for ( i=0; i <= highest_subchannel; i++ ) + if ( sid->dev_type != 0 ) { - if ( (ioinfo[i] != INVALID_STORAGE_AREA ) - && (ioinfo[i]->schib.pmcw.dev == devno) - && (ioinfo[i]->schib.pmcw.dnv == 1 ) ) + printk( "SenseID : device %04X reports: CU Type/Mod = %04X/%02X," + " Dev Type/Mod = %04X/%02X\n", + ioinfo[irq]->schib.pmcw.dev, + sid->cu_type, + sid->cu_model, + sid->dev_type, + sid->dev_model); + } + else { - rc = i; - break; + printk( "SenseID : device %04X reports:" + " Dev Type/Mod = %04X/%02X\n", + ioinfo[irq]->schib.pmcw.dev, + sid->cu_type, + sid->cu_model); } /* endif */ - } /* endfor */ - } /* endif */ - return( rc); -} - -unsigned int get_devno_by_irq( int irq ) -{ - - if ( ( irq > highest_subchannel ) - || ( irq < 0 ) - || ( ioinfo[irq] == INVALID_STORAGE_AREA ) ) - { - return -1; + if ( ioinfo[irq]->ui.flags.oper ) + irq_ret = 0; + else + irq_ret = -ENODEV; } /* endif */ - /* - * we don't need to check for the device be operational - * as the initial STSCH will always present the device - * number defined by the IOCDS regardless of the device - * existing or not. However, there could be subchannels - * defined who's device number isn't valid ... - */ - if ( ioinfo[irq]->schib.pmcw.dnv ) - return( ioinfo[irq]->schib.pmcw.dev ); - else - return -1; + return( irq_ret ); } -/* - * s390_device_recognition - * - * Used for system wide device recognition. Issues the device - * independant SenseID command to obtain info the device type. - * - */ -void s390_device_recognition( void) +static int __inline__ s390_SetMultiPath( int irq ) { + int cc; - int irq = 0; /* let's start with subchannel 0 ... */ + cc = stsch( irq, &ioinfo[irq]->schib ); - do - { - /* - * We issue the SenseID command on I/O subchannels we think are - * operational only. - */ - if ( ( ioinfo[irq] != INVALID_STORAGE_AREA ) - && ( ioinfo[irq]->schib.pmcw.st == 0 ) - && ( ioinfo[irq]->ui.flags.oper == 1 ) ) + if ( !cc ) { - s390_SenseID( irq, &ioinfo[irq]->senseid ); + ioinfo[irq]->schib.pmcw.mp = 1; /* multipath mode */ - } /* endif */ - - irq ++; + cc = msch( irq, &ioinfo[irq]->schib ); - } while ( irq <= highest_subchannel ); + } /* endif */ + return( cc); } - /* - * s390_search_devices + * Device Path Verification * - * Determines all subchannels available to the system. + * Path verification is accomplished by checking which paths (CHPIDs) are + * available. Further, a path group ID is set, if possible in multipath + * mode, otherwise in single path mode. * */ -void s390_process_subchannels( void) +int s390_DevicePathVerification( int irq, __u8 usermask ) { - int isValid; - int irq = 0; /* Evaluate all subchannels starting with 0 ... */ +#if 1 + int ccode; + __u8 pathmask; + __u8 domask; - do - { - isValid = s390_validate_subchannel( irq); + int ret = 0; - irq++; + if ( ioinfo[irq]->ui.flags.pgid_supp == 0 ) + { + return( 0); // just exit ... - } while ( isValid && irq < __MAX_SUBCHANNELS ); + } /* endif */ - highest_subchannel = --irq; + ccode = stsch( irq, &(ioinfo[irq]->schib) ); - printk( "\nHighest subchannel number detected: %u\n", - highest_subchannel); + if ( ccode ) + { + ret = -ENODEV; } - + else if ( ioinfo[irq]->schib.pmcw.pim == 0x80 ) + { /* - * s390_validate_subchannel() - * - * Process the subchannel for the requested irq. Returns 1 for valid - * subchannels, otherwise 0. + * no error, just not required for single path only devices */ -int s390_validate_subchannel( int irq ) + ioinfo[irq]->ui.flags.pgid_supp = 0; + ret = 0; + } + else { + int i; + pgid_t pgid; + __u8 dev_path; + int first = 1; + + ioinfo[irq]->opm = ioinfo[irq]->schib.pmcw.pim + & ioinfo[irq]->schib.pmcw.pam + & ioinfo[irq]->schib.pmcw.pom; - int retry; /* retry count for status pending conditions */ - int ccode; /* condition code for stsch() only */ - int ccode2; /* condition code for other I/O routines */ - schib_t *p_schib; - - /* - * The first subchannel that is not-operational (ccode==3) - * indicates that there aren't any more devices available. - */ - if ( ( init_IRQ_complete ) - && ( ioinfo[irq] != INVALID_STORAGE_AREA ) ) + if ( usermask ) { - p_schib = &ioinfo[irq]->schib; + dev_path = usermask; } else { - p_schib = &init_schib; + dev_path = ioinfo[irq]->opm; } /* endif */ - ccode = stsch( irq, p_schib); - - if ( ccode == 0) - { /* - * ... just being curious we check for non I/O subchannels + * let's build a path group ID if we don't have one yet */ - if ( p_schib->pmcw.st ) + if ( ioinfo[irq]->ui.flags.pgid == 0) { - printk( "Subchannel %04X reports " - "non-I/O subchannel type %04X\n", - irq, - p_schib->pmcw.st); + ioinfo[irq]->pgid.cpu_addr = *(__u16 *)__LC_CPUADDR; + ioinfo[irq]->pgid.cpu_id = ((cpuid_t *)__LC_CPUID)->ident; + ioinfo[irq]->pgid.cpu_model = ((cpuid_t *)__LC_CPUID)->machine; + ioinfo[irq]->pgid.tod_high = *(__u32 *)&irq_IPL_TOD; - if ( ioinfo[irq] != INVALID_STORAGE_AREA ) - ioinfo[irq]->ui.flags.oper = 0; + ioinfo[irq]->ui.flags.pgid = 1; } /* endif */ - if ( p_schib->pmcw.dnv ) - { - if ( ioinfo[irq] == INVALID_STORAGE_AREA ) - { + memcpy( &pgid, &ioinfo[irq]->pgid, sizeof(pgid_t)); - if ( !init_IRQ_complete ) + for ( i = 0; i < 8 && !ret ; i++) { - ioinfo[irq] = - (ioinfo_t *)alloc_bootmem( sizeof(ioinfo_t)); - } - else + pathmask = 0x80 >> i; + + domask = dev_path & pathmask; + + if ( domask ) { - ioinfo[irq] = - (ioinfo_t *)kmalloc( sizeof(ioinfo_t), - GFP_KERNEL ); + ret = s390_SetPGID( irq, domask, &pgid ); - } /* endif */ + /* + * For the *first* path we are prepared + * for recovery + * + * - If we fail setting the PGID we assume its + * using a different PGID already (VM) we + * try to sense. + */ + if ( ret == -EOPNOTSUPP && first ) + { + *(int *)&pgid = 0; - memset( ioinfo[irq], '\0', sizeof( ioinfo_t)); - memcpy( &ioinfo[irq]->schib, - &init_schib, - sizeof( schib_t)); - ioinfo[irq]->irq_desc.status = IRQ_DISABLED; - ioinfo[irq]->irq_desc.handler = &no_irq_type; + ret = s390_SensePGID( irq, domask, &pgid); + first = 0; + if ( ret == 0 ) + { /* - * We have to insert the new ioinfo element - * into the linked list, either at its head, - * its tail or insert it. + * Check whether we retrieved + * a reasonable PGID ... */ - if ( ioinfo_head == NULL ) /* first element */ + if ( pgid.inf.ps.state1 == SNID_STATE1_GROUPED ) { - ioinfo_head = ioinfo[irq]; - ioinfo_tail = ioinfo[irq]; + memcpy( &(ioinfo[irq]->pgid), + &pgid, + sizeof(pgid_t) ); } - else if (irq < ioinfo_head->irq) /* new head */ + else // ungrouped or garbage ... { - ioinfo[irq]->next = ioinfo_head; - ioinfo_head->prev = ioinfo[irq]; - ioinfo_head = ioinfo[irq]; + ret = -EOPNOTSUPP; + + } /* endif */ } - else if (irq > ioinfo_tail->irq) /* new tail */ + else { - ioinfo_tail->next = ioinfo[irq]; - ioinfo[irq]->prev = ioinfo_tail; - ioinfo_tail = ioinfo[irq]; + ioinfo[irq]->ui.flags.pgid_supp = 0; + +#ifdef CONFIG_DEBUG_IO + printk( "PathVerification(%04X) " + "- Device %04X doesn't " + " support path grouping\n", + irq, + ioinfo[irq]->schib.pmcw.dev); +#endif + + } /* endif */ } - else /* insert element */ + else if ( ret ) { - ioinfo_t *pi = ioinfo_head; - do - { - if ( irq < pi->next->irq ) - { - ioinfo[irq]->next = pi->next; - ioinfo[irq]->prev = pi; - pi->next->prev = ioinfo[irq]; - pi->next = ioinfo[irq]; - break; +#ifdef CONFIG_DEBUG_IO + printk( "PathVerification(%04X) " + "- Device %04X doesn't " + " support path grouping\n", + irq, + ioinfo[irq]->schib.pmcw.dev); - } /* endif */ +#endif - pi = pi->next; + ioinfo[irq]->ui.flags.pgid_supp = 0; - } while ( 1 ); + } /* endif */ } /* endif */ + } /* endfor */ + } /* endif */ - printk( "Detected device %04X on subchannel %04X" - " - PIM = %02X, PAM = %02X, POM = %02X\n", - ioinfo[irq]->schib.pmcw.dev, - irq, - ioinfo[irq]->schib.pmcw.pim, - ioinfo[irq]->schib.pmcw.pam, - ioinfo[irq]->schib.pmcw.pom); + return ret; +#else + return 0; +#endif +} /* - * We now have to initially ... - * ... set "interruption sublass" - * ... enable "concurrent sense" - * ... enable "multipath mode" if more than - * one CHPID is available + * s390_SetPGID + * + * Set Path Group ID * - * Note : we don't enable the device here, this is temporarily - * done during device sensing below. */ - ioinfo[irq]->schib.pmcw.isc = 3; /* could be smth. else */ - ioinfo[irq]->schib.pmcw.csense = 1; /* concurrent sense */ - ioinfo[irq]->schib.pmcw.ena = 0; /* force disable it */ - ioinfo[irq]->schib.pmcw.intparm = - ioinfo[irq]->schib.pmcw.dev; +int s390_SetPGID( int irq, __u8 lpm, pgid_t *pgid ) + { + ccw1_t spid_ccw[2]; /* ccw area for SPID command */ + devstat_t devstat; /* required by request_irq() */ + devstat_t *pdevstat = &devstat; + + int irq_ret = 0; /* return code */ + int retry = 5; /* retry count */ + int inlreq = 0; /* inline request_irq() */ + int mpath = 1; /* try multi-path first */ + + if ( (irq > highest_subchannel) || (irq < 0 ) ) + { + return( -ENODEV ); - if ( ( ioinfo[irq]->schib.pmcw.pim != 0 ) - && ( ioinfo[irq]->schib.pmcw.pim != 0x80 ) ) + } + else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) { - ioinfo[irq]->schib.pmcw.mp = 1; /* multipath mode */ + return( -ENODEV); - } /* endif */ + } /* endif */ - /* - * initialize ioinfo structure - */ - ioinfo[irq]->irq = irq; - ioinfo[irq]->ui.flags.busy = 0; - ioinfo[irq]->ui.flags.ready = 0; - ioinfo[irq]->ui.flags.oper = 1; - ioinfo[irq]->devstat.intparm = 0; - ioinfo[irq]->devstat.devno = ioinfo[irq]->schib.pmcw.dev; + if ( ioinfo[irq]->ui.flags.oper == 0 ) + { + return( -ENODEV ); - retry = 5; + } /* endif */ - do - { - ccode2 = msch_err( irq, &ioinfo[irq]->schib); + if ( !ioinfo[irq]->ui.flags.ready ) + { + /* + * Perform SENSE ID command processing. We have to request device + * ownership and provide a dummy I/O handler. We issue sync. I/O + * requests and evaluate the devstat area on return therefore + * we don't need a real I/O handler in place. + */ + irq_ret = request_irq( irq, + init_IRQ_handler, + 0, + "SPID", + pdevstat); - switch (ccode2) { - case 0: // successful completion - // - // concurrent sense facility available ... - // - ioinfo[irq]->ui.flags.consns = 1; - break; + if ( irq_ret == 0 ) + inlreq = 1; + } + else + { + pdevstat = ioinfo[irq]->irq_desc.action->dev_id; - case 1: // status pending - // - // How can we have a pending status as device is - // disabled for interrupts ? Anyway, clear it ... - // - tsch( irq, &(ioinfo[irq]->devstat.ii.irb) ); - retry--; - break; + } /* endif */ - case 2: // busy - retry--; - break; + if ( irq_ret == 0 ) + { + s390irq_spin_lock( irq); - case 3: // not operational - ioinfo[irq]->ui.flags.oper = 0; - retry = 0; - break; + spid_ccw[0].cmd_code = 0x5B; /* suspend multipath reconnect */ + spid_ccw[0].cda = 0; + spid_ccw[0].count = 0; + spid_ccw[0].flags = CCW_FLAG_SLI | CCW_FLAG_CC; + + spid_ccw[1].cmd_code = CCW_CMD_SET_PGID; + spid_ccw[1].cda = (char *)virt_to_phys( pgid ); + spid_ccw[1].count = sizeof( pgid_t); + spid_ccw[1].flags = CCW_FLAG_SLI; - default: -#define PGMCHK_OPERAND_EXC 0x15 + pgid->inf.fc = SPID_FUNC_MULTI_PATH | SPID_FUNC_ESTABLISH; - if ( (ccode2 & PGMCHK_OPERAND_EXC) == PGMCHK_OPERAND_EXC ) - { /* - * re-issue the modify subchannel without trying to - * enable the concurrent sense facility + * We now issue a SenseID request. In case of BUSY + * or STATUS PENDING conditions we retry 5 times. */ - ioinfo[irq]->schib.pmcw.csense = 0; + do + { + memset( pdevstat, '\0', sizeof( devstat_t) ); + + irq_ret = s390_start_IO( irq, + spid_ccw, + 0xE2D7C9C4, // == SPID + lpm, // n/a + DOIO_WAIT_FOR_INTERRUPT + | DOIO_VALID_LPM + | DOIO_DONT_CALL_INTHDLR ); - ccode2 = msch_err( irq, &ioinfo[irq]->schib); + if ( !irq_ret ) + { + if ( pdevstat->flag & DEVSTAT_STATUS_PENDING ) + { +#ifdef CONFIG_DEBUG_IO + printk( "SPID - Device %04X " + "on Subchannel %04X " + "reports pending status, " + "retry : %d\n", + ioinfo[irq]->schib.pmcw.dev, + irq, + retry); +#endif + } /* endif */ - if ( ccode2 != 0 ) + if ( pdevstat->flag == ( DEVSTAT_START_FUNCTION + | DEVSTAT_FINAL_STATUS ) ) { - printk( " ... modify subchannel (2) failed with CC = %X\n", - ccode2 ); - ioinfo[irq]->ui.flags.oper = 0; + retry = 0; // successfully set ... + } + else if ( pdevstat->flag & DEVSTAT_FLAG_SENSE_AVAIL ) + { + /* + * If the device doesn't support the + * Sense Path Group ID command + * further retries wouldn't help ... + */ + if ( pdevstat->ii.sense.data[0] & SNS0_CMD_REJECT ) + { + if ( mpath ) + { + pgid->inf.fc = SPID_FUNC_SINGLE_PATH + | SPID_FUNC_ESTABLISH; + mpath = 0; + retry--; } else { - ioinfo[irq]->ui.flags.consns = 0; + irq_ret = -EOPNOTSUPP; + retry = 0; } /* endif */ } +#ifdef CONFIG_DEBUG_IO else { - printk( " ... modify subchannel (1) failed with CC = %X\n", - ccode2); - ioinfo[irq]->ui.flags.oper = 0; + printk( "SPID - device %04X," + " unit check," + " retry %d, cnt %02d," + " sns :" + " %02X%02X%02X%02X %02X%02X%02X%02X ...\n", + ioinfo[irq]->schib.pmcw.dev, + retry, + pdevstat->scnt, + pdevstat->ii.sense.data[0], + pdevstat->ii.sense.data[1], + pdevstat->ii.sense.data[2], + pdevstat->ii.sense.data[3], + pdevstat->ii.sense.data[4], + pdevstat->ii.sense.data[5], + pdevstat->ii.sense.data[6], + pdevstat->ii.sense.data[7]); } /* endif */ +#endif + } + else if ( pdevstat->flag & DEVSTAT_NOT_OPER ) + { + printk( "SPID - Device %04X " + "on Subchannel %04X " + "became 'not operational'\n", + ioinfo[irq]->schib.pmcw.dev, + irq); retry = 0; - break; - - } /* endswitch */ - } while ( ccode2 && retry ); - - if ( (ccode2 < 3) && (!retry) ) + } /* endif */ + } + else if ( irq_ret != -ENODEV ) { - printk( " ... msch() retry count for " - "subchannel %04X exceeded, CC = %d\n", - irq, - ccode2); + retry--; + } + else + { + retry = 0; } /* endif */ - } /* endif */ + } while ( retry > 0 ); - } /* endif */ + s390irq_spin_unlock( irq); /* - * indicate whether the subchannel is valid + * If we installed the irq action handler we have to + * release it too. */ - if ( ccode == 3) - return(0); - else - return(1); + if ( inlreq ) + free_irq( irq, pdevstat); + + } /* endif */ + + return( irq_ret ); } + /* - * s390_SenseID + * s390_SensePGID * - * Try to obtain the 'control unit'/'device type' information - * associated with the subchannel. + * Sense Path Group ID * - * The function is primarily meant to be called without irq - * action handler in place. However, it also allows for - * use with an action handler in place. If there is already - * an action handler registered assure it can handle the - * s390_SenseID() related device interrupts - interruption - * parameter used is 0x00E2C9C4 ( SID ). */ -int s390_SenseID( int irq, senseid_t *sid ) +int s390_SensePGID( int irq, __u8 lpm, pgid_t *pgid ) { - ccw1_t sense_ccw; /* ccw area for SenseID command */ + ccw1_t snid_ccw; /* ccw area for SNID command */ devstat_t devstat; /* required by request_irq() */ + devstat_t *pdevstat = &devstat; int irq_ret = 0; /* return code */ int retry = 5; /* retry count */ @@ -3504,6 +5146,7 @@ else if ( ioinfo[irq] == INVALID_STORAGE_AREA ) { return( -ENODEV); + } /* endif */ if ( ioinfo[irq]->ui.flags.oper == 0 ) @@ -3520,26 +5163,30 @@ * requests and evaluate the devstat area on return therefore * we don't need a real I/O handler in place. */ - irq_ret = request_irq( irq, init_IRQ_handler, 0, "SID", &devstat); + irq_ret = request_irq( irq, + init_IRQ_handler, + 0, + "SNID", + pdevstat); if ( irq_ret == 0 ) inlreq = 1; + } + else + { + pdevstat = ioinfo[irq]->irq_desc.action->dev_id; + } /* endif */ if ( irq_ret == 0 ) { s390irq_spin_lock( irq); - sense_ccw.cmd_code = CCW_CMD_SENSE_ID; - sense_ccw.cda = (char *)virt_to_phys( sid ); - sense_ccw.count = sizeof( senseid_t); - sense_ccw.flags = CCW_FLAG_SLI; - - ioinfo[irq]->senseid.cu_type = 0xFFFF; /* initialize fields ... */ - ioinfo[irq]->senseid.cu_model = 0; - ioinfo[irq]->senseid.dev_type = 0; - ioinfo[irq]->senseid.dev_model = 0; + snid_ccw.cmd_code = CCW_CMD_SENSE_PGID; + snid_ccw.cda = (char *)virt_to_phys( pgid ); + snid_ccw.count = sizeof( pgid_t); + snid_ccw.flags = CCW_FLAG_SLI; /* * We now issue a SenseID request. In case of BUSY @@ -3547,78 +5194,100 @@ */ do { - memset( &devstat, '\0', sizeof( devstat_t) ); + memset( pdevstat, '\0', sizeof( devstat_t) ); irq_ret = s390_start_IO( irq, - &sense_ccw, - 0x00E2C9C4, // == SID - 0, // n/a - DOIO_WAIT_FOR_INTERRUPT ); - - if ( sid->cu_type == 0xFFFF ) - { - if ( devstat.flag & DEVSTAT_STATUS_PENDING ) - { -#if CONFIG_DEBUG_IO - printk( "Device %04X on Subchannel %04X " - "reports pending status, retry : %d\n", - ioinfo[irq]->schib.pmcw.dev, - irq, - retry); -#endif - } /* endif */ + &snid_ccw, + 0xE2D5C9C4, // == SNID + lpm, // n/a + DOIO_WAIT_FOR_INTERRUPT + | DOIO_VALID_LPM + | DOIO_DONT_CALL_INTHDLR ); - if ( devstat.flag & DEVSTAT_FLAG_SENSE_AVAIL ) + if ( irq_ret == 0 ) + { + if ( pdevstat->flag & DEVSTAT_FLAG_SENSE_AVAIL ) { /* - * if the device doesn't support the SenseID - * command further retries wouldn't help ... + * If the device doesn't support the + * Sense Path Group ID command + * further retries wouldn't help ... */ - if ( devstat.ii.sense.data[0] == SNS0_CMD_REJECT ) + if ( pdevstat->ii.sense.data[0] & SNS0_CMD_REJECT ) { retry = 0; + irq_ret = -EOPNOTSUPP; } -#if CONFIG_DEBUG_IO else { - printk( "Device %04X," - " UC/SenseID," +#ifdef CONFIG_DEBUG_IO + printk( "SNID - device %04X," + " unit check," + " flag %04X, " " retry %d, cnt %02d," " sns :" " %02X%02X%02X%02X %02X%02X%02X%02X ...\n", ioinfo[irq]->schib.pmcw.dev, + pdevstat->flag, retry, - devstat.scnt, - devstat.ii.sense.data[0], - devstat.ii.sense.data[1], - devstat.ii.sense.data[2], - devstat.ii.sense.data[3], - devstat.ii.sense.data[4], - devstat.ii.sense.data[5], - devstat.ii.sense.data[6], - devstat.ii.sense.data[7]); + pdevstat->scnt, + pdevstat->ii.sense.data[0], + pdevstat->ii.sense.data[1], + pdevstat->ii.sense.data[2], + pdevstat->ii.sense.data[3], + pdevstat->ii.sense.data[4], + pdevstat->ii.sense.data[5], + pdevstat->ii.sense.data[6], + pdevstat->ii.sense.data[7]); - } /* endif */ #endif + retry--; + + } /* endif */ } - else if ( devstat.flag & DEVSTAT_NOT_OPER ) + else if ( pdevstat->flag & DEVSTAT_NOT_OPER ) { - printk( "Device %04X on Subchannel %04X " + printk( "SNID - Device %04X " + "on Subchannel %04X " "became 'not operational'\n", ioinfo[irq]->schib.pmcw.dev, irq); retry = 0; - } /* endif */ } - else // we got it ... + else { - retry = 0; + retry = 0; // success ... } /* endif */ + } + else if ( irq_ret != -ENODEV ) // -EIO, or -EBUSY + { +#ifdef CONFIG_DEBUG_IO + if ( pdevstat->flag & DEVSTAT_STATUS_PENDING ) + { + printk( "SNID - Device %04X " + "on Subchannel %04X " + "reports pending status, " + "retry : %d\n", + ioinfo[irq]->schib.pmcw.dev, + irq, + retry); + } /* endif */ +#endif + printk( "SNID - device %04X," + " start_io() reports rc : %d, retrying ...\n", + ioinfo[irq]->schib.pmcw.dev, + irq_ret); retry--; + } + else // -ENODEV ... + { + retry = 0; + + } /* endif */ } while ( retry > 0 ); @@ -3629,75 +5298,206 @@ * release it too. */ if ( inlreq ) - free_irq( irq, &devstat); + free_irq( irq, pdevstat); + + } /* endif */ + + return( irq_ret ); +} /* - * if running under VM check there ... perhaps we should do - * only if we suffered a command reject, but it doesn't harm + * s390_do_crw_pending + * + * Called by the machine check handler to process CRW pending + * conditions. It may be a single CRW, or CRWs may be chained. + * + * Note : we currently process CRWs for subchannel source only */ - if ( ( sid->cu_type == 0xFFFF ) - && ( MACHINE_IS_VM ) ) +void s390_do_crw_pending( crwe_t *pcrwe ) { - VM_virtual_device_info( ioinfo[irq]->schib.pmcw.dev, - sid ); - } /* endif */ + int irq; + int dev_oper = 0; + int dev_no = -1; + int lock = 0; - if ( sid->cu_type == 0xFFFF ) +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : starting ...\n"); +#endif + + while ( pcrwe != NULL ) { + switch ( pcrwe->crw.rsc ) { + case CRW_RSC_SCH : + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : source is " + "subchannel\n"); +#endif + irq = pcrwe->crw.rsid; + /* - * SenseID CU-type of 0xffff indicates that no device - * information could be retrieved (pre-init value). - * - * If we can't couldn't identify the device type we - * consider the device "not operational". + * If the device isn't known yet + * we can't lock it ... */ - printk( "Unknown device %04X on subchannel %04X\n", - ioinfo[irq]->schib.pmcw.dev, - irq); - ioinfo[irq]->ui.flags.oper = 0; + if ( ioinfo[irq] != INVALID_STORAGE_AREA ) + { + s390irq_spin_lock( irq ); + lock = 1; + + dev_oper = ioinfo[irq]->ui.flags.oper; + + if ( ioinfo[irq]->ui.flags.dval ) + dev_no = ioinfo[irq]->devno; } /* endif */ +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : subchannel validation - start ...\n"); +#endif + s390_validate_subchannel( irq, 0 ); + + if ( irq > highest_subchannel ) + highest_subchannel = irq; + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : subchannel validation - done\n"); +#endif /* - * Issue device info message if unit was operational . + * After the validate processing + * the ioinfo control block + * should be allocated ... */ - if ( ioinfo[irq]->ui.flags.oper ) + if ( lock ) { - if ( sid->dev_type != 0 ) + s390irq_spin_unlock( irq ); + + } /* endif */ + +#ifdef CONFIG_DEBUG_CRW + if ( ioinfo[irq] != INVALID_STORAGE_AREA ) { - printk( "Device %04X reports: CU Type/Mod = %04X/%02X," - " Dev Type/Mod = %04X/%02X\n", - ioinfo[irq]->schib.pmcw.dev, - sid->cu_type, - sid->cu_model, - sid->dev_type, - sid->dev_model); + printk( "do_crw_pending : ioinfo at %08X\n", + (unsigned)ioinfo[irq]); + + } /* endif */ +#endif + + if ( ioinfo[irq] != INVALID_STORAGE_AREA ) + { + if ( ioinfo[irq]->ui.flags.oper == 0 ) + { + /* + * If the device has gone + * call not oper handler + */ + if ( ( dev_oper == 1 ) + && ( ioinfo[irq]->nopfunc != NULL ) ) + { + free_irq( irq, + ioinfo[irq]->irq_desc.action->dev_id ); + ioinfo[irq]->nopfunc( irq, + DEVSTAT_DEVICE_GONE ); + + } /* endif */ } else { - printk( "Device %04X reports:" - " Dev Type/Mod = %04X/%02X\n", - ioinfo[irq]->schib.pmcw.dev, - sid->cu_type, - sid->cu_model); +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : device " + "recognition - start ...\n"); +#endif + s390_device_recognition_irq( irq ); + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : device " + "recognition - done\n"); +#endif + + /* + * the device became operational + */ + if ( dev_oper == 0 ) + { + devreg_t *pdevreg; + + pdevreg = s390_search_devreg( ioinfo[irq] ); + + if ( pdevreg != NULL ) + { + if ( pdevreg->oper_func != NULL ) + pdevreg->oper_func( irq, pdevreg ); } /* endif */ + } + /* + * ... it is and was operational, but + * the devno may have changed + */ + else if ( ioinfo[irq]->devno != dev_no ) + { + ioinfo[irq]->nopfunc( irq, + DEVSTAT_REVALIDATE ); } /* endif */ - if ( ioinfo[irq]->ui.flags.oper ) - irq_ret = 0; - else - irq_ret = -ENODEV; + } /* endif */ } /* endif */ - return( irq_ret ); -} + break; -void do_crw_pending(void) -{ + case CRW_RSC_MONITOR : + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : source is " + "monitoring facility\n"); +#endif + break; + + case CRW_RSC_CPATH : + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : source is " + "channel path\n"); +#endif + break; + + case CRW_RSC_CONFIG : + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : source is " + "configuration-alert facility\n"); +#endif + break; + + case CRW_RSC_CSS : + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : source is " + "channel path\n"); +#endif + break; + + default : + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : unknown source\n"); +#endif + break; + + } /* endswitch */ + + pcrwe = pcrwe->crwe_next; + + } /* endwhile */ + +#ifdef CONFIG_DEBUG_CRW + printk( "do_crw_pending : done\n"); +#endif + + return; } + /* added by Holger Smolinski for reipl support in reipl.S */ void diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/s390mach.c linux.16p3/arch/s390/kernel/s390mach.c --- linux.vanilla/arch/s390/kernel/s390mach.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/kernel/s390mach.c Mon May 15 16:31:19 2000 @@ -0,0 +1,544 @@ +/* + * arch/s390/kernel/s390mach.c + * S/390 machine check handler, + * currently only channel-reports are supported + * + * S390 version + * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Ingo Adlung (adlung@de.ibm.com) + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define S390_MACHCHK_DEBUG + +static int __init s390_machine_check_handler( void * parm ); +static void s390_enqueue_mchchk( mache_t *mchchk ); +static mache_t *s390_dequeue_mchchk( void ); +static void s390_enqueue_free_mchchk( mache_t *mchchk ); +static mache_t *s390_dequeue_free_mchchk( void ); +static int s390_collect_crw_info( void ); + +static struct semaphore s_sem[2]; + +static mache_t *mchchk_queue_head = NULL; +static mache_t *mchchk_queue_tail = NULL; +static mache_t *mchchk_queue_free = NULL; +static crwe_t *crw_buffer_anchor = NULL; +static spinlock_t mchchk_queue_lock = SPIN_LOCK_UNLOCKED; +static spinlock_t crw_queue_lock = SPIN_LOCK_UNLOCKED; + +static inline void init_MUTEX (struct semaphore *sem) +{ + sema_init(sem, 1); +} + +static inline void init_MUTEX_LOCKED (struct semaphore *sem) +{ + sema_init(sem, 0); +} + +/* + * s390_init_machine_check + * + * initialize machine check handling + */ +void s390_init_machine_check( void ) +{ + crwe_t *pcrwe; /* CRW buffer element pointer */ + mache_t *pmache; /* machine check element pointer */ + + init_MUTEX_LOCKED( &s_sem[0] ); + init_MUTEX_LOCKED( &s_sem[1] ); + + pcrwe = kmalloc( MAX_CRW_PENDING * sizeof( crwe_t), GFP_KERNEL); + + if ( pcrwe ) + { + int i; + + crw_buffer_anchor = pcrwe; + + for ( i=0; i < MAX_CRW_PENDING; i++) + { + pcrwe->crwe_next = (crwe_t *)((unsigned long)pcrwe + sizeof(crwe_t)); + pcrwe = pcrwe->crwe_next; + + } /* endfor */ + + pcrwe->crwe_next = NULL; + + } + else + { + panic( "s390_init_machine_check : unable to obtain memory\n"); + + } /* endif */ + + pmache = kmalloc( MAX_MACH_PENDING * sizeof( mache_t), GFP_KERNEL); + + if ( pmache ) + { + int i; + + for ( i=0; i < MAX_MACH_PENDING; i++) + { + s390_enqueue_free_mchchk( pmache ); + pmache = (mache_t *)((unsigned long)pmache + sizeof(mache_t)); + + } /* endfor */ + } + else + { + panic( "s390_init_machine_check : unable to obtain memory\n"); + + } /* endif */ + +#ifdef S390_MACHCHK_DEBUG + printk( "init_mach : starting machine check handler\n"); +#endif + + kernel_thread( s390_machine_check_handler, s_sem, 0); + + /* + * wait for the machine check handler to be ready + */ +#ifdef S390_MACHCHK_DEBUG + printk( "init_mach : waiting for machine check handler coming up ... \n"); +#endif + + down( &s_sem[0]); + + smp_ctl_clear_bit( 14, 25 ); // disable damage MCH +#if 1 + smp_ctl_set_bit( 14, 28 ); // enable channel report MCH +#endif + +#ifdef S390_MACHCHK_DEBUG + printk( "init_mach : machine check buffer : head = %08X\n", + (unsigned)&mchchk_queue_head); + printk( "init_mach : machine check buffer : tail = %08X\n", + (unsigned)&mchchk_queue_tail); + printk( "init_mach : machine check buffer : free = %08X\n", + (unsigned)&mchchk_queue_free); + printk( "init_mach : CRW entry buffer anchor = %08X\n", + (unsigned)&crw_buffer_anchor); + printk( "init_mach : machine check handler ready\n"); +#endif + + return; +} + +/* + * s390_do_machine_check + * + * mchine check pre-processor, collecting the machine check info, + * queueing it and posting the machine check handler for processing. + */ +void __init s390_do_machine_check( void ) +{ + int crw_count; + mcic_t mcic; + +#ifdef S390_MACHCHK_DEBUG + printk( "s390_do_machine_check : starting ...\n"); +#endif + + memcpy( &mcic, + &S390_lowcore.mcck_interuption_code, + sizeof(__u64)); + + if ( mcic.mcc.mcd.cp ) // CRW pending ? + { + crw_count = s390_collect_crw_info(); + + if ( crw_count ) + { + up( &s_sem[1] ); + + } /* endif */ + + } /* endif */ + +#ifdef S390_MACHCHK_DEBUG + printk( "s390_do_machine_check : done \n"); +#endif + + return; +} + +/* + * s390_machine_check_handler + * + * machine check handler, dequeueing machine check entries + * and processing them + */ +static int __init s390_machine_check_handler( void *parm) +{ + struct semaphore *sem = parm; + int flags; + mache_t *pmache; + + int found = 0; + +#ifdef S390_MACHCHK_DEBUG + printk( "mach_handler : up\n"); +#endif + + up( &sem[0] ); + +#ifdef S390_MACHCHK_DEBUG + printk( "mach_handler : ready\n"); +#endif + + do { + +#ifdef S390_MACHCHK_DEBUG + printk( "mach_handler : waiting for wakeup\n"); +#endif + + down_interruptible( &sem[1] ); + +#ifdef S390_MACHCHK_DEBUG + printk( "\nmach_handler : wakeup ... \n"); +#endif + + __save_flags( flags ); + __cli(); + + pmache = s390_dequeue_mchchk(); + + if ( pmache ) + { + found = 1; + + if ( pmache->mcic.mcc.mcd.cp ) + { + crwe_t *pcrwe_n; + crwe_t *pcrwe_h; + + s390_do_crw_pending( pmache->mc.crwe ); + + pcrwe_h = pmache->mc.crwe; + pcrwe_n = pmache->mc.crwe->crwe_next; + + pmache->mcic.mcc.mcd.cp = 0; + pmache->mc.crwe = NULL; + + spin_lock( &crw_queue_lock); + + while ( pcrwe_h ) + { + pcrwe_h->crwe_next = crw_buffer_anchor; + crw_buffer_anchor = pcrwe_h; + pcrwe_h = pcrwe_n; + + if ( pcrwe_h != NULL ) + pcrwe_n = pcrwe_h->crwe_next; + + } /* endwhile */ + + spin_unlock( &crw_queue_lock); + + } /* endif */ + + s390_enqueue_free_mchchk( pmache ); + } + else + { + found = 0; + + // unconditional surrender ... +#ifdef S390_MACHCHK_DEBUG + printk( "mach_handler : terminated \n"); +#endif + + } /* endif */ + + __restore_flags( flags ); + + } while ( found ); + + return( 0); +} + +/* + * s390_dequeue_mchchk + * + * Dequeue an entry from the machine check queue + * + * Note : The queue elements provide for a double linked list. + * We dequeue entries from the tail, and enqueue entries to + * the head. + * + */ +static mache_t *s390_dequeue_mchchk( void ) +{ + mache_t *qe; + + spin_lock( &mchchk_queue_lock ); + + qe = mchchk_queue_tail; + + if ( qe != NULL ) + { + mchchk_queue_tail = qe->prev; + + if ( mchchk_queue_tail != NULL ) + { + mchchk_queue_tail->next = NULL; + } + else + { + mchchk_queue_head = NULL; + + } /* endif */ + + } /* endif */ + + spin_unlock( &mchchk_queue_lock ); + + return qe; +} + +/* + * s390_enqueue_mchchk + * + * Enqueue an entry to the machine check queue. + * + * Note : The queue elements provide for a double linked list. + * We enqueue entries to the head, and dequeue entries from + * the tail. + * + */ +static void s390_enqueue_mchchk( mache_t *pmache ) +{ + spin_lock( &mchchk_queue_lock ); + + if ( pmache != NULL ) + { + + if ( mchchk_queue_head == NULL ) /* first element */ + { + pmache->next = NULL; + pmache->prev = NULL; + + mchchk_queue_head = pmache; + mchchk_queue_tail = pmache; + } + else /* new head */ + { + pmache->prev = NULL; + pmache->next = mchchk_queue_head; + + mchchk_queue_head->prev = pmache; + mchchk_queue_head = pmache; + + } /* endif */ + + } /* endif */ + + spin_unlock( &mchchk_queue_lock ); + + return; +} + + +/* + * s390_enqueue_free_mchchk + * + * Enqueue a free entry to the free queue. + * + * Note : While the queue elements provide for a double linked list, + * the free queue entries are only concatenated by means of a + * single linked list (forward concatenation). + * + */ +static void s390_enqueue_free_mchchk( mache_t *pmache ) +{ + if ( pmache != NULL) + { + memset( pmache, '\0', sizeof( mache_t )); + + spin_lock( &mchchk_queue_lock ); + + pmache->next = mchchk_queue_free; + + mchchk_queue_free = pmache; + + spin_unlock( &mchchk_queue_lock ); + + } /* endif */ + + return; +} + +/* + * s390_dequeue_free_mchchk + * + * Dequeue an entry from the free queue. + * + * Note : While the queue elements provide for a double linked list, + * the free queue entries are only concatenated by means of a + * single linked list (forward concatenation). + * + */ +static mache_t *s390_dequeue_free_mchchk( void ) +{ + mache_t *qe; + + spin_lock( &mchchk_queue_lock ); + + qe = mchchk_queue_free; + + if ( qe != NULL ) + { + mchchk_queue_free = qe->next; + + } /* endif */ + + spin_unlock( &mchchk_queue_lock ); + + return qe; +} + +/* + * s390_collect_crw_info + * + * Retrieve CRWs. If a CRW was found a machine check element + * is dequeued from the free chain, filled and enqueued to + * be processed. + * + * The function returns the number of CRWs found. + * + * Note : We must always be called disabled ... + */ +static int s390_collect_crw_info( void ) +{ + crw_t tcrw; /* temporarily holds a CRW */ + int ccode; /* condition code from stcrw() */ + crwe_t *pcrwe; /* pointer to CRW buffer entry */ + + mache_t *pmache = NULL; /* ptr to mchchk entry */ + int chain = 0; /* indicate chaining */ + crwe_t *pccrw = NULL; /* ptr to current CRW buffer entry */ + int count = 0; /* CRW count */ + +#ifdef S390_MACHCHK_DEBUG + printk( "crw_info : looking for CRWs ...\n"); +#endif + + do + { + ccode = stcrw( (__u32 *)&tcrw); + + if ( ccode == 0 ) + { + count++; + +#ifdef S390_MACHCHK_DEBUG + printk( "crw_info : CRW reports " + "slct=%d, oflw=%d, chn=%d, " + "rsc=%X, anc=%d, erc=%X, " + "rsid=%X\n", + tcrw.slct, + tcrw.oflw, + tcrw.chn, + tcrw.rsc, + tcrw.anc, + tcrw.erc, + tcrw.rsid ); +#endif + + /* + * Dequeue a CRW entry from the free chain + * and process it ... + */ + spin_lock( &crw_queue_lock ); + + pcrwe = crw_buffer_anchor; + + if ( pcrwe == NULL ) + { + printk( KERN_CRIT"crw_info : " + "no CRW buffer entries available\n"); + break; + + } /* endif */ + + crw_buffer_anchor = pcrwe->crwe_next; + pcrwe->crwe_next = NULL; + + spin_unlock( &crw_queue_lock ); + + memcpy( &(pcrwe->crw), &tcrw, sizeof(crw_t)); + + /* + * If it is the first CRW, chain it to the mchchk + * buffer entry, otherwise to the last CRW entry. + */ + if ( chain == 0 ) + { + pmache = s390_dequeue_free_mchchk(); + + if ( pmache != NULL ) + { + memset( pmache, '\0', sizeof(mache_t)); + + pmache->mcic.mcc.mcd.cp = 1; + pmache->mc.crwe = pcrwe; + pccrw = pcrwe; + + } + else + { + panic( "crw_info : " + "unable to dequeue " + "free mchchk buffer"); + + } /* endif */ + } + else + { + pccrw->crwe_next = pcrwe; + pccrw = pcrwe; + + } /* endif */ + + if ( pccrw->crw.chn ) + { +#ifdef S390_MACHCHK_DEBUG + printk( "crw_info : " + "chained CRWs pending ...\n\n"); +#endif + chain = 1; + } + else + { + chain = 0; + + /* + * We can enqueue the mchchk buffer if + * there aren't more CRWs chained. + */ + s390_enqueue_mchchk( pmache); + + } /* endif */ + + } /* endif */ + + } while ( ccode == 0 ); + + return( count ); +} + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/setup.c linux.16p3/arch/s390/kernel/setup.c --- linux.vanilla/arch/s390/kernel/setup.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/setup.c Mon May 15 16:31:19 2000 @@ -97,39 +97,60 @@ } /* + * VM halt and poweroff setup routines + */ +char vmhalt_cmd[128] = ""; +char vmpoff_cmd[128] = ""; + +static inline void strncpy_skip_quote(char *dst, char *src, int n) +{ + int sx, dx; + + dx = 0; + for (sx = 0; src[sx] != 0; sx++) { + if (src[sx] == '"') continue; + dst[dx++] = src[sx]; + if (dx >= n) break; + } +} + +__initfunc(void vmhalt_setup(char *str, char *ints)) +{ + strncpy_skip_quote(vmhalt_cmd, str, 127); + vmhalt_cmd[127] = 0; + return; +} + +__initfunc(void vmpoff_setup(char *str, char *ints)) +{ + strncpy_skip_quote(vmpoff_cmd, str, 127); + vmpoff_cmd[127] = 0; + return; +} + +/* * Reboot, halt and power_off routines for non SMP. */ + #ifndef __SMP__ void machine_restart(char * __unused) { reipl(S390_lowcore.ipl_device); -#if 0 - if (MACHINE_IS_VM) { - cpcmd("IPL", NULL, 0); - } else { - /* FIXME: how to reipl ? */ - disabled_wait(2); - } -#endif } void machine_halt(void) { - if (MACHINE_IS_VM) { - cpcmd("IPL 200 STOP", NULL, 0); - } else { + if (MACHINE_IS_VM && strlen(vmhalt_cmd) > 0) + cpcmd(vmhalt_cmd, NULL, 0); disabled_wait(0); } -} void machine_power_off(void) { - if (MACHINE_IS_VM) { - cpcmd("IPL CMS", NULL, 0); - } else { + if (MACHINE_IS_VM && strlen(vmpoff_cmd) > 0) + cpcmd(vmpoff_cmd, NULL, 0); disabled_wait(0); } -} #endif /* @@ -208,7 +229,6 @@ * memory size */ if (c == ' ' && strncmp(from, "mem=", 4) == 0) { - if (to != command_line) to--; memory_end = simple_strtoul(from+4, &from, 0); if ( *from == 'K' || *from == 'k' ) { memory_end = memory_end << 10; @@ -218,10 +238,12 @@ from++; } } + /* + * "ipldelay=XXX[sSmM]" waits for the specified time + */ if (c == ' ' && strncmp(from, "ipldelay=", 9) == 0) { unsigned long delay; - if (to != command_line) to--; delay = simple_strtoul(from+9, &from, 0); if (*from == 's' || *from == 'S') { delay = delay*1000000; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/signal.c linux.16p3/arch/s390/kernel/signal.c --- linux.vanilla/arch/s390/kernel/signal.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/signal.c Mon May 15 16:31:19 2000 @@ -61,7 +61,8 @@ /* * Atomically swap in the new signal mask, and wait for a signal. */ -asmlinkage int sys_sigsuspend(struct pt_regs * regs,int history0, int history1, old_sigset_t mask) +asmlinkage int +sys_sigsuspend(struct pt_regs * regs,int history0, int history1, old_sigset_t mask) { sigset_t saveset; @@ -73,8 +74,7 @@ spin_unlock_irq(¤t->sigmask_lock); regs->gprs[2] = -EINTR; - while (1) - { + while (1) { current->state = TASK_INTERRUPTIBLE; schedule(); if (do_signal(regs, &saveset)) @@ -82,7 +82,8 @@ } } -asmlinkage int sys_rt_sigsuspend(struct pt_regs * regs,sigset_t *unewset, size_t sigsetsize) +asmlinkage int +sys_rt_sigsuspend(struct pt_regs * regs,sigset_t *unewset, size_t sigsetsize) { sigset_t saveset, newset; @@ -319,14 +320,17 @@ static void setup_frame(int sig, struct k_sigaction *ka, sigset_t *set, struct pt_regs * regs) { + sigframe *frame; - if(!setup_frame_common(sig,ka,set,regs,sizeof(sigframe), - (S390_SYSCALL_OPCODE|__NR_sigreturn))) + if((frame=setup_frame_common(sig,ka,set,regs,sizeof(sigframe), + (S390_SYSCALL_OPCODE|__NR_sigreturn)))==0) goto give_sigsegv; #if DEBUG_SIG printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n", current->comm, current->pid, frame, regs->eip, frame->pretcode); #endif + /* Martin wants this for pthreads */ + regs->gprs[3] = (addr_t)&frame->sc; return; give_sigsegv: @@ -355,8 +359,8 @@ err |= __put_user(sas_ss_flags(orig_sp), &frame->uc.uc_stack.ss_flags); err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); - regs->gprs[3] = (u32)&frame->info; - regs->gprs[4] = (u32)&frame->uc; + regs->gprs[3] = (addr_t)&frame->info; + regs->gprs[4] = (addr_t)&frame->uc; if (err) goto give_sigsegv; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/smp.c linux.16p3/arch/s390/kernel/smp.c --- linux.vanilla/arch/s390/kernel/smp.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/smp.c Mon May 15 16:31:19 2000 @@ -31,6 +31,7 @@ #include #include #include +#include #include "cpcmd.h" #include @@ -82,18 +83,14 @@ /* * Reboot, halt and power_off routines for SMP. */ +extern char vmhalt_cmd[]; +extern char vmpoff_cmd[]; +extern void reipl(int ipl_device); + void do_machine_restart(void) { smp_send_stop(); reipl(S390_lowcore.ipl_device); -#if 0 - if (MACHINE_IS_VM) { - cpcmd("IPL", NULL, 0); - } else { - /* FIXME: how to reipl ? */ - disabled_wait(2); - } -#endif } void machine_restart(char * __unused) @@ -108,12 +105,10 @@ void do_machine_halt(void) { smp_send_stop(); - if (MACHINE_IS_VM) { - cpcmd("IPL CMS", NULL, 0); - } else { + if (MACHINE_IS_VM && strlen(vmhalt_cmd) > 0) + cpcmd(vmhalt_cmd, NULL, 0); disabled_wait(0); } -} void machine_halt(void) { @@ -127,12 +122,10 @@ void do_machine_power_off(void) { smp_send_stop(); - if (MACHINE_IS_VM) { - cpcmd("IPL CMS", NULL, 0); - } else { + if (MACHINE_IS_VM && strlen(vmpoff_cmd) > 0) + cpcmd(vmpoff_cmd, NULL, 0); disabled_wait(0); } -} void machine_power_off(void) { @@ -148,7 +141,7 @@ * cpus are handled. */ -void do_ext_call_interrupt(__u16 source_cpu_addr) +void do_ext_call_interrupt(struct pt_regs *regs, __u16 source_cpu_addr) { ec_ext_call *ec, *next; int bits; @@ -183,7 +176,7 @@ return; /* no command signals */ /* Make a fifo out of the lifo */ - next = ec; + next = ec->next; ec->next = NULL; while (next != NULL) { ec_ext_call *tmp = next->next; @@ -250,6 +243,11 @@ atomic_set(&ec->status,ec_done); return; } + case ec_ptlb: + atomic_set(&ec->status, ec_executing); + __flush_tlb(); + atomic_set(&ec->status, ec_done); + return; default: } ec = ec->next; @@ -496,6 +494,7 @@ * Activate a secondary processor. */ extern void init_100hz_timer(void); +extern void cpu_init (void); int __init start_secondary(void *cpuvoid) { @@ -571,6 +570,9 @@ int curr_cpu; int i; + /* request the 0x1202 external interrupt */ + if (register_external_interrupt(0x1202, do_ext_call_interrupt) != 0) + panic("Couldn't request external interrupt 0x1202"); smp_count_cpus(); memset(lowcore_ptr,0,sizeof(lowcore_ptr)); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/sys_s390.c linux.16p3/arch/s390/kernel/sys_s390.c --- linux.vanilla/arch/s390/kernel/sys_s390.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/sys_s390.c Mon May 15 16:31:19 2000 @@ -115,8 +115,9 @@ * This is really horribly ugly. */ asmlinkage int sys_ipc (uint call, int first, int second, - int third, void *ptr, long fifth) + int third, void *ptr) { + struct ipc_kludge tmp; int ret; switch (call) { @@ -137,9 +138,13 @@ second, third); break; case MSGRCV: - return sys_msgrcv (first, - (struct msgbuf *) ptr, - second, fifth, third); + if (!ptr) + return -EINVAL; + if (copy_from_user (&tmp, (struct ipc_kludge *) ptr, + sizeof (struct ipc_kludge))) + return -EFAULT; + return sys_msgrcv (first, tmp.msgp, + second, tmp.msgtyp, third); case MSGGET: return sys_msgget ((key_t) first, second); case MSGCTL: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/time.c linux.16p3/arch/s390/kernel/time.c --- linux.vanilla/arch/s390/kernel/time.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/time.c Mon May 15 16:31:19 2000 @@ -26,6 +26,8 @@ #include #include +#include +#include #include #include @@ -147,7 +149,7 @@ extern __u16 boot_cpu_addr; #endif -void do_timer_interrupt(struct pt_regs *regs,int error_code) +void do_timer_interrupt(struct pt_regs *regs, __u16 error_code) { unsigned long flags; @@ -240,6 +242,9 @@ printk("time_init: TOD clock stopped/non-operational\n"); break; } + /* request the 0x1004 external interrupt */ + if (register_external_interrupt(0x1004, do_timer_interrupt) != 0) + panic("Couldn't request external interrupts 0x1004"); init_100hz_timer(); init_timer_cc = S390_lowcore.jiffy_timer_cc; init_timer_cc -= 0x8126d60e46000000LL - diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/kernel/traps.c linux.16p3/arch/s390/kernel/traps.c --- linux.vanilla/arch/s390/kernel/traps.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/kernel/traps.c Mon May 15 16:31:20 2000 @@ -219,6 +219,15 @@ return(FALSE); } +asmlinkage void default_trap_handler(struct pt_regs * regs, long error_code) +{ + if (check_for_fixup(regs) == 0) { + current->tss.error_code = error_code; + current->tss.trap_no = error_code; + force_sig(SIGSEGV, current); + die("Unknown program exception",regs,error_code); + } +} DO_ERROR(2, SIGILL, "privileged operation", privileged_op, current) DO_ERROR(3, SIGILL, "execute exception", execute_exception, current) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/lib/strncpy.S linux.16p3/arch/s390/lib/strncpy.S --- linux.vanilla/arch/s390/lib/strncpy.S Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/lib/strncpy.S Mon May 15 16:31:20 2000 @@ -17,16 +17,14 @@ LR 1,2 # don't touch address in R2 LTR 4,4 JZ strncpy_exit # 0 bytes -> nothing to do - AHI 4,-1 SR 0,0 - BASR 5,0 strncpy_loop: ICM 0,1,0(3) # ICM sets the cc, IC does not LA 3,1(0,3) STC 0,0(0,1) LA 1,1(0,1) JZ strncpy_exit # ICM inserted a 0x00 - BCTR 4,5 # R4 -= 1, jump to strncpy_loop if >= 0 + BRCT 4,strncpy_loop # R4 -= 1, jump to strncpy_loop if > 0 strncpy_exit: BR 14 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/mm/fault.c linux.16p3/arch/s390/mm/fault.c --- linux.vanilla/arch/s390/mm/fault.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/mm/fault.c Mon May 15 16:31:20 2000 @@ -65,12 +65,12 @@ address = S390_lowcore.trans_exc_code&0x7ffff000; - if (atomic_read(&S390_lowcore.local_irq_count)) - die("page fault from irq handler",regs,error_code); - tsk = current; mm = tsk->mm; + if (atomic_read(&S390_lowcore.local_irq_count)) + die("page fault from irq handler",regs,error_code); + down(&mm->mmap_sem); vma = find_vma(mm, address); @@ -116,7 +116,20 @@ printk("code should be 4, 10 or 11 (%lX) \n",error_code&0xFF); goto bad_area; } - handle_mm_fault(tsk, vma, address, write); + + /* + * If for any reason at all we couldn't handle the fault, + * make sure we exit gracefully rather than endlessly redo + * the fault. + */ +survive: + { + int fault = handle_mm_fault(tsk, vma, address, write); + if (!fault) + goto do_sigbus; + if (fault < 0) + goto out_of_memory; + } up(&mm->mmap_sem); return; @@ -141,8 +154,8 @@ return; } + no_context: /* Are we prepared to handle this kernel fault? */ - if ((fixup = search_exception_table(regs->psw.addr)) != 0) { regs->psw.addr = fixup; return; @@ -163,41 +176,43 @@ * need to define, which information is useful here */ - lock_kernel(); die("Oops", regs, error_code); do_exit(SIGKILL); - unlock_kernel(); -} + /* + * We ran out of memory, or some other thing happened to us that made + * us unable to handle the page fault gracefully. + */ +out_of_memory: + if (tsk->pid == 1) { - char c; - int i,j; - char *addr; - addr = ((char*) psw_addr)-0x20; - for (i=0;i<16;i++) { - if (i == 2) - printk("\n"); - printk ("%08X: ",(unsigned long) addr); - for (j=0;j<4;j++) { - printk("%08X ",*(unsigned long*)addr); - addr += 4; - } - addr -=0x10; - printk(" | "); - for (j=0;j<16;j++) { - printk("%c",(c=*addr++) < 0x20 ? '.' : c ); + tsk->policy |= SCHED_YIELD; + schedule(); + goto survive; } - - printk("\n"); - } - printk("\n"); + up(&mm->mmap_sem); + if (psw_mask & PSW_PROBLEM_STATE) + { + printk("VM: killing process %s\n", tsk->comm); + do_exit(SIGKILL); } + goto no_context; -*/ - - - - +do_sigbus: + up(&mm->mmap_sem); + /* + * Send a sigbus, regardless of whether we were in kernel + * or user mode. + */ + tsk->tss.prot_addr = address; + tsk->tss.error_code = error_code; + tsk->tss.trap_no = 14; + force_sig(SIGBUS, tsk); + + /* Kernel mode? Handle exceptions or die */ + if (!(psw_mask & PSW_PROBLEM_STATE)) + goto no_context; +} diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/mm/init.c linux.16p3/arch/s390/mm/init.c --- linux.vanilla/arch/s390/mm/init.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/mm/init.c Mon May 15 16:31:20 2000 @@ -337,7 +337,8 @@ tmp = start_mem; while (tmp < end_mem) { - if ((tmp & 0x3ff000) == 0 && test_access(tmp) == 0) { + if (tmp && (tmp & 0x3ff000) == 0 && + test_access(tmp) == 0) { int i; printk("4M Segment %lX not available\n",tmp); for (i = 0;i<0x400;i++) { @@ -404,7 +405,7 @@ atomic_set(&mem_map[MAP_NR(addr)].count, 1); free_page(addr); } - printk ("Freeing unused kernel memory: %ldk freed\n", (&__init_end - &__init_begin) >> 10); + printk ("Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10); } void si_meminfo(struct sysinfo *val) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/dasdfmt/Makefile linux.16p3/arch/s390/tools/dasdfmt/Makefile --- linux.vanilla/arch/s390/tools/dasdfmt/Makefile Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/tools/dasdfmt/Makefile Mon May 15 16:31:20 2000 @@ -0,0 +1,9 @@ +all: dasdfmt + +dasdfmt: dasdfmt.c + $(CROSS_COMPILE)gcc -o $@ $^ + $(STRIP) $@ + +clean: + rm -f dasdfmt + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/dasdfmt/dasdfmt.c linux.16p3/arch/s390/tools/dasdfmt/dasdfmt.c --- linux.vanilla/arch/s390/tools/dasdfmt/dasdfmt.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/tools/dasdfmt/dasdfmt.c Mon May 15 16:31:20 2000 @@ -26,18 +26,21 @@ #include #include #include -#include "../../../drivers/s390/block/dasd.h" /* uses DASD_PARTN_BITS */ #define __KERNEL__ /* we want to use kdev_t and not have to define it */ #include #undef __KERNEL__ +#include +#include + #define EXIT_MISUSE 1 #define EXIT_BUSY 2 #define TEMPFILENAME "/tmp/ddfXXXXXX" #define TEMPFILENAMECHARS 8 /* 8 characters are fixed in all temp filenames */ -#define IOCTL_COMMAND 'D' << 8 #define SLASHDEV "/dev/" #define PROC_DASD_DEVICES "/proc/dasd/devices" +#define PROC_MOUNTS "/proc/mounts" /* _PATH_MOUNTED is /etc/mtab - maybe bad */ +#define PROC_SWAPS "/proc/swaps" #define DASD_DRIVER_NAME "dasd" #define PROC_LINE_LENGTH 80 #define ERR_LENGTH 80 @@ -67,26 +70,24 @@ ERRMSG_EXIT(EXIT_MISUSE,"%s: " str " " \ "is in invalid format\n",prog_name);} -typedef struct { - int start_unit; - int stop_unit; - int blksize; -} format_data_t; - -char prog_name[]="dasd_format"; +char *prog_name;/*="dasdfmt";*/ char tempfilename[]=TEMPFILENAME; void exit_usage(int exitcode) { - printf("Usage: %s [-htvyV] [-b blocksize] \n\n", + printf("Usage: %s [-htvyV] [-b ] [] \n\n", prog_name); - printf(" where is either\n"); - printf(" -s start_track -e end_track\n"); + printf(" -t means testmode\n"); + printf(" -v means verbose mode\n"); + printf(" -V means print version\n"); + printf(" has to be power of 2 and at least 512\n"); + printf(" is either\n"); + printf(" -s -e \n"); printf(" or\n"); - printf(" -r start_track-end_track\n"); + printf(" -r -\n"); printf(" and is either\n"); - printf(" -f /dev/ddX\n"); + printf(" -f /dev/dasdX\n"); printf(" or\n"); printf(" -n \n"); exit(exitcode); @@ -321,8 +322,8 @@ /* * first, check filesystems */ - if (!(f = fopen(_PATH_MOUNTED, "r"))) - ERRMSG_EXIT(EXIT_FAILURE, "%s: %s\n", _PATH_MOUNTED, + if (!(f = fopen(PROC_MOUNTS, "r"))) + ERRMSG_EXIT(EXIT_FAILURE, "%s: %s\n", PROC_MOUNTS, strerror(errno)); while ((ment = getmntent(f))) { if (stat(ment->mnt_fsname, &stbuf) == 0) @@ -338,8 +339,8 @@ /* * second, check active swap spaces */ - if (!(f = fopen("/proc/swaps", "r"))) - ERRMSG_EXIT(EXIT_FAILURE, "/proc/swaps: %s", strerror(errno)); + if (!(f = fopen(PROC_SWAPS, "r"))) + ERRMSG_EXIT(EXIT_FAILURE, PROC_SWAPS " %s", strerror(errno)); /* * skip header line */ @@ -417,8 +418,8 @@ if (!withoutprompt) { printf("\n--->> ATTENTION! <<---\n"); printf("All data in the specified range of that " \ - "device will be lost.\nType yes to continue" \ - ", no will leave the disk untouched: "); + "device will be lost.\nType \"yes\" to " \ + "continue, no will leave the disk untouched: "); fgets(inp_buffer,sizeof(inp_buffer),stdin); if (strcasecmp(inp_buffer,"yes") && strcasecmp(inp_buffer,"yes\n")) { @@ -431,13 +432,20 @@ if ( !( (withoutprompt)&&(verbosity<1) )) printf("Formatting the device. This may take a " \ "while (get yourself a coffee).\n"); - rc=ioctl(fd,IOCTL_COMMAND,format_params); + rc=ioctl(fd,BIODASDFORMAT,format_params); if (rc) ERRMSG_EXIT(EXIT_FAILURE,"%s: the dasd driver " \ "returned with the following error " \ "message:\n%s\n",prog_name,strerror(errno)); printf("Finished formatting the device.\n"); + printf("Rereading the partition table... "); + rc=ioctl(fd,BLKRRPART,NULL); + if (rc) { + ERRMSG("%s: error during rereading the partition " \ + "table: %s.\n",prog_name,strerror(errno)); + } else printf("done.\n"); + break; } @@ -473,6 +481,7 @@ int devfile_specified,devno_specified,range_specified; /******************* initialization ********************/ + prog_name=argv[0]; endptr=NULL; @@ -617,7 +626,7 @@ str=check_param(CHECK_ALL,format_params); if (str!=NULL) ERRMSG_EXIT(EXIT_MISUSE,"%s: %s\n",prog_name,str); - /*************** issue the real command *****************/ + /******* issue the real command and reread part table *******/ do_format_dasd(dev_name,format_params,testmode,verbosity, withoutprompt); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/hwc_cntl_key/Makefile linux.16p3/arch/s390/tools/hwc_cntl_key/Makefile --- linux.vanilla/arch/s390/tools/hwc_cntl_key/Makefile Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/tools/hwc_cntl_key/Makefile Mon May 15 16:31:20 2000 @@ -0,0 +1,11 @@ +CROSS_COMPILE = s390- + +all: hwc_cntl_key + +hwc_cntl_key: hwc_cntl_key.c + $(CROSS_COMPILE)gcc -o $@ $^ + $(STRIP) $@ + +clean: + rm -f hwc_cntl_key.c + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/hwc_cntl_key/hwc_cntl_key.c linux.16p3/arch/s390/tools/hwc_cntl_key/hwc_cntl_key.c --- linux.vanilla/arch/s390/tools/hwc_cntl_key/hwc_cntl_key.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/tools/hwc_cntl_key/hwc_cntl_key.c Mon May 15 16:31:20 2000 @@ -0,0 +1,69 @@ +/* + * small application to set string that will be used as CNTL-C + * employing a HWC terminal ioctl command + * + * returns: number of written or read characters + * + * Copyright (C) 2000 IBM Corporation + * Author(s): Martin Peschke + */ + +#include +#include + +/* everything about the HWC terminal driver ioctl-commands */ +#include "../../../../drivers/s390/char/sclp_tty.h" + +/* standard input, should be our HWC tty */ +#define DESCRIPTOR 0 + +int main(int argc, char *argv[], char *env[]) +{ + unsigned char buf[HWC_TTY_MAX_CNTL_SIZE]; + + if (argc >= 2) { + if (strcmp(argv[1], "c") == 0 || + strcmp(argv[1], "C") == 0 || + strcmp(argv[1], "INTR_CHAR") == 0) { + if (argc == 2) { + ioctl(DESCRIPTOR, TIOCHWCTTYGINTRC, buf); + printf("%s\n", buf); + return strlen(buf); + } else return ioctl(DESCRIPTOR, TIOCHWCTTYSINTRC, argv[2]); +// currently not yet implemented in HWC terminal driver +#if 0 + } else if (strcmp(argv[1], "d") == 0 || + strcmp(argv[1], "D") == 0 || + strcmp(argv[1], "EOF_CHAR") == 0) { + if (argc == 2) { + ioctl(DESCRIPTOR, TIOCHWCTTYGEOFC, buf); + printf("%s\n", buf); + return strlen(buf); + } else return ioctl(DESCRIPTOR, TIOCHWCTTYSEOFC, argv[2]); + } else if (strcmp(argv[1], "z") == 0 || + strcmp(argv[1], "Z") == 0 || + strcmp(argv[1], "SUSP_CHAR") == 0) { + if (argc == 2) { + ioctl(DESCRIPTOR, TIOCHWCTTYGSUSPC, buf); + printf("%s\n", buf); + return strlen(buf); + } else return ioctl(DESCRIPTOR, TIOCHWCTTYSSUSPC, argv[2]); + } else if (strcmp(argv[1], "n") == 0 || + strcmp(argv[1], "N") == 0 || + strcmp(argv[1], "NEW_LINE") == 0) { + if (argc == 2) { + ioctl(DESCRIPTOR, TIOCHWCTTYGNL, buf); + printf("%s\n", buf); + return strlen(buf); + } else return ioctl(DESCRIPTOR, TIOCHWCTTYSNL, argv[2]); +#endif + } + } + + printf("usage: hwc_cntl_key []\n"); + printf(" ::= \"c\" | \"C\" | \"INTR_CHAR\" |\n"); + printf(" \"d\" | \"D\" | \"EOF_CHAR\" |\n"); + printf(" \"z\" | \"Z\" | \"SUSP_CHAR\" |\n"); + printf(" \"n\" | \"N\" | \"NEW_LINE\"\n"); + return -1; +} diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/silo/Makefile linux.16p3/arch/s390/tools/silo/Makefile --- linux.vanilla/arch/s390/tools/silo/Makefile Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/tools/silo/Makefile Mon May 15 16:31:20 2000 @@ -1,7 +1,14 @@ all: silo +silo.o: silo.c + $(CROSS_COMPILE)gcc -c -o silo.o -O2 silo.c + +cfg.o: cfg.c + $(CROSS_COMPILE)gcc -c -o cfg.o -O2 cfg.c + silo: silo.o cfg.o $(CROSS_COMPILE)gcc -o $@ $^ + $(STRIP) $@ clean: rm -f *.o silo diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/silo/silo.8 linux.16p3/arch/s390/tools/silo/silo.8 --- linux.vanilla/arch/s390/tools/silo/silo.8 Thu Jan 1 01:00:00 1970 +++ linux.16p3/arch/s390/tools/silo/silo.8 Mon May 15 16:31:20 2000 @@ -0,0 +1,117 @@ +.TH SILO 8 "Thu Feb 17 2000" +.UC 4 +.SH NAME +silo \- preparing a DASD to become an IPL device +.SH SYNOPSIS +\fBsilo\fR -d \fIipldevice\fR [-hV?] [-t[\fI#\fR]] [-v[\fI#\fR]] + [-F \fIconfig-file\fR] [-b \fIbootsector\fR] + [-f \fIimage\fR] [-p \fIparameterfile\fR] [-B \fIbootmap\fR] +.SH DESCRIPTION +\fBsilo\fR makes a DASD an IPLable volume. All files needed for IPL must +reside on that volume, namely the \fIimage\fR, the \FIparameterline\fR and +the bootmap. +Only one IPLable image per volume is supported. Currently we require an ECKD +type DASD with a blocksize of at least 2048 bytes to IPL. By default silo +does \fBnot\fR modify anything on your disk, but prints out its actions. + +\fBWARNING\fR: Incautious usage of \fBsilo\fR can leave your system in a +state that is not IPLable! + +There are some defaults for the most common parameters compiled into the +binary. You can overwrite these defaults by your own using /etc/silo.conf +or another config file specified by \fB-F\fR \fIconfig-file\fR. All values +set by defaults or the config file can be overwritten using the commandline +options of silo. + +The config file recognizes the following statements: +.TP +\fBipldevice\fR=\fIdevicenode\fR +sets the ipldevice to devicenode. The device node specified must be the node +of the 'full' device and not one of a partition. + +.TP +\fBappend\fR=\fIlist of parameters\fR +sets additional parameters to be added to the parmfile. These parameters are +added to any parmfile specified on the command line. The old parameter file +is preserved and a new one is created with a temporary name. + +.TP +\fBimage\fR=\fIimage\fR +sets the name of the image to be IPLed from that volume. The default name +is \fI./image\fR. + +.TP +\fBbootsect\fR=\fIbootsect\fR +sets the name of the bootsector to be used as IPL record for that volume. +The default name is \fI/boot/ipleckd.boot\fR. + +.TP +\fBmap\fR=\fIbootmap\fR +sets the name of the bootmap to hold the map information needen during IPL. +The default name is \fI./boot.map\fR. In testonly mode this name is replaced +by a temporary name. +.TP +\fBparmfile\fR=\fIparameter file\fR +sets the name of the parameter file holding the kernel parameters to be used +during setup of the kernel. The default name is \fI./parmfile\fR. + +.TP +\fBramdisk\fR=\fIramdisk image\fR +optionally sets the name of a ramdisk image to be used as an initial ramdisk. + +.TP +\fBroot\fR=\fIdevice node\fR +sets the device holding the root device of the IPLed system. + +.TP +\fBreadonly\fR +sets the flag to mount thedevice holding the root device of the IPLed system. +in readonly mode, before the final mount is done by /etc/fstab. + +.TP +\fBverbose\fR=\fIlevel\fR +sets the level of verbosity to \fIlevel\fR. + +.TP +\fBtestlevel\fR=\fIlevel\fR +decreases the testing level (from 2) by \fIlevel\fR. + +.SH OPTIONS +.TP +\fB-t\fR [\fI#\fR] +decreases the testing level by one, or \fi#\fR, rsp. By default the testing +level is set to 2, which means that no modifications are made to the disk. +A testing level of 1 means, that a bootmap is generated with a temporary +filename, but the IPL records of the disk are not modified. Only with a +testing level of 0 or below, the disk is really made IPLable. + +.TP +\fB-v\fR [\fI#\fR] +Increases verbosity, or sets verbosity to \fI#\fR, rsp. + +.TP +\fB-V\fR +Print version number and exit. + +.SH FILES +.TP +\fI/etc/silo.conf\fR the default configuration file. +\fI/boot/ipleckd.boot\fR the default bootsector for ECKD devices. +\fI/boot/iplfba.boot\fR the bootsector for FBA devices. +\fI./boot.map\fR the default name of the bootmap. +\fI./image\fR the default name of the kernel image. +\fI./parmfile\fR the default name of the parameter file. +\fI/tmp/silodev\fR a device node which is created temporarily. + +.SH BUGS +.TP +IPL from FBA disks is not yet supported. +.TP +When \fBsilo\fR aborts it does not at all clean up its temporary files. +.TP +\fBsilo\fR must be run in a directory residing on the device you want to IPL. + +.SH AUTHOR +.nf +This man-page was written by Holger Smolinski +.fi diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/silo/silo.c linux.16p3/arch/s390/tools/silo/silo.c --- linux.vanilla/arch/s390/tools/silo/silo.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/tools/silo/silo.c Mon May 15 16:31:20 2000 @@ -3,8 +3,10 @@ * * S390 version * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation - * Author(s): Holger Smolinski * + * Report bugs to: + * + * Author(s): Holger Smolinski * Fritz Elfert contributed support for * /etc/silo.conf based on Intel's lilo */ @@ -37,6 +39,7 @@ { cft_strg, "root", NULL, NULL,NULL }, { cft_flag, "readonly", NULL, NULL,NULL }, { cft_strg, "verbose", NULL, NULL,NULL }, + { cft_strg, "testlevel", NULL, NULL,NULL }, { cft_end, NULL, NULL, NULL,NULL } }; @@ -46,6 +49,10 @@ /* end */ #define SILO_CFG "/etc/silo.conf" +#define SILO_IMAGE "./image" +#define SILO_BOOTMAP "./boot.map" +#define SILO_PARMFILE "./parmfile" +#define SILO_BOOTSECT "/boot/ipleckd.boot" #define PRINT_LEVEL(x,y...) if ( silo_options.verbosity >= x ) printf(y) #define ERROR_LEVEL(x,y...) if ( silo_options.verbosity >= x ) fprintf(stderr,y) @@ -63,31 +70,26 @@ struct silo_options { short int verbosity; - struct - { - unsigned char testonly; - } - flags; + short int testlevel; char *image; char *ipldevice; char *parmfile; char *ramdisk; char *bootsect; char *conffile; + char *bootmap; } silo_options = { 1, /* verbosity */ - { - 0, /* testonly */ - } - , - "./image", /* image */ + 2, /* testlevel */ + SILO_IMAGE, /* image */ NULL, /* ipldevice */ - NULL, /* parmfile */ + SILO_PARMFILE, /* parmfile */ NULL, /* initrd */ - "ipleckd.boot", /* bootsector */ - SILO_CFG /* silo.conf file */ + SILO_BOOTSECT, /* bootsector */ + SILO_CFG, /* silo.conf file */ + SILO_BOOTMAP, /* boot.map */ }; struct blockdesc @@ -114,9 +116,10 @@ printf ("-p parmfile : set parameter file to parmfile\n"); printf ("-b bootsect : set bootsector to bootsect\n"); printf ("Additional options\n"); + printf ("-B bootmap:\n"); printf ("-v: increase verbosity level\n"); printf ("-v#: set verbosity level to #\n"); - printf ("-t: toggle testonly flag\n"); + printf ("-t: decrease testing level\n"); printf ("-h: print this message\n"); printf ("-?: print this message\n"); printf ("-V: print version\n"); @@ -125,45 +128,70 @@ int read_cfg(struct silo_options *o) { + char *tmp; if (access(o->conffile, R_OK) && (errno == ENOENT)) return 0; /* If errno != ENOENT, let cfg_open report an error */ cfg_open(o->conffile); cfg_parse(cf_options); - o->ipldevice = cfg_get_strg(cf_options, "ipldevice"); - o->image = cfg_get_strg(cf_options, "image"); - o->parmfile = cfg_get_strg(cf_options, "parmfile"); + tmp = cfg_get_strg(cf_options, "ipldevice"); + if ( ! o->ipldevice && tmp ) + o->ipldevice = tmp; + tmp = cfg_get_strg(cf_options, "image"); + if ( ! strncmp(o-> image,SILO_IMAGE,strlen(SILO_IMAGE)) && tmp ) + o->image = tmp; + tmp = cfg_get_strg(cf_options, "parmfile"); + if ( !strncmp(o->parmfile,SILO_PARMFILE,strlen(SILO_PARMFILE)) && tmp) + o->parmfile = tmp; + if ( ! o -> ramdisk ) o->ramdisk = cfg_get_strg(cf_options, "ramdisk"); - o->bootsect = cfg_get_strg(cf_options, "bootsect"); - if (cfg_get_strg(cf_options, "verbose")) { + tmp = cfg_get_strg(cf_options, "bootsect"); + if ( !strncmp(o -> bootsect,SILO_BOOTSECT,strlen(SILO_BOOTSECT))&&tmp) + o->bootsect = tmp; + tmp = cfg_get_strg(cf_options, "map") ; + if ( !strncmp(o -> bootmap,SILO_BOOTMAP,strlen(SILO_BOOTMAP)) && tmp) + o->bootmap = tmp; + tmp = cfg_get_strg(cf_options, "verbose"); + if ( tmp ) { unsigned short v; - sscanf (cfg_get_strg(cf_options, "verbose"), "%hu", &v); + sscanf (tmp, "%hu", &v); o->verbosity = v; } + tmp = cfg_get_strg(cf_options, "testlevel"); + if ( tmp ) { + unsigned short t; + sscanf (tmp, "%hu", &t); + o->testlevel += t; + } return 1; } char * -gen_tmpparm() +gen_tmpparm( char *pfile ) { char *append = cfg_get_strg(cf_options, "append"); char *root = cfg_get_strg(cf_options, "root"); int ro = cfg_get_flag(cf_options, "readonly"); - FILE *f; + FILE *f,*of; char *fn; + char c; char *tmpdir=NULL,*save=NULL; if (!append && !root && !ro) - return NULL; - - tmpdir=getenv("TMPDIR"); - if (tmpdir) { - NTRY( save=(char*)malloc(strlen(tmpdir))); - NTRY( strcpy(save,tmpdir)); - } - ITRY( setenv("TMPDIR",".",1)); + return pfile; + of = fopen(pfile, "r"); + if ( of ) { NTRY( fn = tempnam(NULL,"parm.")); - NTRY( f = fopen(fn, "w")); + } else { + fn = pfile; + } + NTRY( f = fopen(fn, "a+")); + if ( of ) { + while ( ! feof (of) ) { + c=fgetc(of); + fputc(c,f); + } + } if (root) fprintf(f, "root=%s ", root); if (ro) @@ -172,8 +200,8 @@ fprintf(f, "%s", append); fprintf(f, "\n"); fclose(f); - if ( save ) - ITRY( setenv("TMPDIR",save,1)); + fclose(of); + printf ("tempfile is %s\n",fn); return strdup(fn); } @@ -183,18 +211,13 @@ int rc = 0; int oc; - read_cfg(o); - while ((oc = getopt (argc, argv, "Vf:F:d:p:r:b:B:h?v::t")) != -1) + while ((oc = getopt (argc, argv, "Vf:F:d:p:r:b:B:h?v::t::")) != -1) { switch (oc) { case 'V': printf("silo version: %s\n",SILO_VERSION); exit(0); - case 't': - TOGGLE (o->flags.testonly); - PRINT_LEVEL (1, "Testonly flag is now %sactive\n", o->flags.testonly ? "" : "in"); - break; case 'v': { unsigned short v; @@ -205,6 +228,16 @@ PRINT_LEVEL (1, "Verbosity value is now %hu\n", o->verbosity); break; } + case 't': + { + unsigned short t; + if (optarg && sscanf (optarg, "%hu", &t)) + o->testlevel -= t; + else + o->testlevel--; + PRINT_LEVEL (1, "Testonly flag is now %d\n", o->testlevel); + break; + } case 'h': case '?': usage (); @@ -227,12 +260,14 @@ case 'b': GETARG (o->bootsect); break; + case 'B': + GETARG (o->bootmap); default: rc = EINVAL; break; } } - + read_cfg(o); return rc; } @@ -276,6 +311,7 @@ struct stat st; int bs = 1024; int l; + ITRY (stat (name, &dst)); if (S_ISREG (dst.st_mode)) { @@ -309,11 +345,19 @@ int crc = 0; if (!o->ipldevice || !o->image || !o->bootsect) { + if (!o->ipldevice) + fprintf(stderr,"ipldevice\n"); + if (!o->image) + fprintf(stderr,"image\n"); + if (!o->bootsect) + fprintf(stderr,"bootsect\n"); + usage (); exit (1); } - PRINT_LEVEL (1, "IPL device is: '%s'", o->ipldevice); + PRINT_LEVEL (1, "Testlevel is set to %d\n",o->testlevel); + PRINT_LEVEL (1, "IPL device is: '%s'", o->ipldevice); ITRY (dev = verify_device (o->ipldevice)); PRINT_LEVEL (2, "...ok...(%d/%d)", (unsigned short) MAJOR (dev), (unsigned short) MINOR (dev)); PRINT_LEVEL (1, "\n"); @@ -323,18 +367,36 @@ PRINT_LEVEL (1, "...ok..."); PRINT_LEVEL (0, "\n"); + if ( o -> testlevel > 0 && + ! strncmp( o->bootmap, SILO_BOOTMAP,strlen(SILO_BOOTMAP) )) { + NTRY( o -> bootmap = tempnam(NULL,"boot.")); + } + PRINT_LEVEL (0, "bootmap is set to: '%s'", o->bootmap); + if ( access ( o->bootmap, O_RDWR ) == -1 ) { + if ( errno == ENOENT ) { + ITRY (creat ( o-> bootmap, O_RDWR )); + } else { + PRINT_LEVEL(1,"Cannot acces bootmap file '%s': %s\n",o->bootmap, + strerror(errno)); + } + } + ITRY (verify_file (o->bootmap, dev)); + PRINT_LEVEL (1, "...ok..."); + PRINT_LEVEL (0, "\n"); + PRINT_LEVEL (0, "Kernel image is: '%s'", o->image); ITRY (verify_file (o->image, dev)); PRINT_LEVEL (1, "...ok..."); PRINT_LEVEL (0, "\n"); - if (o->parmfile) - { - PRINT_LEVEL (0, "parameterfile is: '%s'", o->parmfile); + PRINT_LEVEL (0, "original parameterfile is: '%s'", o->parmfile); + ITRY (verify_file (o->parmfile, dev)); + PRINT_LEVEL (1, "...ok..."); + o->parmfile = gen_tmpparm(o->parmfile); + PRINT_LEVEL (0, "final parameterfile is: '%s'", o->parmfile); ITRY (verify_file (o->parmfile, dev)); PRINT_LEVEL (1, "...ok..."); PRINT_LEVEL (0, "\n"); - } if (o->ramdisk) { @@ -411,35 +473,34 @@ } int -write_bootsect (char *ipldevice, char *bootsect, struct blocklist *blklst) +write_bootsect (struct silo_options *o, struct blocklist *blklst) { int i; int s_fd, d_fd, b_fd, bd_fd; struct stat s_st, d_st, b_st; int rc=0; int bs, boots; - char *mapname; char *tmpdev; char buffer[4096]={0,}; - ITRY (d_fd = open (ipldevice, O_RDWR | O_SYNC)); + ITRY (d_fd = open (o->ipldevice, O_RDWR | O_SYNC)); ITRY (fstat (d_fd, &d_st)); - if (!(mapname = cfg_get_strg(cf_options, "map"))) - mapname = "boot.map"; - ITRY (s_fd = open (mapname, O_RDWR | O_TRUNC | O_CREAT | O_SYNC)); - ITRY (verify_file (bootsect, d_st.st_rdev)); + ITRY (s_fd = open (o->bootmap, O_RDWR | O_TRUNC | O_CREAT | O_SYNC)); + ITRY (verify_file (o->bootsect, d_st.st_rdev)); for (i = 0; i < blklst->ix; i++) { int offset = blklst->blk[i].off; int addrct = blklst->blk[i].addr | (blklst->blk[i].ct & 0xff); PRINT_LEVEL (1, "ix %i: offset: %06x count: %02x address: 0x%08x\n", i, offset, blklst->blk[i].ct & 0xff, blklst->blk[i].addr); + if ( o->testlevel <= 1 ) { NTRY (write (s_fd, &offset, sizeof (int))); NTRY (write (s_fd, &addrct, sizeof (int))); } + } ITRY (ioctl (s_fd,FIGETBSZ, &bs)); - ITRY (stat (mapname, &s_st)); + ITRY (stat (o->bootmap, &s_st)); if (s_st.st_size > bs ) { - ERROR_LEVEL (0,"%s is larger than one block\n", mapname); + ERROR_LEVEL (0,"%s is larger than one block\n", o->bootmap); rc = -1; errno = EINVAL; } @@ -454,11 +515,11 @@ close(s_fd); ITRY (unlink(tmpdev)); /* Now patch the bootsector */ - ITRY (b_fd = open (bootsect, O_RDONLY)); + ITRY (b_fd = open (o->bootsect, O_RDONLY)); NTRY (read (b_fd, buffer, 4096)); memset (buffer + 0xe0, 0, 8); *(int *) (buffer + 0xe0) = boots; - if ( ! silo_options.flags.testonly ) { + if ( o -> testlevel <= 0 ) { NTRY (write (d_fd, buffer, 4096)); NTRY (write (d_fd, buffer, 4096)); } @@ -471,7 +532,6 @@ do_silo (struct silo_options *o) { int rc = 0; - char *tmp_parmfile = NULL; int device_fd; int image_fd; @@ -482,19 +542,11 @@ { ITRY (add_file_to_blocklist (o->parmfile, &blklist, 0x00008000)); } - else - { - if ((tmp_parmfile = gen_tmpparm())) - ITRY (add_file_to_blocklist (tmp_parmfile, &blklist, 0x00008000)); - } if (o->ramdisk) { ITRY (add_file_to_blocklist (o->ramdisk, &blklist, 0x00800000)); } - ITRY (write_bootsect (o->ipldevice, o->bootsect, &blklist)); - if (tmp_parmfile) - ITRY (remove (tmp_parmfile)); - + ITRY (write_bootsect (o, &blklist)); return rc; } @@ -502,8 +554,20 @@ main (int argct, char *argv[]) { int rc = 0; + char *save=NULL; + char *tmpdir=getenv("TMPDIR"); + if (tmpdir) { + NTRY( save=(char*)malloc(strlen(tmpdir)+1)); + NTRY( strncpy(save,tmpdir,strlen(tmpdir)+1)); + } + ITRY( setenv("TMPDIR",".",1)); ITRY (parse_options (&silo_options, argct, argv)); ITRY (verify_options (&silo_options)); + if ( silo_options.testlevel > 0 ) { + printf ("WARNING: silo does not modify your volume. Use -t2 to change IPL records\n"); + } ITRY (do_silo (&silo_options)); + if ( save ) + ITRY( setenv("TMPDIR",save,1)); return rc; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/s390/tools/silo/silo.conf linux.16p3/arch/s390/tools/silo/silo.conf --- linux.vanilla/arch/s390/tools/silo/silo.conf Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/s390/tools/silo/silo.conf Mon May 15 16:31:20 2000 @@ -1,7 +1,7 @@ -ipldevice = /dev/dasd00 +ipldevice = /dev/dasda image = /boot/image bootsect = /boot/ipleckd.boot map = /boot/boot.map root = /dev/dasd01 readonly -append = "dasd=200-20f" +append = "dasd=200-20f noinitrd" diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/sparc64/kernel/ioctl32.c linux.16p3/arch/sparc64/kernel/ioctl32.c --- linux.vanilla/arch/sparc64/kernel/ioctl32.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/sparc64/kernel/ioctl32.c Mon May 15 18:01:41 2000 @@ -1437,11 +1437,21 @@ __kernel_caddr_t32 buf; }; +struct cdrom_generic_command32 { + unsigned char cmd[CDROM_PACKET_SIZE]; + __kernel_caddr_t32 buffer; + unsigned int buflen; + int stat; + __kernel_caddr_t32 sense; + __kernel_caddr_t32 reserved[3]; +}; + static int cdrom_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) { mm_segment_t old_fs = get_fs(); struct cdrom_read cdread; struct cdrom_read_audio cdreadaudio; + struct cdrom_generic_command cgc; __kernel_caddr_t32 addr; char *data = 0; void *karg; @@ -1476,6 +1486,17 @@ return -ENOMEM; cdreadaudio.buf = data; break; + case CDROM_SEND_PACKET: + karg = &cgc; + err = copy_from_user(cgc.cmd, &((struct cdrom_generic_command32 *)arg)->cmd, sizeof(cgc.cmd)); + err |= __get_user(addr, &((struct cdrom_generic_command32 *)arg)->buffer); + err |= __get_user(cgc.buflen, &((struct cdrom_generic_command32 *)arg)->buflen); + if (err) + return -EFAULT; + if ((data = kmalloc(cgc.buflen, GFP_KERNEL)) == NULL) + return -ENOMEM; + cgc.buffer = data; + break; default: do { static int count = 0; @@ -1501,11 +1522,14 @@ case CDROMREADAUDIO: err = copy_to_user((char *)A(addr), data, cdreadaudio.nframes * 2352); break; + case CDROM_SEND_PACKET: + err = copy_to_user((char *)A(addr), data, cgc.buflen); default: break; } -out: if (data) kfree(data); - return err; +out: if (data) + kfree(data); + return err ? -EFAULT : 0; } struct loop_info32 { @@ -1996,6 +2020,8 @@ case HDIO_SET_NICE: case BLKROSET: case BLKROGET: + case BLKELVGET: + case BLKELVSET: /* 0x02 -- Floppy ioctls */ case FDMSGON: @@ -2248,6 +2274,12 @@ case CDROM_LOCKDOOR: case CDROM_DEBUG: case CDROM_GET_CAPABILITY: + case DVD_READ_STRUCT: + case DVD_WRITE_STRUCT: + case DVD_AUTH: + case CDROM_SEND_PACKET: + case CDROM_NEXT_WRITABLE: + case CDROM_LAST_WRITTEN: /* Big L */ case LOOP_SET_FD: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/sparc64/kernel/sparc64_ksyms.c linux.16p3/arch/sparc64/kernel/sparc64_ksyms.c --- linux.vanilla/arch/sparc64/kernel/sparc64_ksyms.c Fri Apr 21 12:45:48 2000 +++ linux.16p3/arch/sparc64/kernel/sparc64_ksyms.c Mon May 1 00:58:10 2000 @@ -234,7 +234,7 @@ /* sparc library symbols */ EXPORT_SYMBOL(bcopy); EXPORT_SYMBOL(__strlen); -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) EXPORT_SYMBOL(strlen); #endif EXPORT_SYMBOL(strnlen); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/genhd.c linux.16p3/drivers/block/genhd.c --- linux.vanilla/drivers/block/genhd.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/genhd.c Mon May 15 16:41:28 2000 @@ -165,14 +165,6 @@ SYS_IND(p) == LINUX_EXTENDED_PARTITION); } -static int sector_partition_scale(kdev_t dev) -{ - if (hardsect_size[MAJOR(dev)] != NULL) - return (hardsect_size[MAJOR(dev)][MINOR(dev)]/512); - else - return (1); -} - static unsigned int get_ptable_blocksize(kdev_t dev) { int ret = 1024; @@ -234,20 +226,23 @@ #define MSDOS_LABEL_MAGIC 0xAA55 -static void extended_partition(struct gendisk *hd, kdev_t dev) +static void extended_partition(struct gendisk *hd, kdev_t dev, int sector_size) { struct buffer_head *bh; struct partition *p; unsigned long first_sector, first_size, this_sector, this_size; int mask = (1 << hd->minor_shift) - 1; - int sector_size = sector_partition_scale(dev); int i; + int loopct = 0; /* number of links followed + without finding a data partition */ first_sector = hd->part[MINOR(dev)].start_sect; first_size = hd->part[MINOR(dev)].nr_sects; this_sector = first_sector; while (1) { + if (++loopct > 100) + return; if ((current_minor & mask) == 0) return; if (!(bh = bread(dev,0,get_ptable_blocksize(dev)))) @@ -295,6 +290,7 @@ current_minor++; if ((current_minor & mask) == 0) goto done; + loopct = 0; } /* * Next, process the (first) extended partition, if present. @@ -330,6 +326,7 @@ struct buffer_head *bh; struct solaris_x86_vtoc *v; struct solaris_x86_slice *s; + int mask = (1 << hd->minor_shift) - 1; int i; if(!(bh = bread(dev, 0, get_ptable_blocksize(dev)))) @@ -346,10 +343,14 @@ return; } for(i=0; iv_slice[i]; if (s->s_size == 0) continue; + printk(" [s%d]", i); /* solaris partitions are relative to current MS-DOS * one but add_partition starts relative to sector @@ -486,7 +487,8 @@ struct partition *p; unsigned char *data; int mask = (1 << hd->minor_shift) - 1; - int sector_size = sector_partition_scale(dev); + int sector_size; + int disk_number_of_sects; #ifdef CONFIG_BSD_DISKLABEL /* no bsd disklabel as a default */ kdev_t bsd_kdev = 0; @@ -501,6 +503,15 @@ printk(" unable to read partition table\n"); return -1; } + + /* in some cases (backwards compatibility) we'll adjust the + * sector_size below + */ + if (hardsect_size[MAJOR(dev)] != NULL) + sector_size=hardsect_size[MAJOR(dev)][MINOR(dev)]/512; + else + sector_size=1; + data = bh->b_data; /* In some cases we modify the geometry */ /* of the drive (below), so ensure that */ @@ -585,6 +596,35 @@ } #endif /* CONFIG_BLK_DEV_IDE */ + /* + * The Linux code now honours the rules the MO people set and + * is 'DOS compatible' - sizes are scaled by the media block + * size not 512 bytes. The following is a backwards + * compatibility check. If a 1k or greater sectorsize disk + * (1024, 2048, etc) was created under a pre 2.2 kernel, + * the partition table wrongly used units of 512 instead of + * units of sectorsize (1024, 2048, etc.) The below check attempts + * to detect a partition table created under the older kernel, and + * if so detected, it will reset the a sector scale factor to 1 (i.e. + * no scaling). + */ + disk_number_of_sects = NR_SECTS((&hd->part[MINOR(dev)])); + for (i = 0; i < 4; i++) { + struct partition *q = &p[i]; + if (NR_SECTS(q)) { + if (((first_sector+(START_SECT(q)+NR_SECTS(q))*sector_size) > + (disk_number_of_sects+1)) && + ((first_sector+(START_SECT(q)+NR_SECTS(q)) <= + disk_number_of_sects))) { + char buf[MAX_DISKNAME_LEN]; + printk(" %s: RESETTINGING SECTOR SCALE from %d to 1", + disk_name(hd, MINOR(dev), buf), sector_size); + sector_size=1; + break; + } + } + } + current_minor += 4; /* first "extra" minor (for extended partitions) */ for (i=1 ; i<=4 ; minor++,i++,p++) { if (!NR_SECTS(p)) @@ -601,7 +641,7 @@ */ hd->sizes[minor] = hd->part[minor].nr_sects >> (BLOCK_SIZE_BITS - 9); - extended_partition(hd, MKDEV(hd->major, minor)); + extended_partition(hd, MKDEV(hd->major, minor), sector_size); printk(" >"); /* prevent someone doing mkfs or mkswap on an extended partition, but leave room for LILO */ @@ -1335,6 +1375,114 @@ #endif /* CONFIG_ULTRIX_PARTITION */ +#ifdef CONFIG_ARCH_S390 +#include +#include "../s390/block/dasd_types.h" + +dasd_information_t **dasd_information = NULL; + +typedef enum { + ibm_partition_none = 0, + ibm_partition_lnx1 = 1, + ibm_partition_vol1 = 3, + ibm_partition_cms1 = 4 +} ibm_partition_t; + +static ibm_partition_t +get_partition_type ( char * type ) +{ + static char lnx[5]="LNX1"; + static char vol[5]="VOL1"; + static char cms[5]="CMS1"; + if ( ! strncmp ( lnx, "LNX1",4 ) ) { + ASCEBC(lnx,4); + ASCEBC(vol,4); + ASCEBC(cms,4); + } + if ( ! strncmp (type,lnx,4) || + ! strncmp (type,"LNX1",4) ) + return ibm_partition_lnx1; + if ( ! strncmp (type,vol,4) ) + return ibm_partition_vol1; + if ( ! strncmp (type,cms,4) ) + return ibm_partition_cms1; + return ibm_partition_none; +} + +int +ibm_partition (struct gendisk *hd, kdev_t dev, int first_sector) +{ + struct buffer_head *bh; + ibm_partition_t partition_type; + char type[5] = {0,}; + char name[7] = {0,}; + int di = MINOR(dev) >> hd->minor_shift; + if ( ! get_ptable_blocksize(dev) ) + return 0; + if ( ! dasd_information ) + return 0; + if ( ( bh = bread( dev, + dasd_information[di]->sizes.label_block, + dasd_information[di]->sizes.bp_sector ) ) != NULL ) { + strncpy ( type,bh -> b_data, 4); + strncpy ( name,bh -> b_data + 4, 6); + } else { + return 0; + } + if ( (*(char *)bh -> b_data) & 0x80 ) { + EBCASC(name,6); + } + switch ( partition_type = get_partition_type(type) ) { + case ibm_partition_lnx1: + printk ( "(LNX1)/%6s:",name); + add_partition( hd, MINOR(dev) + 1, + (dasd_information[di]->sizes.label_block + 1) << + dasd_information[di]->sizes.s2b_shift, + (dasd_information [di]->sizes.blocks - + dasd_information[di]->sizes.label_block - 1) << + dasd_information[di]->sizes.s2b_shift,0 ); + break; + case ibm_partition_vol1: + printk ( "(VOL1)/%6s:",name); + break; + case ibm_partition_cms1: + printk ( "(CMS1)/%6s:",name); + if (* (((long *)bh->b_data) + 13) == 0) { + /* disk holds a CMS filesystem */ + add_partition( hd, MINOR(dev) + 1, + (dasd_information [di]->sizes.label_block + 1) << + dasd_information [di]->sizes.s2b_shift, + (dasd_information [di]->sizes.blocks - + dasd_information [di]->sizes.label_block) << + dasd_information [di]->sizes.s2b_shift,0 ); + printk ("(CMS)"); + } else { + /* disk is reserved minidisk */ + long *label=(long*)bh->b_data; + int offset = label[13]; + int size = (label[7]-1-label[13])*(label[3]>>9); + add_partition( hd, MINOR(dev) + 1, + offset << dasd_information [di]->sizes.s2b_shift, + size<sizes.s2b_shift,0 ); + printk ("(MDSK)"); + } + break; + case ibm_partition_none: + printk ( "(nonl)/ :"); + add_partition( hd, MINOR(dev) + 1, + (dasd_information [di]->sizes.label_block + 1) << + dasd_information [di]->sizes.s2b_shift, + (dasd_information [di]->sizes.blocks - + dasd_information [di]->sizes.label_block - 1) << + dasd_information [di]->sizes.s2b_shift,0 ); + break; + } + printk ( "\n" ); + bforget(bh); + return 1; +} +#endif + static void check_partition(struct gendisk *hd, kdev_t dev) { static int first_time = 1; @@ -1386,6 +1534,10 @@ #endif #ifdef CONFIG_ULTRIX_PARTITION if(ultrix_partition(hd, dev, first_sector)) + return; +#endif +#ifdef CONFIG_ARCH_S390 + if (ibm_partition (hd, dev, first_sector)) return; #endif printk(" unknown partition table\n"); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-cd.c linux.16p3/drivers/block/ide-cd.c --- linux.vanilla/drivers/block/ide-cd.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide-cd.c Mon May 15 12:14:35 2000 @@ -2,7 +2,7 @@ * linux/drivers/block/ide-cd.c * Copyright (C) 1994, 1995, 1996 scott snyder * Copyright (C) 1996-1998 Erik Andersen - * Copyright (C) 1998, 1999 Jens Axboe + * Copyright (C) 1998-2000 Jens Axboe * * May be copied or modified under the terms of the GNU General Public * License. See linux/COPYING for more information. @@ -12,29 +12,20 @@ * * Suggestions are welcome. Patches that work are more welcome though. ;-) * For those wishing to work on this driver, please be sure you download - * and comply with the latest ATAPI standard. This document can be - * obtained by anonymous ftp from: + * and comply with the latest Mt. Fuji (SFF8090 version 4) and ATAPI + * (SFF-8020i rev 2.6) standards. These documents can be obtained by + * anonymous ftp from: * ftp://fission.dt.wdc.com/pub/standards/SFF_atapi/spec/SFF8020-r2.6/PS/8020r26.ps + * ftp://ftp.avc-pioneer.com/Mtfuji4/Spec/Fuji4r10.pdf * - * Drives that deviate from the ATAPI standard will be accomodated as much + * Drives that deviate from these standards will be accomodated as much * as possible via compile time or command-line options. Since I only have * a few drives, you generally need to send me patches... * * ---------------------------------- * TO DO LIST: - * -Implement Microsoft Media Status Notification per the spec at - * http://www.microsoft.com/hwdev/respec/storspec.htm - * This will allow us to get automagically notified when the media changes - * on ATAPI drives (something the stock ATAPI spec is lacking). Looks - * very cool. I discovered its existance the other day at work... - * -Query the drive to find what features are available before trying to - * use them (like trying to close the tray in drives that can't). * -Make it so that Pioneer CD DR-A24X and friends don't get screwed up on * boot - * -Integrate DVD-ROM support in driver. Thanks to Merete Gotsćd-Petersen - * of Pioneer Denmark for providing me with a drive for testing. - * -Implement Features and Profiles. - * * * ---------------------------------- * 1.00 Oct 31, 1994 -- Initial version. @@ -243,20 +234,58 @@ * Useful when using ide-cd in conjunction with * ide-scsi. TODO: non-modular way of doing the * same. - * - * 4.54 Sep 09, 1999 - Fixed start/stop error on some drives if the - * drive was locked. - * - Fixed read_toc header, size given was too large. - * - Fixed possible leaks in ioctl. - * - CDROMREADTOCENTRY now honors the cdte_format - * field, instead of forcing CDROM_LBA. - * - Mask out things the drive can't do instead of - * just telling people what the driver can do. + * + * 4.54 Aug 5, 1999 - Support for MMC2 class commands through the generic + * packet interface to cdrom.c. + * - Unified audio ioctl support, most of it. + * - cleaned up various deprecated verify_area(). + * - Added ide_cdrom_packet() as the interface for + * the Uniform generic_packet(). + * - bunch of other stuff, will fill in logs later. + * - report 1 slot for non-changers, like the other + * cd-rom drivers. don't report select disc for + * non-changers as well. + * - mask out audio playing, if the device can't do it. + * + * 4.55 Sep 1, 1999 - Eliminated the rest of the audio ioctls, except + * for CDROMREADTOC[ENTRY|HEADER]. Some of the drivers + * use this independently of the actual audio handling. + * They will disappear later when I get the time to + * do it cleanly. + * - Minimize the TOC reading - only do it when we + * know a media change has occured. + * - Moved all the CDROMREADx ioctls to the Uniform layer. + * - Heiko Eissfeldt supplied + * some fixes for CDI. + * - CD-ROM leaving door locked fix from Andries + * Brouwer + * - Erik Andersen unified + * commands across the various drivers and how + * sense errors are handled. + * + * 4.56 Sep 12, 1999 - Removed changer support - it is now in the + * Uniform layer. + * - Added partition based multisession handling. + * - Mode sense and mode select moved to the + * Uniform layer. + * - Fixed a problem with WPI CDS-32X drive - it + * failed the capabilities + * + * 4.57 never happened + * + * 4.58 May 1, 2000 - Fixed possible oops in ide_cdrom_get_last_session() + * - Fix locking mania and make ide_cdrom_reset relock + * - Stop spewing errors to log when magicdev polls with + * TEST_UNIT_READY on some drives. + * - Cleanup ACER50 stuff. + * - Integrate the ide_cdrom_packet from 2.3 to + * support DVD CSS ioctls. * *************************************************************************/ + +#define IDECD_VERSION "4.58" -#define IDECD_VERSION "4.54" - +#include #include #include #include @@ -266,6 +295,7 @@ #include #include #include + #include #include #include @@ -293,12 +323,11 @@ static -void cdrom_analyze_sense_data (ide_drive_t *drive, - struct atapi_request_sense *reqbuf, - struct packet_command *failed_command) +void cdrom_analyze_sense_data (ide_drive_t *drive, struct packet_command *pc, + struct request_sense *sense) { - if (reqbuf->sense_key == NOT_READY || - reqbuf->sense_key == UNIT_ATTENTION) { + if (sense->sense_key == NOT_READY || + sense->sense_key == UNIT_ATTENTION) { /* Make good and sure we've seen this potential media change. Some drives (i.e. Creative) fail to present the correct sense key in the error register. */ @@ -309,22 +338,21 @@ READ_SUBCHANNEL. Workman (and probably other programs) uses this command to poll the drive, and we don't want to fill the syslog with useless errors. */ - if (failed_command && - failed_command->c[0] == SCMD_READ_SUBCHANNEL) + if (pc && (pc->c[0] == GPCMD_READ_SUBCHANNEL)) return; } - if (failed_command && (failed_command->c[0] == TEST_UNIT_READY)) + if (pc && (pc->c[0] == GPCMD_TEST_UNIT_READY)) return; - if (reqbuf->error_code == 0x70 && reqbuf->sense_key == 0x02 - && ((reqbuf->asc == 0x3a && reqbuf->ascq == 0x00) || - (reqbuf->asc == 0x04 && reqbuf->ascq == 0x01))) + if (sense->error_code == 0x70 && sense->sense_key == 0x02 + && ((sense->asc == 0x3a && sense->ascq == 0x00) || + (sense->asc == 0x04 && sense->ascq == 0x01))) { /* * Suppress the following errors: - * "Medium not present", and "in progress of becoming ready", - * to keep the noise level down to a dull roar. + * "Medium not present", "in progress of becoming ready", + * and "writing" to keep the noise level down to a dull roar. */ return; } @@ -336,35 +364,38 @@ char buf[80]; printk ("ATAPI device %s:\n", drive->name); - if (reqbuf->error_code==0x70) + if (sense->error_code == 0x70) printk(" Error: "); - else if (reqbuf->error_code==0x71) + else if (sense->error_code == 0x71) printk(" Deferred Error: "); + else if (sense->error_code == 0x7f) + printk(" Vendor-specific Error: "); else printk(" Unknown Error Type: "); - if ( reqbuf->sense_key < ARY_LEN (sense_key_texts)) - s = sense_key_texts[reqbuf->sense_key]; + if (sense->sense_key < ARY_LEN(sense_key_texts)) + s = sense_key_texts[sense->sense_key]; else s = "bad sense key!"; - printk ("%s -- (Sense key=0x%02x)\n", s, reqbuf->sense_key); + printk ("%s -- (Sense key=0x%02x)\n", s, sense->sense_key); - if (reqbuf->asc == 0x40) { + if (sense->asc == 0x40) { sprintf (buf, "Diagnostic failure on component 0x%02x", - reqbuf->ascq); + sense->ascq); s = buf; } else { int lo=0, mid, hi=ARY_LEN (sense_data_texts); - unsigned short key = (reqbuf->asc << 8); - if ( ! (reqbuf->ascq >= 0x80 && reqbuf->ascq <= 0xdd) ) - key |= reqbuf->ascq; - + unsigned long key = (sense->sense_key << 16); + key |= (sense->asc << 8); + if ( ! (sense->ascq >= 0x80 && sense->ascq <= 0xdd) ) + key |= sense->ascq; s = NULL; while (hi > lo) { mid = (lo + hi) / 2; - if (sense_data_texts[mid].asc_ascq == key) { + if (sense_data_texts[mid].asc_ascq == key || + sense_data_texts[mid].asc_ascq == (0xff0000|key)) { s = sense_data_texts[mid].text; break; } @@ -376,53 +407,60 @@ } if (s == NULL) { - if (reqbuf->asc > 0x80) + if (sense->asc > 0x80) s = "(vendor-specific error)"; else s = "(reserved error code)"; } printk (" %s -- (asc=0x%02x, ascq=0x%02x)\n", - s, reqbuf->asc, reqbuf->ascq); + s, sense->asc, sense->ascq); - if (failed_command != NULL) { + if (pc != NULL) { int lo=0, mid, hi= ARY_LEN (packet_command_texts); s = NULL; while (hi > lo) { mid = (lo + hi) / 2; - if (packet_command_texts[mid].packet_command == failed_command->c[0]) { + if (packet_command_texts[mid].packet_command == pc->c[0]) { s = packet_command_texts[mid].text; break; } - else if (packet_command_texts[mid].packet_command > failed_command->c[0]) + else if (packet_command_texts[mid].packet_command > pc->c[0]) hi = mid; else lo = mid+1; } printk (" The failed \"%s\" packet command was: \n \"", s); - for (i=0; ic); i++) - printk ("%02x ", failed_command->c[i]); - printk ("\"\n"); + for (i = 0; i < sizeof(pc->c); i++) + printk("%02x ", pc->c[i]); + printk("\"\n"); + } + + /* The SKSV bit specifies validity of the sense_key_specific + * in the next two commands. It is bit 7 of the first byte. + * In the case of NOT_READY, if SKSV is set the drive can + * give us nice ETA readings. + */ + if (sense->sense_key == NOT_READY && (sense->sks[0] & 0x80)) { + int progress = (sense->sks[1] << 8 | sense->sks[2]) * 100; + printk(" Command is %02d%% complete\n", progress / 0xffff); + } - if (reqbuf->sense_key == ILLEGAL_REQUEST && - (reqbuf->sense_key_specific[0] & 0x80) != 0) { + if (sense->sense_key == ILLEGAL_REQUEST && + (sense->sks[0] & 0x80) != 0) { printk (" Error in %s byte %d", - (reqbuf->sense_key_specific[0] & 0x40) != 0 - ? "command packet" - : "command data", - (reqbuf->sense_key_specific[1] << 8) + - reqbuf->sense_key_specific[2]); - - if ((reqbuf->sense_key_specific[0] & 0x40) != 0) { - printk (" bit %d", - reqbuf->sense_key_specific[0] & 0x07); - } + (sense->sks[0] & 0x40) != 0 ? + "command packet" : "command data", + (sense->sks[1] << 8) + sense->sks[2]); + + if ((sense->sks[0] & 0x40) != 0) + printk (" bit %d", sense->sks[0] & 0x07); - printk ("\n"); + printk("\n"); } } @@ -431,92 +469,57 @@ /* Suppress printing unit attention and `in progress of becoming ready' errors when we're not being verbose. */ - if (reqbuf->sense_key == UNIT_ATTENTION || - (reqbuf->sense_key == NOT_READY && (reqbuf->asc == 4 || - reqbuf->asc == 0x3a))) + if (sense->sense_key == UNIT_ATTENTION || + (sense->sense_key == NOT_READY && (sense->asc == 4 || + sense->asc == 0x3a))) return; - printk ("%s: error code: 0x%02x sense_key: 0x%02x asc: 0x%02x ascq: 0x%02x\n", - drive->name, - reqbuf->error_code, reqbuf->sense_key, - reqbuf->asc, reqbuf->ascq); + printk("%s: error code: 0x%02x sense_key: 0x%02x asc: 0x%02x ascq: 0x%02x\n", + drive->name, sense->error_code, sense->sense_key, + sense->asc, sense->ascq); #endif /* not VERBOSE_IDE_CD_ERRORS */ } - -/* Fix up a possibly partially-processed request so that we can - start it over entirely, or even put it back on the request queue. */ -static void restore_request (struct request *rq) -{ - if (rq->buffer != rq->bh->b_data) { - int n = (rq->buffer - rq->bh->b_data) / SECTOR_SIZE; - rq->buffer = rq->bh->b_data; - rq->nr_sectors += n; - rq->sector -= n; - } - rq->current_nr_sectors = rq->bh->b_size >> SECTOR_BITS; -} - - -static void cdrom_queue_request_sense (ide_drive_t *drive, - struct semaphore *sem, - struct atapi_request_sense *reqbuf, - struct packet_command *failed_command) +static void cdrom_queue_request_sense(ide_drive_t *drive, + struct semaphore *sem, + struct request_sense *sense, + struct packet_command *failed_cmd) { struct cdrom_info *info = drive->driver_data; struct request *rq; - struct packet_command *pc; - int len; + struct packet_command *pc = &info->request_sense_pc; - /* If the request didn't explicitly specify where - to put the sense data, use the statically allocated structure. */ - if (reqbuf == NULL) - reqbuf = &info->sense_data; - - /* Make up a new request to retrieve sense information. */ - - pc = &info->request_sense_pc; - memset (pc, 0, sizeof (*pc)); - - /* The request_sense structure has an odd number of (16-bit) words, - which won't work well with 32-bit transfers. However, we don't care - about the last two bytes, so just truncate the structure down - to an even length. */ - len = sizeof (*reqbuf) / 4; - len *= 4; - - pc->c[0] = REQUEST_SENSE; - pc->c[4] = (unsigned char) len; - pc->buffer = (char *)reqbuf; - pc->buflen = len; - pc->sense_data = (struct atapi_request_sense *)failed_command; + if (sense == NULL) + sense = &info->sense_data; - /* stuff the sense request in front of our current request */ + memset(pc, 0, sizeof(struct packet_command)); + pc->c[0] = GPCMD_REQUEST_SENSE; + pc->c[4] = pc->buflen = 18; + pc->buffer = (char *) sense; + pc->sense = (struct request_sense *) failed_cmd; + /* stuff the sense request in front of our current request */ rq = &info->request_sense_request; - ide_init_drive_cmd (rq); + ide_init_drive_cmd(rq); rq->cmd = REQUEST_SENSE_COMMAND; - rq->buffer = (char *)pc; + rq->buffer = (char *) pc; rq->sem = sem; - (void) ide_do_drive_cmd (drive, rq, ide_preempt); + (void) ide_do_drive_cmd(drive, rq, ide_preempt); } - static void cdrom_end_request (int uptodate, ide_drive_t *drive) { struct request *rq = HWGROUP(drive)->rq; if (rq->cmd == REQUEST_SENSE_COMMAND && uptodate) { - struct packet_command *pc = (struct packet_command *) - rq->buffer; + struct packet_command *pc = (struct packet_command *)rq->buffer; cdrom_analyze_sense_data (drive, - (struct atapi_request_sense *) - (pc->buffer - pc->c[4]), - (struct packet_command *) - pc->sense_data); + (struct packet_command *) pc->sense, + (struct request_sense *) pc->buffer - pc->c[4]); } if (rq->cmd == READ && !rq->current_nr_sectors) uptodate = 1; + ide_end_request (uptodate, HWGROUP(drive)); } @@ -527,8 +530,9 @@ int *stat_ret) { struct request *rq = HWGROUP(drive)->rq; - int stat, err, sense_key, cmd; - + int stat, cmd, err, sense_key; + struct packet_command *pc; + /* Check for errors. */ stat = GET_STAT(); *stat_ret = stat; @@ -536,8 +540,8 @@ if (OK_STAT (stat, good_stat, BAD_R_STAT)) return 0; - /* Got an error. */ - err = IN_BYTE (IDE_ERROR_REG); + /* Get the IDE error register. */ + err = GET_ERR(); sense_key = err >> 4; if (rq == NULL) @@ -551,8 +555,7 @@ from the drive (probably while trying to recover from a former error). Just give up. */ - struct packet_command *pc = (struct packet_command *) - rq->buffer; + pc = (struct packet_command *) rq->buffer; pc->stat = 1; cdrom_end_request (1, drive); *startstop = ide_error (drive, "request sense failure", stat); @@ -561,23 +564,12 @@ } else if (cmd == PACKET_COMMAND) { /* All other functions, except for READ. */ - struct packet_command *pc = (struct packet_command *) - rq->buffer; struct semaphore *sem = NULL; + pc = (struct packet_command *) rq->buffer; /* Check for tray open. */ if (sense_key == NOT_READY) { cdrom_saw_media_change (drive); -#if 0 /* let the upper layers do the complaining */ - /* Print an error message to the syslog. - Exception: don't print anything if this - is a read subchannel command. This is - because workman constantly polls the drive - with this command, and we don't want - to uselessly fill up the syslog. */ - if (pc->c[0] != SCMD_READ_SUBCHANNEL) - printk ("%s: tray open or drive not ready\n", drive->name); -#endif } else if (sense_key == UNIT_ATTENTION) { /* Check for media change. */ cdrom_saw_media_change (drive); @@ -607,8 +599,8 @@ cdrom_end_request (1, drive); if ((stat & ERR_STAT) != 0) - cdrom_queue_request_sense (drive, sem, - pc->sense_data, pc); + cdrom_queue_request_sense(drive, sem, pc->sense, + pc); } else { /* Handle errors from READ requests. */ @@ -647,8 +639,7 @@ /* If we got a CHECK_CONDITION status, queue a request sense command. */ if ((stat & ERR_STAT) != 0) - cdrom_queue_request_sense (drive, - NULL, NULL, NULL); + cdrom_queue_request_sense(drive, NULL, NULL, NULL); } } @@ -657,6 +648,17 @@ return 1; } +static int cdrom_timer_expiry(ide_drive_t *drive) +{ + struct request *rq = HWGROUP(drive)->rq; + struct packet_command *pc = (struct packet_command *) rq->buffer; + unsigned long wait = 0; + + if (pc->c[0] == GPCMD_BLANK || pc->c[0] == GPCMD_FORMAT_UNIT) + wait = 60*60*HZ; + + return wait; +} /* Set up the device registers for transferring a packet command on DEV, expecting to later transfer XFERLEN bytes. HANDLER is the routine @@ -672,7 +674,7 @@ struct cdrom_info *info = drive->driver_data; /* Wait for the controller to be idle. */ - if (ide_wait_stat (&startstop, drive, 0, BUSY_STAT, WAIT_READY)) + if (ide_wait_stat(&startstop, drive, 0, BUSY_STAT, WAIT_READY)) return startstop; if (info->dma) @@ -685,13 +687,14 @@ OUT_BYTE (xferlen & 0xff, IDE_LCYL_REG); OUT_BYTE (xferlen >> 8 , IDE_HCYL_REG); - OUT_BYTE (drive->ctl, IDE_CONTROL_REG); + if (IDE_CONTROL_REG) + OUT_BYTE (drive->ctl, IDE_CONTROL_REG); if (info->dma) (void) (HWIF(drive)->dmaproc(ide_dma_begin, drive)); if (CDROM_CONFIG_FLAGS (drive)->drq_interrupt) { - ide_set_handler (drive, handler, WAIT_CMD); + ide_set_handler (drive, handler, WAIT_CMD, cdrom_timer_expiry); OUT_BYTE (WIN_PACKETCMD, IDE_COMMAND_REG); /* packet command */ return ide_started; } else { @@ -700,14 +703,13 @@ } } - /* Send a packet command to DRIVE described by CMD_BUF and CMD_LEN. The device registers must have already been prepared by cdrom_start_packet_command. HANDLER is the interrupt handler to call when the command completes or there's data ready. */ static ide_startstop_t cdrom_transfer_packet_command (ide_drive_t *drive, - char *cmd_buf, int cmd_len, + unsigned char *cmd_buf, int cmd_len, ide_handler_t *handler) { if (CDROM_CONFIG_FLAGS (drive)->drq_interrupt) { @@ -727,7 +729,7 @@ } /* Arm the interrupt handler. */ - ide_set_handler (drive, handler, WAIT_CMD); + ide_set_handler (drive, handler, WAIT_CMD, cdrom_timer_expiry); /* Send the command to the device. */ atapi_output_bytes (drive, cmd_buf, cmd_len); @@ -760,25 +762,16 @@ char *dest; - /* If we don't yet have a sector buffer, try to allocate one. - If we can't get one atomically, it's not fatal -- we'll just throw - the data away rather than caching it. */ - if (info->sector_buffer == NULL) { - info->sector_buffer = (char *) kmalloc (SECTOR_BUFFER_SIZE, - GFP_ATOMIC); - - /* If we couldn't get a buffer, - don't try to buffer anything... */ - if (info->sector_buffer == NULL) + /* If we couldn't get a buffer, don't try to buffer anything... */ + if (info->buffer == NULL) sectors_to_buffer = 0; - } /* If this is the first sector in the buffer, remember its number. */ if (info->nsectors_buffered == 0) info->sector_buffered = sector; /* Read the data into the buffer. */ - dest = info->sector_buffer + info->nsectors_buffered * SECTOR_SIZE; + dest = info->buffer + info->nsectors_buffered * SECTOR_SIZE; while (sectors_to_buffer > 0) { atapi_input_bytes (drive, dest, SECTOR_SIZE); --sectors_to_buffer; @@ -795,7 +788,6 @@ } } - /* * Check the contents of the interrupt reason register from the cdrom * and attempt to recover if there are problems. Returns 0 if everything's @@ -820,6 +812,12 @@ atapi_output_bytes (drive, &dum, sizeof (dum)); len -= sizeof (dum); } + } else if (ireason == 1) { + /* Some drives (ASUS) seem to tell us that status + * info is available. just get it and ignore. + */ + GET_STAT(); + return 0; } else { /* Drive wants a command packet, or invalid ireason... */ printk ("%s: cdrom_read_intr: bad interrupt reason %d\n", @@ -830,7 +828,6 @@ return -1; } - /* * Interrupt routine. Called when a read request has completed. */ @@ -907,8 +904,7 @@ /* First, figure out if we need to bit-bucket any of the leading sectors. */ - nskip = MIN ((int)(rq->current_nr_sectors - - (rq->bh->b_size >> SECTOR_BITS)), + nskip = MIN ((int)(rq->current_nr_sectors - (rq->bh->b_size >> SECTOR_BITS)), sectors_to_transfer); while (nskip > 0) { @@ -934,8 +930,7 @@ /* If the buffers are full, cache the rest of the data in our internal buffer. */ if (rq->current_nr_sectors == 0) { - cdrom_buffer_sectors (drive, - rq->sector, sectors_to_transfer); + cdrom_buffer_sectors(drive, rq->sector, sectors_to_transfer); sectors_to_transfer = 0; } else { /* Transfer data to the buffers. @@ -947,8 +942,7 @@ /* Read this_transfer sectors into the current buffer. */ while (this_transfer > 0) { - atapi_input_bytes (drive, - rq->buffer, SECTOR_SIZE); + atapi_input_bytes(drive, rq->buffer, SECTOR_SIZE); rq->buffer += SECTOR_SIZE; --rq->nr_sectors; --rq->current_nr_sectors; @@ -961,11 +955,10 @@ /* Done moving data! Wait for another interrupt. */ - ide_set_handler (drive, &cdrom_read_intr, WAIT_CMD); + ide_set_handler(drive, &cdrom_read_intr, WAIT_CMD, NULL); return ide_started; } - /* * Try to satisfy some of the current read request from our cached data. * Returns nonzero if the request has been completed, zero otherwise. @@ -976,7 +969,7 @@ struct request *rq = HWGROUP(drive)->rq; /* Can't do anything if there's no buffer. */ - if (info->sector_buffer == NULL) return 0; + if (info->buffer == NULL) return 0; /* Loop while this request needs data and the next block is present in our cache. */ @@ -987,7 +980,7 @@ cdrom_end_request (1, drive); memcpy (rq->buffer, - info->sector_buffer + + info->buffer + (rq->sector - info->sector_buffered) * SECTOR_SIZE, SECTOR_SIZE); rq->buffer += SECTOR_SIZE; @@ -1022,8 +1015,6 @@ return 0; } - - /* * Routine to send a read packet command to the drive. * This is usually called directly from cdrom_start_read. @@ -1052,14 +1043,13 @@ nskip = (sector % SECTORS_PER_FRAME); if (nskip > 0) { /* Sanity check... */ - if (rq->current_nr_sectors != - (rq->bh->b_size >> SECTOR_BITS)) { - printk ("%s: cdrom_start_read_continuation: buffer botch (%ld)\n", + if (rq->current_nr_sectors != (rq->bh->b_size >> SECTOR_BITS) && + (rq->sector % CD_FRAMESIZE != 0)) { + printk ("%s: cdrom_start_read_continuation: buffer botch (%lu)\n", drive->name, rq->current_nr_sectors); cdrom_end_request (0, drive); return ide_stopped; } - sector -= nskip; nsect += nskip; rq->current_nr_sectors += nskip; @@ -1076,19 +1066,21 @@ (65534 / CD_FRAMESIZE) : 65535); /* Set up the command */ - memset (&pc.c, 0, sizeof (pc.c)); - pc.c[0] = READ_10; + memset(&pc.c, 0, sizeof(pc.c)); + pc.c[0] = GPCMD_READ_10; pc.c[7] = (nframes >> 8); pc.c[8] = (nframes & 0xff); - put_unaligned(htonl (frame), (unsigned int *) &pc.c[2]); + put_unaligned(cpu_to_be32(frame), (unsigned int *) &pc.c[2]); /* Send the command to the drive and return. */ - return cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c), &cdrom_read_intr); + return cdrom_transfer_packet_command(drive, pc.c, sizeof (pc.c), + &cdrom_read_intr); } + #define IDECD_SEEK_THRESHOLD (1000) /* 1000 blocks */ -#define IDECD_SEEK_TIMER (2 * WAIT_MIN_SLEEP) /* 40 ms */ -#define IDECD_SEEK_TIMEOUT WAIT_CMD /* 10 sec */ +#define IDECD_SEEK_TIMER (5 * WAIT_MIN_SLEEP) /* 100 ms */ +#define IDECD_SEEK_TIMEOUT WAIT_CMD /* 10 sec */ static ide_startstop_t cdrom_seek_intr (ide_drive_t *drive) { @@ -1103,7 +1095,7 @@ if (retry && jiffies - info->start_seek > IDECD_SEEK_TIMER) { if (--retry == 0) { - printk ("%s: disabled DSC seek overlap\n", drive->name); + printk("%s: disabled DSC seek overlap\n", drive->name); drive->dsc_overlap = 0; } } @@ -1123,8 +1115,8 @@ frame = sector / SECTORS_PER_FRAME; memset (&pc.c, 0, sizeof (pc.c)); - pc.c[0] = SEEK; - put_unaligned(htonl (frame), (unsigned int *) &pc.c[2]); + pc.c[0] = GPCMD_SEEK; + put_unaligned(cpu_to_be32(frame), (unsigned int *) &pc.c[2]); return cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c), &cdrom_seek_intr); } @@ -1137,6 +1129,19 @@ return cdrom_start_packet_command (drive, 0, cdrom_start_seek_continuation); } +/* Fix up a possibly partially-processed request so that we can + start it over entirely, or even put it back on the request queue. */ +static void restore_request (struct request *rq) +{ + if (rq->buffer != rq->bh->b_data) { + int n = (rq->buffer - rq->bh->b_data) / SECTOR_SIZE; + rq->buffer = rq->bh->b_data; + rq->nr_sectors += n; + rq->sector -= n; + } + rq->current_nr_sectors = rq->bh->b_size >> SECTOR_BITS; +} + /* * Start a read request from the CD-ROM. */ @@ -1159,57 +1164,53 @@ restore_request (rq); /* Satisfy whatever we can of this request from our cached sector. */ - if (cdrom_read_from_buffer (drive)) + if (cdrom_read_from_buffer(drive)) return ide_stopped; /* Clear the local sector buffer. */ info->nsectors_buffered = 0; - if (drive->using_dma && (rq->sector % SECTORS_PER_FRAME == 0) && (rq->nr_sectors % SECTORS_PER_FRAME == 0)) + /* use dma, if possible. */ + if (drive->using_dma && (rq->sector % SECTORS_PER_FRAME == 0) && + (rq->nr_sectors % SECTORS_PER_FRAME == 0)) info->dma = 1; else info->dma = 0; /* Start sending the read request to the drive. */ - return cdrom_start_packet_command (drive, 32768, cdrom_start_read_continuation); + return cdrom_start_packet_command(drive, 32768, cdrom_start_read_continuation); } - - - /**************************************************************************** * Execute all other packet commands. */ /* Forward declarations. */ -static int -cdrom_lockdoor (ide_drive_t *drive, int lockflag, - struct atapi_request_sense *reqbuf); - - +static int cdrom_lockdoor(ide_drive_t *drive, int lockflag, + struct request_sense *sense); /* Interrupt routine for packet command completion. */ -static ide_startstop_t cdrom_pc_intr (ide_drive_t *drive) +static ide_startstop_t cdrom_pc_intr(ide_drive_t *drive) { int ireason, len, stat, thislen; struct request *rq = HWGROUP(drive)->rq; - struct packet_command *pc = (struct packet_command *)rq->buffer; + struct packet_command *pc = (struct packet_command *) rq->buffer; ide_startstop_t startstop; /* Check for errors. */ - if (cdrom_decode_status (&startstop, drive, 0, &stat)) + if (cdrom_decode_status(&startstop, drive, 0, &stat)) return startstop; /* Read the interrupt reason and the transfer length. */ - ireason = IN_BYTE (IDE_NSECTOR_REG); - len = IN_BYTE (IDE_LCYL_REG) + 256 * IN_BYTE (IDE_HCYL_REG); + ireason = IN_BYTE(IDE_NSECTOR_REG); + len = IN_BYTE(IDE_LCYL_REG) + 256 * IN_BYTE (IDE_HCYL_REG); /* If DRQ is clear, the command has completed. Complain if we still have data left to transfer. */ if ((stat & DRQ_STAT) == 0) { /* Some of the trailing request sense fields are optional, and some drives don't send them. Sigh. */ - if (pc->c[0] == REQUEST_SENSE && + if (pc->c[0] == GPCMD_REQUEST_SENSE && pc->buflen > 0 && pc->buflen <= 5) { while (pc->buflen > 0) { @@ -1236,70 +1237,52 @@ /* Figure out how much data to transfer. */ thislen = pc->buflen; - if (thislen < 0) thislen = -thislen; if (thislen > len) thislen = len; /* The drive wants to be written to. */ if ((ireason & 3) == 0) { - /* Check that we want to write. */ - if (pc->buflen > 0) { - printk ("%s: cdrom_pc_intr: Drive wants " - "to transfer data the wrong way!\n", - drive->name); - pc->stat = 1; - thislen = 0; - } - /* Transfer the data. */ - atapi_output_bytes (drive, pc->buffer, thislen); + atapi_output_bytes(drive, pc->buffer, thislen); /* If we haven't moved enough data to satisfy the drive, add some padding. */ while (len > thislen) { int dum = 0; - atapi_output_bytes (drive, &dum, sizeof (dum)); - len -= sizeof (dum); + atapi_output_bytes(drive, &dum, sizeof (dum)); + len -= sizeof(dum); } /* Keep count of how much data we've moved. */ pc->buffer += thislen; - pc->buflen += thislen; + pc->buflen -= thislen; } /* Same drill for reading. */ else if ((ireason & 3) == 2) { - /* Check that we want to read. */ - if (pc->buflen < 0) { - printk ("%s: cdrom_pc_intr: Drive wants to " - "transfer data the wrong way!\n", - drive->name); - pc->stat = 1; - thislen = 0; - } /* Transfer the data. */ - atapi_input_bytes (drive, pc->buffer, thislen); + atapi_input_bytes(drive, pc->buffer, thislen); /* If we haven't moved enough data to satisfy the drive, add some padding. */ while (len > thislen) { int dum = 0; - atapi_input_bytes (drive, &dum, sizeof (dum)); - len -= sizeof (dum); + atapi_input_bytes(drive, &dum, sizeof (dum)); + len -= sizeof(dum); } /* Keep count of how much data we've moved. */ pc->buffer += thislen; pc->buflen -= thislen; } else { - printk ("%s: cdrom_pc_intr: The drive " + printk("%s: cdrom_pc_intr: The drive " "appears confused (ireason = 0x%2x)\n", drive->name, ireason); pc->stat = 1; } /* Now we wait for another interrupt. */ - ide_set_handler (drive, &cdrom_pc_intr, WAIT_CMD); + ide_set_handler(drive, &cdrom_pc_intr, WAIT_CMD, cdrom_timer_expiry); return ide_started; } @@ -1310,7 +1293,8 @@ struct packet_command *pc = (struct packet_command *)rq->buffer; /* Send the command to the drive and return. */ - return cdrom_transfer_packet_command (drive, pc->c, sizeof (pc->c), &cdrom_pc_intr); + return cdrom_transfer_packet_command (drive, pc->c, + sizeof (pc->c), &cdrom_pc_intr); } @@ -1322,11 +1306,8 @@ struct cdrom_info *info = drive->driver_data; info->dma = 0; - - len = pc->buflen; - if (len < 0) len = -len; - pc->stat = 0; + len = pc->buflen; /* Start sending the command to the drive. */ return cdrom_start_packet_command (drive, len, cdrom_do_pc_continuation); @@ -1343,17 +1324,14 @@ } static -int cdrom_queue_packet_command (ide_drive_t *drive, struct packet_command *pc) +int cdrom_queue_packet_command(ide_drive_t *drive, struct packet_command *pc) { - struct atapi_request_sense my_reqbuf; int retries = 10; + struct request_sense sense; struct request req; - /* If our caller has not provided a place to stick any sense data, - use our own area. */ - if (pc->sense_data == NULL) - pc->sense_data = &my_reqbuf; - pc->sense_data->sense_key = 0; + if (pc->sense == NULL) + pc->sense = &sense; /* Start of retry loop. */ do { @@ -1369,85 +1347,77 @@ /* The request failed. Retry if it was due to a unit attention status (usually means media was changed). */ - struct atapi_request_sense *reqbuf = pc->sense_data; + struct request_sense *reqbuf = pc->sense; if (reqbuf->sense_key == UNIT_ATTENTION) cdrom_saw_media_change (drive); else if (reqbuf->sense_key == NOT_READY && - reqbuf->asc == 4) { + reqbuf->asc == 4 && reqbuf->ascq != 4) { /* The drive is in the process of loading a disk. Retry, but wait a little to give the drive time to complete the load. */ cdrom_sleep (HZ); - } else + } else { /* Otherwise, don't retry. */ retries = 0; - + } --retries; } /* End of retry loop. */ } while (pc->stat != 0 && retries >= 0); - /* Return an error if the command failed. */ - if (pc->stat != 0) - return -EIO; - else { - /* The command succeeded. If it was anything other than - a request sense, eject, or door lock command, - and we think that the door is presently, lock it again. - (The door was probably unlocked via an explicit - CDROMEJECT ioctl.) */ - if (CDROM_STATE_FLAGS (drive)->door_locked == 0 && drive->usage && - (pc->c[0] != REQUEST_SENSE && - pc->c[0] != ALLOW_MEDIUM_REMOVAL && - pc->c[0] != START_STOP)) { - (void) cdrom_lockdoor (drive, 1, NULL); - } - return 0; - } + return pc->stat ? -EIO : 0; } - /**************************************************************************** * cdrom driver request routine. */ static ide_startstop_t ide_do_rw_cdrom (ide_drive_t *drive, struct request *rq, unsigned long block) { - if (rq -> cmd == PACKET_COMMAND || rq -> cmd == REQUEST_SENSE_COMMAND) - return cdrom_do_packet_command (drive); - else if (rq -> cmd == RESET_DRIVE_COMMAND) { - cdrom_end_request (1, drive); - return ide_do_reset (drive); - } else if (rq -> cmd != READ) { - printk ("ide-cd: bad cmd %d\n", rq -> cmd); - cdrom_end_request (0, drive); - return ide_stopped; - } else { - ide_startstop_t action; - struct cdrom_info *info = drive->driver_data; + ide_startstop_t action; + struct cdrom_info *info = drive->driver_data; - if (CDROM_CONFIG_FLAGS(drive)->seeking) { - unsigned long elpased = jiffies - info->start_seek; - int stat = GET_STAT(); - - if ((stat & SEEK_STAT) != SEEK_STAT) { - if (elpased < IDECD_SEEK_TIMEOUT) { - ide_stall_queue (drive, IDECD_SEEK_TIMER); - return ide_stopped; + switch (rq->cmd) { + case READ: { + if (CDROM_CONFIG_FLAGS(drive)->seeking) { + unsigned long elpased = jiffies - info->start_seek; + int stat = GET_STAT(); + + if ((stat & SEEK_STAT) != SEEK_STAT) { + if (elpased < IDECD_SEEK_TIMEOUT) { + ide_stall_queue(drive, IDECD_SEEK_TIMER); + return ide_stopped; + } + printk ("%s: DSC timeout\n", drive->name); } - printk ("%s: DSC timeout\n", drive->name); + CDROM_CONFIG_FLAGS(drive)->seeking = 0; } - CDROM_CONFIG_FLAGS(drive)->seeking = 0; + if (IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) + action = cdrom_start_seek (drive, block); + else + action = cdrom_start_read (drive, block); + info->last_block = block; + return action; + } + + case PACKET_COMMAND: + case REQUEST_SENSE_COMMAND: { + return cdrom_do_packet_command(drive); + } + + case RESET_DRIVE_COMMAND: { + cdrom_end_request(1, drive); + return ide_do_reset(drive); + } + + default: { + printk("ide-cd: bad cmd %d\n", rq -> cmd); + cdrom_end_request(0, drive); + return ide_stopped; } - if (IDE_LARGE_SEEK(info->last_block, block, IDECD_SEEK_THRESHOLD) && drive->dsc_overlap) - action = cdrom_start_seek (drive, block); - else - action = cdrom_start_read (drive, block); - info->last_block = block; - return action; } } @@ -1457,7 +1427,7 @@ * Ioctl handling. * * Routines which queue packet commands take as a final argument a pointer - * to an atapi_request_sense struct. If execution of the command results + * to a request_sense struct. If execution of the command results * in an error with a CHECK CONDITION status, this structure will be filled * with the results of the subsequent request sense command. The pointer * can also be NULL, in which case no sense information is returned. @@ -1506,58 +1476,54 @@ return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET; } - -static int -cdrom_check_status (ide_drive_t *drive, - struct atapi_request_sense *reqbuf) +static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) { struct packet_command pc; + struct cdrom_info *info = drive->driver_data; + struct cdrom_device_info *cdi = &info->devinfo; - memset (&pc, 0, sizeof (pc)); - - pc.sense_data = reqbuf; - pc.c[0] = TEST_UNIT_READY; + memset(&pc, 0, sizeof(pc)); + pc.c[0] = GPCMD_TEST_UNIT_READY; + pc.sense = sense; #if ! STANDARD_ATAPI /* the Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to switch CDs instead of supporting the LOAD_UNLOAD opcode */ - pc.c[7] = CDROM_STATE_FLAGS (drive)->sanyo_slot % 3; + pc.c[7] = cdi->sanyo_slot % 3; #endif /* not STANDARD_ATAPI */ - return cdrom_queue_packet_command (drive, &pc); + return cdrom_queue_packet_command(drive, &pc); } /* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */ static int -cdrom_lockdoor (ide_drive_t *drive, int lockflag, - struct atapi_request_sense *reqbuf) +cdrom_lockdoor(ide_drive_t *drive, int lockflag, struct request_sense *sense) { - struct atapi_request_sense my_reqbuf; - int stat; + struct request_sense my_sense; struct packet_command pc; + int stat; - if (reqbuf == NULL) - reqbuf = &my_reqbuf; + if (sense == NULL) + sense = &my_sense; /* If the drive cannot lock the door, just pretend. */ if (CDROM_CONFIG_FLAGS (drive)->no_doorlock) stat = 0; else { - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.c[0] = ALLOW_MEDIUM_REMOVAL; + memset(&pc, 0, sizeof(pc)); + pc.c[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL; pc.c[4] = (lockflag != 0); + pc.sense = sense; stat = cdrom_queue_packet_command (drive, &pc); } /* If we got an illegal field error, the drive probably cannot lock the door. */ if (stat != 0 && - reqbuf->sense_key == ILLEGAL_REQUEST && - (reqbuf->asc == 0x24 || reqbuf->asc == 0x20)) { + sense->sense_key == ILLEGAL_REQUEST && + (sense->asc == 0x24 || sense->asc == 0x20)) { printk ("%s: door locking not supported\n", drive->name); CDROM_CONFIG_FLAGS (drive)->no_doorlock = 1; @@ -1565,7 +1531,7 @@ } /* no medium, that's alright. */ - if (stat != 0 && reqbuf->sense_key == NOT_READY && reqbuf->asc == 0x3a) + if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a) stat = 0; if (stat == 0) @@ -1577,115 +1543,81 @@ /* Eject the disk if EJECTFLAG is 0. If EJECTFLAG is 1, try to reload the disk. */ -static int -cdrom_eject (ide_drive_t *drive, int ejectflag, - struct atapi_request_sense *reqbuf) +static int cdrom_eject(ide_drive_t *drive, int ejectflag, + struct request_sense *sense) { struct packet_command pc; - if (CDROM_CONFIG_FLAGS (drive)->no_eject==1 && ejectflag==0) + if (CDROM_CONFIG_FLAGS(drive)->no_eject && !ejectflag) return -EDRIVE_CANT_DO_THIS; - + /* reload fails on some drives, if the tray is locked */ - if (CDROM_STATE_FLAGS (drive)->door_locked && ejectflag) + if (CDROM_STATE_FLAGS(drive)->door_locked && ejectflag) return 0; - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.c[0] = START_STOP; - pc.c[4] = 2 + (ejectflag != 0); - return cdrom_queue_packet_command (drive, &pc); -} - - -static int -cdrom_pause (ide_drive_t *drive, int pauseflag, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.c[0] = SCMD_PAUSE_RESUME; - pc.c[8] = !pauseflag; - return cdrom_queue_packet_command (drive, &pc); -} - - -static int -cdrom_startstop (ide_drive_t *drive, int startflag, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.c[0] = START_STOP; - pc.c[1] = 1; - pc.c[4] = startflag; + memset(&pc, 0, sizeof (pc)); + pc.c[0] = GPCMD_START_STOP_UNIT; + pc.c[4] = 0x02 + (ejectflag != 0); + pc.sense = sense; return cdrom_queue_packet_command (drive, &pc); } -static int -cdrom_read_capacity (ide_drive_t *drive, unsigned *capacity, - struct atapi_request_sense *reqbuf) +static int cdrom_read_capacity(ide_drive_t *drive, unsigned *capacity, + struct request_sense *sense) { struct { - unsigned lba; - unsigned blocklen; + __u32 lba; + __u32 blocklen; } capbuf; int stat; struct packet_command pc; - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; + memset(&pc, 0, sizeof (pc)); - pc.c[0] = READ_CAPACITY; + pc.c[0] = GPCMD_READ_CDVD_CAPACITY; pc.buffer = (char *)&capbuf; - pc.buflen = sizeof (capbuf); + pc.buflen = sizeof(capbuf); + pc.sense = sense; - stat = cdrom_queue_packet_command (drive, &pc); + stat = cdrom_queue_packet_command(drive, &pc); if (stat == 0) - *capacity = ntohl (capbuf.lba); + *capacity = be32_to_cpu(capbuf.lba) + 1; return stat; } - -static int -cdrom_read_tocentry (ide_drive_t *drive, int trackno, int msf_flag, - int format, char *buf, int buflen, - struct atapi_request_sense *reqbuf) +static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag, + int format, char *buf, int buflen, + struct request_sense *sense) { struct packet_command pc; - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; + memset(&pc, 0, sizeof(pc)); + pc.sense = sense; pc.buffer = buf; pc.buflen = buflen; - pc.c[0] = SCMD_READ_TOC; + pc.c[0] = GPCMD_READ_TOC_PMA_ATIP; pc.c[6] = trackno; pc.c[7] = (buflen >> 8); pc.c[8] = (buflen & 0xff); pc.c[9] = (format << 6); - if (msf_flag) pc.c[1] = 2; + + if (msf_flag) + pc.c[1] = 2; + return cdrom_queue_packet_command (drive, &pc); } /* Try to read the entire TOC for the disk into our internal buffer. */ -static int -cdrom_read_toc (ide_drive_t *drive, - struct atapi_request_sense *reqbuf) +static int cdrom_read_toc(ide_drive_t *drive, struct request_sense *sense) { int stat, ntracks, i; struct cdrom_info *info = drive->driver_data; struct atapi_toc *toc = info->toc; + int minor = drive->select.b.unit << PARTN_BITS; struct { struct atapi_toc_header hdr; struct atapi_toc_entry ent; @@ -1693,26 +1625,25 @@ if (toc == NULL) { /* Try to allocate space. */ - toc = (struct atapi_toc *) kmalloc (sizeof (struct atapi_toc), + toc = (struct atapi_toc *) kmalloc(sizeof(struct atapi_toc), GFP_KERNEL); + info->toc = toc; if (toc == NULL) { printk ("%s: No cdrom TOC buffer!\n", drive->name); return -ENOMEM; } - info->toc = toc; } /* Check to see if the existing data is still valid. If it is, just return. */ if (CDROM_STATE_FLAGS (drive)->toc_valid) - (void) cdrom_check_status (drive, NULL); + (void) cdrom_check_status(drive, sense); if (CDROM_STATE_FLAGS (drive)->toc_valid) return 0; /* First read just the header, so we know how long the TOC is. */ stat = cdrom_read_tocentry (drive, 0, 1, 0, (char *)&toc->hdr, - sizeof (struct atapi_toc_header), - reqbuf); + sizeof(struct atapi_toc_header), sense); if (stat) return stat; #if ! STANDARD_ATAPI @@ -1727,12 +1658,46 @@ if (ntracks > MAX_TRACKS) ntracks = MAX_TRACKS; /* Now read the whole schmeer. */ - stat = cdrom_read_tocentry (drive, 0, 1, 0, (char *)&toc->hdr, + stat = cdrom_read_tocentry (drive, toc->hdr.first_track, 1, 0, (char *)&toc->hdr, sizeof (struct atapi_toc_header) + - (ntracks+1) * - sizeof (struct atapi_toc_entry), - reqbuf); + (ntracks + 1) * + sizeof (struct atapi_toc_entry), sense); + + if (stat && toc->hdr.first_track > 1) { + /* Cds with CDI tracks only don't have any TOC entries, + despite of this the returned values are + first_track == last_track = number of CDI tracks + 1, + so that this case is indistinguishable from the same + layout plus an additional audio track. + If we get an error for the regular case, we assume + a CDI without additional audio tracks. In this case + the readable TOC is empty (CDI tracks are not included) + and only holds the Leadout entry. Heiko Eißfeldt */ + ntracks = 0; + stat = cdrom_read_tocentry (drive, CDROM_LEADOUT, 1, + 0, (char *)&toc->hdr, + sizeof (struct atapi_toc_header) + + (ntracks+1) * + sizeof (struct atapi_toc_entry), + sense); + if (stat) { + return stat; + } +#if ! STANDARD_ATAPI + if (CDROM_CONFIG_FLAGS (drive)->toctracks_as_bcd) { + toc->hdr.first_track = bin2bcd(CDROM_LEADOUT); + toc->hdr.last_track = bin2bcd(CDROM_LEADOUT); + } else +#endif /* not STANDARD_ATAPI */ + { + toc->hdr.first_track = CDROM_LEADOUT; + toc->hdr.last_track = CDROM_LEADOUT; + } + } else if (stat) { + return stat; + } if (stat) return stat; + toc->hdr.toc_length = ntohs (toc->hdr.toc_length); #if ! STANDARD_ATAPI @@ -1756,10 +1721,17 @@ } /* Read the multisession information. */ - stat = cdrom_read_tocentry (drive, 0, 1, 1, - (char *)&ms_tmp, sizeof (ms_tmp), - reqbuf); - if (stat) return stat; + if (toc->hdr.first_track != CDROM_LEADOUT) { + /* Read the multisession information. */ + stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp, + sizeof (ms_tmp), sense); + if (stat) return stat; + } else { + ms_tmp.ent.addr.msf.minute = 0; + ms_tmp.ent.addr.msf.second = 2; + ms_tmp.ent.addr.msf.frame = 0; + ms_tmp.hdr.first_track = ms_tmp.hdr.last_track = CDROM_LEADOUT; + } #if ! STANDARD_ATAPI if (CDROM_CONFIG_FLAGS (drive)->tocaddr_as_bcd) @@ -1773,191 +1745,105 @@ toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track); /* Now try to get the total cdrom capacity. */ - stat = cdrom_read_capacity (drive, &toc->capacity, reqbuf); +#if 0 + stat = cdrom_get_last_written(MKDEV(HWIF(drive)->major, minor), + (long *)&toc->capacity); + if (stat) +#endif + stat = cdrom_read_capacity(drive, &toc->capacity, sense); if (stat) toc->capacity = 0x1fffff; - HWIF(drive)->gd->sizes[drive->select.b.unit << PARTN_BITS] - = (toc->capacity * SECTORS_PER_FRAME) >> (BLOCK_SIZE_BITS - 9); + /* for general /dev/cdrom like mounting, one big disc */ drive->part[0].nr_sects = toc->capacity * SECTORS_PER_FRAME; + HWIF(drive)->gd->sizes[minor] = (toc->capacity * SECTORS_PER_FRAME) >> + (BLOCK_SIZE_BITS - 9); /* Remember that we've read this stuff. */ CDROM_STATE_FLAGS (drive)->toc_valid = 1; + /* should be "if multisession", but it does no harm. */ + if (ntracks == 1) + return 0; + + /* setup each minor to respond to a session */ + minor++; + i = toc->hdr.first_track; + while ((i <= ntracks) && ((minor & CD_PART_MASK) < CD_PART_MAX)) { + drive->part[minor & PARTN_MASK].start_sect = 0; + drive->part[minor & PARTN_MASK].nr_sects = + (toc->ent[i].addr.lba * + SECTORS_PER_FRAME) << (BLOCK_SIZE_BITS - 9); + HWIF(drive)->gd->sizes[minor] = (toc->ent[i].addr.lba * + SECTORS_PER_FRAME) >> (BLOCK_SIZE_BITS - 9); + i++; + minor++; + } + return 0; } -static int -cdrom_read_subchannel (ide_drive_t *drive, int format, - char *buf, int buflen, - struct atapi_request_sense *reqbuf) +static int cdrom_read_subchannel(ide_drive_t *drive, int format, char *buf, + int buflen, struct request_sense *sense) { struct packet_command pc; - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; + memset(&pc, 0, sizeof(pc)); + pc.sense = sense; - pc.buffer = buf; + pc.buffer = buf; pc.buflen = buflen; - pc.c[0] = SCMD_READ_SUBCHANNEL; + pc.c[0] = GPCMD_READ_SUBCHANNEL; pc.c[1] = 2; /* MSF addressing */ pc.c[2] = 0x40; /* request subQ data */ pc.c[3] = format; pc.c[7] = (buflen >> 8); pc.c[8] = (buflen & 0xff); - return cdrom_queue_packet_command (drive, &pc); -} - - -/* modeflag: 0 = current, 1 = changeable mask, 2 = default, 3 = saved */ -static int -cdrom_mode_sense (ide_drive_t *drive, int pageno, int modeflag, - char *buf, int buflen, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.buffer = buf; - pc.buflen = buflen; - pc.c[0] = MODE_SENSE_10; - pc.c[2] = pageno | (modeflag << 6); - pc.c[7] = (buflen >> 8); - pc.c[8] = (buflen & 0xff); - return cdrom_queue_packet_command (drive, &pc); -} - -static int -cdrom_mode_select (ide_drive_t *drive, int pageno, char *buf, int buflen, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.buffer = buf; - pc.buflen = - buflen; - pc.c[0] = MODE_SELECT_10; - pc.c[1] = 0x10; - pc.c[2] = pageno; - pc.c[7] = (buflen >> 8); - pc.c[8] = (buflen & 0xff); - return cdrom_queue_packet_command (drive, &pc); + return cdrom_queue_packet_command(drive, &pc); } /* ATAPI cdrom drives are free to select the speed you request or any slower rate :-( Requesting too fast a speed will _not_ produce an error. */ -static int -cdrom_select_speed (ide_drive_t *drive, int speed, - struct atapi_request_sense *reqbuf) +static int cdrom_select_speed(ide_drive_t *drive, int speed, + struct request_sense *sense) { struct packet_command pc; - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; + memset(&pc, 0, sizeof(pc)); + pc.sense = sense; if (speed == 0) - speed = 0xffff; /* set to max */ + speed = 0xffff; /* set to max */ else - speed *= 177; /* Nx to kbytes/s */ + speed *= 177; /* Nx to kbytes/s */ - pc.c[0] = SET_CD_SPEED; + pc.c[0] = GPCMD_SET_SPEED; /* Read Drive speed in kbytes/second MSB */ pc.c[2] = (speed >> 8) & 0xff; /* Read Drive speed in kbytes/second LSB */ pc.c[3] = speed & 0xff; - if ( CDROM_CONFIG_FLAGS(drive)->cd_r || - CDROM_CONFIG_FLAGS(drive)->cd_rw ) { + if (CDROM_CONFIG_FLAGS(drive)->cd_r || + CDROM_CONFIG_FLAGS(drive)->cd_rw || + CDROM_CONFIG_FLAGS(drive)->dvd_r) { /* Write Drive speed in kbytes/second MSB */ pc.c[4] = (speed >> 8) & 0xff; /* Write Drive speed in kbytes/second LSB */ pc.c[5] = speed & 0xff; } - return cdrom_queue_packet_command (drive, &pc); -} - -static int -cdrom_play_lba_range_1 (ide_drive_t *drive, int lba_start, int lba_end, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.c[0] = SCMD_PLAYAUDIO_MSF; - lba_to_msf (lba_start, &pc.c[3], &pc.c[4], &pc.c[5]); - lba_to_msf (lba_end-1, &pc.c[6], &pc.c[7], &pc.c[8]); - -#if ! STANDARD_ATAPI - if (CDROM_CONFIG_FLAGS (drive)->playmsf_as_bcd) { - pc.c[3] = bin2bcd (pc.c[3]); - pc.c[4] = bin2bcd (pc.c[4]); - pc.c[5] = bin2bcd (pc.c[5]); - pc.c[6] = bin2bcd (pc.c[6]); - pc.c[7] = bin2bcd (pc.c[7]); - pc.c[8] = bin2bcd (pc.c[8]); - } -#endif /* not STANDARD_ATAPI */ - - return cdrom_queue_packet_command (drive, &pc); -} - - -/* Play audio starting at LBA LBA_START and finishing with the - LBA before LBA_END. */ -static int -cdrom_play_lba_range (ide_drive_t *drive, int lba_start, int lba_end, - struct atapi_request_sense *reqbuf) -{ - int i, stat = 0; - struct atapi_request_sense my_reqbuf; - - if (reqbuf == NULL) - reqbuf = &my_reqbuf; - - /* Some drives, will, for certain audio cds, - give an error if you ask them to play the entire cd using the - values which are returned in the TOC. The play will succeed, - however, if the ending address is adjusted downwards - by a few frames. */ - for (i=0; i<75; i++) { - stat = cdrom_play_lba_range_1 (drive, lba_start, lba_end, - reqbuf); - - if (stat == 0 || - !(reqbuf->sense_key == ILLEGAL_REQUEST && - reqbuf->asc == 0x24)) - return stat; - - --lba_end; - if (lba_end <= lba_start) break; - } - - return stat; + return cdrom_queue_packet_command(drive, &pc); } -static -int cdrom_get_toc_entry (ide_drive_t *drive, int track, - struct atapi_toc_entry **ent, - struct atapi_request_sense *reqbuf) +static int cdrom_get_toc_entry(ide_drive_t *drive, int track, + struct atapi_toc_entry **ent) { struct cdrom_info *info = drive->driver_data; - int stat, ntracks; - struct atapi_toc *toc; - - /* Make sure our saved TOC is valid. */ - stat = cdrom_read_toc (drive, reqbuf); - if (stat) return stat; - - toc = info->toc; + struct atapi_toc *toc = info->toc; + int ntracks; /* Check validity of requested track number. */ ntracks = toc->hdr.last_track - toc->hdr.first_track + 1; + if (toc->hdr.first_track == CDROM_LEADOUT) ntracks = 0; if (track == CDROM_LEADOUT) *ent = &toc->ent[ntracks]; else if (track < toc->hdr.first_track || @@ -1970,377 +1856,75 @@ } -static int -cdrom_read_block (ide_drive_t *drive, int format, int lba, int nblocks, - char *buf, int buflen, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - struct atapi_request_sense my_reqbuf; - - if (reqbuf == NULL) - reqbuf = &my_reqbuf; - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - pc.buffer = buf; - pc.buflen = buflen; -#if ! STANDARD_ATAPI - if (CDROM_CONFIG_FLAGS (drive)->nec260) - pc.c[0] = 0xd4; - else -#endif /* not STANDARD_ATAPI */ - pc.c[0] = READ_CD; +/* the generic packet interface to cdrom.c */ +static int ide_cdrom_packet(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc) +{ + struct packet_command pc; + ide_drive_t *drive = (ide_drive_t*) cdi->handle; - pc.c[1] = (format << 2); - put_unaligned(htonl(lba), (unsigned int *) &pc.c[2]); - pc.c[8] = (nblocks & 0xff); - pc.c[7] = ((nblocks>>8) & 0xff); - pc.c[6] = ((nblocks>>16) & 0xff); - if (format <= 1) - pc.c[9] = 0xf8; /* returns 2352 for any format */ - else - pc.c[9] = 0x10; + /* here we queue the commands from the uniform CD-ROM + layer. the packet must be complete, as we do not + touch it at all. */ + memset(&pc, 0, sizeof(pc)); + memcpy(pc.c, cgc->cmd, CDROM_PACKET_SIZE); + pc.buffer = cgc->buffer; + pc.buflen = cgc->buflen; + cgc->stat = cdrom_queue_packet_command(drive, &pc); + cgc->sense = pc.sense; - return cdrom_queue_packet_command (drive, &pc); + return cgc->stat; } - -/* If SLOT<0, unload the current slot. Otherwise, try to load SLOT. */ -static int -cdrom_load_unload (ide_drive_t *drive, int slot, - struct atapi_request_sense *reqbuf) +static +int ide_cdrom_dev_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, + unsigned long arg) { -#if ! STANDARD_ATAPI - /* if the drive is a Sanyo 3 CD changer then TEST_UNIT_READY - (used in the cdrom_check_status function) is used to - switch CDs instead of LOAD_UNLOAD */ - - if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) { - - if ((slot == 1) || (slot == 2)) - CDROM_STATE_FLAGS (drive)->sanyo_slot = slot; - else if (slot >= 0) - CDROM_STATE_FLAGS (drive)->sanyo_slot = 3; - else - return 0; - - return cdrom_check_status (drive, reqbuf); - - } - else -#endif /*not STANDARD_ATAPI */ - { - - /* ATAPI Rev. 2.2+ standard for requesting switching of - CDs in a multiplatter device */ - - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.c[0] = LOAD_UNLOAD; - pc.c[4] = 2 + (slot >= 0); - pc.c[8] = slot; - return cdrom_queue_packet_command (drive, &pc); - - } -} - - -/* This gets the mechanism status per ATAPI draft spec 2.6 */ -static int -cdrom_read_mech_status (ide_drive_t *drive, char *buf, int buflen, - struct atapi_request_sense *reqbuf) -{ - struct packet_command pc; - - memset (&pc, 0, sizeof (pc)); - pc.sense_data = reqbuf; - - pc.buffer = buf; - pc.buflen = buflen; - pc.c[0] = MECHANISM_STATUS; - pc.c[8] = (buflen >> 8); - pc.c[9] = (buflen & 0xff); - return cdrom_queue_packet_command (drive, &pc); -} - - -/* Read the drive mechanism status and slot table into our internal buffer. - If the buffer does not yet exist, allocate it. */ -static int -cdrom_read_changer_info (ide_drive_t *drive) -{ - int nslots; - struct cdrom_info *info = drive->driver_data; - - if (info->changer_info) - nslots = info->changer_info->hdr.nslots; - - else { - struct atapi_mechstat_header mechbuf; - int stat; - - stat = cdrom_read_mech_status (drive, - (char *)&mechbuf, - sizeof (mechbuf), - NULL); - if (stat) - return stat; - - nslots = mechbuf.nslots; - info->changer_info = - (struct atapi_changer_info *) - kmalloc (sizeof (struct atapi_changer_info) + - nslots * sizeof (struct atapi_slot), - GFP_KERNEL); - - if (info->changer_info == NULL) - return -ENOMEM; - } - - return cdrom_read_mech_status - (drive, - (char *)&info->changer_info->hdr, - sizeof (struct atapi_mechstat_header) + - nslots * sizeof (struct atapi_slot), - NULL); -} - - -static -int ide_cdrom_dev_ioctl (struct cdrom_device_info *cdi, - unsigned int cmd, unsigned long arg) - -{ - ide_drive_t *drive = (ide_drive_t*) cdi->handle; - struct cdrom_info *info = drive->driver_data; + struct cdrom_generic_command cgc; + char buffer[16]; + int stat; + init_cdrom_command(&cgc, buffer, sizeof(buffer)); + /* These will be moved into the Uniform layer shortly... */ switch (cmd) { - case CDROMREADRAW: - case CDROMREADMODE1: - case CDROMREADMODE2: { - struct cdrom_msf msf; - int blocksize, format, stat, lba; - struct atapi_toc *toc; - char *buf; - - if (cmd == CDROMREADMODE1) { - blocksize = CD_FRAMESIZE; - format = 2; - } else { /* for RAW and MODE2. */ - blocksize = CD_FRAMESIZE_RAW; - format = 0; - } - - copy_from_user_ret(&msf, (void *)arg, sizeof (msf), -EFAULT); - - lba = msf_to_lba(msf.cdmsf_min0, - msf.cdmsf_sec0, - msf.cdmsf_frame0); - - /* Make sure the TOC is up to date. */ - if (cmd != CDROMREADRAW) { - stat = cdrom_read_toc (drive, NULL); - if (stat) - return stat; - - toc = info->toc; - - if (lba < 0 || lba >= toc->capacity) - return -EINVAL; - } - - buf = (char *) kmalloc (blocksize, GFP_KERNEL); - if (buf == NULL) - return -ENOMEM; - - stat = cdrom_read_block (drive, format, lba, 1, buf, - blocksize, NULL); - - if (stat == 0) { - if (cmd == CDROMREADMODE2) { - /* For Mode2, skip the Sync, Header, and Subheader */ - if (copy_to_user((char *)arg, buf+16, CD_FRAMESIZE_RAW0)) - stat = -EFAULT; - } else { - if (copy_to_user((char *)arg, buf, blocksize)) - stat = -EFAULT; - } - } - - kfree (buf); - return stat; - } - - /* Read 2352 byte blocks from audio tracks. */ - case CDROMREADAUDIO: { - int stat, lba; - struct atapi_toc *toc; - struct cdrom_read_audio ra; - char *buf; - - /* Make sure the TOC is up to date. */ - stat = cdrom_read_toc (drive, NULL); - if (stat) return stat; - - toc = info->toc; - - stat = verify_area (VERIFY_READ, (char *)arg, sizeof (ra)); - if (stat) return stat; - - copy_from_user (&ra, (void *)arg, sizeof (ra)); - - if (ra.nframes < 0 || ra.nframes > toc->capacity) - return -EINVAL; - else if (ra.nframes == 0) - return 0; - - stat = verify_area (VERIFY_WRITE, (char *)ra.buf, - ra.nframes * CD_FRAMESIZE_RAW); - if (stat) return stat; - - if (ra.addr_format == CDROM_MSF) - lba = msf_to_lba (ra.addr.msf.minute, - ra.addr.msf.second, - ra.addr.msf.frame); - else if (ra.addr_format == CDROM_LBA) - lba = ra.addr.lba; - else - return -EINVAL; - - if (lba < 0 || lba >= toc->capacity) - return -EINVAL; - - buf = (char *) kmalloc (CDROM_NBLOCKS_BUFFER*CD_FRAMESIZE_RAW, - GFP_KERNEL); - if (buf == NULL) - return -ENOMEM; - - while (ra.nframes > 0) { - int this_nblocks = ra.nframes; - if (this_nblocks > CDROM_NBLOCKS_BUFFER) - this_nblocks = CDROM_NBLOCKS_BUFFER; - stat = cdrom_read_block - (drive, 1, lba, this_nblocks, - buf, this_nblocks * CD_FRAMESIZE_RAW, NULL); - if (stat) break; - - copy_to_user (ra.buf, buf, - this_nblocks * CD_FRAMESIZE_RAW); - ra.buf += this_nblocks * CD_FRAMESIZE_RAW; - ra.nframes -= this_nblocks; - lba += this_nblocks; - } - - kfree (buf); - return stat; - } - case CDROMSETSPINDOWN: { char spindown; - char buffer[16]; - int stat; - - stat = verify_area (VERIFY_READ, (void *) arg, - sizeof (char)); - if (stat) return stat; - copy_from_user (&spindown, (void *) arg, sizeof(char)); + if (copy_from_user(&spindown, (void *) arg, sizeof(char))) + return -EFAULT; - stat = cdrom_mode_sense (drive, PAGE_CDROM, 0, buffer, - sizeof (buffer), NULL); - if (stat) return stat; + if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0))) + return stat; buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f); - return cdrom_mode_select (drive, PAGE_CDROM, buffer, - sizeof (buffer), NULL); + return cdrom_mode_select(cdi, &cgc); } case CDROMGETSPINDOWN: { char spindown; - char buffer[16]; - int stat; - - stat = verify_area (VERIFY_WRITE, (void *) arg, - sizeof (char)); - if (stat) return stat; - stat = cdrom_mode_sense (drive, PAGE_CDROM, 0, buffer, - sizeof (buffer), NULL); - if (stat) return stat; + if ((stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0))) + return stat; spindown = buffer[11] & 0x0f; - copy_to_user ((void *) arg, &spindown, sizeof (char)); + if (copy_to_user((void *) arg, &spindown, sizeof (char))) + return -EFAULT; return 0; } -#ifdef ALLOW_TEST_PACKETS - case 0x1234: { - int stat; - struct packet_command pc; - int len, lena; - - memset (&pc, 0, sizeof (pc)); - - stat = verify_area (VERIFY_READ, (void *) arg, sizeof (pc.c)); - if (stat) return stat; - copy_from_user (&pc.c, (void *) arg, sizeof (pc.c)); - arg += sizeof (pc.c); - - stat = verify_area (VERIFY_READ, (void *) arg, sizeof (len)); - if (stat) return stat; - copy_from_user (&len, (void *) arg , sizeof (len)); - arg += sizeof (len); - - lena = len; - if (lena < 0) lena = -lena; - - { - char buf[lena]; - if (len > 0) { - stat = verify_area (VERIFY_WRITE, - (void *) arg, len); - if (stat) return stat; - } - else if (len < 0) { - stat = verify_area (VERIFY_READ, - (void *) arg, -len); - if (stat) return stat; - copy_from_user (buf, (void*)arg, -len); - } - - if (len != 0) { - pc.buflen = len; - pc.buffer = buf; - } - - stat = cdrom_queue_packet_command (drive, &pc); - - if (len > 0) - copy_to_user ((void *)arg, buf, len); - } - - return stat; - } -#endif - default: return -EINVAL; } } - - static int ide_cdrom_audio_ioctl (struct cdrom_device_info *cdi, unsigned int cmd, void *arg) @@ -2350,54 +1934,13 @@ struct cdrom_info *info = drive->driver_data; switch (cmd) { - case CDROMSUBCHNL: { - struct atapi_cdrom_subchnl scbuf; - int stat; - struct cdrom_subchnl *subchnl = (struct cdrom_subchnl *)arg; - - stat = cdrom_read_subchannel (drive, 1, /* current position */ - (char *)&scbuf, sizeof (scbuf), - NULL); - if (stat) return stat; - -#if ! STANDARD_ATAPI - if (CDROM_CONFIG_FLAGS (drive)->subchan_as_bcd) { - msf_from_bcd (&scbuf.acdsc_absaddr.msf); - msf_from_bcd (&scbuf.acdsc_reladdr.msf); - } - if (CDROM_CONFIG_FLAGS (drive)->tocaddr_as_bcd) - scbuf.acdsc_trk = bcd2bin (scbuf.acdsc_trk); -#endif /* not STANDARD_ATAPI */ - - subchnl->cdsc_absaddr.msf.minute = - scbuf.acdsc_absaddr.msf.minute; - subchnl->cdsc_absaddr.msf.second = - scbuf.acdsc_absaddr.msf.second; - subchnl->cdsc_absaddr.msf.frame = - scbuf.acdsc_absaddr.msf.frame; - - subchnl->cdsc_reladdr.msf.minute = - scbuf.acdsc_reladdr.msf.minute; - subchnl->cdsc_reladdr.msf.second = - scbuf.acdsc_reladdr.msf.second; - subchnl->cdsc_reladdr.msf.frame = - scbuf.acdsc_reladdr.msf.frame; - - subchnl->cdsc_audiostatus = scbuf.acdsc_audiostatus; - subchnl->cdsc_ctrl = scbuf.acdsc_ctrl; - subchnl->cdsc_trk = scbuf.acdsc_trk; - subchnl->cdsc_ind = scbuf.acdsc_ind; - - return 0; - } - case CDROMREADTOCHDR: { int stat; struct cdrom_tochdr *tochdr = (struct cdrom_tochdr *) arg; struct atapi_toc *toc; /* Make sure our saved TOC is valid. */ - stat = cdrom_read_toc (drive, NULL); + stat = cdrom_read_toc(drive, NULL); if (stat) return stat; toc = info->toc; @@ -2412,8 +1955,7 @@ struct cdrom_tocentry *tocentry = (struct cdrom_tocentry*) arg; struct atapi_toc_entry *toce; - stat = cdrom_get_toc_entry (drive, tocentry->cdte_track, &toce, - NULL); + stat = cdrom_get_toc_entry (drive, tocentry->cdte_track, &toce); if (stat) return stat; tocentry->cdte_ctrl = toce->control; @@ -2423,314 +1965,92 @@ &tocentry->cdte_addr.msf.minute, &tocentry->cdte_addr.msf.second, &tocentry->cdte_addr.msf.frame); - } else { + } else tocentry->cdte_addr.lba = toce->addr.lba; - } return 0; } - case CDROMPLAYMSF: { - struct cdrom_msf *msf = (struct cdrom_msf *) arg; - int lba_start, lba_end; - - lba_start = msf_to_lba (msf->cdmsf_min0, msf->cdmsf_sec0, - msf->cdmsf_frame0); - lba_end = msf_to_lba (msf->cdmsf_min1, msf->cdmsf_sec1, - msf->cdmsf_frame1) + 1; - - if (lba_end <= lba_start) return -EINVAL; - - return cdrom_play_lba_range (drive, lba_start, lba_end, NULL); - } - - /* Like just about every other Linux cdrom driver, we ignore the - index part of the request here. */ - case CDROMPLAYTRKIND: { - int stat, lba_start, lba_end; - struct cdrom_ti *ti = (struct cdrom_ti *)arg; - struct atapi_toc_entry *first_toc, *last_toc; - - stat = cdrom_get_toc_entry (drive, ti->cdti_trk0, &first_toc, - NULL); - if (stat) return stat; - stat = cdrom_get_toc_entry (drive, ti->cdti_trk1, &last_toc, - NULL); - if (stat) return stat; - - if (ti->cdti_trk1 != CDROM_LEADOUT) ++last_toc; - lba_start = first_toc->addr.lba; - lba_end = last_toc->addr.lba; - - if (lba_end <= lba_start) return -EINVAL; - - return cdrom_play_lba_range (drive, lba_start, lba_end, NULL); - } - - case CDROMVOLCTRL: { - struct cdrom_volctrl *volctrl = (struct cdrom_volctrl *) arg; - char buffer[24], mask[24]; - int stat; - - stat = cdrom_mode_sense (drive, PAGE_AUDIO, 0, buffer, - sizeof (buffer), NULL); - if (stat) return stat; - stat = cdrom_mode_sense (drive, PAGE_AUDIO, 1, mask, - sizeof (buffer), NULL); - if (stat) return stat; - - buffer[1] = buffer[2] = 0; - - buffer[17] = volctrl->channel0 & mask[17]; - buffer[19] = volctrl->channel1 & mask[19]; - buffer[21] = volctrl->channel2 & mask[21]; - buffer[23] = volctrl->channel3 & mask[23]; - - return cdrom_mode_select (drive, PAGE_AUDIO, buffer, - sizeof (buffer), NULL); - } - - case CDROMVOLREAD: { - struct cdrom_volctrl *volctrl = (struct cdrom_volctrl *) arg; - char buffer[24]; - int stat; - - stat = cdrom_mode_sense (drive, PAGE_AUDIO, 0, buffer, - sizeof (buffer), NULL); - if (stat) return stat; - - volctrl->channel0 = buffer[17]; - volctrl->channel1 = buffer[19]; - volctrl->channel2 = buffer[21]; - volctrl->channel3 = buffer[23]; - - return 0; - } - - case CDROMSTART: - return cdrom_startstop (drive, 1, NULL); - - case CDROMSTOP: { -#ifdef IHAVEADOLPHIN - /* Certain Drives require this. Most don't - and will produce errors upon CDROMSTOP - pit says the Dolphin needs this. If you - own a dolphin, just define IHAVEADOLPHIN somewhere */ - int stat; - stat = cdrom_startstop (drive, 0, NULL); - if (stat) return stat; - return cdrom_eject (drive, 1, NULL); -#endif /* end of IHAVEADOLPHIN */ - return cdrom_startstop (drive, 0, NULL); - } - - case CDROMPAUSE: - return cdrom_pause (drive, 1, NULL); - - case CDROMRESUME: - return cdrom_pause (drive, 0, NULL); - - default: return -EINVAL; } } - static -int ide_cdrom_reset (struct cdrom_device_info *cdi) +int ide_cdrom_reset(struct cdrom_device_info *cdi) { ide_drive_t *drive = (ide_drive_t*) cdi->handle; + struct request_sense sense; struct request req; + int ret; - ide_init_drive_cmd (&req); + ide_init_drive_cmd(&req); req.cmd = RESET_DRIVE_COMMAND; - return ide_do_drive_cmd (drive, &req, ide_wait); + ret = ide_do_drive_cmd(drive, &req, ide_wait); + + /* A reset will unlock the door. If it was previously locked, + * lock it again. + */ + if (CDROM_STATE_FLAGS(drive)->door_locked) + (void) cdrom_lockdoor(drive, 1, &sense); + + return ret; } static -int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position) +int ide_cdrom_tray_move(struct cdrom_device_info *cdi, int position) { ide_drive_t *drive = (ide_drive_t*) cdi->handle; - struct atapi_request_sense rq; + struct request_sense sense; if (position) { - int stat = cdrom_lockdoor (drive, 0, &rq); + int stat = cdrom_lockdoor(drive, 0, &sense); if (stat) return stat; } - return cdrom_eject (drive, !position, NULL); + return cdrom_eject(drive, !position, &sense); } - static int ide_cdrom_lock_door (struct cdrom_device_info *cdi, int lock) { ide_drive_t *drive = (ide_drive_t*) cdi->handle; - return cdrom_lockdoor (drive, lock, NULL); -} - -/* - * the buffer struct used by ide_cdrom_get_capabilities() - */ -struct get_capabilities_buf { - char pad[8]; - struct atapi_capabilities_page cap; /* this is 4 bytes short of ATAPI standard */ - char extra_cap[4]; /* Acer 50X needs the regulation size buffer */ -}; - -static -int ide_cdrom_get_capabilities (ide_drive_t *drive, struct get_capabilities_buf *buf) -{ - int stat, attempts = 3, buflen = sizeof(*buf); - - /* - * Most drives don't care about the buffer size; they return as much info as there's room for. - * But some older drives (?) had trouble with the standard size, preferring 4 bytes less. - * And the modern Acer 50X rejects anything smaller than the standard size. - */ - if (!(drive->id && !strcmp(drive->id->model,"ATAPI CD ROM DRIVE 50X MAX"))) - buflen -= sizeof(buf->extra_cap); /* for all drives except Acer 50X */ - - do { /* we seem to get stat=0x01,err=0x00 the first time (??) */ - stat = cdrom_mode_sense (drive, PAGE_CAPABILITIES, 0, (char *)buf, buflen, NULL); - if (stat == 0) { - /* - * The ACER/AOpen 24X cdrom has the speed fields byte-swapped from the standard. - */ - if (!(drive->id && !drive->id->model[0] && !strncmp(drive->id->fw_rev, "241N", 4))) { - buf->cap.curspeed = ntohs(buf->cap.curspeed); - buf->cap.maxspeed = ntohs(buf->cap.maxspeed); - } - CDROM_STATE_FLAGS (drive)->current_speed = (((unsigned int)buf->cap.curspeed) + (176/2)) / 176; - CDROM_CONFIG_FLAGS(drive)->max_speed = (((unsigned int)buf->cap.maxspeed) + (176/2)) / 176; - return 0; - } - } while (--attempts); - return stat; + return cdrom_lockdoor(drive, lock, NULL); } -static -int ide_cdrom_select_speed (struct cdrom_device_info *cdi, int speed) -{ - int stat; - struct get_capabilities_buf buf; - ide_drive_t *drive = (ide_drive_t*) cdi->handle; - struct atapi_request_sense reqbuf; - stat=cdrom_select_speed (drive, speed, &reqbuf); - if (stat<0) - return stat; - - /* Now with that done, update the speed fields */ - if (ide_cdrom_get_capabilities(drive,&buf)) - return 0; - - cdi->speed = CDROM_STATE_FLAGS (drive)->current_speed; - return 0; -} static -int ide_cdrom_select_disc (struct cdrom_device_info *cdi, int slot) +int ide_cdrom_select_speed(struct cdrom_device_info *cdi, int speed) { ide_drive_t *drive = (ide_drive_t*) cdi->handle; - struct cdrom_info *info = drive->driver_data; - - struct atapi_request_sense my_reqbuf; + struct request_sense sense; int stat; - int nslots, curslot; - - if ( ! CDROM_CONFIG_FLAGS (drive)->is_changer) - return -EDRIVE_CANT_DO_THIS; - -#if ! STANDARD_ATAPI - if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) { - nslots = 3; - curslot = CDROM_STATE_FLAGS (drive)->sanyo_slot; - if (curslot == 3) - curslot = 0; - } else -#endif /* not STANDARD_ATAPI */ - { - stat = cdrom_read_changer_info (drive); - if (stat) - return stat; - - nslots = info->changer_info->hdr.nslots; - curslot = info->changer_info->hdr.curslot; - } - - if (slot == curslot) - return curslot; - - if (slot == CDSL_CURRENT) - return curslot; - - if (slot != CDSL_NONE && (slot < 0 || slot >= nslots)) - return -EINVAL; - - if (drive->usage > 1) - return -EBUSY; - if (slot == CDSL_NONE) { - (void) cdrom_load_unload (drive, -1, NULL); - cdrom_saw_media_change (drive); - (void) cdrom_lockdoor (drive, 0, NULL); - return 0; - } - else { - int was_locked; - - if ( -#if ! STANDARD_ATAPI - CDROM_STATE_FLAGS (drive)->sanyo_slot == 0 && -#endif - info->changer_info->slots[slot].disc_present == 0) { - return -ENOMEDIUM; - } - - was_locked = CDROM_STATE_FLAGS (drive)->door_locked; - if (was_locked) - (void) cdrom_lockdoor (drive, 0, NULL); - - stat = cdrom_load_unload (drive, slot, NULL); - cdrom_saw_media_change (drive); - if (stat) - return stat; - - stat = cdrom_check_status (drive, &my_reqbuf); - if (stat && my_reqbuf.sense_key == NOT_READY) - return -ENOENT; - - if (stat == 0 || my_reqbuf.sense_key == UNIT_ATTENTION) { - stat = cdrom_read_toc (drive, &my_reqbuf); - if (stat) - return stat; - } - - if (was_locked) - (void) cdrom_lockdoor (drive, 1, NULL); + if ((stat = cdrom_select_speed(drive, speed, &sense)) < 0) + return stat; - return slot; - } + cdi->speed = CDROM_STATE_FLAGS(drive)->current_speed; + return 0; } - static int ide_cdrom_drive_status (struct cdrom_device_info *cdi, int slot_nr) { ide_drive_t *drive = (ide_drive_t*) cdi->handle; - struct cdrom_info *info = drive->driver_data; if (slot_nr == CDSL_CURRENT) { + struct request_sense sense; + int stat = cdrom_check_status(drive, &sense); + if (stat == 0 || sense.sense_key == UNIT_ATTENTION) + return CDS_DISC_OK; - struct atapi_request_sense my_reqbuf; - int stat = cdrom_check_status (drive, &my_reqbuf); - if (stat == 0 || my_reqbuf.sense_key == UNIT_ATTENTION) + if (sense.sense_key == NOT_READY && sense.asc == 0x04 && + sense.ascq == 0x04) return CDS_DISC_OK; - if (my_reqbuf.sense_key == NOT_READY) { + if (sense.sense_key == NOT_READY) { /* ATAPI doesn't have anything that can help us decide whether the drive is really emtpy or the tray is just open. irk. */ @@ -2739,47 +2059,29 @@ return CDS_DRIVE_NOT_READY; } - -#if ! STANDARD_ATAPI - else if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) - return CDS_NO_INFO; -#endif /* not STANDARD_ATAPI */ - - else { - struct atapi_changer_info *ci; - int stat = cdrom_read_changer_info (drive); - if (stat < 0) - return stat; - ci = info->changer_info; - - if (ci->slots[slot_nr].disc_present) - return CDS_DISC_OK; - else - return CDS_NO_DISC; - } + return -EINVAL; } static int ide_cdrom_get_last_session (struct cdrom_device_info *cdi, struct cdrom_multisession *ms_info) { - int stat; struct atapi_toc *toc; ide_drive_t *drive = (ide_drive_t*) cdi->handle; struct cdrom_info *info = drive->driver_data; - - /* Make sure the TOC information is valid. */ - stat = cdrom_read_toc (drive, NULL); - if (stat) return stat; + struct request_sense sense; + int ret; toc = info->toc; + if (!CDROM_STATE_FLAGS(drive)->toc_valid || toc == NULL) + if ((ret = cdrom_read_toc(drive, &sense))) + return ret; ms_info->addr.lba = toc->last_session_lba; ms_info->xa_flag = toc->xa_flag; return 0; } - static int ide_cdrom_get_mcn (struct cdrom_device_info *cdi, struct cdrom_mcn *mcn_info) @@ -2788,10 +2090,9 @@ char mcnbuf[24]; ide_drive_t *drive = (ide_drive_t*) cdi->handle; - stat = cdrom_read_subchannel (drive, 2, /* get MCN */ - mcnbuf, sizeof (mcnbuf), - NULL); - if (stat) return stat; +/* get MCN */ + if ((stat = cdrom_read_subchannel(drive, 2, mcnbuf, sizeof (mcnbuf), NULL))) + return stat; memcpy (mcn_info->medium_catalog_number, mcnbuf+9, sizeof (mcn_info->medium_catalog_number)-1); @@ -2812,37 +2113,15 @@ int slot_nr) { ide_drive_t *drive = (ide_drive_t*) cdi->handle; - struct cdrom_info *info = drive->driver_data; - int retval; - + if (slot_nr == CDSL_CURRENT) { - (void) cdrom_check_status (drive, NULL); + (void) cdrom_check_status(drive, NULL); retval = CDROM_STATE_FLAGS (drive)->media_changed; CDROM_STATE_FLAGS (drive)->media_changed = 0; + return retval; } - -#if ! STANDARD_ATAPI - else if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) { - retval = 0; - } -#endif /* not STANDARD_ATAPI */ - - else { - struct atapi_changer_info *ci; - int stat = cdrom_read_changer_info (drive); - if (stat < 0) - return stat; - ci = info->changer_info; - - /* This test may be redundant with cdrom.c. */ - if (slot_nr < 0 || slot_nr >= ci->hdr.nslots) - return -EINVAL; - - retval = ci->slots[slot_nr].change; - } - - return retval; + return -EINVAL; } @@ -2877,7 +2156,7 @@ ide_cdrom_tray_move, /* tray_move */ ide_cdrom_lock_door, /* lock_door */ ide_cdrom_select_speed, /* select_speed */ - ide_cdrom_select_disc, /* select_disc */ + NULL, /* select_disc */ ide_cdrom_get_last_session, /* get_last_session */ ide_cdrom_get_mcn, /* get_mcn */ ide_cdrom_reset, /* reset */ @@ -2885,9 +2164,11 @@ ide_cdrom_dev_ioctl, /* dev_ioctl */ CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN - | CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET - | CDC_IOCTLS | CDC_DRIVE_STATUS, /* capability */ - 0 /* n_minors */ + | CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | CDC_RESET | CDC_IOCTLS + | CDC_DRIVE_STATUS | CDC_CD_R | CDC_CD_RW | CDC_DVD + | CDC_DVD_R| CDC_DVD_RAM | CDC_GENERIC_PACKET, /* capability */ + 0, /* n_minors */ + ide_cdrom_packet }; static int ide_cdrom_register (ide_drive_t *drive, int nslots) @@ -2896,90 +2177,148 @@ struct cdrom_device_info *devinfo = &info->devinfo; int minor = (drive->select.b.unit)<dev = MKDEV (HWIF(drive)->major, minor); + devinfo->dev = MKDEV (HWIF(drive)->major, minor | CD_PART_MASK); devinfo->ops = &ide_cdrom_dops; devinfo->mask = 0; *(int *)&devinfo->speed = CDROM_STATE_FLAGS (drive)->current_speed; *(int *)&devinfo->capacity = nslots; devinfo->handle = (void *) drive; strcpy(devinfo->name, drive->name); - + /* set capability mask to match the probe. */ + if (!CDROM_CONFIG_FLAGS (drive)->cd_r) + devinfo->mask |= CDC_CD_R; + if (!CDROM_CONFIG_FLAGS (drive)->cd_rw) + devinfo->mask |= CDC_CD_RW; + if (!CDROM_CONFIG_FLAGS (drive)->dvd) + devinfo->mask |= CDC_DVD; + if (!CDROM_CONFIG_FLAGS (drive)->dvd_r) + devinfo->mask |= CDC_DVD_R; + if (!CDROM_CONFIG_FLAGS (drive)->dvd_ram) + devinfo->mask |= CDC_DVD_RAM; if (!CDROM_CONFIG_FLAGS (drive)->is_changer) devinfo->mask |= CDC_SELECT_DISC; if (!CDROM_CONFIG_FLAGS (drive)->audio_play) devinfo->mask |= CDC_PLAY_AUDIO; if (!CDROM_CONFIG_FLAGS (drive)->close_tray) devinfo->mask |= CDC_CLOSE_TRAY; - + return register_cdrom (devinfo); } +static +int ide_cdrom_get_capabilities(ide_drive_t *drive, struct atapi_capabilities_page *cap) +{ + struct cdrom_info *info = drive->driver_data; + struct cdrom_device_info *cdi = &info->devinfo; + struct cdrom_generic_command cgc; + int stat, attempts = 3, size = sizeof(*cap); + + /* + * ACER50 (and others?) require the full spec length mode sense + * page capabilities size, but older drives break. + */ + if (drive->id) { + if (!(!strcmp(drive->id->model, "ATAPI CD ROM DRIVE 50X MAX") || + !strcmp(drive->id->model, "WPI CDS-32X"))) + size -= sizeof(cap->pad); + } + + /* we have to cheat a little here. the packet will eventually + * be queued with ide_cdrom_packet(), which extracts the + * drive from cdi->handle. Since this device hasn't been + * registered with the Uniform layer yet, it can't do this. + * Same goes for cdi->ops. + */ + cdi->handle = (ide_drive_t *) drive; + cdi->ops = &ide_cdrom_dops; + init_cdrom_command(&cgc, cap, size); + do { /* we seem to get stat=0x01,err=0x00 the first time (??) */ + stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0); + if (!stat) + break; + } while (--attempts); + return stat; +} static int ide_cdrom_probe_capabilities (ide_drive_t *drive) { - int stat, nslots = 0; - struct get_capabilities_buf buf; + struct cdrom_info *info = drive->driver_data; + struct cdrom_device_info *cdi = &info->devinfo; + struct atapi_capabilities_page cap; + int nslots = 1; if (CDROM_CONFIG_FLAGS (drive)->nec260) { - CDROM_CONFIG_FLAGS (drive)->no_eject = 0; - CDROM_CONFIG_FLAGS (drive)->audio_play = 1; + CDROM_CONFIG_FLAGS (drive)->no_eject = 0; + CDROM_CONFIG_FLAGS (drive)->audio_play = 1; return nslots; } - if (ide_cdrom_get_capabilities(drive,&buf)) + if (ide_cdrom_get_capabilities(drive, &cap)) return 0; - if (buf.cap.lock == 0) + + if (cap.lock == 0) CDROM_CONFIG_FLAGS (drive)->no_doorlock = 1; - if (buf.cap.eject) + if (cap.eject) CDROM_CONFIG_FLAGS (drive)->no_eject = 0; - if (buf.cap.cd_r_write) + if (cap.cd_r_write) CDROM_CONFIG_FLAGS (drive)->cd_r = 1; - if (buf.cap.cd_rw_write) + if (cap.cd_rw_write) CDROM_CONFIG_FLAGS (drive)->cd_rw = 1; - if (buf.cap.test_write) + if (cap.test_write) CDROM_CONFIG_FLAGS (drive)->test_write = 1; - if (buf.cap.dvd_ram_read || buf.cap.dvd_r_read || buf.cap.dvd_rom) + if (cap.dvd_ram_read || cap.dvd_r_read || cap.dvd_rom) CDROM_CONFIG_FLAGS (drive)->dvd = 1; - if (buf.cap.dvd_ram_write) + if (cap.dvd_ram_write) CDROM_CONFIG_FLAGS (drive)->dvd_r = 1; - if (buf.cap.dvd_r_write) - CDROM_CONFIG_FLAGS (drive)->dvd_rw = 1; - if (buf.cap.audio_play) + if (cap.dvd_r_write) + CDROM_CONFIG_FLAGS (drive)->dvd_ram = 1; + if (cap.audio_play) CDROM_CONFIG_FLAGS (drive)->audio_play = 1; - if (buf.cap.mechtype == 0) + if (cap.mechtype == 0) CDROM_CONFIG_FLAGS (drive)->close_tray = 0; #if ! STANDARD_ATAPI - if (CDROM_STATE_FLAGS (drive)->sanyo_slot > 0) { + if (cdi->sanyo_slot > 0) { CDROM_CONFIG_FLAGS (drive)->is_changer = 1; nslots = 3; } else #endif /* not STANDARD_ATAPI */ - if (buf.cap.mechtype == mechtype_individual_changer || - buf.cap.mechtype == mechtype_cartridge_changer) { - struct atapi_mechstat_header mechbuf; - - stat = cdrom_read_mech_status (drive, (char*)&mechbuf, - sizeof (mechbuf), NULL); - if (!stat) { + if (cap.mechtype == mechtype_individual_changer || + cap.mechtype == mechtype_cartridge_changer) { + if ((nslots = cdrom_number_of_slots(cdi)) > 1) { CDROM_CONFIG_FLAGS (drive)->is_changer = 1; CDROM_CONFIG_FLAGS (drive)->supp_disc_present = 1; - nslots = mechbuf.nslots; } } - printk ("%s: ATAPI %dX %s", - drive->name, CDROM_CONFIG_FLAGS (drive)->max_speed, - (CDROM_CONFIG_FLAGS (drive)->dvd) ? "DVD-ROM" : "CD-ROM"); + /* The ACER/AOpen 24X cdrom has the speed fields byte-swapped */ + if (drive->id && !drive->id->model[0] && !strncmp(drive->id->fw_rev, "241N", 4)) { + CDROM_STATE_FLAGS (drive)->current_speed = + (((unsigned int)cap.curspeed) + (176/2)) / 176; + CDROM_CONFIG_FLAGS (drive)->max_speed = + (((unsigned int)cap.maxspeed) + (176/2)) / 176; + } else { + CDROM_STATE_FLAGS (drive)->current_speed = + (ntohs(cap.curspeed) + (176/2)) / 176; + CDROM_CONFIG_FLAGS (drive)->max_speed = + (ntohs(cap.maxspeed) + (176/2)) / 176; + } + + /* don't print speed if the drive reported 0. + */ + printk("%s: ATAPI", drive->name); + if (CDROM_CONFIG_FLAGS(drive)->max_speed) + printk(" %dX", CDROM_CONFIG_FLAGS(drive)->max_speed); + printk(" %s", CDROM_CONFIG_FLAGS(drive)->dvd ? "DVD-ROM" : "CD-ROM"); - if (CDROM_CONFIG_FLAGS (drive)->dvd_r|CDROM_CONFIG_FLAGS (drive)->dvd_rw) + if (CDROM_CONFIG_FLAGS (drive)->dvd_r|CDROM_CONFIG_FLAGS (drive)->dvd_ram) printk (" DVD%s%s", - (CDROM_CONFIG_FLAGS (drive)->dvd_r)? "-RAM" : "", - (CDROM_CONFIG_FLAGS (drive)->dvd_rw)? "/RW" : ""); + (CDROM_CONFIG_FLAGS (drive)->dvd_r)? "-R" : "", + (CDROM_CONFIG_FLAGS (drive)->dvd_ram)? "AM" : ""); if (CDROM_CONFIG_FLAGS (drive)->cd_r|CDROM_CONFIG_FLAGS (drive)->cd_rw) printk (" CD%s%s", @@ -2991,7 +2330,7 @@ else printk (" drive"); - printk (", %dkB Cache\n", ntohs(buf.cap.buffer_size)); + printk (", %dkB Cache\n", be16_to_cpu(cap.buffer_size)); return nslots; } @@ -3011,19 +2350,17 @@ int ide_cdrom_setup (ide_drive_t *drive) { struct cdrom_info *info = drive->driver_data; + struct cdrom_device_info *cdi = &info->devinfo; + int minor = drive->select.b.unit << PARTN_BITS; int nslots; - kdev_t dev = MKDEV (HWIF (drive)->major, - drive->select.b.unit << PARTN_BITS); - - set_device_ro (dev, 1); - blksize_size[HWIF(drive)->major][drive->select.b.unit << PARTN_BITS] = - CD_FRAMESIZE; + set_device_ro(MKDEV(HWIF(drive)->major, minor), 1); + set_blocksize(MKDEV(HWIF(drive)->major, minor), CD_FRAMESIZE); - drive->special.all = 0; - drive->ready_stat = 0; + drive->special.all = 0; + drive->ready_stat = 0; - CDROM_STATE_FLAGS (drive)->media_changed = 0; + CDROM_STATE_FLAGS (drive)->media_changed = 1; CDROM_STATE_FLAGS (drive)->toc_valid = 0; CDROM_STATE_FLAGS (drive)->door_locked = 0; @@ -3045,25 +2382,29 @@ CDROM_CONFIG_FLAGS (drive)->test_write = 0; CDROM_CONFIG_FLAGS (drive)->dvd = 0; CDROM_CONFIG_FLAGS (drive)->dvd_r = 0; - CDROM_CONFIG_FLAGS (drive)->dvd_rw = 0; + CDROM_CONFIG_FLAGS (drive)->dvd_ram = 0; CDROM_CONFIG_FLAGS (drive)->no_eject = 1; CDROM_CONFIG_FLAGS (drive)->supp_disc_present = 0; CDROM_CONFIG_FLAGS (drive)->audio_play = 0; CDROM_CONFIG_FLAGS (drive)->close_tray = 1; - + /* limit transfer size per interrupt. */ CDROM_CONFIG_FLAGS (drive)->limit_nframes = 0; if (drive->id != NULL) { + /* a testament to the nice quality of Samsung drives... */ if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2430")) CDROM_CONFIG_FLAGS (drive)->limit_nframes = 1; else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-2432")) CDROM_CONFIG_FLAGS (drive)->limit_nframes = 1; + /* the 3231 model does not support the SET_CD_SPEED command */ + else if (!strcmp(drive->id->model, "SAMSUNG CD-ROM SCR-3231")) + cdi->mask |= CDC_SELECT_SPEED; } #if ! STANDARD_ATAPI /* by default Sanyo 3 CD changer support is turned off and ATAPI Rev 2.2+ standard support for CD changers is used */ - CDROM_STATE_FLAGS (drive)->sanyo_slot = 0; + cdi->sanyo_slot = 0; CDROM_CONFIG_FLAGS (drive)->nec260 = 0; CDROM_CONFIG_FLAGS (drive)->toctracks_as_bcd = 0; @@ -3115,18 +2456,20 @@ (strcmp(drive->id->model, "CD-ROM CDR-C3G") == 0) || (strcmp(drive->id->model, "CD-ROM CDR_C36") == 0)) { /* uses CD in slot 0 when value is set to 3 */ - CDROM_STATE_FLAGS (drive)->sanyo_slot = 3; + cdi->sanyo_slot = 3; } } #endif /* not STANDARD_ATAPI */ - info->toc = NULL; - info->sector_buffer = NULL; - info->sector_buffered = 0; - info->nsectors_buffered = 0; + info->toc = NULL; + info->buffer = NULL; + info->sector_buffered = 0; + info->nsectors_buffered = 0; info->changer_info = NULL; + info->last_block = 0; + info->start_seek = 0; nslots = ide_cdrom_probe_capabilities (drive); @@ -3151,9 +2494,12 @@ static int ide_cdrom_open (struct inode *ip, struct file *fp, ide_drive_t *drive) { + struct cdrom_info *info = drive->driver_data; int rc; MOD_INC_USE_COUNT; + if (info->buffer == NULL) + info->buffer = (char *) kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL); rc = cdrom_fops.open (ip, fp); if (rc) { drive->usage--; @@ -3178,7 +2524,6 @@ (drive->select.b.unit)<sector_buffer != NULL) - kfree (info->sector_buffer); + if (info->buffer != NULL) + kfree(info->buffer); if (info->toc != NULL) - kfree (info->toc); + kfree(info->toc); if (info->changer_info != NULL) - kfree (info->changer_info); + kfree(info->changer_info); if (devinfo->handle == drive && unregister_cdrom (devinfo)) printk ("%s: ide_cdrom_cleanup failed to unregister device from the cdrom driver.\n", drive->name); - kfree (info); + kfree(info); drive->driver_data = NULL; return 0; } @@ -3235,11 +2580,6 @@ MODULE_PARM(ignore, "s"); MODULE_DESCRIPTION("ATAPI CD-ROM Driver"); -int init_module (void) -{ - return ide_cdrom_init(); -} - void cleanup_module(void) { ide_drive_t *drive; @@ -3252,6 +2592,11 @@ } ide_unregister_module (&ide_cdrom_module); } + +int init_module(void) +{ + return ide_cdrom_init(); +} #endif /* MODULE */ int ide_cdrom_init (void) @@ -3263,11 +2608,12 @@ MOD_INC_USE_COUNT; while ((drive = ide_scan_devices (ide_cdrom, ide_cdrom_driver.name, NULL, failed++)) != NULL) { /* skip drives that we were told to ignore */ - if (ignore != NULL) + if (ignore != NULL) { if (strstr(ignore, drive->name)) { printk("ide-cd: ignoring drive %s\n", drive->name); continue; } + } info = (struct cdrom_info *) kmalloc (sizeof (struct cdrom_info), GFP_KERNEL); if (info == NULL) { printk ("%s: Can't allocate a cdrom structure\n", drive->name); @@ -3294,11 +2640,3 @@ MOD_DEC_USE_COUNT; return 0; } - - -/*==========================================================================*/ -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-cd.h linux.16p3/drivers/block/ide-cd.h --- linux.vanilla/drivers/block/ide-cd.h Fri Apr 21 23:13:30 2000 +++ linux.16p3/drivers/block/ide-cd.h Thu May 4 00:41:42 2000 @@ -1,12 +1,13 @@ #ifndef _IDE_CD_H #define _IDE_CD_H /* - * linux/drivers/block/ide_modes.h + * linux/drivers/block/ide_cd.h * - * Copyright (C) 1996 Erik Andersen - * Copyright (C) 1998, 1999 Jens Axboe + * Copyright (C) 1996, 1997, 1998 Erik Andersen + * Copyright (C) 1998, 1999, 2000 Jens Axboe */ +#include #include /* Turn this on to have the driver print out the meanings of the @@ -34,19 +35,13 @@ #define NO_DOOR_LOCKING 0 #endif - -/* Size of buffer to allocate, in blocks, for audio reads. */ - -#ifndef CDROM_NBLOCKS_BUFFER -#define CDROM_NBLOCKS_BUFFER 8 -#endif - - /************************************************************************/ -#define SECTOR_SIZE 512 -#define SECTOR_BITS 9 -#define SECTORS_PER_FRAME (CD_FRAMESIZE / SECTOR_SIZE) +#define SECTOR_SIZE 512 +#define SECTOR_BITS 9 +#define SECTORS_PER_FRAME (CD_FRAMESIZE / SECTOR_SIZE) +#define SECTOR_BUFFER_SIZE (CD_FRAMESIZE * 32) +#define SECTORS_BUFFER (SECTOR_BUFFER_SIZE / SECTOR_SIZE) #define MIN(a,b) ((a) < (b) ? (a) : (b)) @@ -55,96 +50,37 @@ #define REQUEST_SENSE_COMMAND 4316 #define RESET_DRIVE_COMMAND 4317 -/* - * For controlling drive spindown time. - */ -#define CDROMGETSPINDOWN 0x531d -#define CDROMSETSPINDOWN 0x531e - - -/* Some ATAPI command opcodes (just like SCSI). - (Some other cdrom-specific codes are in cdrom.h.) */ -#define TEST_UNIT_READY 0x00 -#define REQUEST_SENSE 0x03 -#define INQUIRY 0x12 -#define START_STOP 0x1b -#define ALLOW_MEDIUM_REMOVAL 0x1e -#define READ_CAPACITY 0x25 -#define READ_10 0x28 -#define SEEK 0x2b -#define READ_HEADER 0x44 -#define STOP_PLAY_SCAN 0x4e -#define MODE_SELECT_10 0x55 -#define MODE_SENSE_10 0x5a -#define LOAD_UNLOAD 0xa6 -#define READ_12 0xa8 -#define READ_CD_MSF 0xb9 -#define SCAN 0xba -#define SET_CD_SPEED 0xbb -#define PLAY_CD 0xbc -#define MECHANISM_STATUS 0xbd -#define READ_CD 0xbe - -/* DVD Opcodes */ -#define DVD_GET_PERFORMANCE 0xac - - -/* Page codes for mode sense/set */ - -#define PAGE_READERR 0x01 -#define PAGE_CDROM 0x0d -#define PAGE_AUDIO 0x0e -#define PAGE_CAPABILITIES 0x2a -#define PAGE_ALL 0x3f - - -/* ATAPI sense keys (from table 140 of ATAPI 2.6) */ - -#define NO_SENSE 0x00 -#define RECOVERED_ERROR 0x01 -#define NOT_READY 0x02 -#define MEDIUM_ERROR 0x03 -#define HARDWARE_ERROR 0x04 -#define ILLEGAL_REQUEST 0x05 -#define UNIT_ATTENTION 0x06 -#define DATA_PROTECT 0x07 -#define ABORTED_COMMAND 0x0b -#define MISCOMPARE 0x0e - -/* We want some additional flags for CDROM drives. - To save space in the ide_drive_t struct, use some fields which - doesn't make sense for CDROMs -- `bios_cyl' and `bios_head'. */ /* Configuration flags. These describe the capabilities of the drive. They generally do not change after initialization, unless we learn more about the drive from stuff failing. */ struct ide_cd_config_flags { - __u8 drq_interrupt : 1; /* Device sends an interrupt when ready - for a packet command. */ - __u8 no_doorlock : 1; /* Drive cannot lock the door. */ - __u8 no_eject : 1; /* Drive cannot eject the disc. */ - __u8 nec260 : 1; /* Drive is a pre-1.2 NEC 260 drive. */ - __u8 playmsf_as_bcd : 1; /* PLAYMSF command takes BCD args. */ - __u8 tocaddr_as_bcd : 1; /* TOC addresses are in BCD. */ - __u8 toctracks_as_bcd : 1; /* TOC track numbers are in BCD. */ - __u8 subchan_as_bcd : 1; /* Subchannel info is in BCD. */ - __u8 is_changer : 1; /* Drive is a changer. */ - __u8 cd_r : 1; /* Drive can write to CD-R media . */ - __u8 cd_rw : 1; /* Drive can write to CD-R/W media . */ - __u8 dvd : 1; /* Drive is a DVD-ROM */ - __u8 dvd_r : 1; /* Drive can write DVD-RAM */ - __u8 dvd_rw : 1; /* Drive can write DVD-R/W */ - __u8 test_write : 1; /* Drive can fake writes */ - __u8 supp_disc_present: 1; /* Changer can report exact contents - of slots. */ - __u8 limit_nframes : 1; /* Drive does not provide data in - multiples of SECTOR_SIZE when more - than one interrupt is needed. */ - __u8 seeking : 1; /* Seeking in progress */ - __u8 audio_play : 1; /* can do audio related commands */ - __u8 close_tray : 1; /* can close the tray */ - __u8 reserved : 4; - byte max_speed; /* Max speed of the drive */ + __u8 drq_interrupt : 1; /* Device sends an interrupt when ready + for a packet command. */ + __u8 no_doorlock : 1; /* Drive cannot lock the door. */ + __u8 no_eject : 1; /* Drive cannot eject the disc. */ + __u8 nec260 : 1; /* Drive is a pre-1.2 NEC 260 drive. */ + __u8 playmsf_as_bcd : 1; /* PLAYMSF command takes BCD args. */ + __u8 tocaddr_as_bcd : 1; /* TOC addresses are in BCD. */ + __u8 toctracks_as_bcd : 1; /* TOC track numbers are in BCD. */ + __u8 subchan_as_bcd : 1; /* Subchannel info is in BCD. */ + __u8 is_changer : 1; /* Drive is a changer. */ + __u8 cd_r : 1; /* Drive can write to CD-R media . */ + __u8 cd_rw : 1; /* Drive can write to CD-R/W media . */ + __u8 dvd : 1; /* Drive is a DVD-ROM */ + __u8 dvd_r : 1; /* Drive can write DVD-R */ + __u8 dvd_ram : 1; /* Drive can write DVD-RAM */ + __u8 test_write : 1; /* Drive can fake writes */ + __u8 supp_disc_present : 1; /* Changer can report exact contents + of slots. */ + __u8 limit_nframes : 1; /* Drive does not provide data in + multiples of SECTOR_SIZE when more + than one interrupt is needed. */ + __u8 seeking : 1; /* Seeking in progress */ + __u8 audio_play : 1; /* can do audio related commands */ + __u8 close_tray : 1; /* can close the tray */ + __u8 reserved : 4; + byte max_speed; /* Max speed of the drive */ }; #define CDROM_CONFIG_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->config_flags)) @@ -155,51 +91,17 @@ __u8 media_changed : 1; /* Driver has noticed a media change. */ __u8 toc_valid : 1; /* Saved TOC information is current. */ __u8 door_locked : 1; /* We think that the drive door is locked. */ - __u8 sanyo_slot : 2; /* Sanyo 3 CD changer support */ - __u8 reserved : 3; + __u8 reserved : 5; byte current_speed; /* Current speed of the drive */ }; -#define CDROM_STATE_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->state_flags)) - -struct atapi_request_sense { -#if defined(__BIG_ENDIAN_BITFIELD) - unsigned char valid : 1; - unsigned char error_code : 7; -#elif defined(__LITTLE_ENDIAN_BITFIELD) - unsigned char error_code : 7; - unsigned char valid : 1; -#else -#error "Please fix " -#endif - byte reserved1; -#if defined(__BIG_ENDIAN_BITFIELD) - unsigned char reserved3 : 2; - unsigned char ili : 1; - unsigned char reserved2 : 1; - unsigned char sense_key : 4; -#elif defined(__LITTLE_ENDIAN_BITFIELD) - unsigned char sense_key : 4; - unsigned char reserved2 : 1; - unsigned char ili : 1; - unsigned char reserved3 : 2; -#else -#error "Please fix " -#endif - byte info[4]; - byte sense_len; - byte command_info[4]; - byte asc; - byte ascq; - byte fru; - byte sense_key_specific[3]; -}; +#define CDROM_STATE_FLAGS(drive) (&(((struct cdrom_info *)(drive->driver_data))->state_flags)) struct packet_command { char *buffer; int buflen; int stat; - struct atapi_request_sense *sense_data; + struct request_sense *sense; unsigned char c[12]; }; @@ -278,16 +180,12 @@ }; -typedef enum { - mechtype_caddy = 0, - mechtype_tray = 1, - mechtype_popup = 2, - mechtype_individual_changer = 4, - mechtype_cartridge_changer = 5 -} mechtype_t; - +/* This should probably go into cdrom.h along with the other + * generic stuff now in the Mt. Fuji spec. + */ struct atapi_capabilities_page { + struct mode_page_header header; #if defined(__BIG_ENDIAN_BITFIELD) __u8 parameters_saveable : 1; __u8 reserved1 : 1; @@ -500,8 +398,7 @@ /* Current speed (in kB/s). */ unsigned short curspeed; - /* Truncate the structure here, so we don't have headaches reading - from older drives. */ + char pad[4]; }; @@ -552,13 +449,11 @@ byte reserved2[3]; }; - struct atapi_changer_info { struct atapi_mechstat_header hdr; struct atapi_slot slots[0]; }; - /* Extra per-device info for cdrom drives. */ struct cdrom_info { @@ -567,21 +462,13 @@ struct atapi_toc *toc; - /* Sector buffer. If a read request wants only the first part - of a cdrom block, we cache the rest of the block here, - in the expectation that the data is going to be wanted soon. - SECTOR_BUFFERED is the number of the first buffered sector, - and NSECTORS_BUFFERED is the number of sectors in the buffer. - Before the buffer is allocated, we should have - SECTOR_BUFFER == NULL and NSECTORS_BUFFERED == 0. */ - - unsigned long sector_buffered; - unsigned long nsectors_buffered; - char *sector_buffer; + unsigned long sector_buffered; + unsigned long nsectors_buffered; + unsigned char *buffer; /* The result of the last successful request sense command on this device. */ - struct atapi_request_sense sense_data; + struct request_sense sense_data; struct request request_sense_request; struct packet_command request_sense_pc; @@ -598,21 +485,91 @@ struct cdrom_device_info devinfo; }; - -#define SECTOR_BUFFER_SIZE CD_FRAMESIZE - - /**************************************************************************** * Descriptions of ATAPI error codes. */ #define ARY_LEN(a) ((sizeof(a) / sizeof(a[0]))) +/* This stuff should be in cdrom.h, since it is now generic... */ + +/* ATAPI sense keys (from table 140 of ATAPI 2.6) */ +#define NO_SENSE 0x00 +#define RECOVERED_ERROR 0x01 +#define NOT_READY 0x02 +#define MEDIUM_ERROR 0x03 +#define HARDWARE_ERROR 0x04 +#define ILLEGAL_REQUEST 0x05 +#define UNIT_ATTENTION 0x06 +#define DATA_PROTECT 0x07 +#define ABORTED_COMMAND 0x0b +#define MISCOMPARE 0x0e + + + +/* This stuff should be in cdrom.h, since it is now generic... */ #if VERBOSE_IDE_CD_ERRORS -/* From Table 124 of the ATAPI 1.2 spec. - Unchanged in Table 140 of the ATAPI 2.6 draft standard. */ + /* The generic packet command opcodes for CD/DVD Logical Units, + * From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */ +const struct { + unsigned short packet_command; + const char * const text; +} packet_command_texts[] = { + { GPCMD_TEST_UNIT_READY, "Test Unit Ready" }, + { GPCMD_REQUEST_SENSE, "Request Sense" }, + { GPCMD_FORMAT_UNIT, "Format Unit" }, + { GPCMD_INQUIRY, "Inquiry" }, + { GPCMD_START_STOP_UNIT, "Start/Stop Unit" }, + { GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL, "Prevent/Allow Medium Removal" }, + { GPCMD_READ_FORMAT_CAPACITIES, "Read Format Capacities" }, + { GPCMD_READ_CDVD_CAPACITY, "Read Cd/Dvd Capacity" }, + { GPCMD_READ_10, "Read 10" }, + { GPCMD_WRITE_10, "Write 10" }, + { GPCMD_SEEK, "Seek" }, + { GPCMD_WRITE_AND_VERIFY_10, "Write and Verify 10" }, + { GPCMD_VERIFY_10, "Verify 10" }, + { GPCMD_FLUSH_CACHE, "Flush Cache" }, + { GPCMD_READ_SUBCHANNEL, "Read Subchannel" }, + { GPCMD_READ_TOC_PMA_ATIP, "Read Table of Contents" }, + { GPCMD_READ_HEADER, "Read Header" }, + { GPCMD_PLAY_AUDIO_10, "Play Audio 10" }, + { GPCMD_GET_CONFIGURATION, "Get Configuration" }, + { GPCMD_PLAY_AUDIO_MSF, "Play Audio MSF" }, + { GPCMD_PLAYAUDIO_TI, "Play Audio TrackIndex" }, + { GPCMD_GET_EVENT_STATUS_NOTIFICATION, "Get Event Status Notification" }, + { GPCMD_PAUSE_RESUME, "Pause/Resume" }, + { GPCMD_STOP_PLAY_SCAN, "Stop Play/Scan" }, + { GPCMD_READ_DISC_INFO, "Read Disc Info" }, + { GPCMD_READ_TRACK_RZONE_INFO, "Read Track Rzone Info" }, + { GPCMD_RESERVE_RZONE_TRACK, "Reserve Rzone Track" }, + { GPCMD_SEND_OPC, "Send OPC" }, + { GPCMD_MODE_SELECT_10, "Mode Select 10" }, + { GPCMD_REPAIR_RZONE_TRACK, "Repair Rzone Track" }, + { GPCMD_MODE_SENSE_10, "Mode Sense 10" }, + { GPCMD_CLOSE_TRACK, "Close Track" }, + { GPCMD_BLANK, "Blank" }, + { GPCMD_SEND_EVENT, "Send Event" }, + { GPCMD_SEND_KEY, "Send Key" }, + { GPCMD_REPORT_KEY, "Report Key" }, + { GPCMD_LOAD_UNLOAD, "Load/Unload" }, + { GPCMD_SET_READ_AHEAD, "Set Read-ahead" }, + { GPCMD_READ_12, "Read 12" }, + { GPCMD_GET_PERFORMANCE, "Get Performance" }, + { GPCMD_SEND_DVD_STRUCTURE, "Send DVD Structure" }, + { GPCMD_READ_DVD_STRUCTURE, "Read DVD Structure" }, + { GPCMD_SET_STREAMING, "Set Streaming" }, + { GPCMD_READ_CD_MSF, "Read CD MSF" }, + { GPCMD_SCAN, "Scan" }, + { GPCMD_SET_SPEED, "Set Speed" }, + { GPCMD_PLAY_CD, "Play CD" }, + { GPCMD_MECHANISM_STATUS, "Mechanism Status" }, + { GPCMD_READ_CD, "Read CD" }, +}; + + +/* From Table 303 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */ const char * const sense_key_texts[16] = { "No sense data", "Recovered error", @@ -632,162 +589,145 @@ "(reserved)", }; - -/* From Table 37 of the ATAPI 2.6 draft standard. */ -const struct { - unsigned short packet_command; - const char * const text; -} packet_command_texts[] = { - { TEST_UNIT_READY, "Test Unit Ready" }, - { REQUEST_SENSE, "Request Sense" }, - { INQUIRY, "Inquiry" }, - { START_STOP, "Start Stop Unit" }, - { ALLOW_MEDIUM_REMOVAL, "Prevent/Allow Medium Removal" }, - { READ_CAPACITY, "Read CD-ROM Capacity" }, - { READ_10, "Read(10)" }, - { SEEK, "Seek" }, - { SCMD_READ_TOC, "Read TOC" }, - { SCMD_READ_SUBCHANNEL, "Read Sub-Channel" }, - { READ_HEADER, "Read Header" }, - { STOP_PLAY_SCAN, "Stop Play/Scan" }, - { SCMD_PLAYAUDIO10, "Play Audio" }, - { SCMD_PLAYAUDIO_MSF, "Play Audio MSF" }, - { SCMD_PAUSE_RESUME, "Pause/Resume" }, - { MODE_SELECT_10, "Mode Select" }, - { MODE_SENSE_10, "Mode Sense" }, - { LOAD_UNLOAD, "Load/Unload CD" }, - { READ_12, "Read(12)" }, - { READ_CD_MSF, "Read CD MSF" }, - { SCAN, "Scan" }, - { SET_CD_SPEED, "Set CD Speed" }, - { PLAY_CD, "Play CD" }, - { MECHANISM_STATUS, "Mechanism Status" }, - { READ_CD, "Read CD" }, - { DVD_GET_PERFORMANCE, "Get Performance" }, -}; - - -/* From Table 125 of the ATAPI 1.2 spec., - with additions from Tables 141 and 142 of the ATAPI 2.6 draft standard. */ - +/* From Table 304 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */ const struct { - unsigned short asc_ascq; + unsigned long asc_ascq; const char * const text; } sense_data_texts[] = { - { 0x0000, "No additional sense information" }, - - { 0x0011, "Audio play operation in progress" }, - { 0x0012, "Audio play operation paused" }, - { 0x0013, "Audio play operation successfully completed" }, - { 0x0014, "Audio play operation stopped due to error" }, - { 0x0015, "No current audio status to return" }, - - { 0x0100, "Mechanical positioning or changer error" }, - - { 0x0200, "No seek complete" }, - - { 0x0400, "Logical unit not ready - cause not reportable" }, - { 0x0401, - "Logical unit not ready - in progress (sic) of becoming ready" }, - { 0x0402, "Logical unit not ready - initializing command required" }, - { 0x0403, "Logical unit not ready - manual intervention required" }, - - { 0x0501, "Media load - eject failed" }, - - { 0x0600, "No reference position found" }, - - { 0x0900, "Track following error" }, - { 0x0901, "Tracking servo failure" }, - { 0x0902, "Focus servo failure" }, - { 0x0903, "Spindle servo failure" }, - - { 0x1100, "Unrecovered read error" }, - { 0x1106, "CIRC unrecovered error" }, - - { 0x1500, "Random positioning error" }, - { 0x1501, "Mechanical positioning or changer error" }, - { 0x1502, "Positioning error detected by read of medium" }, - - { 0x1700, "Recovered data with no error correction applied" }, - { 0x1701, "Recovered data with retries" }, - { 0x1702, "Recovered data with positive head offset" }, - { 0x1703, "Recovered data with negative head offset" }, - { 0x1704, "Recovered data with retries and/or CIRC applied" }, - { 0x1705, "Recovered data using previous sector ID" }, - - { 0x1800, "Recovered data with error correction applied" }, - { 0x1801, "Recovered data with error correction and retries applied" }, - { 0x1802, "Recovered data - the data was auto-reallocated" }, - { 0x1803, "Recovered data with CIRC" }, - { 0x1804, "Recovered data with L-EC" }, - /* Following two not in 2.6. */ - { 0x1805, "Recovered data - recommend reassignment" }, - { 0x1806, "Recovered data - recommend rewrite" }, - - { 0x1a00, "Parameter list length error" }, - - { 0x2000, "Invalid command operation code" }, - - { 0x2100, "Logical block address out of range" }, - - { 0x2400, "Invalid field in command packet" }, - - { 0x2600, "Invalid field in parameter list" }, - { 0x2601, "Parameter not supported" }, - { 0x2602, "Parameter value invalid" }, - /* Following code not in 2.6. */ - { 0x2603, "Threshold parameters not supported" }, - - { 0x2800, "Not ready to ready transition, medium may have changed" }, - - { 0x2900, "Power on, reset or bus device reset occurred" }, - - { 0x2a00, "Parameters changed" }, - { 0x2a01, "Mode parameters changed" }, - - { 0x3000, "Incompatible medium installed" }, - { 0x3001, "Cannot read medium - unknown format" }, - { 0x3002, "Cannot read medium - incompatible format" }, - - /* Following code not in 2.6. */ - { 0x3700, "Rounded parameter" }, - - { 0x3900, "Saving parameters not supported" }, - - { 0x3a00, "Medium not present" }, - - { 0x3f00, "ATAPI CD-ROM drive operating conditions have changed" }, - { 0x3f01, "Microcode has been changed" }, - /* Following two not in 2.6. */ - { 0x3f02, "Changed operating definition" }, - { 0x3f03, "Inquiry data has changed" }, - - { 0x4000, "Diagnostic failure on component (ASCQ)" }, - - { 0x4400, "Internal ATAPI CD-ROM drive failure" }, - - { 0x4e00, "Overlapped commands attempted" }, - - { 0x5300, "Media load or eject failed" }, - { 0x5302, "Medium removal prevented" }, - - { 0x5700, "Unable to recover table of contents" }, - - { 0x5a00, "Operator request or state change input (unspecified)" }, - { 0x5a01, "Operator medium removal request" }, - - /* Following two not in 2.6. */ - { 0x5b00, "Threshold condition met" }, - { 0x5c00, "Status change" }, - - { 0x6300, "End of user area encountered on this track" }, - - { 0x6400, "Illegal mode for this track or incompatible medium" }, - - /* Following error is misspelled in ATAPI 2.6 */ - { 0xb900, "Play operation oborted [sic]" }, - - { 0xbf00, "Loss of streaming" }, + { 0x000000, "No additional sense information" }, + { 0x000011, "Play operation in progress" }, + { 0x000012, "Play operation paused" }, + { 0x000013, "Play operation successfully completed" }, + { 0x000014, "Play operation stopped due to error" }, + { 0x000015, "No current audio status to return" }, + { 0x010c0a, "Write error - padding blocks added" }, + { 0x011700, "Recovered data with no error correction applied" }, + { 0x011701, "Recovered data with retries" }, + { 0x011702, "Recovered data with positive head offset" }, + { 0x011703, "Recovered data with negative head offset" }, + { 0x011704, "Recovered data with retries and/or CIRC applied" }, + { 0x011705, "Recovered data using previous sector ID" }, + { 0x011800, "Recovered data with error correction applied" }, + { 0x011801, "Recovered data with error correction and retries applied"}, + { 0x011802, "Recovered data - the data was auto-reallocated" }, + { 0x011803, "Recovered data with CIRC" }, + { 0x011804, "Recovered data with L-EC" }, + { 0x015d00, + "Failure prediction threshold exceeded - Predicted logical unit failure" }, + { 0x015d01, + "Failure prediction threshold exceeded - Predicted media failure" }, + { 0x015dff, "Failure prediction threshold exceeded - False" }, + { 0x017301, "Power calibration area almost full" }, + { 0x020400, "Logical unit not ready - cause not reportable" }, + /* Following is misspelled in ATAPI 2.6, _and_ in Mt. Fuji */ + { 0x020401, + "Logical unit not ready - in progress [sic] of becoming ready" }, + { 0x020402, "Logical unit not ready - initializing command required" }, + { 0x020403, "Logical unit not ready - manual intervention required" }, + { 0x020404, "Logical unit not ready - format in progress" }, + { 0x020407, "Logical unit not ready - operation in progress" }, + { 0x020408, "Logical unit not ready - long write in progress" }, + { 0x020600, "No reference position found (media may be upside down)" }, + { 0x023000, "Incompatible medium installed" }, + { 0x023a00, "Medium not present" }, + { 0x025300, "Media load or eject failed" }, + { 0x025700, "Unable to recover table of contents" }, + { 0x030300, "Peripheral device write fault" }, + { 0x030301, "No write current" }, + { 0x030302, "Excessive write errors" }, + { 0x030c00, "Write error" }, + { 0x030c01, "Write error - Recovered with auto reallocation" }, + { 0x030c02, "Write error - auto reallocation failed" }, + { 0x030c03, "Write error - recommend reassignment" }, + { 0x030c04, "Compression check miscompare error" }, + { 0x030c05, "Data expansion occurred during compress" }, + { 0x030c06, "Block not compressible" }, + { 0x030c07, "Write error - recovery needed" }, + { 0x030c08, "Write error - recovery failed" }, + { 0x030c09, "Write error - loss of streaming" }, + { 0x031100, "Unrecovered read error" }, + { 0x031106, "CIRC unrecovered error" }, + { 0x033101, "Format command failed" }, + { 0x033200, "No defect spare location available" }, + { 0x033201, "Defect list update failure" }, + { 0x035100, "Erase failure" }, + { 0x037200, "Session fixation error" }, + { 0x037201, "Session fixation error writin lead-in" }, + { 0x037202, "Session fixation error writin lead-out" }, + { 0x037300, "CD control error" }, + { 0x037302, "Power calibration area is full" }, + { 0x037303, "Power calibration area error" }, + { 0x037304, "Program memory area / RMA update failure" }, + { 0x037305, "Program memory area / RMA is full" }, + { 0x037306, "Program memory area / RMA is (almost) full" }, + + { 0x040200, "No seek complete" }, + { 0x040300, "Write fault" }, + { 0x040900, "Track following error" }, + { 0x040901, "Tracking servo failure" }, + { 0x040902, "Focus servo failure" }, + { 0x040903, "Spindle servo failure" }, + { 0x041500, "Random positioning error" }, + { 0x041501, "Mechanical positioning or changer error" }, + { 0x041502, "Positioning error detected by read of medium" }, + { 0x043c00, "Mechanical positioning or changer error" }, + { 0x044000, "Diagnostic failure on component (ASCQ)" }, + { 0x044400, "Internal CD/DVD logical unit failure" }, + { 0x04b600, "Media load mechanism failed" }, + { 0x051a00, "Parameter list length error" }, + { 0x052000, "Invalid command operation code" }, + { 0x052100, "Logical block address out of range" }, + { 0x052102, "Invalid address for write" }, + { 0x052400, "Invalid field in command packet" }, + { 0x052600, "Invalid field in parameter list" }, + { 0x052601, "Parameter not supported" }, + { 0x052602, "Parameter value invalid" }, + { 0x052700, "Write protected media" }, + { 0x052c00, "Command sequence error" }, + { 0x052c03, "Current program area is not empty" }, + { 0x052c04, "Current program area is empty" }, + { 0x053001, "Cannot read medium - unknown format" }, + { 0x053002, "Cannot read medium - incompatible format" }, + { 0x053900, "Saving parameters not supported" }, + { 0x054e00, "Overlapped commands attempted" }, + { 0x055302, "Medium removal prevented" }, + { 0x055500, "System resource failure" }, + { 0x056300, "End of user area encountered on this track" }, + { 0x056400, "Illegal mode for this track or incompatible medium" }, + { 0x056f00, "Copy protection key exchange failure - Authentication failure" }, + { 0x056f01, "Copy protection key exchange failure - Key not present" }, + { 0x056f02, "Copy protection key exchange failure - Key not established" }, + { 0x056f03, "Read of scrambled sector without authentication" }, + { 0x056f04, "Media region code is mismatched to logical unit" }, + { 0x056f05, "Drive region must be permanent / region reset count error" }, + { 0x057203, "Session fixation error - incomplete track in session" }, + { 0x057204, "Empty or partially written reserved track" }, + { 0x057205, "No more RZONE reservations are allowed" }, + { 0x05bf00, "Loss of streaming" }, + { 0x062800, "Not ready to ready transition, medium may have changed" }, + { 0x062900, "Power on, reset or hardware reset occurred" }, + { 0x062a00, "Parameters changed" }, + { 0x062a01, "Mode parameters changed" }, + { 0x062e00, "Insufficient time for operation" }, + { 0x063f00, "Logical unit operating conditions have changed" }, + { 0x063f01, "Microcode has been changed" }, + { 0x065a00, "Operator request or state change input (unspecified)" }, + { 0x065a01, "Operator medium removal request" }, + { 0x0bb900, "Play operation aborted" }, + + /* Here we use 0xff for the key (not a valid key) to signify + * that these can have _any_ key value associated with them... */ + { 0xff0401, "Logical unit is in process of becoming ready" }, + { 0xff0400, "Logical unit not ready, cause not reportable" }, + { 0xff0402, "Logical unit not ready, initializing command required" }, + { 0xff0403, "Logical unit not ready, manual intervention required" }, + { 0xff0500, "Logical unit does not respond to selection" }, + { 0xff0800, "Logical unit communication failure" }, + { 0xff0802, "Logical unit communication parity error" }, + { 0xff0801, "Logical unit communication time-out" }, + { 0xff2500, "Logical unit not supported" }, + { 0xff4c00, "Logical unit failed self-configuration" }, + { 0xff3e00, "Logical unit has not self-configured yet" }, }; #endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-disk.c linux.16p3/drivers/block/ide-disk.c --- linux.vanilla/drivers/block/ide-disk.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide-disk.c Thu May 4 00:42:37 2000 @@ -94,8 +94,11 @@ * The ATA spec tells large drives to return * C/H/S = 16383/16/63 independent of their size. * Some drives can be jumpered to use 15 heads instead of 16. + * Some drives can be jumpered to use 4092 cyls instead of 16383. */ - if (id->cyls == 16383 && id->sectors == 63 && + if ((id->cyls == 16383 + || (id->cyls == 4092 && id->cur_cyls == 16383)) && + id->sectors == 63 && (id->heads == 15 || id->heads == 16) && id->lba_capacity >= 16383*63*id->heads) return 1; @@ -138,7 +141,7 @@ return ide_error(drive, "read_intr", stat); } /* no data yet, so wait for another interrupt */ - ide_set_handler(drive, &read_intr, WAIT_CMD); + ide_set_handler(drive, &read_intr, WAIT_CMD, NULL); return ide_started; } #endif @@ -167,7 +170,7 @@ if (i > 0) { if (msect) goto read_next; - ide_set_handler (drive, &read_intr, WAIT_CMD); + ide_set_handler (drive, &read_intr, WAIT_CMD, NULL); return ide_started; } return ide_stopped; @@ -201,7 +204,7 @@ ide_end_request(1, hwgroup); if (i > 0) { idedisk_output_data (drive, rq->buffer, SECTOR_WORDS); - ide_set_handler (drive, &write_intr, WAIT_CMD); + ide_set_handler (drive, &write_intr, WAIT_CMD, NULL); return ide_started; } return ide_stopped; @@ -309,7 +312,7 @@ if (rq->nr_sectors) { if (ide_multwrite(drive, drive->mult_count)) return ide_stopped; - ide_set_handler (drive, &multwrite_intr, WAIT_CMD); + ide_set_handler (drive, &multwrite_intr, WAIT_CMD, NULL); return ide_started; } } else { @@ -432,7 +435,7 @@ if (drive->using_dma && !(HWIF(drive)->dmaproc(ide_dma_read, drive))) return ide_started; #endif /* CONFIG_BLK_DEV_IDEDMA */ - ide_set_handler(drive, &read_intr, WAIT_CMD); + ide_set_handler(drive, &read_intr, WAIT_CMD, NULL); OUT_BYTE(drive->mult_count ? WIN_MULTREAD : WIN_READ, IDE_COMMAND_REG); return ide_started; } @@ -462,7 +465,7 @@ * Except when you get an error it seems... */ hwgroup->wrq = *rq; /* scratchpad */ - ide_set_handler (drive, &multwrite_intr, WAIT_CMD); + ide_set_handler (drive, &multwrite_intr, WAIT_CMD, NULL); if (ide_multwrite(drive, drive->mult_count)) { unsigned long flags; spin_lock_irqsave(&io_request_lock, flags); @@ -472,7 +475,7 @@ return ide_stopped; } } else { - ide_set_handler (drive, &write_intr, WAIT_CMD); + ide_set_handler (drive, &write_intr, WAIT_CMD, NULL); idedisk_output_data(drive, rq->buffer, SECTOR_WORDS); } return ide_started; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-dma.c linux.16p3/drivers/block/ide-dma.c --- linux.vanilla/drivers/block/ide-dma.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide-dma.c Sun Apr 30 23:42:32 2000 @@ -328,7 +328,7 @@ drive->waiting_for_dma = 1; if (drive->media != ide_disk) return 0; - ide_set_handler(drive, &ide_dma_intr, WAIT_CMD);/* issue cmd to drive */ + ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL);/* issue cmd to drive */ OUT_BYTE(reading ? WIN_READDMA : WIN_WRITEDMA, IDE_COMMAND_REG); case ide_dma_begin: /* Note that this is done *after* the cmd has diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-floppy.c linux.16p3/drivers/block/ide-floppy.c --- linux.vanilla/drivers/block/ide-floppy.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide-floppy.c Sun Apr 30 23:42:32 2000 @@ -916,7 +916,7 @@ if (temp > pc->buffer_size) { printk (KERN_ERR "ide-floppy: The floppy wants to send us more data than expected - discarding data\n"); idefloppy_discard_data (drive,bcount.all); - ide_set_handler (drive,&idefloppy_pc_intr,IDEFLOPPY_WAIT_CMD); + ide_set_handler (drive,&idefloppy_pc_intr,IDEFLOPPY_WAIT_CMD,NULL); return ide_started; } #if IDEFLOPPY_DEBUG_LOG @@ -938,7 +938,7 @@ pc->actually_transferred+=bcount.all; /* Update the current position */ pc->current_position+=bcount.all; - ide_set_handler (drive,&idefloppy_pc_intr,IDEFLOPPY_WAIT_CMD); /* And set the interrupt handler again */ + ide_set_handler (drive,&idefloppy_pc_intr,IDEFLOPPY_WAIT_CMD,NULL); /* And set the interrupt handler again */ return ide_started; } @@ -957,7 +957,7 @@ printk (KERN_ERR "ide-floppy: (IO,CoD) != (0,1) while issuing a packet command\n"); return ide_do_reset (drive); } - ide_set_handler (drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD); /* Set the interrupt routine */ + ide_set_handler (drive, &idefloppy_pc_intr, IDEFLOPPY_WAIT_CMD, NULL); /* Set the interrupt routine */ atapi_output_bytes (drive, floppy->pc->c, 12); /* Send the actual packet */ return ide_started; } @@ -1026,7 +1026,7 @@ #endif /* CONFIG_BLK_DEV_IDEDMA */ if (test_bit (IDEFLOPPY_DRQ_INTERRUPT, &floppy->flags)) { - ide_set_handler (drive, &idefloppy_transfer_pc, IDEFLOPPY_WAIT_CMD); + ide_set_handler (drive, &idefloppy_transfer_pc, IDEFLOPPY_WAIT_CMD, NULL); OUT_BYTE (WIN_PACKETCMD, IDE_COMMAND_REG); /* Issue the packet command */ return ide_started; } else { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-pmac.c linux.16p3/drivers/block/ide-pmac.c --- linux.vanilla/drivers/block/ide-pmac.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide-pmac.c Sun Apr 30 23:42:32 2000 @@ -359,7 +359,7 @@ drive->waiting_for_dma = 1; if (drive->media != ide_disk) return 0; - ide_set_handler(drive, &ide_dma_intr, WAIT_CMD); + ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL); OUT_BYTE(func==ide_dma_write? WIN_WRITEDMA: WIN_READDMA, IDE_COMMAND_REG); case ide_dma_begin: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide-tape.c linux.16p3/drivers/block/ide-tape.c --- linux.vanilla/drivers/block/ide-tape.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide-tape.c Sun Apr 30 23:42:32 2000 @@ -2013,7 +2013,7 @@ if (temp > pc->buffer_size) { printk (KERN_ERR "ide-tape: The tape wants to send us more data than expected - discarding data\n"); idetape_discard_data (drive,bcount.all); - ide_set_handler (drive,&idetape_pc_intr,IDETAPE_WAIT_CMD); + ide_set_handler (drive,&idetape_pc_intr,IDETAPE_WAIT_CMD,NULL); return ide_started; } #if IDETAPE_DEBUG_LOG @@ -2035,7 +2035,7 @@ pc->actually_transferred+=bcount.all; /* Update the current position */ pc->current_position+=bcount.all; - ide_set_handler (drive,&idetape_pc_intr,IDETAPE_WAIT_CMD); /* And set the interrupt handler again */ + ide_set_handler (drive,&idetape_pc_intr,IDETAPE_WAIT_CMD,NULL); /* And set the interrupt handler again */ return ide_started; } @@ -2109,7 +2109,7 @@ printk (KERN_ERR "ide-tape: (IO,CoD) != (0,1) while issuing a packet command\n"); return ide_do_reset (drive); } - ide_set_handler(drive, &idetape_pc_intr, IDETAPE_WAIT_CMD); /* Set the interrupt routine */ + ide_set_handler(drive, &idetape_pc_intr, IDETAPE_WAIT_CMD, NULL); /* Set the interrupt routine */ atapi_output_bytes (drive,pc->c,12); /* Send the actual packet */ return ide_started; } @@ -2175,7 +2175,7 @@ } #endif /* CONFIG_BLK_DEV_IDEDMA */ if (test_bit(IDETAPE_DRQ_INTERRUPT, &tape->flags)) { - ide_set_handler(drive, &idetape_transfer_pc, IDETAPE_WAIT_CMD); + ide_set_handler(drive, &idetape_transfer_pc, IDETAPE_WAIT_CMD, NULL); OUT_BYTE(WIN_PACKETCMD, IDE_COMMAND_REG); return ide_started; } else { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide.c linux.16p3/drivers/block/ide.c --- linux.vanilla/drivers/block/ide.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ide.c Mon May 15 18:01:41 2000 @@ -467,7 +467,8 @@ * timer is started to prevent us from waiting forever in case * something goes wrong (see the ide_timer_expiry() handler later on). */ -void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout) +void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, + unsigned int timeout, ide_expiry_t *expiry) { unsigned long flags; ide_hwgroup_t *hwgroup = HWGROUP(drive); @@ -477,8 +478,9 @@ printk("%s: ide_set_handler: handler not null; old=%p, new=%p\n", drive->name, hwgroup->handler, handler); } - hwgroup->handler = handler; - hwgroup->timer.expires = jiffies + timeout; + hwgroup->handler = handler; + hwgroup->expiry = expiry; + hwgroup->timer.expires = jiffies + timeout; add_timer(&hwgroup->timer); spin_unlock_irqrestore(&io_request_lock, flags); } @@ -535,7 +537,7 @@ printk("%s: ATAPI reset complete\n", drive->name); } else { if (0 < (signed long)(hwgroup->poll_timeout - jiffies)) { - ide_set_handler (drive, &atapi_reset_pollfunc, HZ/20); + ide_set_handler (drive, &atapi_reset_pollfunc, HZ/20, NULL); return ide_started; /* continue polling */ } hwgroup->poll_timeout = 0; /* end of polling */ @@ -560,7 +562,7 @@ if (!OK_STAT(tmp=GET_STAT(), 0, BUSY_STAT)) { if (0 < (signed long)(hwgroup->poll_timeout - jiffies)) { - ide_set_handler (drive, &reset_pollfunc, HZ/20); + ide_set_handler (drive, &reset_pollfunc, HZ/20, NULL); return ide_started; /* continue polling */ } printk("%s: reset timed-out, status=0x%02x\n", hwif->name, tmp); @@ -642,7 +644,7 @@ udelay (20); OUT_BYTE (WIN_SRST, IDE_COMMAND_REG); hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE; - ide_set_handler (drive, &atapi_reset_pollfunc, HZ/20); + ide_set_handler (drive, &atapi_reset_pollfunc, HZ/20, NULL); __restore_flags (flags); /* local CPU only */ return ide_started; } @@ -668,7 +670,7 @@ OUT_BYTE(drive->ctl|2,IDE_CONTROL_REG); /* clear SRST, leave nIEN */ udelay(10); /* more than enough time */ hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE; - ide_set_handler (drive, &reset_pollfunc, HZ/20); + ide_set_handler (drive, &reset_pollfunc, HZ/20, NULL); #endif /* OK_TO_RESET_CONTROLLER */ __restore_flags (flags); /* local CPU only */ @@ -858,7 +860,7 @@ */ void ide_cmd(ide_drive_t *drive, byte cmd, byte nsect, ide_handler_t *handler) { - ide_set_handler (drive, handler, WAIT_CMD); + ide_set_handler (drive, handler, WAIT_CMD, NULL); OUT_BYTE(drive->ctl,IDE_CONTROL_REG); /* clear nIEN */ OUT_BYTE(nsect,IDE_NSECTOR_REG); OUT_BYTE(cmd,IDE_COMMAND_REG); @@ -1287,7 +1289,9 @@ { ide_hwgroup_t *hwgroup = (ide_hwgroup_t *) data; ide_handler_t *handler; + ide_expiry_t *expiry; unsigned long flags; + unsigned long wait; spin_lock_irqsave(&io_request_lock, flags); del_timer(&hwgroup->timer); @@ -1306,6 +1310,7 @@ hwgroup->handler = NULL; if (!drive) { printk("ide_timer_expiry: hwgroup->drive was NULL\n"); + hwgroup->handler = NULL; } else { ide_hwif_t *hwif; ide_startstop_t startstop; @@ -1313,6 +1318,17 @@ hwgroup->busy = 1; /* paranoia */ printk("%s: ide_timer_expiry: hwgroup->busy was 0 ??\n", drive->name); } + if ((expiry = hwgroup->expiry) != NULL) { + /* continue */ + if ((wait = expiry(drive)) != 0) { + /* reset timer */ + hwgroup->timer.expires = jiffies + wait; + add_timer(&hwgroup->timer); + spin_unlock_irqrestore(&io_request_lock, flags); + return; + } + } + hwgroup->handler = NULL; /* * We need to simulate a real interrupt when invoking the handler() * function, which means we need to globally mask the specific IRQ: @@ -2286,6 +2302,10 @@ } drive->nice1 = (arg >> IDE_NICE_1) & 1; return 0; + + case BLKELVGET: + case BLKELVSET: + return blkelv_ioctl(inode->i_rdev, cmd, arg); RO_IOCTLS(inode->i_rdev, arg); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ide.h linux.16p3/drivers/block/ide.h --- linux.vanilla/drivers/block/ide.h Fri Apr 21 23:10:33 2000 +++ linux.16p3/drivers/block/ide.h Mon May 15 18:26:21 2000 @@ -365,6 +365,12 @@ */ typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); +/* + * when ide_timer_expiry fires, invoke a handler of this type + * to decide what to do. + */ +typedef int (ide_expiry_t)(ide_drive_t *); + typedef struct hwgroup_s { ide_handler_t *handler;/* irq handler, if active */ volatile int busy; /* BOOL: protects all fields below */ @@ -375,6 +381,7 @@ struct timer_list timer; /* failsafe timer */ struct request wrq; /* local copy of current write rq */ unsigned long poll_timeout; /* timeout value during long polls */ + ide_expiry_t *expiry; /* queried upon timeouts */ } ide_hwgroup_t; /* @@ -545,7 +552,7 @@ * This is used on exit from the driver, to designate the next irq handler * and also to start the safety timer. */ -void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout); +void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); /* * Error reporting, in human readable form (luxurious, but a memory hog). diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/ll_rw_blk.c linux.16p3/drivers/block/ll_rw_blk.c --- linux.vanilla/drivers/block/ll_rw_blk.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/ll_rw_blk.c Mon May 15 18:01:41 2000 @@ -3,6 +3,7 @@ * * Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 1994, Karl Keyte: Added support for disk statistics + * Elevator latency, (C) 2000 Andrea Arcangeli SuSE */ /* @@ -20,6 +21,7 @@ #include #include +#include #include #include @@ -53,11 +55,11 @@ /* * used to wait on when there are no free requests */ -struct wait_queue * wait_for_request = NULL; +struct wait_queue * wait_for_request; /* This specifies how many sectors to read ahead on the disk. */ -int read_ahead[MAX_BLKDEV] = {0, }; +int read_ahead[MAX_BLKDEV]; /* blk_dev_struct is: * *request_fn @@ -73,7 +75,7 @@ * * if (!blk_size[MAJOR]) then no minor size checking is done. */ -int * blk_size[MAX_BLKDEV] = { NULL, NULL, }; +int * blk_size[MAX_BLKDEV]; /* * blksize_size contains the size of all block-devices: @@ -82,7 +84,7 @@ * * if (!blksize_size[MAJOR]) then 1024 bytes is assumed. */ -int * blksize_size[MAX_BLKDEV] = { NULL, NULL, }; +int * blksize_size[MAX_BLKDEV]; /* * hardsect_size contains the size of the hardware sector of a device. @@ -96,22 +98,22 @@ * This is currently set by some scsi devices and read by the msdos fs driver. * Other uses may appear later. */ -int * hardsect_size[MAX_BLKDEV] = { NULL, NULL, }; +int * hardsect_size[MAX_BLKDEV]; /* * The following tunes the read-ahead algorithm in mm/filemap.c */ -int * max_readahead[MAX_BLKDEV] = { NULL, NULL, }; +int * max_readahead[MAX_BLKDEV]; /* * Max number of sectors per request */ -int * max_sectors[MAX_BLKDEV] = { NULL, NULL, }; +int * max_sectors[MAX_BLKDEV]; /* * Max number of segments per request */ -int * max_segments[MAX_BLKDEV] = { NULL, NULL, }; +int * max_segments[MAX_BLKDEV]; static inline int get_max_sectors(kdev_t dev) { @@ -142,6 +144,17 @@ return &blk_dev[major].current_request; } +static inline int get_request_latency(elevator_t * elevator, int rw) +{ + int latency; + + latency = elevator->read_latency; + if (rw != READ) + latency = elevator->write_latency; + + return latency; +} + /* * remove the plug and let it rip.. */ @@ -291,6 +304,196 @@ printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n"); } +static int blkelvget_ioctl(elevator_t * elevator, blkelv_ioctl_arg_t * arg) +{ + int ret; + blkelv_ioctl_arg_t output; + + output.queue_ID = elevator->queue_ID; + output.read_latency = elevator->read_latency; + output.write_latency = elevator->write_latency; + output.max_bomb_segments = elevator->max_bomb_segments; + + ret = -EFAULT; + if (copy_to_user(arg, &output, sizeof(blkelv_ioctl_arg_t))) + goto out; + ret = 0; + out: + return ret; +} + +static int blkelvset_ioctl(elevator_t * elevator, const blkelv_ioctl_arg_t * arg) +{ + blkelv_ioctl_arg_t input; + int ret; + + ret = -EFAULT; + if (copy_from_user(&input, arg, sizeof(blkelv_ioctl_arg_t))) + goto out; + + ret = -EINVAL; + if (input.read_latency < 0) + goto out; + if (input.write_latency < 0) + goto out; + if (input.max_bomb_segments <= 0) + goto out; + + elevator->read_latency = input.read_latency; + elevator->write_latency = input.write_latency; + elevator->max_bomb_segments = input.max_bomb_segments; + + ret = 0; + out: + return ret; +} + +int blkelv_ioctl(kdev_t dev, unsigned long cmd, unsigned long arg) +{ + elevator_t * elevator = &blk_dev[MAJOR(dev)].elevator; + blkelv_ioctl_arg_t * __arg = (blkelv_ioctl_arg_t *) arg; + + switch (cmd) { + case BLKELVGET: + return blkelvget_ioctl(elevator, __arg); + case BLKELVSET: + return blkelvset_ioctl(elevator, __arg); + } +} + +static inline int seek_to_not_starving_chunk(struct request ** req, int * lat) +{ + struct request * tmp = *req; + int found = 0, pos = 0; + int last_pos = 0, __lat = *lat; + + do { + if (tmp->elevator_latency <= 0) + { + *req = tmp; + found = 1; + last_pos = pos; + if (last_pos >= __lat) + break; + } + pos += tmp->nr_segments; + } while ((tmp = tmp->next)); + *lat -= last_pos; + + return found; +} + +#define CASE_COALESCE_BUT_FIRST_REQUEST_MAYBE_BUSY \ + case IDE0_MAJOR: /* same as HD_MAJOR */ \ + case IDE1_MAJOR: \ + case FLOPPY_MAJOR: \ + case IDE2_MAJOR: \ + case IDE3_MAJOR: \ + case IDE4_MAJOR: \ + case IDE5_MAJOR: \ + case ACSI_MAJOR: \ + case MFM_ACORN_MAJOR: \ + case MDISK_MAJOR: \ + case DASD_MAJOR: +#define CASE_COALESCE_ALSO_FIRST_REQUEST \ + case SCSI_DISK0_MAJOR: \ + case SCSI_DISK1_MAJOR: \ + case SCSI_DISK2_MAJOR: \ + case SCSI_DISK3_MAJOR: \ + case SCSI_DISK4_MAJOR: \ + case SCSI_DISK5_MAJOR: \ + case SCSI_DISK6_MAJOR: \ + case SCSI_DISK7_MAJOR: \ + case SCSI_CDROM_MAJOR: \ + case DAC960_MAJOR+0: \ + case DAC960_MAJOR+1: \ + case DAC960_MAJOR+2: \ + case DAC960_MAJOR+3: \ + case DAC960_MAJOR+4: \ + case DAC960_MAJOR+5: \ + case DAC960_MAJOR+6: \ + case DAC960_MAJOR+7: \ + case COMPAQ_SMART2_MAJOR+0: \ + case COMPAQ_SMART2_MAJOR+1: \ + case COMPAQ_SMART2_MAJOR+2: \ + case COMPAQ_SMART2_MAJOR+3: \ + case COMPAQ_SMART2_MAJOR+4: \ + case COMPAQ_SMART2_MAJOR+5: \ + case COMPAQ_SMART2_MAJOR+6: \ + case COMPAQ_SMART2_MAJOR+7: + +#define elevator_starve_rest_of_queue(req) \ +do { \ + struct request * tmp = (req); \ + for ((tmp) = (tmp)->next; (tmp); (tmp) = (tmp)->next) \ + (tmp)->elevator_latency--; \ +} while (0) + +static inline void elevator_queue(struct request * req, + struct request * tmp, + int latency, + struct blk_dev_struct * dev, + struct request ** queue_head) +{ + struct request * __tmp; + int starving, __latency; + + starving = seek_to_not_starving_chunk(&tmp, &latency); + __tmp = tmp; + __latency = latency; + + for (;; tmp = tmp->next) + { + if ((latency -= tmp->nr_segments) <= 0) + { + tmp = __tmp; + latency = __latency - tmp->nr_segments; + + if (starving) + break; + + switch (MAJOR(req->rq_dev)) + { + CASE_COALESCE_BUT_FIRST_REQUEST_MAYBE_BUSY + if (tmp == dev->current_request) + default: + goto link; + CASE_COALESCE_ALSO_FIRST_REQUEST + } + + latency += tmp->nr_segments; + req->next = tmp; + *queue_head = req; + goto after_link; + } + + if (!tmp->next) + break; + + { + const int after_current = IN_ORDER(tmp,req); + const int before_next = IN_ORDER(req,tmp->next); + + if (!IN_ORDER(tmp,tmp->next)) { + if (after_current || before_next) + break; + } else { + if (after_current && before_next) + break; + } + } + } + + link: + req->next = tmp->next; + tmp->next = req; + + after_link: + req->elevator_latency = latency; + + elevator_starve_rest_of_queue(req); +} + /* * add-request adds a request to the linked list. * It disables interrupts (aquires the request spinlock) so that it can muck @@ -309,6 +512,7 @@ short disk_index; unsigned long flags; int queue_new_request = 0; + int latency; switch (major) { case DAC960_MAJOR+0: @@ -333,7 +537,7 @@ break; } - req->next = NULL; + latency = get_request_latency(&dev->elevator, req->cmd); /* * We use the goto to reduce locking complexity @@ -344,25 +548,14 @@ if (req->bh) mark_buffer_clean(req->bh); if (!(tmp = *current_request)) { + req->next = NULL; + req->elevator_latency = latency; *current_request = req; if (dev->current_request != &dev->plug) queue_new_request = 1; goto out; } - for ( ; tmp->next ; tmp = tmp->next) { - const int after_current = IN_ORDER(tmp,req); - const int before_next = IN_ORDER(req,tmp->next); - - if (!IN_ORDER(tmp,tmp->next)) { - if (after_current || before_next) - break; - } else { - if (after_current && before_next) - break; - } - } - req->next = tmp->next; - tmp->next = req; + elevator_queue(req, tmp, latency, dev, current_request); /* for SCSI devices, call request_fn unconditionally */ if (scsi_blk_major(major) || @@ -399,6 +592,8 @@ total_segments--; if (total_segments > max_segments) return; + if (next->elevator_latency < req->elevator_latency) + req->elevator_latency = next->elevator_latency; req->bhtail->b_reqnext = next->bh; req->bhtail = next->bhtail; req->nr_sectors += next->nr_sectors; @@ -408,12 +603,28 @@ wake_up (&wait_for_request); } +#define read_pendings(req) \ +({ \ + int __ret = 0; \ + struct request * tmp = (req); \ + do { \ + if (tmp->cmd == READ) \ + { \ + __ret = 1; \ + break; \ + } \ + tmp = tmp->next; \ + } while (tmp); \ + __ret; \ +}) + void make_request(int major, int rw, struct buffer_head * bh) { unsigned int sector, count; - struct request * req; + struct request * req, * prev; int rw_ahead, max_req, max_sectors, max_segments; unsigned long flags; + int latency, starving; count = bh->b_size >> 9; sector = bh->b_rsector; @@ -490,6 +701,8 @@ max_sectors = get_max_sectors(bh->b_rdev); max_segments = get_max_segments(bh->b_rdev); + latency = get_request_latency(&blk_dev[major].elevator, rw); + /* * Now we acquire the request spinlock, we have to be mega careful * not to schedule or do something nonatomic @@ -502,17 +715,7 @@ major != DDV_MAJOR && major != NBD_MAJOR) plug_device(blk_dev + major); /* is atomic */ } else switch (major) { - case IDE0_MAJOR: /* same as HD_MAJOR */ - case IDE1_MAJOR: - case FLOPPY_MAJOR: - case IDE2_MAJOR: - case IDE3_MAJOR: - case IDE4_MAJOR: - case IDE5_MAJOR: - case ACSI_MAJOR: - case MFM_ACORN_MAJOR: - case MDISK_MAJOR: - case DASD_MAJOR: + CASE_COALESCE_BUT_FIRST_REQUEST_MAYBE_BUSY /* * The scsi disk and cdrom drivers completely remove the request * from the queue when they start processing an entry. For this @@ -523,37 +726,20 @@ * entry may be busy being processed and we thus can't change it. */ if (req == blk_dev[major].current_request) - req = req->next; - if (!req) - break; + { + if (!(req = req->next)) + break; + latency -= req->nr_segments; + } /* fall through */ + CASE_COALESCE_ALSO_FIRST_REQUEST - case SCSI_DISK0_MAJOR: - case SCSI_DISK1_MAJOR: - case SCSI_DISK2_MAJOR: - case SCSI_DISK3_MAJOR: - case SCSI_DISK4_MAJOR: - case SCSI_DISK5_MAJOR: - case SCSI_DISK6_MAJOR: - case SCSI_DISK7_MAJOR: - case SCSI_CDROM_MAJOR: - case DAC960_MAJOR+0: - case DAC960_MAJOR+1: - case DAC960_MAJOR+2: - case DAC960_MAJOR+3: - case DAC960_MAJOR+4: - case DAC960_MAJOR+5: - case DAC960_MAJOR+6: - case DAC960_MAJOR+7: - case COMPAQ_SMART2_MAJOR+0: - case COMPAQ_SMART2_MAJOR+1: - case COMPAQ_SMART2_MAJOR+2: - case COMPAQ_SMART2_MAJOR+3: - case COMPAQ_SMART2_MAJOR+4: - case COMPAQ_SMART2_MAJOR+5: - case COMPAQ_SMART2_MAJOR+6: - case COMPAQ_SMART2_MAJOR+7: + /* avoid write-bombs to not hurt iteractiveness of reads */ + if (rw != READ && read_pendings(req)) + max_segments = blk_dev[major].elevator.max_bomb_segments; + starving = seek_to_not_starving_chunk(&req, &latency); + prev = NULL; do { if (req->sem) continue; @@ -565,24 +751,34 @@ continue; /* Can we add it to the end of this request? */ if (req->sector + req->nr_sectors == sector) { + if (latency - req->nr_segments < 0) + break; if (req->bhtail->b_data + req->bhtail->b_size != bh->b_data) { if (req->nr_segments < max_segments) req->nr_segments++; - else continue; + else break; } req->bhtail->b_reqnext = bh; req->bhtail = bh; req->nr_sectors += count; + + /* latency stuff */ + if ((latency -= req->nr_segments) < req->elevator_latency) + req->elevator_latency = latency; + elevator_starve_rest_of_queue(req); + /* Can we now merge this req with the next? */ attempt_merge(req, max_sectors, max_segments); /* or to the beginning? */ } else if (req->sector - count == sector) { + if (!prev && starving) + break; if (bh->b_data + bh->b_size != req->bh->b_data) { if (req->nr_segments < max_segments) req->nr_segments++; - else continue; + else break; } bh->b_reqnext = req->bh; req->bh = bh; @@ -590,6 +786,14 @@ req->current_nr_sectors = count; req->sector = sector; req->nr_sectors += count; + + /* latency stuff */ + if (latency < --req->elevator_latency) + req->elevator_latency = latency; + elevator_starve_rest_of_queue(req); + + if (prev) + attempt_merge(prev, max_sectors, max_segments); } else continue; @@ -597,7 +801,8 @@ spin_unlock_irqrestore(&io_request_lock,flags); return; - } while ((req = req->next) != NULL); + } while (prev = req, + (latency -= req->nr_segments) >= 0 && (req = req->next) != NULL); } /* find an unused request. */ @@ -623,7 +828,6 @@ req->sem = NULL; req->bh = bh; req->bhtail = bh; - req->next = NULL; add_request(major+blk_dev,req); return; @@ -781,6 +985,7 @@ { struct request * req; struct blk_dev_struct *dev; + static unsigned int queue_ID; for (dev = blk_dev + MAX_BLKDEV; dev-- != blk_dev;) { dev->request_fn = NULL; @@ -792,12 +997,13 @@ dev->plug_tq.sync = 0; dev->plug_tq.routine = &unplug_device; dev->plug_tq.data = dev; + dev->elevator = ELEVATOR_DEFAULTS; + dev->elevator.queue_ID = queue_ID++; } req = all_requests + NR_REQUEST; while (--req >= all_requests) { req->rq_status = RQ_INACTIVE; - req->next = NULL; } memset(ro_bits,0,sizeof(ro_bits)); memset(max_readahead, 0, sizeof(max_readahead)); @@ -902,9 +1108,13 @@ #ifdef CONFIG_DASD dasd_init(); #endif +#ifdef CONFIG_BLK_DEV_XPRAM + xpram_init(); +#endif return 0; }; EXPORT_SYMBOL(io_request_lock); EXPORT_SYMBOL(end_that_request_first); EXPORT_SYMBOL(end_that_request_last); +EXPORT_SYMBOL(blkelv_ioctl); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/md.c linux.16p3/drivers/block/md.c --- linux.vanilla/drivers/block/md.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/md.c Tue May 16 11:08:40 2000 @@ -446,6 +446,8 @@ factor = min = 1 << FACTOR_SHIFT(FACTOR((md_dev+minor))); + md_blocksizes[minor] <<= FACTOR_SHIFT(FACTOR((md_dev+minor))); + for (i=0; i #include +#include #include #include #include @@ -334,6 +335,9 @@ int lpts[7] = {0x3bc,0x378,0x278,0x268,0x27c,0x26c,0}; s = protocol; e = s+1; + + if (!protocols[0]) + request_module ("paride_protocol"); if (autoprobe) { s = 0; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/paride/pcd.c linux.16p3/drivers/block/paride/pcd.c --- linux.vanilla/drivers/block/paride/pcd.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/paride/pcd.c Sun Apr 30 23:42:32 2000 @@ -143,8 +143,8 @@ #include #include -#include #include +#include #ifndef MODULE @@ -214,8 +214,11 @@ static int pcd_get_mcn (struct cdrom_device_info *cdi, struct cdrom_mcn *mcn); static int pcd_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void *arg); +static int pcd_packet(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc); static int pcd_detect(void); +static void pcd_probe_capabilities(void); static void do_pcd_read_drq(void); static void do_pcd_request(void); static void do_pcd_read(void); @@ -276,14 +279,18 @@ pcd_drive_reset, pcd_audio_ioctl, 0, /* dev_ioctl */ - CDC_CLOSE_TRAY | - CDC_OPEN_TRAY | - CDC_LOCK | - CDC_MCN | - CDC_MEDIA_CHANGED | - CDC_RESET | - CDC_PLAY_AUDIO, - 0 + CDC_CLOSE_TRAY | + CDC_OPEN_TRAY | + CDC_LOCK | + CDC_MCN | + CDC_MEDIA_CHANGED | + CDC_RESET | + CDC_PLAY_AUDIO | + CDC_GENERIC_PACKET | + CDC_CD_R | + CDC_CD_RW, + 0, + pcd_packet, }; static void pcd_init_units( void ) @@ -325,6 +332,9 @@ if (pcd_detect()) return -1; + /* get the atapi capabilities page */ + pcd_probe_capabilities(); + if (register_blkdev(MAJOR_NR,name,&cdrom_fops)) { printk("pcd: unable to get major number %d\n",MAJOR_NR); return -1; @@ -525,6 +535,16 @@ return r; } +static int pcd_packet(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc) +{ + char *un_cmd; + int unit = DEVICE_NR(cdi->dev); + + un_cmd = cgc->cmd; + return pcd_atapi(unit,un_cmd,cgc->buflen,cgc->buffer, "generic packet"); +} + #define DBMSG(msg) ((verbose>1)?(msg):NULL) static int pcd_media_changed(struct cdrom_device_info *cdi, int slot_nr) @@ -667,6 +687,32 @@ return -1; } +static void pcd_probe_capabilities( void ) + +{ int unit, r; + char buffer[32]; + char cmd[12]={0x5a,1<<3,0x2a,0,0,0,0,18,0,0,0,0}; + + for (unit=0;unit> 6) == 0) + PCD.info.mask |= CDC_CLOSE_TRAY; + } +} + static int pcd_detect( void ) { char id[18]; @@ -836,66 +882,9 @@ switch (cmd) { - case CDROMPAUSE: - - { char cmd[12]={SCMD_PAUSE_RESUME,0,0,0,0,0,0,0,0,0,0,0}; - - return (pcd_atapi(unit,cmd,0,NULL,"pause")) * EIO; - } - - case CDROMRESUME: - - { char cmd[12]={SCMD_PAUSE_RESUME,0,0,0,0,0,0,0,1,0,0,0}; - - return (pcd_atapi(unit,cmd,0,NULL,"resume")) * EIO; - } - - case CDROMPLAYMSF: - - { char cmd[12]={SCMD_PLAYAUDIO_MSF,0,0,0,0,0,0,0,0,0,0,0}; - struct cdrom_msf* msf = (struct cdrom_msf*)arg; - - cmd[3] = msf->cdmsf_min0; - cmd[4] = msf->cdmsf_sec0; - cmd[5] = msf->cdmsf_frame0; - cmd[6] = msf->cdmsf_min1; - cmd[7] = msf->cdmsf_sec1; - cmd[8] = msf->cdmsf_frame1; - - return (pcd_atapi(unit,cmd,0,NULL,"play msf")) * EIO; - } - - case CDROMPLAYBLK: - - { char cmd[12]={SCMD_PLAYAUDIO10,0,0,0,0,0,0,0,0,0,0,0}; - struct cdrom_blk* blk = (struct cdrom_blk*)arg; - - cmd[2] = blk->from >> 24; - cmd[3] = blk->from >> 16; - cmd[4] = blk->from >> 8; - cmd[5] = blk->from; - cmd[7] = blk->len >> 8; - cmd[8] = blk->len; - - return (pcd_atapi(unit,cmd,0,NULL,"play block")) * EIO; - } - - case CDROMPLAYTRKIND: - - { char cmd[12]={SCMD_PLAYAUDIO_TI,0,0,0,0,0,0,0,0,0,0,0}; - struct cdrom_ti* ti = (struct cdrom_ti*)arg; - - cmd[4] = ti->cdti_trk0; - cmd[5] = ti->cdti_ind0; - cmd[7] = ti->cdti_trk1; - cmd[8] = ti->cdti_ind1; - - return (pcd_atapi(unit,cmd,0,NULL,"play track")) * EIO; - } - case CDROMREADTOCHDR: - { char cmd[12]={SCMD_READ_TOC,0,0,0,0,0,0,0,12,0,0,0}; + { char cmd[12]={GPCMD_READ_TOC_PMA_ATIP,0,0,0,0,0,0,0,12,0,0,0}; struct cdrom_tochdr* tochdr = (struct cdrom_tochdr*)arg; char buffer[32]; int r; @@ -910,7 +899,7 @@ case CDROMREADTOCENTRY: - { char cmd[12]={SCMD_READ_TOC,0,0,0,0,0,0,0,12,0,0,0}; + { char cmd[12]={GPCMD_READ_TOC_PMA_ATIP,0,0,0,0,0,0,0,12,0,0,0}; struct cdrom_tocentry* tocentry = (struct cdrom_tocentry*)arg; unsigned char buffer[32]; @@ -936,97 +925,6 @@ return r * EIO; } - case CDROMSTOP: - - { char cmd[12]={0x1b,1,0,0,0,0,0,0,0,0,0,0}; - - return (pcd_atapi(unit,cmd,0,NULL,"stop")) * EIO; - } - - case CDROMSTART: - - { char cmd[12]={0x1b,1,0,0,1,0,0,0,0,0,0,0}; - - return (pcd_atapi(unit,cmd,0,NULL,"start")) * EIO; - } - - case CDROMVOLCTRL: - - { char cmd[12]={0x5a,0,0,0,0,0,0,0,0,0,0,0}; - char buffer[32]; - char mask[32]; - struct cdrom_volctrl* volctrl = (struct cdrom_volctrl*)arg; - - cmd[2] = 0xe; - cmd[4] = 28; - - if (pcd_atapi(unit,cmd,28,buffer,"mode sense vol")) - return -EIO; - - cmd[2] = 0x4e; - - if (pcd_atapi(unit,cmd,28,buffer,"mode sense vol mask")) - return -EIO; - - buffer[0] = 0; - - buffer[21] = volctrl->channel0 & mask[21]; - buffer[23] = volctrl->channel1 & mask[23]; - buffer[25] = volctrl->channel2 & mask[25]; - buffer[27] = volctrl->channel3 & mask[27]; - - cmd[0] = 0x55; - cmd[1] = 0x10; - - return pcd_atapi(unit,cmd,28,buffer,"mode select vol") * EIO; - } - - case CDROMVOLREAD: - - { char cmd[12]={0x5a,0,0,0,0,0,0,0,0,0,0,0}; - char buffer[32]; - struct cdrom_volctrl* volctrl = (struct cdrom_volctrl*)arg; - int r; - - cmd[2] = 0xe; - cmd[4] = 28; - - r = pcd_atapi(unit,cmd,28,buffer,"mode sense vol read"); - - volctrl->channel0 = buffer[21]; - volctrl->channel1 = buffer[23]; - volctrl->channel2 = buffer[25]; - volctrl->channel3 = buffer[27]; - - return r * EIO; - } - - - case CDROMSUBCHNL: - - { char cmd[12]={SCMD_READ_SUBCHANNEL,2,0x40,1,0,0,0,0,16,0,0,0}; - struct cdrom_subchnl* subchnl = (struct cdrom_subchnl*)arg; - char buffer[32]; - - if (pcd_atapi(unit,cmd,16,buffer,"read subchannel")) - return -EIO; - - subchnl->cdsc_audiostatus = buffer[1]; - subchnl->cdsc_format = CDROM_MSF; - subchnl->cdsc_ctrl = buffer[5] & 0xf; - subchnl->cdsc_trk = buffer[6]; - subchnl->cdsc_ind = buffer[7]; - - subchnl->cdsc_reladdr.msf.minute = buffer[13]; - subchnl->cdsc_reladdr.msf.second = buffer[14]; - subchnl->cdsc_reladdr.msf.frame = buffer[15]; - subchnl->cdsc_absaddr.msf.minute = buffer[9]; - subchnl->cdsc_absaddr.msf.second = buffer[10]; - subchnl->cdsc_absaddr.msf.frame = buffer[11]; - - return 0; - } - default: return -ENOSYS; @@ -1035,7 +933,7 @@ static int pcd_get_mcn (struct cdrom_device_info *cdi, struct cdrom_mcn *mcn) -{ char cmd[12]={SCMD_READ_SUBCHANNEL,0,0x40,2,0,0,0,0,24,0,0,0}; +{ char cmd[12]={GPCMD_READ_SUBCHANNEL,0,0x40,2,0,0,0,0,24,0,0,0}; char buffer[32]; int k; int unit = DEVICE_NR(cdi->dev); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/pdc4030.c linux.16p3/drivers/block/pdc4030.c --- linux.vanilla/drivers/block/pdc4030.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/pdc4030.c Sun Apr 30 23:42:32 2000 @@ -239,8 +239,8 @@ if(stat & DRQ_STAT) goto read_again; if(stat & BUSY_STAT) { - ide_set_handler (drive, &promise_read_intr, WAIT_CMD); - return ide_started;; + ide_set_handler (drive, &promise_read_intr, WAIT_CMD, NULL); + return ide_started; } printk("Ah! promise read intr: sectors left !DRQ !BUSY\n"); return ide_error(drive, "promise read intr", stat); @@ -259,7 +259,7 @@ if (IN_BYTE(IDE_NSECTOR_REG) != 0) { if (time_before(jiffies, hwgroup->poll_timeout)) { - ide_set_handler (drive, &promise_write_pollfunc, 1); + ide_set_handler (drive, &promise_write_pollfunc, 1, NULL); return ide_started; /* continue polling... */ } printk("%s: write timed-out!\n",drive->name); @@ -294,7 +294,7 @@ if (ide_multwrite(drive, rq->nr_sectors - 4)) return ide_stopped; hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE; - ide_set_handler (drive, &promise_write_pollfunc, 1); + ide_set_handler (drive, &promise_write_pollfunc, 1, NULL); return ide_started; } else { if (ide_multwrite(drive, rq->nr_sectors)) @@ -304,8 +304,8 @@ i -= rq->current_nr_sectors; ide_end_request(1, hwgroup); } - return ide_stopped; } + return ide_stopped; } /* @@ -319,7 +319,7 @@ byte stat; if (rq->cmd == READ) { - ide_set_handler(drive, &promise_read_intr, WAIT_CMD); + ide_set_handler(drive, &promise_read_intr, WAIT_CMD, NULL); OUT_BYTE(PROMISE_READ, IDE_COMMAND_REG); /* The card's behaviour is odd at this point. If the data is available, DRQ will be true, and no interrupt will be diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/block/trm290.c linux.16p3/drivers/block/trm290.c --- linux.vanilla/drivers/block/trm290.c Fri Apr 21 12:45:50 2000 +++ linux.16p3/drivers/block/trm290.c Sun Apr 30 23:42:32 2000 @@ -193,7 +193,7 @@ outw((count * 2) - 1, hwif->dma_base+2); /* start DMA */ if (drive->media != ide_disk) return 0; - ide_set_handler(drive, &ide_dma_intr, WAIT_CMD); + ide_set_handler(drive, &ide_dma_intr, WAIT_CMD, NULL); OUT_BYTE(reading ? WIN_READDMA : WIN_WRITEDMA, IDE_COMMAND_REG); return 0; case ide_dma_begin: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/cdrom/cdrom.c linux.16p3/drivers/cdrom/cdrom.c --- linux.vanilla/drivers/cdrom/cdrom.c Fri Apr 21 12:45:51 2000 +++ linux.16p3/drivers/cdrom/cdrom.c Thu May 4 00:41:42 2000 @@ -1,7 +1,7 @@ /* linux/drivers/cdrom/cdrom.c. Copyright (c) 1996, 1997 David A. van Leeuwen. Copyright (c) 1997, 1998 Erik Andersen - Copyright (c) 1998, 1999 Jens Axboe + Copyright (c) 1998, 1999, 2000 Jens Axboe May be copied or modified under the terms of the GNU General Public License. See linux/COPYING for more information. @@ -22,12 +22,6 @@ based tunable parameters such as whether the tray should auto-close for that drive. Suggestions (or patches) for this welcome! - -- Change the CDROMREADMODE1, CDROMREADMODE2, CDROMREADAUDIO, and - CDROMREADRAW ioctls so they go through the Uniform CD-ROM driver. - - -- Sync options and capability flags. - - Revision History ---------------------------------- @@ -126,14 +120,99 @@ CDC_CLOSE_TRAY. -- proc info didn't mask against capabilities mask. - 2.56 Sep 9, 1999 - Jens Axboe - -- Define CDROM_CAN() for checking capabilities. - -- Fix up capability reporting, for proc and ioctl. - + 3.00 Aug 5, 1999 - Jens Axboe + -- Unified audio ioctl handling across CD-ROM drivers. A lot of the + code was duplicated before. Drives that support the generic packet + interface are now being fed packets from here instead. + -- First attempt at adding support for MMC2 commands - for DVD and + CD-R(W) drives. Only the DVD parts are in now - the interface used is + the same as for the audio ioctls. + -- ioctl cleanups. if a drive couldn't play audio, it didn't get + a change to perform device specific ioctls as well. + -- Defined CDROM_CAN(CDC_XXX) for checking the capabilities. + -- Put in sysctl files for autoclose, autoeject, check_media, debug, + and lock. + -- /proc/sys/dev/cdrom/info has been updated to also contain info about + CD-Rx and DVD capabilities. + -- Now default to checking media type. + -- CDROM_SEND_PACKET ioctl added. The infrastructure was in place for + doing this anyway, with the generic_packet addition. + + 3.01 Aug 6, 1999 - Jens Axboe + -- Fix up the sysctl handling so that the option flags get set + correctly. + -- Fix up ioctl handling so the device specific ones actually get + called :). + + 3.02 Aug 8, 1999 - Jens Axboe + -- Fixed volume control on SCSI drives (or others with longer audio + page). + -- Fixed a couple of DVD minors. Thanks to Andrew T. Veliath + for telling me and for having defined the various + DVD structures and ioctls in the first place! He designed the original + DVD patches for ide-cd and while I rearranged and unified them, the + interface is still the same. + + 3.03 Sep 1, 1999 - Jens Axboe + -- Moved the rest of the audio ioctls from the CD-ROM drivers here. Only + CDROMREADTOCENTRY and CDROMREADTOCHDR are left. + -- Moved the CDROMREADxxx ioctls in here. + -- Defined the cdrom_get_last_written and cdrom_get_next_block as ioctls + and exported functions. + -- Erik Andersen modified all SCMD_ commands + to now read GPCMD_ for the new generic packet interface. All low level + drivers are updated as well. + -- Various other cleanups. + + 3.04 Sep 12, 1999 - Jens Axboe + -- Fixed a couple of possible memory leaks (if an operation failed and + we didn't free the buffer before returning the error). + -- Integrated Uniform CD Changer handling from Richard Sharman + . + -- Defined CD_DVD and CD_CHANGER log levels. + -- Fixed the CDROMREADxxx ioctls. + -- CDROMPLAYTRKIND uses the GPCMD_PLAY_AUDIO_MSF command - too few + drives supported it. We loose the index part, however. + -- Small modifications to accomodate opens of /dev/hdc1, required + for ide-cd to handle multisession discs. + -- Export cdrom_mode_sense and cdrom_mode_select. + -- init_cdrom_command() for setting up a cgc command. + + 3.05 Oct 24, 1999 - Jens Axboe + -- Changed the interface for CDROM_SEND_PACKET. Before it was virtually + impossible to send the drive data in a sensible way. + -- Lowered stack usage in mmc_ioctl(), dvd_read_disckey(), and + dvd_read_manufact. + -- Added setup of write mode for packet writing. + -- Fixed CDDA ripping with cdda2wav - accept much larger requests of + number of frames and split the reads in blocks of 8. + + 3.06 Dec 13, 1999 - Jens Axboe + -- Added support for changing the region of DVD drives. + -- Added sense data to generic command. + + 3.07 Feb 2, 2000 - Jens Axboe + -- Do same "read header length" trick in cdrom_get_disc_info() as + we do in cdrom_get_track_info() -- some drive don't obbey specs and + fail if they can't supply the full Mt Fuji size table. + -- Deleted stuff related to setting up write modes. It has a different + home now. + -- Clear header length in mode_select unconditionally. + -- Removed the register_disk() that was added, not needed here. + + 3.08 May 1, 2000 - Jens Axboe + -- Always return -EROFS for write opens + -- Convert to module_init/module_exit style init and remove some + of the #ifdef MODULE stuff + -- Fix several dvd errors - DVD_LU_SEND_ASF should pass agid, + DVD_HOST_SEND_RPC_STATE did not set buffer size in cdb, and + dvd_do_auth passed uninitialized data to drive because init_cdrom_command + did not clear a 0 sized buffer. + -------------------------------------------------------------------------*/ -#define REVISION "Revision: 2.56" -#define VERSION "Id: cdrom.c 2.56 1999/09/09" +#define REVISION "Revision: 3.08" +#define VERSION "Id: cdrom.c 3.08 2000/05/01" /* I use an error-log mask to give fine grain control over the type of messages dumped to the system logs. The available masks include: */ @@ -144,6 +223,8 @@ #define CD_OPEN 0x8 #define CD_CLOSE 0x10 #define CD_COUNT_TRACKS 0x20 +#define CD_CHANGER 0x40 +#define CD_DVD 0x80 /* Define this to remove _all_ the debugging messages */ /* #define ERRLOGMASK CD_NOTHING */ @@ -151,7 +232,6 @@ /* #define ERRLOGMASK (CD_WARNING|CD_OPEN|CD_COUNT_TRACKS|CD_CLOSE) */ /* #define ERRLOGMASK (CD_WARNING|CD_REG_UNREG|CD_DO_IOCTL|CD_OPEN|CD_CLOSE|CD_COUNT_TRACKS) */ - #include #include #include @@ -164,6 +244,7 @@ #include #include #include +#include #include #include #include @@ -176,6 +257,7 @@ static int autoclose=1; static int autoeject=0; static int lockdoor = 1; +/* will we ever get to use this... sigh. */ static int check_media_type = 0; MODULE_PARM(debug, "i"); MODULE_PARM(autoclose, "i"); @@ -202,7 +284,8 @@ a lot of places. This macro makes the code more clear. */ #define CDROM_CAN(type) (cdi->ops->capability & ~cdi->mask & type) -#define FM_WRITE 0x2 /* file mode write bit */ +/* used in the audio ioctls */ +#define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret /* Not-exported routines. */ static int cdrom_open(struct inode *ip, struct file *fp); @@ -215,6 +298,12 @@ struct cdrom_device_ops * cdo); static void sanitize_format(union cdrom_addr *addr, u_char * curr, u_char requested); +static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, + unsigned long arg); + +int cdrom_get_last_written(kdev_t dev, long *last_written); +int cdrom_get_next_writable(kdev_t dev, long *next_writable); + #ifdef CONFIG_SYSCTL static void cdrom_sysctl_register(void); #endif /* CONFIG_SYSCTL */ @@ -248,7 +337,7 @@ int register_cdrom(struct cdrom_device_info *cdi) { static char banner_printed = 0; - int major = MAJOR (cdi->dev); + int major = MAJOR(cdi->dev); struct cdrom_device_ops *cdo = cdi->ops; int *change_capability = (int *)&cdo->capability; /* hack */ @@ -259,7 +348,7 @@ if (cdo->open == NULL || cdo->release == NULL) return -2; if ( !banner_printed ) { - printk(KERN_INFO "Uniform CDROM driver " REVISION "\n"); + printk(KERN_INFO "Uniform CD-ROM driver " REVISION "\n"); banner_printed = 1; #ifdef CONFIG_SYSCTL cdrom_sysctl_register(); @@ -270,12 +359,12 @@ ENSURE(tray_move, CDC_CLOSE_TRAY | CDC_OPEN_TRAY); ENSURE(lock_door, CDC_LOCK); ENSURE(select_speed, CDC_SELECT_SPEED); - ENSURE(select_disc, CDC_SELECT_DISC); ENSURE(get_last_session, CDC_MULTI_SESSION); ENSURE(get_mcn, CDC_MCN); ENSURE(reset, CDC_RESET); ENSURE(audio_ioctl, CDC_PLAY_AUDIO); ENSURE(dev_ioctl, CDC_IOCTLS); + ENSURE(generic_packet, CDC_GENERIC_PACKET); cdi->mc_flags = 0; cdo->n_minors = 0; cdi->options = CDO_USE_FFLAGS; @@ -299,7 +388,7 @@ int unregister_cdrom(struct cdrom_device_info *unreg) { struct cdrom_device_info *cdi, *prev; - int major = MAJOR (unreg->dev); + int major = MAJOR(unreg->dev); cdinfo(CD_OPEN, "entering unregister_cdrom\n"); @@ -325,13 +414,25 @@ } static -struct cdrom_device_info *cdrom_find_device (kdev_t dev) +struct cdrom_device_info *cdrom_find_device(kdev_t dev) { struct cdrom_device_info *cdi; cdi = topCdromPtr; while (cdi != NULL && cdi->dev != dev) cdi = cdi->next; + + /* we need to find the device this way when IDE devices such + * as /dev/hdc2 are opened. SCSI drives will be found above and + * so will /dev/hdc, for instance. + */ + if (cdi == NULL) { + kdev_t cd_dev = MKDEV(MAJOR(dev), MINOR(dev) | CD_PART_MASK); + cdi = topCdromPtr; + while (cdi != NULL && cdi->dev != cd_dev) + cdi = cdi->next; + } + return cdi; } @@ -346,22 +447,26 @@ static int cdrom_open(struct inode *ip, struct file *fp) { + struct cdrom_device_info *cdi; kdev_t dev = ip->i_rdev; - struct cdrom_device_info *cdi = cdrom_find_device(dev); - int purpose = !!(fp->f_flags & O_NONBLOCK); - int ret=0; + int ret; cdinfo(CD_OPEN, "entering cdrom_open\n"); - if (cdi == NULL) + if ((cdi = cdrom_find_device(dev)) == NULL) return -ENODEV; - if (fp->f_mode & FM_WRITE) + + if (fp->f_mode & FMODE_WRITE) return -EROFS; - purpose = purpose || !(cdi->options & CDO_USE_FFLAGS); - if (purpose) - ret = cdi->ops->open(cdi, purpose); + + /* if this was a O_NONBLOCK open and we should honor the flags, + * do a quick open without drive/disc integrity checks. */ + if ((fp->f_flags & O_NONBLOCK) && (cdi->options & CDO_USE_FFLAGS)) + ret = cdi->ops->open(cdi, 1); else ret = open_for_data(cdi); + if (!ret) cdi->use_count++; + cdinfo(CD_OPEN, "Use count for \"/dev/%s\" now %d\n", cdi->name, cdi->use_count); /* Do this on open. Don't wait for mount, because they might not be mounting, but opening with O_NONBLOCK */ @@ -428,7 +533,11 @@ * for example, need bit CDO_CHECK_TYPE cleared! */ if (tracks.data==0) { if (cdi->options & CDO_CHECK_TYPE) { + /* give people a warning shot, now that CDO_CHECK_TYPE + is the default case! */ cdinfo(CD_OPEN, "bummer. wrong media type.\n"); + cdinfo(CD_WARNING, "pid %d must open device O_NONBLOCK!\n", + (unsigned int)current->pid); ret=-EMEDIUMTYPE; goto clean_up_and_return; } @@ -452,7 +561,7 @@ if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) { cdo->lock_door(cdi, 1); cdinfo(CD_OPEN, "door locked.\n"); - } + } cdinfo(CD_OPEN, "device opened successfully.\n"); return ret; @@ -533,17 +642,17 @@ int cdrom_release(struct inode *ip, struct file *fp) { kdev_t dev = ip->i_rdev; - struct cdrom_device_info *cdi = cdrom_find_device (dev); + struct cdrom_device_info *cdi = cdrom_find_device(dev); struct cdrom_device_ops *cdo = cdi->ops; int opened_for_data; cdinfo(CD_CLOSE, "entering cdrom_release\n"); - if (cdi == NULL) - return 0; - if (cdi->use_count > 0) cdi->use_count--; + + if (cdi->use_count > 0) + cdi->use_count--; if (cdi->use_count == 0) cdinfo(CD_CLOSE, "Use count for \"/dev/%s\" now zero\n", cdi->name); - if (cdi->use_count == 0 && /* last process that closes dev*/ + if (cdi->use_count == 0 && cdo->capability & CDC_LOCK && !keeplocked) { cdinfo(CD_CLOSE, "Unlocking door!\n"); cdo->lock_door(cdi, 0); @@ -557,13 +666,140 @@ sb = get_super(dev); if (sb) invalidate_inodes(sb); invalidate_buffers(dev); - if (opened_for_data && (cdi->options & CDO_AUTO_EJECT) && - CDROM_CAN(CDC_OPEN_TRAY)) + if (opened_for_data && + cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY)) cdo->tray_move(cdi, 1); } return 0; } +static int cdrom_read_mech_status(struct cdrom_device_info *cdi, + struct cdrom_changer_info *buf) +{ + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + int length; + + length = sizeof(struct cdrom_mechstat_header) + + cdi->capacity * sizeof(struct cdrom_slot); + + init_cdrom_command(&cgc, buf, length); + cgc.cmd[0] = GPCMD_MECHANISM_STATUS; + cgc.cmd[8] = (length >> 8) & 0xff; + cgc.cmd[9] = length & 0xff; + return cdo->generic_packet(cdi, &cgc); +} + +static int cdrom_slot_status(struct cdrom_device_info *cdi, int slot) +{ + struct cdrom_changer_info info; + int ret; + + cdinfo(CD_CHANGER, "entering cdrom_slot_status()\n"); + if (cdi->sanyo_slot) + return CDS_NO_INFO; + + if ((ret = cdrom_read_mech_status(cdi, &info))) + return ret; + + if (info.slots[slot].disc_present) + return CDS_DISC_OK; + else + return CDS_NO_DISC; + +} + +/* Return the number of slots for an ATAPI/SCSI cdrom, + * return 1 if not a changer. + */ +int cdrom_number_of_slots(struct cdrom_device_info *cdi) +{ + int status; + int nslots = 1; + struct cdrom_changer_info info; + + cdinfo(CD_CHANGER, "entering cdrom_number_of_slots()\n"); + /* cdrom_read_mech_status requires a valid value for capacity: */ + cdi->capacity = 0; + + if ((status = cdrom_read_mech_status(cdi, &info)) == 0) + nslots = info.hdr.nslots; + + return nslots; +} + + +/* If SLOT < 0, unload the current slot. Otherwise, try to load SLOT. */ +static int cdrom_load_unload(struct cdrom_device_info *cdi, int slot) +{ + struct cdrom_generic_command cgc; + + cdinfo(CD_CHANGER, "entering cdrom_load_unload()\n"); + if (cdi->sanyo_slot && slot < 0) + return 0; + + init_cdrom_command(&cgc, NULL, 0); + cgc.cmd[0] = GPCMD_LOAD_UNLOAD; + cgc.cmd[4] = 2 + (slot >= 0); + cgc.cmd[8] = slot; + + /* The Sanyo 3 CD changer uses byte 7 of the + GPCMD_TEST_UNIT_READY to command to switch CDs instead of + using the GPCMD_LOAD_UNLOAD opcode. */ + if (cdi->sanyo_slot && slot) { + cgc.cmd[0] = GPCMD_TEST_UNIT_READY; + cgc.cmd[7] = slot; + cdi->sanyo_slot = slot ? slot : 3; + } + + return cdi->ops->generic_packet(cdi, &cgc); +} + +int cdrom_select_disc(struct cdrom_device_info *cdi, int slot) +{ + struct cdrom_changer_info info; + int curslot; + int ret; + + cdinfo(CD_CHANGER, "entering cdrom_select_disc()\n"); + if (!CDROM_CAN(CDC_SELECT_DISC)) + return -EDRIVE_CANT_DO_THIS; + + if (slot == CDSL_NONE) { + /* set media changed bits, on both queues */ + cdi->mc_flags = 0x3; + return cdrom_load_unload(cdi, -1); + } + + if ((ret = cdrom_read_mech_status(cdi, &info))) + return ret; + + curslot = info.hdr.curslot; + + if (cdi->use_count > 1 || keeplocked) { + if (slot == CDSL_CURRENT) { + return curslot; + } else { + return -EBUSY; + } + } + + /* Specifying CDSL_CURRENT will attempt to load the currnet slot, + which is useful if it had been previously unloaded. + Whether it can or not, it returns the current slot. + Similarly, if slot happens to be the current one, we still + try and load it. */ + if (slot == CDSL_CURRENT) + slot = curslot; + + /* set media changed bits on both queues */ + cdi->mc_flags = 0x3; + if ((ret = cdrom_load_unload(cdi, slot))) + return ret; + + return slot; +} + /* We want to make media_changed accessible to the user through an * ioctl. The main problem now is that we must double-buffer the * low-level implementation, to assure that the VFS and the user both @@ -587,15 +823,12 @@ return ret; } -static -int cdrom_media_changed(kdev_t dev) +static int cdrom_media_changed(kdev_t dev) { - struct cdrom_device_info *cdi = cdrom_find_device (dev); + struct cdrom_device_info *cdi = cdrom_find_device(dev); /* This talks to the VFS, which doesn't like errors - just 1 or 0. * Returning "0" is always safe (media hasn't been changed). Do that * if the low-level cdrom driver dosn't support media changed. */ - if (cdi == NULL) - return 0; if (cdi->ops->media_changed == NULL) return 0; if (!CDROM_CAN(CDC_MEDIA_CHANGED)) @@ -603,6 +836,7 @@ return (media_changed(cdi, 0)); } +/* badly broken, I know. Is due for a fixup anytime. */ void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks) { struct cdrom_tochdr header; @@ -614,7 +848,7 @@ tracks->xa=0; tracks->error=0; cdinfo(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n"); - if (!(cdi->ops->capability & ~cdi->mask & CDC_PLAY_AUDIO)) { + if (!CDROM_CAN(CDC_PLAY_AUDIO)) { tracks->error=CDS_NO_INFO; return; } @@ -688,38 +922,496 @@ *curr = requested; } -/* Some of the cdrom ioctls are not implemented here, because these - * appear to be either too device-specific, or it is not clear to me - * what use they are. These are (number of drivers that support them - * in parenthesis): CDROMREADMODE1 (2+ide), CDROMREADMODE2 (2+ide), - * CDROMREADAUDIO (2+ide), CDROMREADRAW (2), CDROMREADCOOKED (2), - * CDROMSEEK (2), CDROMPLAYBLK (scsi), CDROMREADALL (1). Read-audio, - * OK (although i guess the record companies aren't too happy with - * this, most drives therefore refuse to transport audio data). But - * why are there 5 different READs defined? For now, these functions - * are left over to the device-specific ioctl routine, - * cdo->dev_ioctl. Note that as a result of this, no - * memory-verification is performed for these ioctls. +void init_cdrom_command(struct cdrom_generic_command *cgc, void *buf, int len) +{ + memset(cgc, 0, sizeof(struct cdrom_generic_command)); + if (buf) + memset(buf, 0, len); + cgc->buffer = (char *) buf; + cgc->buflen = len; +} + +/* DVD handling */ + +#define copy_key(dest,src) memcpy((dest), (src), sizeof(dvd_key)) +#define copy_chal(dest,src) memcpy((dest), (src), sizeof(dvd_challenge)) + +static void setup_report_key(struct cdrom_generic_command *cgc, unsigned agid, unsigned type) +{ + cgc->cmd[0] = GPCMD_REPORT_KEY; + cgc->cmd[10] = type | (agid << 6); + switch (type) { + case 0: case 8: case 5: { + cgc->buflen = 8; + break; + } + case 1: { + cgc->buflen = 16; + break; + } + case 2: case 4: { + cgc->buflen = 12; + break; + } + } + cgc->cmd[9] = cgc->buflen; +} + +static void setup_send_key(struct cdrom_generic_command *cgc, unsigned agid, unsigned type) +{ + cgc->cmd[0] = GPCMD_SEND_KEY; + cgc->cmd[10] = type | (agid << 6); + switch (type) { + case 1: { + cgc->buflen = 16; + break; + } + case 3: { + cgc->buflen = 12; + break; + } + case 6: { + cgc->buflen = 8; + break; + } + } + cgc->cmd[9] = cgc->buflen; +} + +static int dvd_do_auth(struct cdrom_device_info *cdi, dvd_authinfo *ai) +{ + int ret; + u_char buf[20]; + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + rpc_state_t rpc_state; + + memset(buf, 0, sizeof(buf)); + init_cdrom_command(&cgc, buf, 0); + + switch (ai->type) { + /* LU data send */ + case DVD_LU_SEND_AGID: + cdinfo(CD_DVD, "entering DVD_LU_SEND_AGID\n"); + setup_report_key(&cgc, ai->lsa.agid, 0); + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + ai->lsa.agid = buf[7] >> 6; + /* Returning data, let host change state */ + break; + + case DVD_LU_SEND_KEY1: + cdinfo(CD_DVD, "entering DVD_LU_SEND_KEY1\n"); + setup_report_key(&cgc, ai->lsk.agid, 2); + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + copy_key(ai->lsk.key, &buf[4]); + /* Returning data, let host change state */ + break; + + case DVD_LU_SEND_CHALLENGE: + cdinfo(CD_DVD, "entering DVD_LU_SEND_CHALLENGE\n"); + setup_report_key(&cgc, ai->lsc.agid, 1); + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + copy_chal(ai->lsc.chal, &buf[4]); + /* Returning data, let host change state */ + break; + + /* Post-auth key */ + case DVD_LU_SEND_TITLE_KEY: + cdinfo(CD_DVD, "entering DVD_LU_SEND_TITLE_KEY\n"); + setup_report_key(&cgc, ai->lstk.agid, 4); + cgc.cmd[5] = ai->lstk.lba; + cgc.cmd[4] = ai->lstk.lba >> 8; + cgc.cmd[3] = ai->lstk.lba >> 16; + cgc.cmd[2] = ai->lstk.lba >> 24; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + ai->lstk.cpm = (buf[4] >> 7) & 1; + ai->lstk.cp_sec = (buf[4] >> 6) & 1; + ai->lstk.cgms = (buf[4] >> 4) & 3; + copy_key(ai->lstk.title_key, &buf[5]); + /* Returning data, let host change state */ + break; + + case DVD_LU_SEND_ASF: + cdinfo(CD_DVD, "entering DVD_LU_SEND_ASF\n"); + setup_report_key(&cgc, ai->lsasf.agid, 5); + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + ai->lsasf.asf = buf[7] & 1; + break; + + /* LU data receive (LU changes state) */ + case DVD_HOST_SEND_CHALLENGE: + cdinfo(CD_DVD, "entering DVD_HOST_SEND_CHALLENGE\n"); + setup_send_key(&cgc, ai->hsc.agid, 1); + buf[1] = 0xe; + copy_chal(&buf[4], ai->hsc.chal); + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + ai->type = DVD_LU_SEND_KEY1; + break; + + case DVD_HOST_SEND_KEY2: + cdinfo(CD_DVD, "entering DVD_HOST_SEND_KEY2\n"); + setup_send_key(&cgc, ai->hsk.agid, 3); + buf[1] = 0xa; + copy_key(&buf[4], ai->hsk.key); + + if ((ret = cdo->generic_packet(cdi, &cgc))) { + ai->type = DVD_AUTH_FAILURE; + return ret; + } + ai->type = DVD_AUTH_ESTABLISHED; + break; + + /* Misc */ + case DVD_INVALIDATE_AGID: + cdinfo(CD_DVD, "entering DVD_INVALIDATE_AGID\n"); + setup_report_key(&cgc, ai->lsa.agid, 0x3f); + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + break; + + /* Get region settings */ + case DVD_LU_SEND_RPC_STATE: + cdinfo(CD_DVD, "entering DVD_LU_SEND_RPC_STATE\n"); + setup_report_key(&cgc, 0, 8); + + init_cdrom_command(&cgc, &rpc_state, 0); + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + ai->lrpcs.type = rpc_state.type_code; + ai->lrpcs.vra = rpc_state.vra; + ai->lrpcs.ucca = rpc_state.ucca; + ai->lrpcs.region_mask = rpc_state.region_mask; + ai->lrpcs.rpc_scheme = rpc_state.rpc_scheme; + break; + + /* Set region settings */ + case DVD_HOST_SEND_RPC_STATE: + cdinfo(CD_DVD, "entering DVD_HOST_SEND_RPC_STATE\n"); + setup_send_key(&cgc, 0, 6); + buf[1] = 6; + buf[4] = ai->hrpcs.pdrc; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + break; + + default: + cdinfo(CD_WARNING, "Invalid DVD key ioctl (%d)\n", ai->type); + return -ENOTTY; + } + + return 0; +} + +static int dvd_read_physical(struct cdrom_device_info *cdi, dvd_struct *s) +{ + int ret, i; + u_char buf[4 + 4 * 20], *base; + struct dvd_layer *layer; + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + + init_cdrom_command(&cgc, buf, sizeof(buf)); + cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE; + cgc.cmd[6] = s->physical.layer_num; + cgc.cmd[7] = s->type; + cgc.cmd[9] = cgc.buflen & 0xff; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + base = &buf[4]; + layer = &s->physical.layer[0]; + + /* place the data... really ugly, but at least we won't have to + worry about endianess in userspace or here. */ + for (i = 0; i < 4; ++i, base += 20, ++layer) { + memset(layer, 0, sizeof(*layer)); + layer->book_version = base[0] & 0xf; + layer->book_type = base[0] >> 4; + layer->min_rate = base[1] & 0xf; + layer->disc_size = base[1] >> 4; + layer->layer_type = base[2] & 0xf; + layer->track_path = (base[2] >> 4) & 1; + layer->nlayers = (base[2] >> 5) & 3; + layer->track_density = base[3] & 0xf; + layer->linear_density = base[3] >> 4; + layer->start_sector = base[5] << 16 | base[6] << 8 | base[7]; + layer->end_sector = base[9] << 16 | base[10] << 8 | base[11]; + layer->end_sector_l0 = base[13] << 16 | base[14] << 8 | base[15]; + layer->bca = base[16] >> 7; + } + + return 0; +} + +static int dvd_read_copyright(struct cdrom_device_info *cdi, dvd_struct *s) +{ + int ret; + u_char buf[8]; + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + + init_cdrom_command(&cgc, buf, sizeof(buf)); + cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE; + cgc.cmd[6] = s->copyright.layer_num; + cgc.cmd[7] = s->type; + cgc.cmd[8] = cgc.buflen >> 8; + cgc.cmd[9] = cgc.buflen & 0xff; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + s->copyright.cpst = buf[4]; + s->copyright.rmi = buf[5]; + + return 0; +} + +static int dvd_read_disckey(struct cdrom_device_info *cdi, dvd_struct *s) +{ + int ret, size; + u_char *buf; + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + + size = sizeof(s->disckey.value) + 4; + + if ((buf = (u_char *) kmalloc(size, GFP_KERNEL)) == NULL) + return -ENOMEM; + + init_cdrom_command(&cgc, buf, size); + cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE; + cgc.cmd[7] = s->type; + cgc.cmd[8] = size >> 8; + cgc.cmd[9] = size & 0xff; + cgc.cmd[10] = s->disckey.agid << 6; + + if (!(ret = cdo->generic_packet(cdi, &cgc))) + memcpy(s->disckey.value, &buf[4], sizeof(s->disckey.value)); + + kfree(buf); + return ret; +} + +static int dvd_read_bca(struct cdrom_device_info *cdi, dvd_struct *s) +{ + int ret; + u_char buf[4 + 188]; + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + + init_cdrom_command(&cgc, buf, sizeof(buf)); + cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE; + cgc.cmd[7] = s->type; + cgc.cmd[9] = cgc.buflen = 0xff; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + s->bca.len = buf[0] << 8 | buf[1]; + if (s->bca.len < 12 || s->bca.len > 188) { + cdinfo(CD_WARNING, "Received invalid BCA length (%d)\n", s->bca.len); + return -EIO; + } + memcpy(s->bca.value, &buf[4], s->bca.len); + + return 0; +} + +static int dvd_read_manufact(struct cdrom_device_info *cdi, dvd_struct *s) +{ + int ret = 0, size; + u_char *buf; + struct cdrom_generic_command cgc; + struct cdrom_device_ops *cdo = cdi->ops; + + size = sizeof(s->manufact.value) + 4; + + if ((buf = (u_char *) kmalloc(size, GFP_KERNEL)) == NULL) + return -ENOMEM; + + init_cdrom_command(&cgc, buf, size); + cgc.cmd[0] = GPCMD_READ_DVD_STRUCTURE; + cgc.cmd[7] = s->type; + cgc.cmd[8] = size >> 8; + cgc.cmd[9] = size & 0xff; + + if ((ret = cdo->generic_packet(cdi, &cgc))) { + kfree(buf); + return ret; + } + + s->manufact.len = buf[0] << 8 | buf[1]; + if (s->manufact.len < 0 || s->manufact.len > 2048) { + cdinfo(CD_WARNING, "Received invalid manufacture info length" + " (%d)\n", s->bca.len); + ret = -EIO; + } else { + memcpy(s->manufact.value, &buf[4], s->manufact.len); + } + + kfree(buf); + return ret; +} + +static int dvd_read_struct(struct cdrom_device_info *cdi, dvd_struct *s) +{ + switch (s->type) { + case DVD_STRUCT_PHYSICAL: + return dvd_read_physical(cdi, s); + + case DVD_STRUCT_COPYRIGHT: + return dvd_read_copyright(cdi, s); + + case DVD_STRUCT_DISCKEY: + return dvd_read_disckey(cdi, s); + + case DVD_STRUCT_BCA: + return dvd_read_bca(cdi, s); + + case DVD_STRUCT_MANUFACT: + return dvd_read_manufact(cdi, s); + + default: + cdinfo(CD_WARNING, ": Invalid DVD structure read requested (%d)\n", + s->type); + return -EINVAL; + } +} + +int cdrom_mode_sense(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc, + int page_code, int page_control) +{ + struct cdrom_device_ops *cdo = cdi->ops; + + memset(cgc->cmd, 0, sizeof(cgc->cmd)); + + cgc->cmd[0] = GPCMD_MODE_SENSE_10; + cgc->cmd[2] = page_code | (page_control << 6); + cgc->cmd[7] = cgc->buflen >> 8; + cgc->cmd[8] = cgc->buflen & 0xff; + return cdo->generic_packet(cdi, cgc); +} + +int cdrom_mode_select(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc) +{ + struct cdrom_device_ops *cdo = cdi->ops; + + memset(cgc->cmd, 0, sizeof(cgc->cmd)); + memset(cgc->buffer, 0, 3); + + cgc->cmd[0] = GPCMD_MODE_SELECT_10; + cgc->cmd[1] = 0x10; /* PF */ + cgc->cmd[7] = cgc->buflen >> 8; + cgc->cmd[8] = cgc->buflen & 0xff; + return cdo->generic_packet(cdi, cgc); +} + +static int cdrom_read_subchannel(struct cdrom_device_info *cdi, + struct cdrom_subchnl *subchnl, int mcn) +{ + struct cdrom_device_ops *cdo = cdi->ops; + struct cdrom_generic_command cgc; + char buffer[32]; + int ret; + + init_cdrom_command(&cgc, buffer, 16); + cgc.cmd[0] = GPCMD_READ_SUBCHANNEL; + cgc.cmd[1] = 2; /* MSF addressing */ + cgc.cmd[2] = 0x40; /* request subQ data */ + cgc.cmd[3] = mcn ? 2 : 1; + cgc.cmd[8] = 16; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + subchnl->cdsc_audiostatus = cgc.buffer[1]; + subchnl->cdsc_format = CDROM_MSF; + subchnl->cdsc_ctrl = cgc.buffer[5] & 0xf; + subchnl->cdsc_trk = cgc.buffer[6]; + subchnl->cdsc_ind = cgc.buffer[7]; + + subchnl->cdsc_reladdr.msf.minute = cgc.buffer[13]; + subchnl->cdsc_reladdr.msf.second = cgc.buffer[14]; + subchnl->cdsc_reladdr.msf.frame = cgc.buffer[15]; + subchnl->cdsc_absaddr.msf.minute = cgc.buffer[9]; + subchnl->cdsc_absaddr.msf.second = cgc.buffer[10]; + subchnl->cdsc_absaddr.msf.frame = cgc.buffer[11]; + + return 0; +} + +/* very generic interface for reading the various types of blocks */ +static int cdrom_read_block(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc, + int lba, int nblocks, int format, int blksize) +{ + struct cdrom_device_ops *cdo = cdi->ops; + + memset(&cgc->cmd, 0, sizeof(cgc->cmd)); + cgc->cmd[0] = GPCMD_READ_CD; + /* expected sector size - cdda,mode1,etc. */ + cgc->cmd[1] = format << 2; + /* starting address */ + cgc->cmd[2] = (lba >> 24) & 0xff; + cgc->cmd[3] = (lba >> 16) & 0xff; + cgc->cmd[4] = (lba >> 8) & 0xff; + cgc->cmd[5] = lba & 0xff; + /* number of blocks */ + cgc->cmd[6] = (nblocks >> 16) & 0xff; + cgc->cmd[7] = (nblocks >> 8) & 0xff; + cgc->cmd[8] = nblocks & 0xff; + cgc->buflen = blksize * nblocks; + + /* set the header info returned */ + switch (blksize) { + case CD_FRAMESIZE_RAW0 : cgc->cmd[9] = 0x58; break; + case CD_FRAMESIZE_RAW1 : cgc->cmd[9] = 0x78; break; + case CD_FRAMESIZE_RAW : cgc->cmd[9] = 0xf8; break; + default : cgc->cmd[9] = 0x10; + } + + return cdo->generic_packet(cdi, cgc); +} + +/* Just about every imaginable ioctl is supported in the Uniform layer + * these days. ATAPI / SCSI specific code now mainly resides in + * mmc_ioct(). */ -static -int cdrom_ioctl(struct inode *ip, struct file *fp, - unsigned int cmd, unsigned long arg) +static int cdrom_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, + unsigned long arg) { kdev_t dev = ip->i_rdev; - struct cdrom_device_info *cdi = cdrom_find_device (dev); - struct cdrom_device_ops *cdo; - - if (cdi == NULL) - return -ENODEV; - cdo = cdi->ops; + struct cdrom_device_info *cdi = cdrom_find_device(dev); + struct cdrom_device_ops *cdo = cdi->ops; + int ret; /* the first few commands do not deal with audio drive_info, but only with routines in cdrom device operations. */ switch (cmd) { - /* maybe we should order cases after statistics of use? */ - case CDROMMULTISESSION: { - int ret; struct cdrom_multisession ms_info; u_char requested_format; cdinfo(CD_DO_IOCTL, "entering CDROMMULTISESSION\n"); @@ -741,7 +1433,6 @@ } case CDROMEJECT: { - int ret; cdinfo(CD_DO_IOCTL, "entering CDROMEJECT\n"); if (!CDROM_CAN(CDC_OPEN_TRAY)) return -ENOSYS; @@ -774,16 +1465,22 @@ } case CDROM_MEDIA_CHANGED: { + struct cdrom_changer_info info; + cdinfo(CD_DO_IOCTL, "entering CDROM_MEDIA_CHANGED\n"); if (!CDROM_CAN(CDC_MEDIA_CHANGED)) return -ENOSYS; - if (!CDROM_CAN(CDC_SELECT_DISC) - || arg == CDSL_CURRENT) + if (!CDROM_CAN(CDC_SELECT_DISC) || arg == CDSL_CURRENT) /* cannot select disc or select current disc */ return media_changed(cdi, 1); - if ((unsigned int)arg >= cdi->capacity) + if ((unsigned int)arg >= cdi->capacity) { return -EINVAL; - return cdo->media_changed (cdi, arg); + } + + if ((ret = cdrom_read_mech_status(cdi, &info))) + return ret; + + return info.slots[arg].change; } case CDROM_SET_OPTIONS: { @@ -824,16 +1521,29 @@ case CDROM_SELECT_DISC: { cdinfo(CD_DO_IOCTL, "entering CDROM_SELECT_DISC\n"); - if (!(cdo->capability & ~cdi->mask & CDC_SELECT_DISC)) + if (!CDROM_CAN(CDC_SELECT_DISC)) return -ENOSYS; - if ((arg == CDSL_CURRENT) || (arg == CDSL_NONE)) + + if ((arg != CDSL_CURRENT) && (arg != CDSL_NONE)) { + if ((int)arg >= cdi->capacity) + return -EINVAL; + } + /* cdo->select_disc is a hook to allow a driver-specific + * way of seleting disc. However, since there is no + * equiv hook for cdrom_slot_status this may not + * actually be useful... + */ + if (cdo->select_disc != NULL) return cdo->select_disc(cdi, arg); - if ((int)arg >= cdi->capacity) - return -EDRIVE_CANT_DO_THIS; - return cdo->select_disc(cdi, arg); + + /* no driver specific select_disc(), call our own */ + cdinfo(CD_CHANGER, "Using generic cdrom_select_disc()\n"); + return cdrom_select_disc(cdi, arg); } case CDROMRESET: { + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; cdinfo(CD_DO_IOCTL, "entering CDROM_RESET\n"); if (!CDROM_CAN(CDC_RESET)) return -ENOSYS; @@ -841,7 +1551,7 @@ } case CDROM_LOCKDOOR: { - cdinfo(CD_DO_IOCTL, "%socking door.\n",arg?"L":"Unl"); + cdinfo(CD_DO_IOCTL, "%socking door.\n", arg ? "L" : "Unl"); if (!CDROM_CAN(CDC_LOCK)) return -EDRIVE_CANT_DO_THIS; keeplocked = arg ? 1 : 0; @@ -854,7 +1564,7 @@ case CDROM_DEBUG: { if (!capable(CAP_SYS_ADMIN)) return -EACCES; - cdinfo(CD_DO_IOCTL, "%sabling debug.\n",arg?"En":"Dis"); + cdinfo(CD_DO_IOCTL, "%sabling debug.\n", arg ? "En" : "Dis"); debug = arg ? 1 : 0; return debug; } @@ -870,10 +1580,9 @@ * is written on the CD is /not/ uniform across all discs! */ case CDROM_GET_MCN: { - int ret; struct cdrom_mcn mcn; cdinfo(CD_DO_IOCTL, "entering CDROM_GET_MCN\n"); - if (!CDROM_CAN(CDC_MCN)) + if (!(cdo->capability & CDC_MCN)) return -ENOSYS; if ((ret=cdo->get_mcn(cdi, &mcn))) return ret; @@ -884,13 +1593,15 @@ case CDROM_DRIVE_STATUS: { cdinfo(CD_DO_IOCTL, "entering CDROM_DRIVE_STATUS\n"); - if (!CDROM_CAN(CDC_DRIVE_STATUS)) + if (!(cdo->capability & CDC_DRIVE_STATUS)) return -ENOSYS; + if (!CDROM_CAN(CDC_SELECT_DISC)) + return cdo->drive_status(cdi, CDSL_CURRENT); if ((arg == CDSL_CURRENT) || (arg == CDSL_NONE)) - return cdo->drive_status(cdi, arg); - if (((int)arg > cdi->capacity)) + return cdo->drive_status(cdi, CDSL_CURRENT); + if (((int)arg >= cdi->capacity)) return -EINVAL; - return cdo->drive_status(cdi, arg); + return cdrom_slot_status(cdi, arg); } /* Ok, this is where problems start. The current interface for the @@ -921,242 +1632,852 @@ if (tracks.audio > 0) { if (tracks.data==0 && tracks.cdi==0 && tracks.xa==0) return CDS_AUDIO; - else return CDS_MIXED; + else + return CDS_MIXED; } if (tracks.cdi > 0) return CDS_XA_2_2; if (tracks.xa > 0) return CDS_XA_2_1; if (tracks.data > 0) return CDS_DATA_1; /* Policy mode off */ - cdinfo(CD_WARNING,"This disc doesn't have any tracks I recognise!\n"); + cdinfo(CD_WARNING,"This disc doesn't have any tracks I recognize!\n"); return CDS_NO_INFO; } - case CDROM_CHANGER_NSLOTS: + case CDROM_CHANGER_NSLOTS: { cdinfo(CD_DO_IOCTL, "entering CDROM_CHANGER_NSLOTS\n"); - return cdi->capacity; + return cdi->capacity; + } + } -/* The following is not implemented, because there are too many - * different data types. We could support /1/ raw mode, that is large - * enough to hold everything. - */ + /* use the ioctls that are implemented through the generic_packet() + interface. this may look at bit funny, but if -ENOTTY is + returned that particular ioctl is not implemented and we + let it go through the device specific ones. */ + if (CDROM_CAN(CDC_GENERIC_PACKET)) { + ret = mmc_ioctl(cdi, cmd, arg); + if (ret != -ENOTTY) { + return ret; + } + } -#if 0 - case CDROMREADMODE1: { - int ret; + /* note: most of the cdinfo() calls are commented out here, + because they fill up the sys log when CD players poll + the drive. */ + switch (cmd) { + case CDROMSUBCHNL: { + struct cdrom_subchnl q; + u_char requested, back; + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + /* cdinfo(CD_DO_IOCTL,"entering CDROMSUBCHNL\n");*/ + IOCTL_IN(arg, struct cdrom_subchnl, q); + requested = q.cdsc_format; + if (!((requested == CDROM_MSF) || + (requested == CDROM_LBA))) + return -EINVAL; + q.cdsc_format = CDROM_MSF; + if ((ret=cdo->audio_ioctl(cdi, cmd, &q))) + return ret; + back = q.cdsc_format; /* local copy */ + sanitize_format(&q.cdsc_absaddr, &back, requested); + sanitize_format(&q.cdsc_reladdr, &q.cdsc_format, requested); + IOCTL_OUT(arg, struct cdrom_subchnl, q); + /* cdinfo(CD_DO_IOCTL, "CDROMSUBCHNL successful\n"); */ + return 0; + } + case CDROMREADTOCHDR: { + struct cdrom_tochdr header; + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCHDR\n"); */ + IOCTL_IN(arg, struct cdrom_tochdr, header); + if ((ret=cdo->audio_ioctl(cdi, cmd, &header))) + return ret; + IOCTL_OUT(arg, struct cdrom_tochdr, header); + /* cdinfo(CD_DO_IOCTL, "CDROMREADTOCHDR successful\n"); */ + return 0; + } + case CDROMREADTOCENTRY: { + struct cdrom_tocentry entry; + u_char requested_format; + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCENTRY\n"); */ + IOCTL_IN(arg, struct cdrom_tocentry, entry); + requested_format = entry.cdte_format; + if (!((requested_format == CDROM_MSF) || + (requested_format == CDROM_LBA))) + return -EINVAL; + /* make interface to low-level uniform */ + entry.cdte_format = CDROM_MSF; + if ((ret=cdo->audio_ioctl(cdi, cmd, &entry))) + return ret; + sanitize_format(&entry.cdte_addr, + &entry.cdte_format, requested_format); + IOCTL_OUT(arg, struct cdrom_tocentry, entry); + /* cdinfo(CD_DO_IOCTL, "CDROMREADTOCENTRY successful\n"); */ + return 0; + } + case CDROMPLAYMSF: { struct cdrom_msf msf; - char buf[CD_FRAMESIZE]; - cdinfo(CD_DO_IOCTL, "entering CDROMREADMODE1\n"); + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "entering CDROMPLAYMSF\n"); IOCTL_IN(arg, struct cdrom_msf, msf); - if (ret=cdo->read_audio(dev, cmd, &msf, &buf, cdi)) + return cdo->audio_ioctl(cdi, cmd, &msf); + } + case CDROMPLAYTRKIND: { + struct cdrom_ti ti; + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "entering CDROMPLAYTRKIND\n"); + IOCTL_IN(arg, struct cdrom_ti, ti); + CHECKAUDIO; + return cdo->audio_ioctl(cdi, cmd, &ti); + } + case CDROMVOLCTRL: { + struct cdrom_volctrl volume; + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "entering CDROMVOLCTRL\n"); + IOCTL_IN(arg, struct cdrom_volctrl, volume); + return cdo->audio_ioctl(cdi, cmd, &volume); + } + case CDROMVOLREAD: { + struct cdrom_volctrl volume; + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "entering CDROMVOLREAD\n"); + if ((ret=cdo->audio_ioctl(cdi, cmd, &volume))) return ret; - IOCTL_OUT(arg, __typeof__(buf), buf); + IOCTL_OUT(arg, struct cdrom_volctrl, volume); return 0; } -#endif + case CDROMSTART: + case CDROMSTOP: + case CDROMPAUSE: + case CDROMRESUME: { + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "doing audio ioctl (start/stop/pause/resume)\n"); + CHECKAUDIO; + return cdo->audio_ioctl(cdi, cmd, NULL); + } } /* switch */ -/* Now all the audio-ioctls follow, they are all routed through the - same call audio_ioctl(). */ + /* do the device specific ioctls */ + if (CDROM_CAN(CDC_IOCTLS)) + return cdo->dev_ioctl(cdi, cmd, arg); + + return -ENOSYS; +} + +static inline +int msf_to_lba(char m, char s, char f) +{ + return (((m * CD_SECS) + s) * CD_FRAMES + f) - CD_MSF_OFFSET; +} -#define CHECKAUDIO if ((ret=check_for_audio_disc(cdi, cdo))) return ret +static int mmc_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, + unsigned long arg) +{ + struct cdrom_device_ops *cdo = cdi->ops; + struct cdrom_generic_command cgc; + kdev_t dev = cdi->dev; + char buffer[32]; + int ret = 0; + + memset(&cgc, 0, sizeof(cgc)); - if (!CDROM_CAN(CDC_PLAY_AUDIO)) - return -ENOSYS; - else { + /* build a unified command and queue it through + cdo->generic_packet() */ + switch (cmd) { + case CDROMREADRAW: + case CDROMREADMODE1: + case CDROMREADMODE2: { + struct cdrom_msf msf; + int blocksize = 0, format = 0, lba; + switch (cmd) { - case CDROMSUBCHNL: { - int ret; - struct cdrom_subchnl q; - u_char requested, back; - /* comment out the cdinfo calls here because they - fill up the sys logs when CD players poll the drive*/ - /* cdinfo(CD_DO_IOCTL,"entering CDROMSUBCHNL\n");*/ - IOCTL_IN(arg, struct cdrom_subchnl, q); - requested = q.cdsc_format; - if (!((requested == CDROM_MSF) || - (requested == CDROM_LBA))) - return -EINVAL; - q.cdsc_format = CDROM_MSF; - if ((ret=cdo->audio_ioctl(cdi, cmd, &q))) - return ret; - back = q.cdsc_format; /* local copy */ - sanitize_format(&q.cdsc_absaddr, &back, requested); - sanitize_format(&q.cdsc_reladdr, &q.cdsc_format, requested); - IOCTL_OUT(arg, struct cdrom_subchnl, q); - /* cdinfo(CD_DO_IOCTL, "CDROMSUBCHNL successful\n"); */ - return 0; - } - case CDROMREADTOCHDR: { - int ret; - struct cdrom_tochdr header; - /* comment out the cdinfo calls here because they - fill up the sys logs when CD players poll the drive*/ - /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCHDR\n"); */ - IOCTL_IN(arg, struct cdrom_tochdr, header); - if ((ret=cdo->audio_ioctl(cdi, cmd, &header))) - return ret; - IOCTL_OUT(arg, struct cdrom_tochdr, header); - /* cdinfo(CD_DO_IOCTL, "CDROMREADTOCHDR successful\n"); */ - return 0; - } - case CDROMREADTOCENTRY: { - int ret; - struct cdrom_tocentry entry; - u_char requested_format; - /* comment out the cdinfo calls here because they - fill up the sys logs when CD players poll the drive*/ - /* cdinfo(CD_DO_IOCTL, "entering CDROMREADTOCENTRY\n"); */ - IOCTL_IN(arg, struct cdrom_tocentry, entry); - requested_format = entry.cdte_format; - if (!((requested_format == CDROM_MSF) || - (requested_format == CDROM_LBA))) - return -EINVAL; - /* make interface to low-level uniform */ - entry.cdte_format = CDROM_MSF; - if ((ret=cdo->audio_ioctl(cdi, cmd, &entry))) - return ret; - sanitize_format(&entry.cdte_addr, - &entry.cdte_format, requested_format); - IOCTL_OUT(arg, struct cdrom_tocentry, entry); - /* cdinfo(CD_DO_IOCTL, "CDROMREADTOCENTRY successful\n"); */ - return 0; - } - case CDROMPLAYMSF: { - int ret; - struct cdrom_msf msf; - cdinfo(CD_DO_IOCTL, "entering CDROMPLAYMSF\n"); - IOCTL_IN(arg, struct cdrom_msf, msf); - CHECKAUDIO; - return cdo->audio_ioctl(cdi, cmd, &msf); - } - case CDROMPLAYTRKIND: { - int ret; - struct cdrom_ti ti; - cdinfo(CD_DO_IOCTL, "entering CDROMPLAYTRKIND\n"); - IOCTL_IN(arg, struct cdrom_ti, ti); - CHECKAUDIO; - return cdo->audio_ioctl(cdi, cmd, &ti); - } - case CDROMVOLCTRL: { - struct cdrom_volctrl volume; - cdinfo(CD_DO_IOCTL, "entering CDROMVOLCTRL\n"); - IOCTL_IN(arg, struct cdrom_volctrl, volume); - return cdo->audio_ioctl(cdi, cmd, &volume); - } - case CDROMVOLREAD: { - int ret; - struct cdrom_volctrl volume; - cdinfo(CD_DO_IOCTL, "entering CDROMVOLREAD\n"); - if ((ret=cdo->audio_ioctl(cdi, cmd, &volume))) - return ret; - IOCTL_OUT(arg, struct cdrom_volctrl, volume); + case CDROMREADRAW: + blocksize = CD_FRAMESIZE_RAW; + break; + case CDROMREADMODE1: + blocksize = CD_FRAMESIZE; + format = 2; + break; + case CDROMREADMODE2: + blocksize = CD_FRAMESIZE_RAW0; + break; + } + IOCTL_IN(arg, struct cdrom_msf, msf); + lba = msf_to_lba(msf.cdmsf_min0,msf.cdmsf_sec0,msf.cdmsf_frame0); + /* FIXME: we need upper bound checking, too!! */ + if (lba < 0) + return -EINVAL; + cgc.buffer = (char *) kmalloc(blocksize, GFP_KERNEL); + if (cgc.buffer == NULL) + return -ENOMEM; + ret = cdrom_read_block(cdi, &cgc, lba, 1, format, blocksize); + if (!ret) + if (copy_to_user((char *)arg, cgc.buffer, blocksize)) + ret = -EFAULT; + kfree(cgc.buffer); + return ret; + } + case CDROMREADAUDIO: { + struct cdrom_read_audio ra; + int lba, frames; + + IOCTL_IN(arg, struct cdrom_read_audio, ra); + + if (ra.addr_format == CDROM_MSF) + lba = msf_to_lba(ra.addr.msf.minute, + ra.addr.msf.second, + ra.addr.msf.frame); + else if (ra.addr_format == CDROM_LBA) + lba = ra.addr.lba; + else + return -EINVAL; + + /* FIXME: we need upper bound checking, too!! */ + if (lba < 0) + return -EINVAL; + + /* do max 8 frames at the time */ + frames = ra.nframes > 8 ? 8 : ra.nframes; + + if ((cgc.buffer = (char *) kmalloc(CD_FRAMESIZE_RAW * frames, + GFP_KERNEL)) == NULL) + return -ENOMEM; + + if (!access_ok(VERIFY_WRITE, ra.buf, ra.nframes*CD_FRAMESIZE_RAW)) { + kfree(cgc.buffer); + return -EFAULT; + } + + while (ra.nframes > 0) { + ret = cdrom_read_block(cdi, &cgc, lba, frames, 1, + CD_FRAMESIZE_RAW); + if (ret) break; + __copy_to_user(ra.buf, cgc.buffer, + CD_FRAMESIZE_RAW * frames); + ra.buf += (CD_FRAMESIZE_RAW * frames); + ra.nframes -= frames; + lba += frames; + } + kfree(cgc.buffer); + return ret; + } + case CDROMSUBCHNL: { + struct cdrom_subchnl q; + u_char requested, back; + IOCTL_IN(arg, struct cdrom_subchnl, q); + requested = q.cdsc_format; + if (!((requested == CDROM_MSF) || + (requested == CDROM_LBA))) + return -EINVAL; + q.cdsc_format = CDROM_MSF; + if ((ret = cdrom_read_subchannel(cdi, &q, 0))) + return ret; + back = q.cdsc_format; /* local copy */ + sanitize_format(&q.cdsc_absaddr, &back, requested); + sanitize_format(&q.cdsc_reladdr, &q.cdsc_format, requested); + IOCTL_OUT(arg, struct cdrom_subchnl, q); + /* cdinfo(CD_DO_IOCTL, "CDROMSUBCHNL successful\n"); */ + return 0; + } + case CDROMPLAYTRKIND: { + struct cdrom_ti ti; + struct cdrom_tocentry entry; + struct cdrom_tochdr tochdr; + + cdinfo(CD_DO_IOCTL, "entering CDROMPLAYTRKIND\n"); + IOCTL_IN(arg, struct cdrom_ti, ti); + entry.cdte_format = CDROM_MSF; + + /* get toc entry for start and end track */ + if (cdo->audio_ioctl(cdi, CDROMREADTOCHDR, &tochdr)) + return -EINVAL; + if ((entry.cdte_track = ti.cdti_trk0) > tochdr.cdth_trk1) + return -EINVAL; + if (cdo->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry)) + return -EINVAL; + + cgc.cmd[3] = entry.cdte_addr.msf.minute; + cgc.cmd[4] = entry.cdte_addr.msf.second; + cgc.cmd[5] = entry.cdte_addr.msf.frame; + + entry.cdte_track = ti.cdti_trk1 + 1; + if (entry.cdte_track > tochdr.cdth_trk1) + entry.cdte_track = CDROM_LEADOUT; + + if (cdo->audio_ioctl(cdi, CDROMREADTOCENTRY, &entry)) + return -EINVAL; + + cgc.cmd[6] = entry.cdte_addr.msf.minute; + cgc.cmd[7] = entry.cdte_addr.msf.second; + cgc.cmd[8] = entry.cdte_addr.msf.frame; + cgc.cmd[0] = GPCMD_PLAY_AUDIO_MSF; + return cdo->generic_packet(cdi, &cgc); + } + case CDROMPLAYMSF: { + struct cdrom_msf msf; + cdinfo(CD_DO_IOCTL, "entering CDROMPLAYMSF\n"); + IOCTL_IN(arg, struct cdrom_msf, msf); + cgc.cmd[0] = GPCMD_PLAY_AUDIO_MSF; + cgc.cmd[3] = msf.cdmsf_min0; + cgc.cmd[4] = msf.cdmsf_sec0; + cgc.cmd[5] = msf.cdmsf_frame0; + cgc.cmd[6] = msf.cdmsf_min1; + cgc.cmd[7] = msf.cdmsf_sec1; + cgc.cmd[8] = msf.cdmsf_frame1; + return cdo->generic_packet(cdi, &cgc); + } + case CDROMPLAYBLK: { + struct cdrom_blk blk; + cdinfo(CD_DO_IOCTL, "entering CDROMPLAYBLK\n"); + IOCTL_IN(arg, struct cdrom_blk, blk); + cgc.cmd[0] = GPCMD_PLAY_AUDIO_10; + cgc.cmd[2] = (blk.from >> 24) & 0xff; + cgc.cmd[3] = (blk.from >> 16) & 0xff; + cgc.cmd[4] = (blk.from >> 8) & 0xff; + cgc.cmd[5] = blk.from & 0xff; + cgc.cmd[7] = (blk.len >> 8) & 0xff; + cgc.cmd[8] = blk.len & 0xff; + return cdo->generic_packet(cdi, &cgc); + } + case CDROMVOLCTRL: + case CDROMVOLREAD: { + struct cdrom_volctrl volctrl; + char mask[32]; + unsigned short offset; + cdinfo(CD_DO_IOCTL, "entering CDROMVOLUME\n"); + + IOCTL_IN(arg, struct cdrom_volctrl, volctrl); + + cgc.buffer = buffer; + cgc.buflen = 24; + if ((ret = cdrom_mode_sense(cdi, &cgc, GPMODE_AUDIO_CTL_PAGE, 0))) + return ret; + + /* some drives have longer pages, adjust and reread. */ + if (buffer[1] > cgc.buflen) { + cgc.buflen = buffer[1] + 2; + if ((ret = cdrom_mode_sense(cdi, &cgc, + GPMODE_AUDIO_CTL_PAGE, 0))) + return ret; + } + + /* get the offset from the length of the page. length + is measure from byte 2 an on, thus the 14. */ + offset = buffer[1] - 14; + + /* now we have the current volume settings. if it was only + a CDROMVOLREAD, return these values */ + if (cmd == CDROMVOLREAD) { + volctrl.channel0 = buffer[offset+9]; + volctrl.channel1 = buffer[offset+11]; + volctrl.channel2 = buffer[offset+13]; + volctrl.channel3 = buffer[offset+15]; + IOCTL_OUT(arg, struct cdrom_volctrl, volctrl); return 0; + } + + /* get the volume mask */ + cgc.buffer = mask; + if ((ret = cdrom_mode_sense(cdi, &cgc, + GPMODE_AUDIO_CTL_PAGE, 1))) + return ret; + + buffer[offset+9] = volctrl.channel0 & mask[offset+9]; + buffer[offset+11] = volctrl.channel1 & mask[offset+11]; + buffer[offset+13] = volctrl.channel2 & mask[offset+13]; + buffer[offset+15] = volctrl.channel3 & mask[offset+15]; + + /* set volume */ + cgc.buffer = buffer; + return cdrom_mode_select(cdi, &cgc); + } + + case CDROMSTART: + case CDROMSTOP: { + cdinfo(CD_DO_IOCTL, "entering CDROMSTART/CDROMSTOP\n"); + cgc.cmd[0] = GPCMD_START_STOP_UNIT; + cgc.cmd[1] = 1; + cgc.cmd[4] = (cmd == CDROMSTART) ? 1 : 0; + return cdo->generic_packet(cdi, &cgc); + } + + case CDROMPAUSE: + case CDROMRESUME: { + cdinfo(CD_DO_IOCTL, "entering CDROMPAUSE/CDROMRESUME\n"); + cgc.cmd[0] = GPCMD_PAUSE_RESUME; + cgc.cmd[8] = (cmd == CDROMRESUME) ? 1 : 0; + return cdo->generic_packet(cdi, &cgc); + } + + case DVD_READ_STRUCT: { + dvd_struct *s; + int size = sizeof(dvd_struct); + if (!CDROM_CAN(CDC_DVD)) + return -ENOSYS; + if ((s = (dvd_struct *) kmalloc(size, GFP_KERNEL)) == NULL) + return -ENOMEM; + cdinfo(CD_DO_IOCTL, "entering DVD_READ_STRUCT\n"); + if (copy_from_user(s, (dvd_struct *)arg, size)) { + kfree(s); + return -EFAULT; + } + if ((ret = dvd_read_struct(cdi, s))) { + kfree(s); + return ret; + } + if (copy_to_user((dvd_struct *)arg, s, size)) + ret = -EFAULT; + kfree(s); + return ret; + } + + case DVD_AUTH: { + dvd_authinfo ai; + if (!CDROM_CAN(CDC_DVD)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "entering DVD_AUTH\n"); + IOCTL_IN(arg, dvd_authinfo, ai); + if ((ret = dvd_do_auth (cdi, &ai))) + return ret; + IOCTL_OUT(arg, dvd_authinfo, ai); + return 0; + } + + case CDROM_SEND_PACKET: { + __u8 *userbuf, copy = 0; + struct request_sense *sense; + if (!CDROM_CAN(CDC_GENERIC_PACKET)) + return -ENOSYS; + cdinfo(CD_DO_IOCTL, "entering CDROM_SEND_PACKET\n"); + IOCTL_IN(arg, struct cdrom_generic_command, cgc); + copy = !!cgc.buflen; + userbuf = cgc.buffer; + cgc.buffer = NULL; + sense = cgc.sense; + if (userbuf != NULL && copy) { + /* usually commands just copy data one way, i.e. + * we send a buffer to the drive and the command + * specifies whether the drive will read or + * write to that buffer. usually the buffers + * are very small, so we don't loose that much + * by doing a redundant copy each time. */ + if (!access_ok(VERIFY_WRITE, userbuf, cgc.buflen)) { + printk("can't get write perms\n"); + return -EFAULT; } - case CDROMSTART: - case CDROMSTOP: - case CDROMPAUSE: - case CDROMRESUME: { - int ret; - cdinfo(CD_DO_IOCTL, "doing audio ioctl (start/stop/pause/resume)\n"); - CHECKAUDIO; - return cdo->audio_ioctl(cdi, cmd, NULL); + if (!access_ok(VERIFY_READ, userbuf, cgc.buflen)) { + printk("can't get read perms\n"); + return -EFAULT; } - } /* switch */ + } + /* reasonable limits */ + if (cgc.buflen < 0 || cgc.buflen > 131072) { + printk("invalid size given\n"); + return -EINVAL; + } + if (copy) { + cgc.buffer = kmalloc(cgc.buflen, GFP_KERNEL); + if (cgc.buffer == NULL) + return -ENOMEM; + __copy_from_user(cgc.buffer, userbuf, cgc.buflen); + } + ret = cdo->generic_packet(cdi, &cgc); + if (copy && !ret) + __copy_to_user(userbuf, cgc.buffer, cgc.buflen); + /* copy back sense data */ + if (sense != NULL) + if (copy_to_user(sense, cgc.sense, sizeof(struct request_sense))) + ret = -EFAULT; + kfree(cgc.buffer); + return ret; + } + case CDROM_NEXT_WRITABLE: { + long next = 0; + cdinfo(CD_DO_IOCTL, "entering CDROM_NEXT_WRITABLE\n"); + if ((ret = cdrom_get_next_writable(dev, &next))) + return ret; + IOCTL_OUT(arg, long, next); + return 0; + } + case CDROM_LAST_WRITTEN: { + long last = 0; + cdinfo(CD_DO_IOCTL, "entering CDROM_LAST_WRITTEN\n"); + if ((ret = cdrom_get_last_written(dev, &last))) + return ret; + IOCTL_OUT(arg, long, last); + return 0; + } + } /* switch */ + + return -ENOTTY; +} + +static int cdrom_get_track_info(kdev_t dev, __u16 track, __u8 type, + track_information *ti) +{ + struct cdrom_device_info *cdi = cdrom_find_device(dev); + struct cdrom_device_ops *cdo = cdi->ops; + struct cdrom_generic_command cgc; + int ret; + + init_cdrom_command(&cgc, ti, 8); + cgc.cmd[0] = GPCMD_READ_TRACK_RZONE_INFO; + cgc.cmd[1] = type & 3; + cgc.cmd[4] = (track & 0xff00) >> 8; + cgc.cmd[5] = track & 0xff; + cgc.cmd[8] = 8; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + cgc.cmd[8] = cgc.buflen = be16_to_cpu(ti->track_information_length) + + sizeof(ti->track_information_length); + return cdo->generic_packet(cdi, &cgc); +} + +static int cdrom_get_disc_info(kdev_t dev, disc_information *di) +{ + struct cdrom_device_info *cdi = cdrom_find_device(dev); + struct cdrom_device_ops *cdo = cdi->ops; + struct cdrom_generic_command cgc; + int ret; + + /* set up command and get the disc info */ + init_cdrom_command(&cgc, di, sizeof(*di)); + cgc.cmd[0] = GPCMD_READ_DISC_INFO; + cgc.cmd[8] = cgc.buflen = 2; + + if ((ret = cdo->generic_packet(cdi, &cgc))) + return ret; + + /* not all drives have the same disc_info length, so requeue + * packet with the length the drive tells us it can supply + */ + cgc.buflen = be16_to_cpu(di->disc_information_length) + + sizeof(di->disc_information_length); + + if (cgc.buflen > sizeof(disc_information)) + cgc.buflen = sizeof(disc_information); + + cgc.cmd[8] = cgc.buflen; + + return cdo->generic_packet(cdi, &cgc); +} + + +/* return the last written block on the CD-R media. this is for the udf + file system. */ +int cdrom_get_last_written(kdev_t dev, long *last_written) +{ + struct cdrom_device_info *cdi = cdrom_find_device(dev); + struct cdrom_tocentry toc; + disc_information di; + track_information ti; + __u32 last_track; + int ret = -1; + + if (!CDROM_CAN(CDC_GENERIC_PACKET)) + goto use_toc; + + if ((ret = cdrom_get_disc_info(dev, &di))) + goto use_toc; + + last_track = (di.last_track_msb << 8) | di.last_track_lsb; + if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti))) + goto use_toc; + + /* if this track is blank, try the previous. */ + if (ti.blank) { + last_track--; + if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti))) + goto use_toc; } - /* device specific ioctls? */ - if (!(cdo->capability & CDC_IOCTLS)) - return -ENOSYS; - else - return cdo->dev_ioctl(cdi, cmd, arg); + /* if last recorded field is valid, return it. */ + if (ti.lra_v) { + *last_written = be32_to_cpu(ti.last_rec_address); + } else { + /* make it up instead */ + *last_written = be32_to_cpu(ti.track_start) + + be32_to_cpu(ti.track_size); + if (ti.free_blocks) + *last_written -= (be32_to_cpu(ti.free_blocks) + 7); + } + return 0; + + /* this is where we end up if the drive either can't do a + GPCMD_READ_DISC_INFO or GPCMD_READ_TRACK_RZONE_INFO or if + it fails. then we return the toc contents. */ +use_toc: + toc.cdte_format = CDROM_MSF; + toc.cdte_track = CDROM_LEADOUT; + if (cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc)) + return ret; + sanitize_format(&toc.cdte_addr, &toc.cdte_format, CDROM_LBA); + *last_written = toc.cdte_addr.lba; + return 0; } +/* return the next writable block. also for udf file system. */ +int cdrom_get_next_writable(kdev_t dev, long *next_writable) +{ + struct cdrom_device_info *cdi = cdrom_find_device(dev); + disc_information di; + track_information ti; + __u16 last_track; + int ret = -1; + + if (!CDROM_CAN(CDC_GENERIC_PACKET)) + goto use_last_written; + + if ((ret = cdrom_get_disc_info(dev, &di))) + goto use_last_written; + + last_track = (di.last_track_msb << 8) | di.last_track_lsb; + if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti))) + goto use_last_written; + + /* if this track is blank, try the previous. */ + if (ti.blank) { + last_track--; + if ((ret = cdrom_get_track_info(dev, last_track, 1, &ti))) + goto use_last_written; + } + + /* if next recordable address field is valid, use it. */ + if (ti.nwa_v) + *next_writable = be32_to_cpu(ti.next_writable); + else + goto use_last_written; + + return 0; + +use_last_written: + if ((ret = cdrom_get_last_written(dev, next_writable))) { + *next_writable = 0; + return ret; + } else { + *next_writable += 7; + return 0; + } +} + +EXPORT_SYMBOL(cdrom_get_next_writable); +EXPORT_SYMBOL(cdrom_get_last_written); EXPORT_SYMBOL(cdrom_count_tracks); EXPORT_SYMBOL(register_cdrom); EXPORT_SYMBOL(unregister_cdrom); EXPORT_SYMBOL(cdrom_fops); +EXPORT_SYMBOL(cdrom_number_of_slots); +EXPORT_SYMBOL(cdrom_select_disc); +EXPORT_SYMBOL(cdrom_mode_select); +EXPORT_SYMBOL(cdrom_mode_sense); +EXPORT_SYMBOL(init_cdrom_command); #ifdef CONFIG_SYSCTL #define CDROM_STR_SIZE 1000 -static char cdrom_drive_info[CDROM_STR_SIZE]="info\n"; +struct cdrom_sysctl_settings { + char info[CDROM_STR_SIZE]; /* general info */ + int autoclose; /* close tray upon mount, etc */ + int autoeject; /* eject on umount */ + int debug; /* turn on debugging messages */ + int lock; /* lock the door on device open */ + int check; /* check media type */ +} cdrom_sysctl_settings; int cdrom_sysctl_info(ctl_table *ctl, int write, struct file * filp, void *buffer, size_t *lenp) { int pos; struct cdrom_device_info *cdi; - char *info = cdrom_drive_info; + char *info = cdrom_sysctl_settings.info; if (!*lenp || (filp->f_pos && !write)) { *lenp = 0; return 0; } - pos = sprintf(cdrom_drive_info, "CD-ROM information, " VERSION "\n"); + pos = sprintf(info, "CD-ROM information, " VERSION "\n"); - pos += sprintf(cdrom_drive_info+pos, "\ndrive name:\t"); + pos += sprintf(info+pos, "\ndrive name:\t"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) pos += sprintf(info+pos, "\t%s", cdi->name); - pos += sprintf(cdrom_drive_info+pos, "\ndrive speed:\t"); + pos += sprintf(info+pos, "\ndrive speed:\t"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) pos += sprintf(info+pos, "\t%d", cdi->speed); - pos += sprintf(cdrom_drive_info+pos, "\ndrive # of slots:"); + pos += sprintf(info+pos, "\ndrive # of slots:"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) pos += sprintf(info+pos, "\t%d", cdi->capacity); - pos += sprintf(cdrom_drive_info+pos, "\nCan close tray:\t"); + pos += sprintf(info+pos, "\nCan close tray:\t"); + for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_CLOSE_TRAY) != 0); + + pos += sprintf(info+pos, "\nCan open tray:\t"); + for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_OPEN_TRAY) != 0); + + pos += sprintf(info+pos, "\nCan lock tray:\t"); + for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_LOCK) != 0); + + pos += sprintf(info+pos, "\nCan change speed:"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_CLOSE_TRAY)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_SELECT_SPEED) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan open tray:\t"); + pos += sprintf(info+pos, "\nCan select disk:"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_OPEN_TRAY)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_SELECT_DISC) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan lock tray:\t"); + pos += sprintf(info+pos, "\nCan read multisession:"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_LOCK)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_MULTI_SESSION) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan change speed:"); + pos += sprintf(info+pos, "\nCan read MCN:\t"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_SELECT_SPEED)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_MCN) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan select disk:"); + pos += sprintf(info+pos, "\nReports media changed:"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_SELECT_DISC)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_MEDIA_CHANGED) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan read multisession:"); + pos += sprintf(info+pos, "\nCan play audio:\t"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_MULTI_SESSION)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_PLAY_AUDIO) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan read MCN:\t"); + pos += sprintf(info+pos, "\nCan write CD-R:\t"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_MCN)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_CD_R) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nReports media changed:"); + pos += sprintf(info+pos, "\nCan write CD-RW:"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_MEDIA_CHANGED)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_CD_RW) != 0); - pos += sprintf(cdrom_drive_info+pos, "\nCan play audio:\t"); + pos += sprintf(info+pos, "\nCan read DVD:\t"); for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) - pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_PLAY_AUDIO)!=0); + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_DVD) != 0); - strcpy(info+pos,"\n\n"); - pos += 3; - if (*lenp > pos) - *lenp = pos; + pos += sprintf(info+pos, "\nCan write DVD-R:"); + for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_DVD_R) != 0); + + pos += sprintf(info+pos, "\nCan write DVD-RAM:"); + for (cdi=topCdromPtr;cdi!=NULL;cdi=cdi->next) + pos += sprintf(info+pos, "\t%d", CDROM_CAN(CDC_DVD_RAM) != 0); + + strcpy(info+pos,"\n\n"); return proc_dostring(ctl, write, filp, buffer, lenp); } +/* Unfortunately, per device settings are not implemented through + procfs/sysctl yet. When they are, this will naturally disappear. For now + just update all drives. Later this will become the template on which + new registered drives will be based. */ +void cdrom_update_settings(void) +{ + struct cdrom_device_info *cdi; + + for (cdi = topCdromPtr; cdi != NULL; cdi = cdi->next) { + if (autoclose && CDROM_CAN(CDC_CLOSE_TRAY)) + cdi->options |= CDO_AUTO_CLOSE; + else if (!autoclose) + cdi->options &= ~CDO_AUTO_CLOSE; + if (autoeject && CDROM_CAN(CDC_OPEN_TRAY)) + cdi->options |= CDO_AUTO_EJECT; + else if (!autoeject) + cdi->options &= ~CDO_AUTO_EJECT; + if (lockdoor && CDROM_CAN(CDC_LOCK)) + cdi->options |= CDO_LOCK; + else if (!lockdoor) + cdi->options &= ~CDO_LOCK; + if (check_media_type) + cdi->options |= CDO_CHECK_TYPE; + else + cdi->options &= ~CDO_CHECK_TYPE; + } +} + +static int cdrom_sysctl_handler(ctl_table *ctl, int write, struct file * filp, + void *buffer, size_t *lenp) +{ + int *valp = ctl->data; + int val = *valp; + int ret; + + ret = proc_dointvec(ctl, write, filp, buffer, lenp); + + if (write && *valp != val) { + + /* we only care for 1 or 0. */ + if (*valp) + *valp = 1; + else + *valp = 0; + + switch (ctl->ctl_name) { + case DEV_CDROM_AUTOCLOSE: { + if (valp == &cdrom_sysctl_settings.autoclose) + autoclose = cdrom_sysctl_settings.autoclose; + break; + } + case DEV_CDROM_AUTOEJECT: { + if (valp == &cdrom_sysctl_settings.autoeject) + autoeject = cdrom_sysctl_settings.autoeject; + break; + } + case DEV_CDROM_DEBUG: { + if (valp == &cdrom_sysctl_settings.debug) + debug = cdrom_sysctl_settings.debug; + break; + } + case DEV_CDROM_LOCK: { + if (valp == &cdrom_sysctl_settings.lock) + lockdoor = cdrom_sysctl_settings.lock; + break; + } + case DEV_CDROM_CHECK_MEDIA: { + if (valp == &cdrom_sysctl_settings.check) + check_media_type = cdrom_sysctl_settings.check; + break; + } + } + /* update the option flags according to the changes. we + don't have per device options through sysctl yet, + but we will have and then this will disappear. */ + cdrom_update_settings(); + } + + return ret; +} + /* Place files in /proc/sys/dev/cdrom */ ctl_table cdrom_table[] = { - {DEV_CDROM_INFO, "info", &cdrom_drive_info, + {DEV_CDROM_INFO, "info", &cdrom_sysctl_settings.info, CDROM_STR_SIZE, 0444, NULL, &cdrom_sysctl_info}, + {DEV_CDROM_AUTOCLOSE, "autoclose", &cdrom_sysctl_settings.autoclose, + sizeof(int), 0644, NULL, &cdrom_sysctl_handler }, + {DEV_CDROM_AUTOEJECT, "autoeject", &cdrom_sysctl_settings.autoeject, + sizeof(int), 0644, NULL, &cdrom_sysctl_handler }, + {DEV_CDROM_DEBUG, "debug", &cdrom_sysctl_settings.debug, + sizeof(int), 0644, NULL, &cdrom_sysctl_handler }, + {DEV_CDROM_LOCK, "lock", &cdrom_sysctl_settings.lock, + sizeof(int), 0644, NULL, &cdrom_sysctl_handler }, + {DEV_CDROM_CHECK_MEDIA, "check_media", &cdrom_sysctl_settings.check, + sizeof(int), 0644, NULL, &cdrom_sysctl_handler }, {0} }; @@ -1200,24 +2521,31 @@ cdrom_sysctl_header = register_sysctl_table(cdrom_root_table, 1); cdrom_root_table->child->de->fill_inode = &cdrom_procfs_modcount; + /* set the defaults */ + cdrom_sysctl_settings.autoclose = autoclose; + cdrom_sysctl_settings.autoeject = autoeject; + cdrom_sysctl_settings.debug = debug; + cdrom_sysctl_settings.lock = lockdoor; + cdrom_sysctl_settings.check = check_media_type; + initialized = 1; } +#endif /* endif CONFIG_SYSCTL */ + #ifdef MODULE static void cdrom_sysctl_unregister(void) { +#ifdef CONFIG_SYSCTL unregister_sysctl_table(cdrom_sysctl_header); +#endif } -#endif /* endif MODULE */ -#endif /* endif CONFIG_SYSCTL */ - -#ifdef MODULE int init_module(void) { #ifdef CONFIG_SYSCTL cdrom_sysctl_register(); -#endif /* CONFIG_SYSCTL */ +#endif return 0; } @@ -1228,14 +2556,5 @@ cdrom_sysctl_unregister(); #endif /* CONFIG_SYSCTL */ } - #endif /* endif MODULE */ - - -/* - * Local variables: - * comment-column: 40 - * compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -m486 -DCPU=486 -DMODULE -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -c -o cdrom.o cdrom.c" - * End: - */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/Config.in linux.16p3/drivers/char/Config.in --- linux.vanilla/drivers/char/Config.in Fri Apr 21 12:45:51 2000 +++ linux.16p3/drivers/char/Config.in Mon May 1 01:09:00 2000 @@ -109,6 +109,7 @@ tristate ' Software Watchdog' CONFIG_SOFT_WATCHDOG tristate ' Berkshire Products PC Watchdog' CONFIG_PCWATCHDOG tristate ' Acquire SBC Watchdog Timer' CONFIG_ACQUIRE_WDT + tristate ' SBC-60XX Watchdog Timer' CONFIG_60XX_WDT tristate ' Mixcom Watchdog' CONFIG_MIXCOMWD endmenu fi diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/Makefile linux.16p3/drivers/char/Makefile --- linux.vanilla/drivers/char/Makefile Fri Apr 21 12:46:04 2000 +++ linux.16p3/drivers/char/Makefile Mon May 1 01:09:00 2000 @@ -299,6 +299,14 @@ endif endif +ifeq ($(CONFIG_60XX_WDT),y) +L_OBJS += sbc60xxwdt.o +else + ifeq ($(CONFIG_60XX_WDT),m) + M_OBJS += sbc60xxwdt.o + endif +endif + ifeq ($(CONFIG_MIXCOMWD),y) L_OBJS += mixcomwd.o else diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/console.c linux.16p3/drivers/char/console.c --- linux.vanilla/drivers/char/console.c Fri Apr 21 12:45:51 2000 +++ linux.16p3/drivers/char/console.c Mon May 1 00:38:11 2000 @@ -684,7 +684,7 @@ else { unsigned short *p = (unsigned short *) kmalloc(ss, GFP_USER); if (!p) { - for (i = 0; i< currcons; i++) + for (i = first; i< currcons; i++) if (newscreens[i]) kfree_s(newscreens[i], ss); return -ENOMEM; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/cpia.c linux.16p3/drivers/char/cpia.c --- linux.vanilla/drivers/char/cpia.c Fri Apr 21 12:45:51 2000 +++ linux.16p3/drivers/char/cpia.c Mon May 1 01:00:08 2000 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -435,6 +436,8 @@ * or we need to get more sophisticated. */ out += sprintf(out, "read-only\n-----------------------\n"); + out += sprintf(out, "V4L Driver version: %d.%d.%d\n", + CPIA_MAJ_VER, CPIA_MIN_VER, CPIA_PATCH_VER); out += sprintf(out, "CPIA Version: %d.%02d (%d.%d)\n", cam->params.version.firmwareVersion, cam->params.version.firmwareRevision, @@ -537,13 +540,13 @@ /* 1-02 firmware limits gain to 2 */ sprintf(tmpstr, "%8d %8d", 1, 2); } else { - sprintf(tmpstr, "1,2,4,8"); + sprintf(tmpstr, "%8d %8d", 1, 8); } if(cam->params.exposure.gainMode == 0) { out += sprintf(out, "max_gain: unknown %18s" - " %8d\n", tmpstr, 2); + " %8d powers of 2\n", tmpstr, 2); } else { - out += sprintf(out, "max_gain: %8d %18s %8d\n", + out += sprintf(out, "max_gain: %8d %18s %8d powers of 2\n", 1<<(cam->params.exposure.gainMode-1), tmpstr, 2); } switch(cam->params.exposure.expMode) { @@ -1423,10 +1426,11 @@ { char name[7]; - if(cam->proc_entry == NULL) return; + if(cam == NULL || cam->proc_entry == NULL) return; sprintf(name, "video%d", cam->vdev.minor); remove_proc_entry(name, cpia_proc_root); + cam->proc_entry = NULL; } static void proc_cpia_create(void) @@ -1706,6 +1710,10 @@ retval = cam->ops->transferCmd(cam->lowlevel_data, cmd, data); if(retval) { LOG("%x - failed\n", command); + if (command == CPIA_COMMAND_GetColourParams || + command == CPIA_COMMAND_GetColourBalance || + command == CPIA_COMMAND_GetExposure) + up(&cam->param_lock); } else { switch(command) { case CPIA_COMMAND_GetCPIAVersion: @@ -1895,6 +1903,7 @@ static int skipcount(int count, int fmt) { switch(fmt) { case VIDEO_PALETTE_GREY: + return count; case VIDEO_PALETTE_RGB555: case VIDEO_PALETTE_RGB565: case VIDEO_PALETTE_YUV422: @@ -2313,6 +2322,7 @@ return 0; } printstatus(cam); + mdelay(100); /* windows driver does it too */ return -1; } @@ -2530,7 +2540,8 @@ } /* Set ownership of /proc/cpia/videoX to current user */ - cam->proc_entry->uid = current->uid; + if(cam->proc_entry != NULL) + cam->proc_entry->uid = current->uid; /* set mark for loading first frame uncompressed */ cam->first_frame = 1; @@ -2585,7 +2596,8 @@ } /* Return ownership of /proc/cpia/videoX to root */ - cam->proc_entry->uid = 0; + if(cam->proc_entry != NULL) + cam->proc_entry->uid = 0; /* save camera state for later open (developers guide ch 3.5.3) */ save_camera_state(cam); @@ -3251,7 +3263,7 @@ unlock_kernel(); /* FIXME */ -#if 1 +#if 0 cam = camera[i]; /* open cpia */ if (cam->ops->open(cam->index, &cam->lowlevel_data)) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/cyclades.c linux.16p3/drivers/char/cyclades.c --- linux.vanilla/drivers/char/cyclades.c Fri Apr 21 12:45:51 2000 +++ linux.16p3/drivers/char/cyclades.c Mon May 15 12:03:36 2000 @@ -1,12 +1,12 @@ #undef BLOCKMOVE #define Z_WAKE static char rcsid[] = -"$Revision: 2.3.2.5 $$Date: 2000/01/19 14:35:33 $"; +"$Revision: 2.3.2.6 $$Date: 2000/05/05 13:56:05 $"; /* * linux/drivers/char/cyclades.c * - * This file contains the driver for the Cyclades Cyclom-Y multiport + * This file contains the driver for the Cyclades async multiport * serial boards. * * Initially written by Randolph Bentson . @@ -23,14 +23,17 @@ * * This version supports shared IRQ's (only for PCI boards). * - * This module exports the following rs232 io functions: - * int cy_init(void); - * int cy_open(struct tty_struct *tty, struct file *filp); - * and the following functions for modularization. - * int init_module(void); - * void cleanup_module(void); - * * $Log: cyclades.c,v $ + * Revision 2.3.2.6 2000/05/05 13:56:05 ivan + * Driver now reports physical instead of virtual memory addresses. + * Masks were added to some Cyclades-Z read accesses. + * Implemented workaround for PLX9050 bug that would cause a system lockup + * in certain systems, depending on the MMIO addresses allocated to the + * board. + * Changed the Tx interrupt programming in the CD1400 chips to boost up + * performance (Cyclom-Y only). + * Did some code "housekeeping". + * * Revision 2.3.2.5 2000/01/19 14:35:33 ivan * Fixed bug in cy_set_termios on CRTSCTS flag turnoff. * @@ -699,7 +702,7 @@ #ifndef SERIAL_XMIT_SIZE #define SERIAL_XMIT_SIZE (MIN(PAGE_SIZE, 4096)) #endif -#define WAKEUP_CHARS (SERIAL_XMIT_SIZE-256) +#define WAKEUP_CHARS 256 #define STD_COM_FLAGS (0) @@ -710,7 +713,7 @@ static struct tty_driver cy_serial_driver, cy_callout_driver; static int serial_refcount; -#ifndef CONFIG_COBALT_27 +#if defined(__i386__) || defined(__alpha__) /* This is the address lookup table. The driver will probe for Cyclom-Y/ISA boards at all addresses in here. If you want the driver to probe addresses at a different address, add it to @@ -741,7 +744,7 @@ MODULE_PARM(irq, "1-" __MODULE_STRING(NR_CARDS) "i"); #endif -#endif /* CONFIG_COBALT_27 */ +#endif /* (__i386__) || (__alpha__) */ /* This is the per-card data structure containing address, irq, number of channels, etc. This driver supports a maximum of NR_CARDS cards. @@ -865,12 +868,9 @@ static void cy_start(struct tty_struct *); static void set_line_char(struct cyclades_port *); static int cyz_issue_cmd(struct cyclades_card *, uclong, ucchar, uclong); -#ifndef CONFIG_COBALT_27 +#if defined(__i386__) || defined(__alpha__) static unsigned detect_isa_irq (volatile ucchar *); -#endif /* CONFIG_COBALT_27 */ -#ifdef CYCLOM_SHOW_STATUS -static void show_status(int); -#endif +#endif /* (__i386__) || (__alpha__) */ static int cyclades_get_proc_info(char *, char **, off_t , int , int *, void *); @@ -1011,7 +1011,7 @@ (tty->ldisc.write_wakeup)(tty); } wake_up_interruptible(&tty->write_wait); - wake_up_interruptible(&tty->poll_wait); + wake_up_interruptible(&tty->poll_wait); } #ifdef Z_WAKE if (test_and_clear_bit(Cy_EVENT_SHUTDOWN_WAKEUP, &info->event)) { @@ -1053,7 +1053,8 @@ return(0); } /* cyy_issue_cmd */ -#ifndef CONFIG_COBALT_27 /* ISA interrupt detection code */ +#if defined(__i386__) || defined(__alpha__) +/* ISA interrupt detection code */ static unsigned detect_isa_irq (volatile ucchar *address) { @@ -1080,7 +1081,7 @@ cy_writeb((u_long)address + (CyCAR< 0)? irq : 0; } -#endif /* CONFIG_COBALT_27 */ +#endif /* (__i386__) || (__alpha__) */ /* The real interrupt service routine is called whenever the card wants its hand held--chars @@ -1325,14 +1326,14 @@ /* validate the port# (as configured and open) */ if( (i < 0) || (NR_PORTS <= i) ){ cy_writeb((u_long)base_addr+(CySRER<last_active = jiffies; if(info->tty == 0){ cy_writeb((u_long)base_addr+(CySRER<xmit_cnt){ cy_writeb((u_long)base_addr+(CySRER<xmit_buf == 0){ cy_writeb((u_long)base_addr+(CySRER<tty->stopped || info->tty->hw_stopped){ cy_writeb((u_long)base_addr+(CySRER<tty->hw_stopped = 0; cy_writeb((u_long)base_addr+(CySRER<tty->hw_stopped = 1; cy_writeb((u_long)base_addr+(CySRER<base_addr + cy_readl(&firm_id->zfwctrl_addr)); + (cinfo->base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; loc_doorbell = cy_readl(&((struct RUNTIME_9060 *) @@ -1563,7 +1565,8 @@ return (-1); } zfw_ctrl = (struct ZFW_CTRL *) - (cinfo->base_addr + cy_readl(&firm_id->zfwctrl_addr)); + (cinfo->base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; index = 0; @@ -1780,7 +1783,8 @@ firm_id = (struct FIRM_ID *)(cinfo->base_addr + ID_ADDRESS); zfw_ctrl = (struct ZFW_CTRL *) - (cinfo->base_addr + cy_readl(&firm_id->zfwctrl_addr)); + (cinfo->base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &(zfw_ctrl->board_ctrl); fw_ver = cy_readl(&board_ctrl->fw_version); hw_ver = cy_readl(&((struct RUNTIME_9060 *)(cinfo->ctl_addr))->mail_box_0); @@ -1957,7 +1961,8 @@ firm_id = (struct FIRM_ID *)(cinfo->base_addr + ID_ADDRESS); zfw_ctrl = (struct ZFW_CTRL *) - (cinfo->base_addr + cy_readl(&firm_id->zfwctrl_addr)); + (cinfo->base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &(zfw_ctrl->board_ctrl); /* Skip first polling cycle to avoid racing conditions with the FW */ @@ -2097,9 +2102,9 @@ return -ENODEV; } - zfw_ctrl = - (struct ZFW_CTRL *) - (cy_card[card].base_addr + cy_readl(&firm_id->zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (cy_card[card].base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; ch_ctrl = zfw_ctrl->ch_ctrl; @@ -2207,7 +2212,7 @@ CY_LOCK(info, flags); cy_writeb((u_long)base_addr+(CyCAR<zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (cy_card[card].base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &(zfw_ctrl->board_ctrl); ch_ctrl = zfw_ctrl->ch_ctrl; @@ -2505,9 +2510,8 @@ return -EINVAL; } - zfw_ctrl = - (struct ZFW_CTRL *) - (base_addr + cy_readl(&firm_id->zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (base_addr + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; ch_ctrl = zfw_ctrl->ch_ctrl; @@ -2764,7 +2768,7 @@ index = cy_card[card].bus_index; base_addr = (unsigned char *) (cy_card[card].base_addr + (cy_chip_offset[chip]<card].base_addr; struct FIRM_ID *firm_id = (struct FIRM_ID *) (base_addr + ID_ADDRESS); - struct ZFW_CTRL *zfw_ctrl = - (struct ZFW_CTRL *) (base_addr + cy_readl(&firm_id->zfwctrl_addr)); + struct ZFW_CTRL *zfw_ctrl = (struct ZFW_CTRL *) + (base_addr + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); struct CH_CTRL *ch_ctrl = zfw_ctrl->ch_ctrl; int channel = info->line - cy_card[info->card].first_line; int retval; @@ -3144,8 +3148,9 @@ volatile uclong tx_put, tx_get, tx_bufsize; firm_id = (struct FIRM_ID *)(cy_card[card].base_addr + ID_ADDRESS); - zfw_ctrl = (struct ZFW_CTRL *) (cy_card[card].base_addr + - cy_readl(&firm_id->zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (cy_card[card].base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); ch_ctrl = &(zfw_ctrl->ch_ctrl[channel]); buf_ctrl = &(zfw_ctrl->buf_ctrl[channel]); @@ -3434,8 +3439,9 @@ return; } - zfw_ctrl = (struct ZFW_CTRL *) - (cy_card[card].base_addr + cy_readl(&firm_id->zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (cy_card[card].base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; ch_ctrl = &(zfw_ctrl->ch_ctrl[channel]); buf_ctrl = &zfw_ctrl->buf_ctrl[channel]; @@ -3667,8 +3673,9 @@ firm_id = (struct FIRM_ID *) (cy_card[card].base_addr + ID_ADDRESS); if (ISZLOADED(cy_card[card])) { - zfw_ctrl = (struct ZFW_CTRL *) - (cy_card[card].base_addr + cy_readl(&firm_id->zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (cy_card[card].base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; ch_ctrl = zfw_ctrl->ch_ctrl; lstatus = cy_readl(&ch_ctrl[channel].rs_status); @@ -3832,8 +3839,9 @@ firm_id = (struct FIRM_ID *) (cy_card[card].base_addr + ID_ADDRESS); if (ISZLOADED(cy_card[card])) { - zfw_ctrl = (struct ZFW_CTRL *) - (cy_card[card].base_addr + cy_readl(&firm_id->zfwctrl_addr)); + zfw_ctrl = (struct ZFW_CTRL *) + (cy_card[card].base_addr + + (cy_readl(&firm_id->zfwctrl_addr) & 0xfffff)); board_ctrl = &zfw_ctrl->board_ctrl; ch_ctrl = zfw_ctrl->ch_ctrl; @@ -4510,7 +4518,7 @@ cy_writeb((u_long)base_addr+(CyCAR<irq; - cy_pci_addr0 = pdev->base_address[0]; - cy_pci_addr1 = pdev->base_address[1]; - cy_pci_addr2 = pdev->base_address[2]; - pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id); + cy_pci_phys0 = pdev->base_address[0]; + cy_pci_phys2 = pdev->base_address[2]; + pci_read_config_byte(pdev, PCI_REVISION_ID, &cyy_rev_id); device_id &= ~PCI_DEVICE_ID_MASK; @@ -4901,15 +4910,15 @@ printk("rev_id=%d) IRQ%d\n", cyy_rev_id, (int)cy_pci_irq); printk("Cyclom-Y/PCI:found winaddr=0x%lx ctladdr=0x%lx\n", - (ulong)cy_pci_addr2, (ulong)cy_pci_addr0); + (ulong)cy_pci_phys2, (ulong)cy_pci_phys0); #endif - cy_pci_addr0 &= PCI_BASE_ADDRESS_MEM_MASK; - cy_pci_addr2 &= PCI_BASE_ADDRESS_MEM_MASK; + cy_pci_phys0 &= PCI_BASE_ADDRESS_MEM_MASK; + cy_pci_phys2 &= PCI_BASE_ADDRESS_MEM_MASK; - if (cy_pci_addr2 & ~PCI_BASE_ADDRESS_IO_MASK) { + if (cy_pci_phys2 & ~PCI_BASE_ADDRESS_IO_MASK) { printk(" Warning: PCI I/O bit incorrectly set. " "Ignoring it...\n"); - cy_pci_addr2 &= PCI_BASE_ADDRESS_IO_MASK; + cy_pci_phys2 &= PCI_BASE_ADDRESS_IO_MASK; } #if defined(__alpha__) @@ -4919,15 +4928,15 @@ printk("rev_id=%d) IRQ%d\n", cyy_rev_id, (int)cy_pci_irq); printk("Cyclom-Y/PCI:found winaddr=0x%lx ctladdr=0x%lx\n", - (ulong)cy_pci_addr2, (ulong)cy_pci_addr0); + (ulong)cy_pci_phys2, (ulong)cy_pci_phys0); printk("Cyclom-Y/PCI not supported for low addresses in " "Alpha systems.\n"); i--; continue; } #else - cy_pci_addr0 = (ulong)ioremap(cy_pci_addr0, CyPCI_Yctl); - cy_pci_addr2 = (ulong)ioremap(cy_pci_addr2, CyPCI_Ywin); + cy_pci_addr0 = (ulong)ioremap(cy_pci_phys0, CyPCI_Yctl); + cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ywin); #endif #ifdef CY_PCI_DEBUG @@ -4939,13 +4948,13 @@ if(cy_pci_nchan == 0) { printk("Cyclom-Y PCI host card with "); printk("no Serial-Modules at 0x%lx.\n", - (ulong) cy_pci_addr2); + (ulong) cy_pci_phys2); i--; continue; } if((cy_next_channel+cy_pci_nchan) > NR_PORTS) { printk("Cyclom-Y/PCI found at 0x%lx ", - (ulong) cy_pci_addr2); + (ulong) cy_pci_phys2); printk("but no channels are available.\n"); printk("Change NR_PORTS in cyclades.c and recompile kernel.\n"); return(i); @@ -4956,7 +4965,7 @@ } if (j == NR_CARDS) { /* no more cy_cards available */ printk("Cyclom-Y/PCI found at 0x%lx ", - (ulong) cy_pci_addr2); + (ulong) cy_pci_phys2); printk("but no more cards can be used.\n"); printk("Change NR_CARDS in cyclades.c and recompile kernel.\n"); return(i); @@ -4967,13 +4976,15 @@ SA_SHIRQ, "Cyclom-Y", &cy_card[j])) { printk("Cyclom-Y/PCI found at 0x%lx ", - (ulong) cy_pci_addr2); + (ulong) cy_pci_phys2); printk("but could not allocate IRQ%d.\n", cy_pci_irq); return(i); } /* set cy_card */ + cy_card[j].base_phys = (ulong)cy_pci_phys2; + cy_card[j].ctl_phys = (ulong)cy_pci_phys0; cy_card[j].base_addr = (ulong)cy_pci_addr2; cy_card[j].ctl_addr = (ulong)cy_pci_addr0; cy_card[j].irq = (int) cy_pci_irq; @@ -4986,10 +4997,7 @@ switch (plx_ver) { case PLX_9050: - plx_init(cy_pci_addr0, 0x50); - - cy_writew(cy_pci_addr0+0x4c, - cy_readw(cy_pci_addr0+0x4c)|0x0040); + cy_writeb(cy_pci_addr0+0x4c, 0x43); break; case PLX_9060: @@ -5011,8 +5019,8 @@ /* print message */ printk("Cyclom-Y/PCI #%d: 0x%lx-0x%lx, IRQ%d, ", j+1, - (ulong)cy_pci_addr2, - (ulong)(cy_pci_addr2 + CyPCI_Ywin - 1), + (ulong)cy_pci_phys2, + (ulong)(cy_pci_phys2 + CyPCI_Ywin - 1), (int)cy_pci_irq); printk("%d channels starting from port %d.\n", cy_pci_nchan, cy_next_channel); @@ -5025,7 +5033,7 @@ printk("rev_id=%d) IRQ%d\n", cyy_rev_id, (int)cy_pci_irq); printk("Cyclades-Z/PCI: found winaddr=0x%lx ctladdr=0x%lx\n", - (ulong)cy_pci_addr2, (ulong)cy_pci_addr0); + (ulong)cy_pci_phys2, (ulong)cy_pci_phys0); printk("Cyclades-Z/PCI not supported for low addresses\n"); break; }else if (device_id == PCI_DEVICE_ID_CYCLOM_Z_Hi){ @@ -5035,11 +5043,18 @@ printk("rev_id=%d) IRQ%d\n", cyy_rev_id, (int)cy_pci_irq); printk("Cyclades-Z/PCI: found winaddr=0x%lx ctladdr=0x%lx\n", - (ulong)cy_pci_addr2, (ulong)cy_pci_addr0); + (ulong)cy_pci_phys2, (ulong)cy_pci_phys0); #endif - cy_pci_addr0 &= PCI_BASE_ADDRESS_MEM_MASK; + cy_pci_phys0 &= PCI_BASE_ADDRESS_MEM_MASK; + cy_pci_phys2 &= PCI_BASE_ADDRESS_MEM_MASK; + + if (cy_pci_phys2 & ~PCI_BASE_ADDRESS_IO_MASK) { + printk(" Warning: PCI I/O bit incorrectly set. " + "Ignoring it...\n"); + cy_pci_phys2 &= PCI_BASE_ADDRESS_IO_MASK; + } #if !defined(__alpha__) - cy_pci_addr0 = (ulong)ioremap(cy_pci_addr0, CyPCI_Zctl); + cy_pci_addr0 = (ulong)ioremap(cy_pci_phys0, CyPCI_Zctl); #endif /* Disable interrupts on the PLX before resetting it */ @@ -5055,23 +5070,18 @@ mailbox = (uclong)cy_readl(&((struct RUNTIME_9060 *) cy_pci_addr0)->mail_box_0); - cy_pci_addr2 &= PCI_BASE_ADDRESS_MEM_MASK; - - if (cy_pci_addr2 & ~PCI_BASE_ADDRESS_IO_MASK) { - printk(" Warning: PCI I/O bit incorrectly set. " - "Ignoring it...\n"); - cy_pci_addr2 &= PCI_BASE_ADDRESS_IO_MASK; - } if (mailbox == ZE_V1) { #if !defined(__alpha__) - cy_pci_addr2 = (ulong)ioremap(cy_pci_addr2, CyPCI_Ze_win); + cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Ze_win); #endif if (ZeIndex == NR_CARDS) { printk("Cyclades-Ze/PCI found at 0x%lx ", - (ulong)cy_pci_addr2); + (ulong)cy_pci_phys2); printk("but no more cards can be used.\n"); printk("Change NR_CARDS in cyclades.c and recompile kernel.\n"); } else { + Ze_phys0[ZeIndex] = cy_pci_phys0; + Ze_phys2[ZeIndex] = cy_pci_phys2; Ze_addr0[ZeIndex] = cy_pci_addr0; Ze_addr2[ZeIndex] = cy_pci_addr2; Ze_irq[ZeIndex] = cy_pci_irq; @@ -5081,7 +5091,7 @@ continue; } else { #if !defined(__alpha__) - cy_pci_addr2 = (ulong)ioremap(cy_pci_addr2, CyPCI_Zwin); + cy_pci_addr2 = (ulong)ioremap(cy_pci_phys2, CyPCI_Zwin); #endif } @@ -5118,7 +5128,7 @@ if((cy_next_channel+cy_pci_nchan) > NR_PORTS) { printk("Cyclades-8Zo/PCI found at 0x%lx ", - (ulong)cy_pci_addr2); + (ulong)cy_pci_phys2); printk("but no channels are available.\n"); printk("Change NR_PORTS in cyclades.c and recompile kernel.\n"); return(i); @@ -5130,7 +5140,7 @@ } if (j == NR_CARDS) { /* no more cy_cards available */ printk("Cyclades-8Zo/PCI found at 0x%lx ", - (ulong)cy_pci_addr2); + (ulong)cy_pci_phys2); printk("but no more cards can be used.\n"); printk("Change NR_CARDS in cyclades.c and recompile kernel.\n"); return(i); @@ -5142,10 +5152,10 @@ if(request_irq(cy_pci_irq, cyz_interrupt, SA_SHIRQ, "Cyclades-Z", &cy_card[j])) { - printk("Could not allocate IRQ%d ", + printk("Cyclades-8Zo/PCI found at 0x%lx ", + (ulong) cy_pci_phys2); + printk("but could not allocate IRQ%d.\n", cy_pci_irq); - printk("for Cyclades-8Zo/PCI at 0x%lx.\n", - (ulong)cy_pci_addr2); return(i); } } @@ -5153,6 +5163,8 @@ /* set cy_card */ + cy_card[j].base_phys = cy_pci_phys2; + cy_card[j].ctl_phys = cy_pci_phys0; cy_card[j].base_addr = cy_pci_addr2; cy_card[j].ctl_addr = cy_pci_addr0; cy_card[j].irq = (int) cy_pci_irq; @@ -5165,14 +5177,14 @@ /* don't report IRQ if board is no IRQ */ if( (cy_pci_irq != 0) && (cy_pci_irq != 255) ) printk("Cyclades-8Zo/PCI #%d: 0x%lx-0x%lx, IRQ%d, ", - j+1,(ulong)cy_pci_addr2, - (ulong)(cy_pci_addr2 + CyPCI_Zwin - 1), + j+1,(ulong)cy_pci_phys2, + (ulong)(cy_pci_phys2 + CyPCI_Zwin - 1), (int)cy_pci_irq); else #endif /* CONFIG_CYZ_INTR */ printk("Cyclades-8Zo/PCI #%d: 0x%lx-0x%lx, ", - j+1,(ulong)cy_pci_addr2, - (ulong)(cy_pci_addr2 + CyPCI_Zwin - 1)); + j+1,(ulong)cy_pci_phys2, + (ulong)(cy_pci_phys2 + CyPCI_Zwin - 1)); printk("%d channels starting from port %d.\n", cy_pci_nchan,cy_next_channel); @@ -5181,10 +5193,14 @@ } for (; ZeIndex != 0 && i < NR_CARDS; i++) { + cy_pci_phys0 = Ze_phys0[0]; + cy_pci_phys2 = Ze_phys2[0]; cy_pci_addr0 = Ze_addr0[0]; cy_pci_addr2 = Ze_addr2[0]; cy_pci_irq = Ze_irq[0]; for (j = 0 ; j < ZeIndex-1 ; j++) { + Ze_phys0[j] = Ze_phys0[j+1]; + Ze_phys2[j] = Ze_phys2[j+1]; Ze_addr0[j] = Ze_addr0[j+1]; Ze_addr2[j] = Ze_addr2[j+1]; Ze_irq[j] = Ze_irq[j+1]; @@ -5203,7 +5219,7 @@ if((cy_next_channel+cy_pci_nchan) > NR_PORTS) { printk("Cyclades-Ze/PCI found at 0x%lx ", - (ulong)cy_pci_addr2); + (ulong)cy_pci_phys2); printk("but no channels are available.\n"); printk("Change NR_PORTS in cyclades.c and recompile kernel.\n"); return(i); @@ -5215,7 +5231,7 @@ } if (j == NR_CARDS) { /* no more cy_cards available */ printk("Cyclades-Ze/PCI found at 0x%lx ", - (ulong)cy_pci_addr2); + (ulong)cy_pci_phys2); printk("but no more cards can be used.\n"); printk("Change NR_CARDS in cyclades.c and recompile kernel.\n"); return(i); @@ -5227,16 +5243,18 @@ if(request_irq(cy_pci_irq, cyz_interrupt, SA_SHIRQ, "Cyclades-Z", &cy_card[j])) { - printk("Could not allocate IRQ%d ", + printk("Cyclades-Ze/PCI found at 0x%lx ", + (ulong) cy_pci_phys2); + printk("but could not allocate IRQ%d.\n", cy_pci_irq); - printk("for Cyclades-Ze/PCI at 0x%lx.\n", - (ulong) cy_pci_addr2); return(i); } } #endif /* CONFIG_CYZ_INTR */ /* set cy_card */ + cy_card[j].base_phys = cy_pci_phys2; + cy_card[j].ctl_phys = cy_pci_phys0; cy_card[j].base_addr = cy_pci_addr2; cy_card[j].ctl_addr = cy_pci_addr0; cy_card[j].irq = (int) cy_pci_irq; @@ -5249,14 +5267,14 @@ /* don't report IRQ if board is no IRQ */ if( (cy_pci_irq != 0) && (cy_pci_irq != 255) ) printk("Cyclades-Ze/PCI #%d: 0x%lx-0x%lx, IRQ%d, ", - j+1,(ulong)cy_pci_addr2, - (ulong)(cy_pci_addr2 + CyPCI_Ze_win - 1), + j+1,(ulong)cy_pci_phys2, + (ulong)(cy_pci_phys2 + CyPCI_Ze_win - 1), (int)cy_pci_irq); else #endif /* CONFIG_CYZ_INTR */ printk("Cyclades-Ze/PCI #%d: 0x%lx-0x%lx, ", - j+1,(ulong)cy_pci_addr2, - (ulong)(cy_pci_addr2 + CyPCI_Ze_win - 1)); + j+1,(ulong)cy_pci_phys2, + (ulong)(cy_pci_phys2 + CyPCI_Ze_win - 1)); printk("%d channels starting from port %d.\n", cy_pci_nchan,cy_next_channel); @@ -5264,7 +5282,7 @@ } if (ZeIndex != 0) { printk("Cyclades-Ze/PCI found at 0x%x ", - (unsigned int) Ze_addr2[0]); + (unsigned int) Ze_phys2[0]); printk("but no more cards can be used.\n"); printk("Change NR_CARDS in cyclades.c and recompile kernel.\n"); } @@ -5451,10 +5469,8 @@ availability of cy_card and cy_port data structures and updating the cy_next_channel. */ -#ifndef CONFIG_COBALT_27 /* look for isa boards */ cy_isa_nboard = cy_detect_isa(); -#endif /* CONFIG_COBALT_27 */ /* look for pci boards */ cy_pci_nboard = cy_detect_pci(); @@ -5581,9 +5597,10 @@ info->icount.frame = info->icount.parity = 0; info->icount.overrun = info->icount.brk = 0; chip_number = (port - cinfo->first_line) / 4; - if ((info->chip_rev = cy_readb(cinfo->base_addr + - (cy_chip_offset[chip_number]<= CD1400_REV_J) { + if ((info->chip_rev = + cy_readb(cinfo->base_addr + + (cy_chip_offset[chip_number]<= CD1400_REV_J) { /* It is a CD1400 rev. J or later */ info->tbpr = baud_bpr_60[13]; /* Tx BPR */ info->tco = baud_co_60[13]; /* Tx CO */ @@ -5693,12 +5710,12 @@ tmp_buf = NULL; } } /* cleanup_module */ -#else +#else /* MODULE */ /* called by linux/init/main.c to parse command line options */ void cy_setup(char *str, int *ints) { -#ifndef CONFIG_COBALT_27 +#if defined(__i386__) || defined(__alpha__) int i, j; for (i = 0 ; i < NR_ISA_ADDRS ; i++) { @@ -5709,110 +5726,7 @@ cy_isa_addresses[i++] = (unsigned char *)(ints[j]); } } -#endif /* CONFIG_COBALT_27 */ - +#endif /* (__i386__) || (__alpha__) */ } /* cy_setup */ -#endif - - -#ifdef CYCLOM_SHOW_STATUS -static void -show_status(int line_num) -{ - unsigned char *base_addr; - int card,chip,channel,index; - struct cyclades_port * info; - unsigned long flags; - - info = &cy_port[line_num]; - card = info->card; - index = cy_card[card].bus_index; - channel = (info->line) - (cy_card[card].first_line); - chip = channel>>2; - channel &= 0x03; - printk(" card %d, chip %d, channel %d\n", card, chip, channel);/**/ - - printk(" cy_card\n"); - printk(" irq base_addr num_chips first_line = %d %lx %d %d\n", - cy_card[card].irq, (long)cy_card[card].base_addr, - cy_card[card].num_chips, cy_card[card].first_line); - - printk(" cy_port\n"); - printk(" card line flags = %d %d %x\n", - info->card, info->line, info->flags); - printk(" *tty read_status_mask timeout xmit_fifo_size ", - printk("= %lx %x %x %x\n", - (long)info->tty, info->read_status_mask, - info->timeout, info->xmit_fifo_size); - printk(" cor1,cor2,cor3,cor4,cor5 = %x %x %x %x %x\n", - info->cor1, info->cor2, info->cor3, info->cor4, info->cor5); - printk(" tbpr,tco,rbpr,rco = %d %d %d %d\n", - info->tbpr, info->tco, info->rbpr, info->rco); - printk(" close_delay event count = %d %d %d\n", - info->close_delay, info->event, info->count); - printk(" x_char blocked_open = %x %x\n", - info->x_char, info->blocked_open); - printk(" session pgrp open_wait = %lx %lx %lx\n", - info->session, info->pgrp, (long)info->open_wait); - - CY_LOCK(info, flags); - - base_addr = (unsigned char*) - (cy_card[card].base_addr - + (cy_chip_offset[chip]<= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/misc.c linux.16p3/drivers/char/misc.c --- linux.vanilla/drivers/char/misc.c Fri Apr 21 12:46:04 2000 +++ linux.16p3/drivers/char/misc.c Mon May 1 01:09:00 2000 @@ -73,6 +73,7 @@ extern void watchdog_init(void); extern void wdt_init(void); extern void acq_init(void); +extern void wdt60xx_init(void); extern void dtlk_init(void); extern void pcwatchdog_init(void); extern int rtc_init(void); @@ -228,6 +229,9 @@ #endif #ifdef CONFIG_ACQUIRE_WDT acq_init(); +#endif +#ifdef CONFIG_60XX_WDT + sbc60xxwdt_init(); #endif #ifdef CONFIG_SOFT_WATCHDOG watchdog_init(); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/n_hdlc.c linux.16p3/drivers/char/n_hdlc.c --- linux.vanilla/drivers/char/n_hdlc.c Fri Apr 21 12:46:04 2000 +++ linux.16p3/drivers/char/n_hdlc.c Tue May 16 12:54:16 2000 @@ -9,7 +9,7 @@ * Al Longyear , Paul Mackerras * * Original release 01/11/99 - * ==FILEDATE 19990901== + * ==FILEDATE 20000515== * * This code is released under the GNU General Public License (GPL) * @@ -78,7 +78,7 @@ */ #define HDLC_MAGIC 0x239e -#define HDLC_VERSION "1.11" +#define HDLC_VERSION "1.15" #include #include @@ -105,7 +105,6 @@ #include #include #include -#include /* to get the struct task_struct */ #include /* used in new tty drivers */ #include /* used in new tty drivers */ #include @@ -172,6 +171,7 @@ #if LINUX_VERSION_CODE < VERSION(2,1,0) #define __init typedef int spinlock_t; +#define spin_lock_init(a) #define spin_lock_irqsave(a,b) {save_flags((b));cli();} #define spin_unlock_irqrestore(a,b) {restore_flags((b));} #define spin_lock(a) @@ -465,9 +465,10 @@ register int actual; unsigned long flags; N_HDLC_BUF *tbuf; - + if (debuglevel >= DEBUG_LEVEL_INFO) printk("%s(%d)n_hdlc_send_frames() called\n",__FILE__,__LINE__); + check_again: save_flags(flags); cli (); @@ -477,6 +478,7 @@ return; } n_hdlc->tbusy = 1; + n_hdlc->woke_up = 0; restore_flags(flags); /* get current transmit buffer or get new transmit */ @@ -492,7 +494,6 @@ __FILE__,__LINE__,tbuf,tbuf->count); /* Send the next block of data to device */ - n_hdlc->woke_up = 0; tty->flags |= (1 << TTY_DO_WRITE_WAKEUP); actual = tty->driver.write(tty, 0, tbuf->buf, tbuf->count); @@ -514,6 +515,7 @@ /* wait up sleeping writers */ wake_up_interruptible(&n_hdlc->write_wait); + wake_up_interruptible(&n_hdlc->poll_wait); /* get next pending transmit buffer */ tbuf = n_hdlc_buf_get(&n_hdlc->tx_buf_list); @@ -523,11 +525,6 @@ __FILE__,__LINE__,tbuf); /* buffer not accepted by driver */ - - /* check if wake up code called since last write call */ - if (n_hdlc->woke_up) - continue; - /* set this buffer as pending buffer */ n_hdlc->tbuf = tbuf; break; @@ -543,6 +540,9 @@ n_hdlc->tbusy = 0; restore_flags(flags); + if (n_hdlc->woke_up) + goto check_again; + if (debuglevel >= DEBUG_LEVEL_INFO) printk("%s(%d)n_hdlc_send_frames() exit\n",__FILE__,__LINE__); @@ -570,11 +570,8 @@ tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); return; } - - if (!n_hdlc->tbuf) - tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); - else - n_hdlc_send_frames (n_hdlc, tty); + + n_hdlc_send_frames (n_hdlc, tty); } /* end of n_hdlc_tty_wakeup() */ @@ -663,8 +660,11 @@ wake_up_interruptible (&n_hdlc->read_wait); wake_up_interruptible (&n_hdlc->poll_wait); if (n_hdlc->tty->fasync != NULL) +#if LINUX_VERSION_CODE < VERSION(2,3,0) kill_fasync (n_hdlc->tty->fasync, SIGIO); - +#else + kill_fasync (n_hdlc->tty->fasync, SIGIO, POLL_IN); +#endif } /* end of n_hdlc_tty_receive() */ /* n_hdlc_tty_read() @@ -788,34 +788,31 @@ count = maxframe; } + add_wait_queue(&n_hdlc->write_wait, &wait); + set_current_state(TASK_INTERRUPTIBLE); + /* Allocate transmit buffer */ - tbuf = n_hdlc_buf_get(&n_hdlc->tx_free_buf_list); - if (!tbuf) { - /* sleep until transmit buffer available */ - add_wait_queue(&n_hdlc->write_wait, &wait); - while (!tbuf) { - set_current_state(TASK_INTERRUPTIBLE); - schedule(); - - n_hdlc = tty2n_hdlc (tty); - if (!n_hdlc || n_hdlc->magic != HDLC_MAGIC || - tty != n_hdlc->tty) { - printk("n_hdlc_tty_write: %p invalid after wait!\n", n_hdlc); - error = -EIO; - break; - } + /* sleep until transmit buffer available */ + while (!(tbuf = n_hdlc_buf_get(&n_hdlc->tx_free_buf_list))) { + schedule(); - if (signal_pending(current)) { - error = -EINTR; - break; - } + n_hdlc = tty2n_hdlc (tty); + if (!n_hdlc || n_hdlc->magic != HDLC_MAGIC || + tty != n_hdlc->tty) { + printk("n_hdlc_tty_write: %p invalid after wait!\n", n_hdlc); + error = -EIO; + break; + } - tbuf = n_hdlc_buf_get(&n_hdlc->tx_free_buf_list); + if (signal_pending(current)) { + error = -EINTR; + break; } - set_current_state(TASK_RUNNING); - remove_wait_queue(&n_hdlc->write_wait, &wait); } + set_current_state(TASK_RUNNING); + remove_wait_queue(&n_hdlc->write_wait, &wait); + if (!error) { /* Retrieve the user's buffer */ COPY_FROM_USER (error, tbuf->buf, data, count); @@ -991,7 +988,11 @@ if (n_hdlc && n_hdlc->magic == HDLC_MAGIC && tty == n_hdlc->tty) { /* queue current process into any wait queue that */ /* may awaken in the future (read and write) */ +#if LINUX_VERSION_CODE < VERSION(2,1,89) + poll_wait(&n_hdlc->poll_wait, wait); +#else poll_wait(filp, &n_hdlc->poll_wait, wait); +#endif /* set bits for operations that wont block */ if(n_hdlc->rx_buf_list.head) mask |= POLLIN | POLLRDNORM; /* readable */ @@ -1071,7 +1072,7 @@ void n_hdlc_buf_list_init(N_HDLC_BUF_LIST *list) { memset(list,0,sizeof(N_HDLC_BUF_LIST)); - + spin_lock_init(&list->spinlock); } /* end of n_hdlc_buf_list_init() */ /* n_hdlc_buf_put() diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/nvram.c linux.16p3/drivers/char/nvram.c --- linux.vanilla/drivers/char/nvram.c Fri Apr 21 12:46:04 2000 +++ linux.16p3/drivers/char/nvram.c Thu May 4 00:48:27 2000 @@ -373,7 +373,7 @@ if (offset >= begin + len) return( 0 ); - *start = buffer + (begin - offset); + *start = buffer + (offset - begin); return( size < begin + len - offset ? size : begin + len - offset ); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/pc_keyb.c linux.16p3/drivers/char/pc_keyb.c --- linux.vanilla/drivers/char/pc_keyb.c Fri Apr 21 12:46:04 2000 +++ linux.16p3/drivers/char/pc_keyb.c Wed Apr 19 14:03:31 2000 @@ -56,6 +56,9 @@ static void kbd_write_command_w(int data); static void kbd_write_output_w(int data); +#ifdef CONFIG_PSMOUSE +static void aux_write_ack(int val); +#endif spinlock_t kbd_controller_lock = SPIN_LOCK_UNLOCKED; static unsigned char handle_kbd_event(void); @@ -73,6 +76,9 @@ static int __init psaux_init(void); +#define AUX_RECONNECT 170 +/* #define CHECK_RECONNECT_SCANCODE 1 */ + static struct aux_queue *queue; /* Mouse data buffer. */ static int aux_count = 0; /* used when we send commands to the mouse that expect an ACK. */ @@ -393,6 +399,19 @@ } mouse_reply_expected = 0; } + else if(scancode == AUX_RECONNECT){ + queue->head = queue->tail = 0; /* Flush input queue */ + /* + * need this stuff? seems to work fine w/o it for me + aux_write_ack(AUX_SET_SAMPLE); + aux_write_ack(100); + aux_write_ack(AUX_SET_RES); + aux_write_ack(3); + aux_write_ack(AUX_SET_SCALE21); + */ + aux_write_ack(AUX_ENABLE_DEV); /* ping the mouse :) */ + return; + } add_mouse_randomness(scancode); if (aux_count) { @@ -426,6 +445,9 @@ unsigned char scancode; scancode = kbd_read_input(); +# ifdef CHECK_RECONNECT_SCANCODE + printk(KERN_INFO "-=db=-: kbd_read_input() : scancode == %d\n",scancode); +# endif if (status & KBD_STAT_MOUSE_OBF) { handle_mouse_event(scancode); } else { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/random.c linux.16p3/drivers/char/random.c --- linux.vanilla/drivers/char/random.c Fri Apr 21 12:46:05 2000 +++ linux.16p3/drivers/char/random.c Wed Apr 19 14:06:09 2000 @@ -778,7 +778,12 @@ void add_keyboard_randomness(unsigned char scancode) { - add_timer_randomness(&random_state, &keyboard_timer_state, scancode); + static unsigned char last_scancode = 0; + /* ignore autorepeat (multiple key down w/o key up) */ + if (scancode != last_scancode) { + last_scancode = scancode; + add_timer_randomness(&random_state, &keyboard_timer_state, scancode); + } } void add_mouse_randomness(__u32 mouse_data) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/sbc60xxwdt.c linux.16p3/drivers/char/sbc60xxwdt.c --- linux.vanilla/drivers/char/sbc60xxwdt.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/char/sbc60xxwdt.c Mon May 1 01:09:00 2000 @@ -0,0 +1,304 @@ +/* + * 60xx Single Board Computer Watchdog Timer driver for Linux 2.2.x + * + * Based on acquirewdt.c by Alan Cox. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * The author does NOT admit liability nor provide warranty for + * any of this software. This material is provided "AS-IS" in + * the hope that it may be useful for others. + * + * (c) Copyright 2000 Jakob Oestergaard + * + * 12/4 - 2000 [Initial revision] + * 25/4 - 2000 Added /dev/watchdog support + * + * + * Theory of operation: + * A Watchdog Timer (WDT) is a hardware circuit that can + * reset the computer system in case of a software fault. + * You probably knew that already. + * + * Usually a userspace daemon will notify the kernel WDT driver + * via the /proc/watchdog special device file that userspace is + * still alive, at regular intervals. When such a notification + * occurs, the driver will usually tell the hardware watchdog + * that everything is in order, and that the watchdog should wait + * for yet another little while to reset the system. + * If userspace fails (RAM error, kernel bug, whatever), the + * notifications cease to occur, and the hardware watchdog will + * reset the system (causing a reboot) after the timeout occurs. + * + * This WDT driver is different from the other Linux WDT + * drivers in several ways: + * *) The driver will ping the watchdog by itself, because this + * particular WDT has a very short timeout (one second) and it + * would be insane to count on any userspace daemon always + * getting scheduled within that time frame. + * *) This driver expects the userspace daemon to send a specific + * character code ('V') to /dev/watchdog before closing the + * /dev/watchdog file. If the userspace daemon closes the file + * without sending this special character, the driver will assume + * that the daemon (and userspace in general) died, and will + * stop pinging the WDT without disabling it first. This will + * cause a reboot. + * + * Why `V' ? Well, `V' is the character in ASCII for the value 86, + * and we all know that 86 is _the_ most random number in the universe. + * Therefore it is the letter that has the slightest chance of occuring + * by chance, when the system becomes corrupted. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define OUR_NAME "sbc60xxwdt" + +/* + * You must set these - The driver cannot probe for the settings + */ + +#define WDT_STOP 0x45 +#define WDT_START 0x443 + +/* + * The 60xx board can use watchdog timeout values from one second + * to several minutes. The default is one second, so if we reset + * the watchdog every ~250ms we should be safe. + */ + +#define WDT_INTERVAL (HZ/4+1) + +/* + * We must not require too good response from the userspace daemon. + * Here we require the userspace daemon to send us a heartbeat + * char to /dev/watchdog every 10 seconds. + * If the daemon pulses us every 5 seconds, we can still afford + * a 5 second scheduling delay on the (high priority) daemon. That + * should be sufficient for a box under any load. + */ +#define WDT_HEARTBEAT (HZ * 10) + +static void wdt_timer_ping(unsigned long); +static struct timer_list timer = { 0, 0, WDT_INTERVAL, 0, wdt_timer_ping }; +static unsigned long next_heartbeat = 0; +static int wdt_is_open = 0; +static int wdt_expect_close = 0; + +/* + * Whack the dog + */ + +static void wdt_timer_ping(unsigned long data) +{ + /* If we got a heartbeat pulse within the WDT_US_INTERVAL + * we agree to ping the WDT + */ + if(time_before(jiffies, next_heartbeat)) { + /* Ping the WDT by reading from WDT_START */ + inb_p(WDT_START); + /* Re-set the timer interval */ + timer.expires = jiffies + WDT_INTERVAL; + add_timer(&timer); + } else { + printk(OUR_NAME ": Heartbeat lost! Will not ping the watchdog\n"); + } +} + +/* + * Utility routines + */ + +static void wdt_startup(void) +{ + next_heartbeat = jiffies + WDT_HEARTBEAT; + + /* Start the timer */ + timer.expires = jiffies + WDT_INTERVAL; + add_timer(&timer); + printk(OUR_NAME ": Watchdog timer is now enabled.\n"); +} + +static void wdt_turnoff(void) +{ + /* Stop the timer */ + del_timer(&timer); + inb_p(WDT_STOP); + printk(OUR_NAME ": Watchdog timer is now disabled...\n"); +} + + +/* + * /dev/watchdog handling + */ + +static ssize_t fop_write(struct file * file, const char * buf, size_t count, loff_t * ppos) +{ + /* We can't seek */ + if(ppos != &file->f_pos) + return -ESPIPE; + + /* See if we got the magic character */ + if(count) { + size_t ofs; + + /* note: just in case someone wrote the magic character + * five months ago... */ + wdt_expect_close = 0; + + /* now scan */ + for(ofs = 0; ofs != count; ofs++) + if(buf[ofs] == 'V') + wdt_expect_close = 1; + + /* Well, anyhow someone wrote to us, we should return that favour */ + next_heartbeat = jiffies + WDT_HEARTBEAT; + } + return 0; +} + +static ssize_t fop_read(struct file * file, char * buf, size_t count, loff_t * ppos) +{ + /* No can do */ + return -EINVAL; +} + +static int fop_open(struct inode * inode, struct file * file) +{ + switch(MINOR(inode->i_rdev)) { + case WATCHDOG_MINOR: + + /* Just in case we're already talking to someone... */ + if(wdt_is_open) + return -EBUSY; + + /* Good, fire up the show */ + + MOD_INC_USE_COUNT; + + wdt_is_open = 1; + wdt_startup(); + return 0; + + default: + return -ENODEV; + } +} + +static int fop_close(struct inode * inode, struct file * file) +{ + if(MINOR(inode->i_rdev) == WATCHDOG_MINOR) { + if(wdt_expect_close) + wdt_turnoff(); + else { + del_timer(&timer); + printk(OUR_NAME ": device file closed unexpectedly. Will not stop the WDT!\n"); + } + } + + wdt_is_open = 0; + + MOD_DEC_USE_COUNT; + return 0; +} + + +static struct file_operations wdt_fops = { + 0, + fop_read, + fop_write, + 0, /* readdir */ + 0, /* select */ + 0, /* ioctl */ + 0, /* mmap */ + fop_open, + 0, /* flush */ + fop_close +}; + +static struct miscdevice wdt_miscdev = { + WATCHDOG_MINOR, + "watchdog", + &wdt_fops +}; + +/* + * Notifier for system down + */ + +static int wdt_notify_sys(struct notifier_block *this, unsigned long code, + void *unused) +{ + if(code==SYS_DOWN || code==SYS_HALT) { + wdt_turnoff(); + } + return NOTIFY_DONE; +} + +/* + * The WDT needs to learn about soft shutdowns in order to + * turn the timebomb registers off. + */ + +static struct notifier_block wdt_notifier= +{ + wdt_notify_sys, + 0, + 0 +}; + +#ifdef MODULE + +#define sbc60xxwdt_init init_module + +void cleanup_module(void) +{ + wdt_turnoff(); + + /* Deregister */ + + misc_deregister(&wdt_miscdev); + + unregister_reboot_notifier(&wdt_notifier); + + release_region(WDT_STOP,1); + release_region(WDT_START,1); +} + +#endif + +__initfunc(int sbc60xxwdt_init(void)) +{ + printk(OUR_NAME ": WDT driver for 60XX single board computer initialising.\n"); + + misc_register(&wdt_miscdev); + + request_region(WDT_STOP, 1, "SBC 60XX WDT"); + request_region(WDT_START, 1, "SBC 60XX WDT"); + register_reboot_notifier(&wdt_notifier); + + return 0; +} + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/serial.c linux.16p3/drivers/char/serial.c --- linux.vanilla/drivers/char/serial.c Fri Apr 21 12:46:06 2000 +++ linux.16p3/drivers/char/serial.c Thu May 4 00:48:27 2000 @@ -2782,29 +2782,31 @@ return ret; } -int rs_read_proc(char *page, char **start, off_t off, int count, +int rs_read_proc(char *page, char **start, off_t idx, ssize_t count, int *eof, void *data) { - int i, len = 0, l; - off_t begin = 0; + int n; - len += sprintf(page, "serinfo:1.0 driver:%s\n", serial_version); - for (i = 0; i < NR_PORTS && len < 3900; i++) { - l = line_info(page + len, &rs_table[i]); - len += l; - if (len+begin > off+count) - goto done; - if (len+begin < off) { - begin += len; - len = 0; - } + *start = (char *) 1L; + + if (!idx) { + n = sprintf(page, "serinfo:1.0 driver:%s\n", serial_version); + goto out; } - *eof = 1; -done: - if (off >= len+begin) - return 0; - *start = page + (begin-off); - return ((count < begin+len-off) ? count : begin+len-off); + idx--; + + n = 0; + if (idx >= NR_PORTS || idx < 0) + goto out; + + n = line_info(page, &rs_table[idx]); + if (idx + 1 == NR_PORTS) + *eof = 1; + + out: + if (n > count) + n = 0; + return n; } /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/synclink.c linux.16p3/drivers/char/synclink.c --- linux.vanilla/drivers/char/synclink.c Fri Apr 21 12:46:06 2000 +++ linux.16p3/drivers/char/synclink.c Wed Apr 19 13:54:46 2000 @@ -3902,7 +3902,7 @@ done: if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } /* end of mgsl_read_proc() */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/tty_io.c linux.16p3/drivers/char/tty_io.c --- linux.vanilla/drivers/char/tty_io.c Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/char/tty_io.c Mon May 15 16:34:13 2000 @@ -132,6 +132,9 @@ #ifdef CONFIG_3215 extern long con3215_init(long, long); #endif /* CONFIG_3215 */ +#ifdef CONFIG_HWC_CONSOLE +extern long hwc_console_init(long); +#endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/i2o/README.ioctl linux.16p3/drivers/i2o/README.ioctl --- linux.vanilla/drivers/i2o/README.ioctl Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/i2o/README.ioctl Tue May 16 12:31:25 2000 @@ -25,10 +25,10 @@ II. IOP Access Access to the I2O subsystem is provided through the device file named -/dev/i2octl. This file is a character file with major number 10 and minor +/dev/i2o/ctl. This file is a character file with major number 10 and minor number 166. It can be created through the following command: - mknod /dev/i2octl c 10 166 + mknod /dev/i2o/ctl c 10 166 III. Determining the IOP Count @@ -373,7 +373,7 @@ In the process of determining this. Current idea is to have use the select() interface to allow user apps to periodically poll - the /dev/i2octl device for events. When select() notifies the user + the /dev/i2o/ctl device for events. When select() notifies the user that an event is available, the user would call read() to retrieve a list of all the events that are pending for the specific device. diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/i2o/i2o_block.c linux.16p3/drivers/i2o/i2o_block.c --- linux.vanilla/drivers/i2o/i2o_block.c Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/i2o/i2o_block.c Mon May 1 02:04:55 2000 @@ -20,6 +20,8 @@ * Alan Cox: FC920 has an rmw bug. Dont or in the * end marker. * Removed queue walk, fixed for 64bitness. + * Boji T Kannanthanam: + * Support for dynamic device creation/deletion * To do: * Multiple majors * Serial number scanning to find duplicates for FC multipathing @@ -46,8 +48,12 @@ #include #include +#include #include #include +#include +#include + #define MAJOR_NR I2O_MAJOR @@ -55,9 +61,39 @@ #define MAX_I2OB 16 -#define MAX_I2OB_DEPTH 32 +#define MAX_I2OB_DEPTH 128 #define MAX_I2OB_RETRIES 4 + +/* + * Events that this OSM is interested in + */ +#define I2OB_EVENT_MASK (I2O_EVT_IND_BSA_VOLUME_LOAD | \ + I2O_EVT_IND_BSA_VOLUME_UNLOAD | \ + I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ | \ + I2O_EVT_IND_BSA_CAPACITY_CHANGE) + + +/* + * I2O Block Error Codes - should be in a header file really... + */ +#define I2O_BSA_DSC_SUCCESS 0x0000 +#define I2O_BSA_DSC_MEDIA_ERROR 0x0001 +#define I2O_BSA_DSC_ACCESS_ERROR 0x0002 +#define I2O_BSA_DSC_DEVICE_FAILURE 0x0003 +#define I2O_BSA_DSC_DEVICE_NOT_READY 0x0004 +#define I2O_BSA_DSC_MEDIA_NOT_PRESENT 0x0005 +#define I2O_BSA_DSC_MEDIA_LOCKED 0x0006 +#define I2O_BSA_DSC_MEDIA_FAILURE 0x0007 +#define I2O_BSA_DSC_PROTOCOL_FAILURE 0x0008 +#define I2O_BSA_DSC_BUS_FAILURE 0x0009 +#define I2O_BSA_DSC_ACCESS_VIOLATION 0x000A +#define I2O_BSA_DSC_WRITE_PROTECTED 0x000B +#define I2O_BSA_DSC_DEVICE_RESET 0x000C +#define I2O_BSA_DSC_VOLUME_CHANGED 0x000D +#define I2O_BSA_DSC_TIMEOUT 0x000E + + /* * Some of these can be made smaller later */ @@ -74,10 +110,12 @@ { struct i2o_controller *controller; struct i2o_device *i2odev; + int unit; int tid; int flags; int refcnt; struct request *head, *tail; + int max_segments; int done_flag; }; @@ -101,9 +139,20 @@ static struct i2ob_device i2ob_dev[MAX_I2OB<<4]; static int i2ob_devices = 0; +static int i2ob_dev_count = 0; static struct hd_struct i2ob[MAX_I2OB<<4]; static struct gendisk i2ob_gendisk; /* Declared later */ +/* + * Mutex and spin lock for event handling synchronization + * evt_msg contains the last event. + */ +DECLARE_MUTEX(i2ob_evt_sem); +static spinlock_t i2ob_evt_lock = SPIN_LOCK_UNLOCKED; +static unsigned int evt_msg[MSG_FRAME_SIZE>>2]; +DECLARE_WAIT_QUEUE_HEAD(i2ob_evt_wait); + + static atomic_t queue_depth; /* For flow control later on */ static struct i2ob_request i2ob_queue[MAX_I2OB_DEPTH+1]; static struct i2ob_request *i2ob_qhead; @@ -118,20 +167,31 @@ static int i2ob_install_device(struct i2o_controller *, struct i2o_device *, int); static void i2ob_end_request(struct request *); static void i2ob_request(struct request * q); +static int do_i2ob_revalidate(kdev_t, int); +static int i2ob_query_device(struct i2ob_device *, int, int, void*, int); +static int i2ob_evt(void *); + +static int evt_pid = 0; +static int evt_running = 0; + +static void i2ob_new_device(struct i2o_controller *, struct i2o_device *); +static void i2ob_del_device(struct i2o_controller *, struct i2o_device *); +static void i2ob_reboot_event(void); + /* * Dump messages. */ static void i2ob_dump_msg(struct i2ob_device *dev,u32 *msg,int size) { - int cnt; + int cnt; - printk(KERN_INFO "\n\ni2o message:\n"); - for (cnt = 0; cntmem_offset + m; /* - * Build the message based on the request. + * Build the message based on the request. */ writel(i2ob_context|(unit<<8), msg+8); writel(ireq->num, msg+12); @@ -283,6 +343,7 @@ u8 st; u32 *m = (u32 *)msg; u8 unit = (m[2]>>8)&0xF0; /* low 4 bits are partition */ + struct i2ob_device *dev = &i2ob_dev[(unit&0xF0)]; if(m[0] & (1<<13)) { @@ -313,43 +374,83 @@ i2o_post_message(c,virt_to_bus(m)); } - else + + if(msg->function == I2O_CMD_UTIL_EVT_REGISTER) + { + spin_lock(&i2ob_evt_lock); + memcpy(&evt_msg, m, msg->size); + spin_unlock(&i2ob_evt_lock); + wake_up_interruptible(&i2ob_evt_wait); + return; + } + if(!dev->i2odev) { - if(m[2]&0x40000000) - { - int * ptr = (int *)m[3]; - if(m[4]>>24) - *ptr = -1; - else - *ptr = 1; - return; - } /* - * Lets see what is cooking. We stuffed the - * request in the context. + * This is HACK, but Intel Integrated RAID allows user + * to delete a volume that is claimed, locked, and in use + * by the OS. We have to check for a reply from a + * non-existent device and flag it as an error or the system + * goes kaput... */ + printk(KERN_INFO "I2O Block: Data transfer to deleted device!\n"); + + ireq=&i2ob_queue[m[3]]; + ireq->req->errors++; + printk(KERN_WARNING "I2O Block: Data transfer to deleted device!\n"); + spin_lock_irqsave(&io_request_lock, flags); + i2ob_unhook_request(ireq); + i2ob_end_request(ireq->req); + spin_unlock_irqrestore(&io_request_lock, flags); + return; + } + /* + * Lets see what is cooking. We stuffed the + * request in the context. + */ + ireq=&i2ob_queue[m[3]]; st=m[4]>>24; if(st!=0) { - printk(KERN_ERR "i2ob: error %08X\n", m[4]); + char *bsa_errors[] = + { + "Success", + "Media Error", + "Failure communicating to device", + "Device Failure", + "Device is not ready", + "Media not present", + "Media is locked by another user", + "Media has failed", + "Failure communicating to device", + "Device bus failure", + "Device is locked by another user", + "Device is write protected", + "Device has reset", + "Volume has changed, waiting for acknowledgement" + }; + printk(KERN_ERR "\n/dev/%s error: %s", dev->i2odev->dev_name, bsa_errors[m[4]&0XFFFF]); + + if(m[4]&0x00FF0000) + printk(" - DDM attempted %d retries", (m[4]>>16)&0x00FF); + printk("\n"); + ireq->req->errors++; + if (ireq->req->errors < MAX_I2OB_RETRIES) { u32 retry_msg; - struct i2ob_device *dev; printk(KERN_ERR "i2ob: attempting retry %d for request %p\n",ireq->req->errors+1,ireq->req); - /* + /* * Get a message for this retry. */ - dev = &i2ob_dev[(unit&0xF0)]; - retry_msg = i2ob_get(dev); + retry_msg = i2ob_get(dev); - /* + /* * If we cannot get a message then * forget the retry and fail the * request. Note that since this is @@ -359,20 +460,20 @@ * be space on the inbound message * fifo so this won't happen often. */ - if(retry_msg!=0xFFFFFFFF) + if(retry_msg!=0xFFFFFFFF) { - /* - * Decrement the queue depth since - * this request has completed and - * it will be incremented again when - * i2ob_send is called below. - */ - atomic_dec(&queue_depth); - - /* - * Send the request again. - */ - i2ob_send(retry_msg, dev,ireq,i2ob[unit].start_sect, (unit&0xF0)); + /* + * Decrement the queue depth since + * this request has completed and + * it will be incremented again when + * i2ob_send is called below. + */ + atomic_dec(&queue_depth); + + /* + * Send the request again. + */ + i2ob_send(retry_msg, dev,ireq,i2ob[unit].start_sect, (unit&0xF0)); /* * Don't fall through. */ @@ -382,7 +483,6 @@ } else ireq->req->errors = 0; - } /* * Dequeue the request. We use irqsave locks as one day we @@ -402,9 +502,148 @@ spin_unlock_irqrestore(&io_request_lock, flags); } + +/* + * Event handler. Needs to be a separate thread b/c we may have + * to do things like scan a partition table, or query parameters + * which cannot be done from an interrupt or from a bottom half. + */ +static int i2ob_evt(void *dummy) +{ + unsigned int evt; + unsigned int flags; + int unit; + int i; + struct fs_struct *fs; + + lock_kernel(); + + exit_files(current); + exit_mm(current); + current->session = 1; + current->pgrp = 1; + /* Become as one with the init task */ + exit_fs(current); + fs = init_task.fs; + current->fs = fs; + atomic_inc(&fs->count); + + unlock_kernel(); + + strcpy(current->comm, "i2oblock"); + evt_running = 1; + + while(1) + { + interruptible_sleep_on(&i2ob_evt_wait); + if(signal_pending(current)) { + evt_running = 0; + return 0; + } + + /* + * Keep another CPU/interrupt from overwriting the + * message while we're reading it + * + * We stuffed the unit in the TxContext and grab the event mask + * None of the BSA we care about events have EventData + */ + spin_lock_irqsave(&i2ob_evt_lock, flags); + unit = evt_msg[3]; + evt = evt_msg[4]; + spin_unlock_irqrestore(&i2ob_evt_lock, flags); + + switch(evt) + { + /* + * New volume loaded on same TID, so we just re-install. + * The TID/controller don't change as it is the same + * I2O device. It's just new media that we have to + * rescan. + */ + case I2O_EVT_IND_BSA_VOLUME_LOAD: + { + i2ob_install_device(i2ob_dev[unit].i2odev->controller, + i2ob_dev[unit].i2odev, unit); + break; + } + + /* + * No media, so set all parameters to 0 and set the media + * change flag. The I2O device is still valid, just doesn't + * have media, so we don't want to clear the controller or + * device pointer. + */ + case I2O_EVT_IND_BSA_VOLUME_UNLOAD: + { + for(i = unit; i <= unit+15; i++) + { + i2ob_sizes[i] = 0; + i2ob_hardsizes[i] = 0; + i2ob_max_sectors[i] = 0; + i2ob[i].nr_sects = 0; + i2ob_gendisk.part[i].nr_sects = 0; + } + i2ob_media_change_flag[unit] = 1; + break; + } + + case I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ: + printk(KERN_WARNING "%s: Attempt to eject locked media\n", + i2ob_dev[unit].i2odev->dev_name); + break; + + /* + * The capacity has changed and we are going to be + * updating the max_sectors and other information + * about this disk. We try a revalidate first. If + * the block device is in use, we don't want to + * do that as there may be I/Os bound for the disk + * at the moment. In that case we read the size + * from the device and update the information ourselves + * and the user can later force a partition table + * update through an ioctl. + */ + case I2O_EVT_IND_BSA_CAPACITY_CHANGE: + { + u64 size; + + if(do_i2ob_revalidate(MKDEV(MAJOR_NR, unit),0) != -EBUSY) + continue; + + if(i2ob_query_device(&i2ob_dev[unit], 0x0004, 0, &size, 8) !=0 ) + i2ob_query_device(&i2ob_dev[unit], 0x0000, 4, &size, 8); + + spin_lock_irqsave(&io_request_lock, flags); + i2ob_sizes[unit] = (int)(size>>10); + i2ob_gendisk.part[unit].nr_sects = size>>9; + i2ob[unit].nr_sects = (int)(size>>9); + spin_unlock_irqrestore(&io_request_lock, flags); + break; + } + + /* + * An event we didn't ask for. Call the card manufacturer + * and tell them to fix their firmware :) + */ + default: + printk(KERN_INFO "%s: Received event we didn't register for\n" + KERN_INFO " Call I2O card manufacturer\n", + i2ob_dev[unit].i2odev->dev_name); + break; + } + }; + + return 0; +} + + static struct i2o_handler i2o_block_handler = { i2o_block_reply, + i2ob_new_device, + i2ob_del_device, + i2ob_reboot_event, "I2O Block OSM", 0, I2O_CLASS_RANDOM_BLOCK_STORAGE @@ -423,7 +662,7 @@ /* * We cannot touch the request queue or the timer - * flag without holding the io_request_lock. + * flag without holding the io_request_lock. */ spin_lock_irqsave(&io_request_lock,flags); @@ -454,6 +693,7 @@ static void i2ob_request(struct request * q) { + unsigned long flags; struct request *req; struct i2ob_request *ireq; int unit; @@ -480,6 +720,22 @@ req = CURRENT; unit = MINOR(req->rq_dev); dev = &i2ob_dev[(unit&0xF0)]; + + /* + * Check to see if the request is for a deleted/non-existent + * device. If so return. + */ + if (dev->i2odev == NULL) + { + printk("I2O: ERROR I/O Request to a non existent device !\n"); + req->errors = 1; + CURRENT = CURRENT->next; + req->sem = NULL; + i2ob_end_request(req); + } + + else + { /* Get a message */ m = i2ob_get(dev); @@ -522,6 +778,7 @@ ireq->req = req; i2ob_send(m, dev, ireq, i2ob[unit].start_sect, (unit&0xF0)); + } } } @@ -545,12 +802,12 @@ temp = cylinders * sectors; /* Compute divisor for heads */ heads = capacity / temp; /* Compute value for number of heads */ if (capacity % temp) { /* If no remainder, done! */ - heads++; /* Else, increment number of heads */ + heads++; /* Else, increment number of heads */ temp = cylinders * heads; /* Compute divisor for sectors */ sectors = capacity / temp; /* Compute value for sectors per - track */ + track */ if (capacity % temp) { /* If no remainder, done! */ - sectors++; /* Else, increment number of sectors */ + sectors++; /* Else, increment number of sectors */ temp = heads * sectors; /* Compute divisor for cylinders */ cylinders = capacity / temp;/* Compute number of cylinders */ } @@ -695,6 +952,24 @@ if (minor >= (MAX_I2OB<<4)) return -ENODEV; dev = &i2ob_dev[(minor&0xF0)]; + + /* + * This is to deal with the case of an application + * opening a device and then the device dissapears while + * it's in use, and then the application tries to release + * it. ex: Unmounting a deleted RAID volume at reboot. + * If we send messages, it will just cause FAILs since + * the TID no longer exists. + */ + if(!dev->i2odev) + { + printk(KERN_INFO "I2O : ERROR No such Device\n"); + return 0; + } + + /* Sync the device so we don't get errors */ + fsync_dev(inode->i_rdev); + if (dev->refcnt <= 0) printk(KERN_ALERT "i2ob_release: refcount(%d) <= 0\n", dev->refcnt); dev->refcnt--; @@ -727,7 +1002,7 @@ /* * Now unclaim the device. */ - if (i2o_release_device(dev->i2odev, &i2o_block_handler, I2O_CLAIM_PRIMARY)<0) + if (i2o_release_device(dev->i2odev, &i2o_block_handler)<0) printk(KERN_ERR "i2ob_release: controller rejected unclaim.\n"); } @@ -759,7 +1034,7 @@ int *query_done; - if(i2o_claim_device(dev->i2odev, &i2o_block_handler, I2O_CLAIM_PRIMARY)<0) + if(i2o_claim_device(dev->i2odev, &i2o_block_handler)<0) { dev->refcnt--; return -EBUSY; @@ -819,11 +1094,16 @@ struct i2ob_device *dev=&i2ob_dev[unit]; int i; + /* + * For logging purposes... + */ + printk(KERN_INFO "i2ob: Installing tid %d device at unit %d\n", + d->lct_data.tid, unit); + /* * Ask for the current media data. If that isn't supported * then we ask for the device capacity data */ - if(i2ob_query_device(dev, 0x0004, 1, &blocksize, 4) != 0 || i2ob_query_device(dev, 0x0004, 0, &size, 8) !=0 ) { @@ -835,23 +1115,38 @@ i2ob_query_device(dev, 0x0000, 6, &status, 4); i2ob_sizes[unit] = (int)(size>>10); i2ob_hardsizes[unit] = blocksize; + i2ob_gendisk.part[unit].nr_sects = size>>9; + i2ob[unit].nr_sects = (int)(size>>9); - limit=4096; /* 8 deep scatter gather */ + /* Set limit based on inbound frame size */ + limit = (d->controller->status_block->inbound_frame_size - 8)/2; + limit = limit<<9; + + /* + * Max number of Scatter-Gather Elements + */ + i2ob_dev[unit].max_segments = + (d->controller->status_block->inbound_frame_size - 8)/2; + + printk(KERN_INFO "Max Segments set to %d\n", + i2ob_dev[unit].max_segments); + printk(KERN_INFO "Byte limit is %d.\n", limit); + + for(i=unit;i<=unit+15;i++) + { + i2ob_max_sectors[i]=MAX_SECTORS; + i2ob_dev[i].max_segments = + (d->controller->status_block->inbound_frame_size - 8)/2; } - printk("Byte limit is %d.\n", limit); - - for(i=unit;i<=unit+15;i++) - i2ob_max_sectors[i]=(limit>>9); - - i2ob[unit].nr_sects = (int)(size>>9); i2ob_query_device(dev, 0x0000, 0, &type, 1); sprintf(d->dev_name, "%s%c", i2ob_gendisk.major_name, 'a' + (unit>>4)); - printk("%s: ", d->dev_name); + printk(KERN_INFO "%s: ", d->dev_name); + if(status&(1<<10)) - printk("RAID "); + printk("(RAID) "); switch(type) { case 0: printk("Disk Storage");break; @@ -864,10 +1159,10 @@ if(((flags & (1<<3)) && !(status & (1<<3))) || ((flags & (1<<4)) && !(status & (1<<4)))) { - printk(" Not loaded.\n"); - return 0; + printk(KERN_INFO " Not loaded.\n"); + return 1; } - printk(" %dMb, %d byte sectors", + printk("- %dMb, %d byte sectors", (int)(size>>20), blocksize); if(status&(1<<0)) { @@ -880,9 +1175,18 @@ printk(", %dKb cache", cachesize); } printk(".\n"); - printk("%s: Maximum sectors/read set to %d.\n", + printk(KERN_INFO "%s: Maximum sectors/read set to %d.\n", d->dev_name, i2ob_max_sectors[unit]); + resetup_one_dev(&i2ob_gendisk, unit>>4); + + /* + * Register for the events we're interested in and that the + * device actually supports. + */ + i2o_event_register(c, d->lct_data.tid, i2ob_context, unit, + (I2OB_EVENT_MASK & d->lct_data.event_capabilities)); + return 0; } @@ -902,12 +1206,20 @@ for(d=c->devices;d!=NULL;d=d->next) { - if(d->lct_data->class_id!=I2O_CLASS_RANDOM_BLOCK_STORAGE) + if(d->lct_data.class_id!=I2O_CLASS_RANDOM_BLOCK_STORAGE) continue; - if(d->lct_data->user_tid != 0xFFF) + if(d->lct_data.user_tid != 0xFFF) continue; + if(i2o_claim_device(d, &i2o_block_handler)) + { + printk(KERN_WARNING "i2o_block: Controller %d, TID %d\n", c->unit, + d->lct_data.tid); + printk(KERN_WARNING "\tDevice refused claim! Skipping installation\n"); + continue; + } + if(uniti2odev = d; dev->controller = c; - dev->tid = d->lct_data->tid; + dev->unit = c->unit; + dev->tid = d->lct_data.tid; - /* - * Insure the device can be claimed - * before installing it. - */ - if(i2o_claim_device(dev->i2odev, &i2o_block_handler, I2O_CLAIM_PRIMARY )==0) - { - printk(KERN_INFO "Claimed Dev %p Tid %d Unit %d\n",dev,dev->tid,unit); - i2ob_install_device(c,d,unit); - unit+=16; - - /* - * Now that the device has been - * installed, unclaim it so that - * it can be claimed by either - * the block or scsi driver. - */ - if(i2o_release_device(dev->i2odev, &i2o_block_handler, I2O_CLAIM_PRIMARY)) - printk(KERN_INFO "Could not unclaim Dev %p Tid %d\n",dev,dev->tid); - } - else - printk(KERN_INFO "TID %d not claimed\n",dev->tid); + if(i2ob_install_device(c,d,unit)) + printk(KERN_WARNING "Could not install I2O block device\n"); + else + { + unit+=16; + i2ob_dev_count++; + + /* We want to know when device goes away */ + i2o_device_notify_on(d, &i2o_block_handler); + } } else { - if(!warned++) - printk("i2o_block: too many device, registering only %d.\n", unit>>4); + if(!warned++) + printk(KERN_WARNING "i2o_block: too many device, registering only %d.\n", unit>>4); } + i2o_release_device(d, &i2o_block_handler); } i2o_unlock_controller(c); } - i2ob_devices = unit; } /* + * New device notification handler. Called whenever a new + * I2O block storage device is added to the system. + * + * Should we spin lock around this to keep multiple devs from + * getting updated at the same time? + * + */ + +void i2ob_new_device(struct i2o_controller *c, struct i2o_device *d) +{ + struct i2ob_device *dev; + int unit = 0; + + printk(KERN_INFO "i2o_block: New device detected\n"); + printk(KERN_INFO " Controller %d Tid %d\n",c->unit, d->lct_data.tid); + + /* Check for available space */ + if(i2ob_dev_count>=MAX_I2OB<<4) + { + printk(KERN_ERR "i2o_block: No more devices allowed!\n"); + return; + } + for(unit = 0; unit < (MAX_I2OB<<4); unit += 16) + { + if(!i2ob_dev[unit].i2odev) + break; + } + + /* + * Creating a RAID 5 volume takes a little while and the UTIL_CLAIM + * will fail if we don't give the card enough time to do it's magic, + * so we just sleep for a little while and let it do it's thing + */ + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(3*HZ); + + if(i2o_claim_device(d, &i2o_block_handler)) + { + printk(KERN_INFO + "i2o_block: Unable to claim device. Installation aborted\n"); + return; + } + + dev = &i2ob_dev[unit]; + dev->i2odev = d; + dev->controller = c; + dev->tid = d->lct_data.tid; + + if(i2ob_install_device(c,d,unit)) + printk(KERN_ERR "i2o_block: Could not install new device\n"); + else + { + i2ob_dev_count++; + i2o_device_notify_on(d, &i2o_block_handler); + } + + i2o_release_device(d, &i2o_block_handler); + + return; +} + +/* + * Deleted device notification handler. Called when a device we + * are talking to has been deleted by the user or some other + * mysterious fource outside the kernel. + */ +void i2ob_del_device(struct i2o_controller *c, struct i2o_device *d) +{ + int unit = 0; + int i = 0; + int flags; + + spin_lock_irqsave(&io_request_lock, flags); + + /* + * Need to do this...we somtimes get two events from the IRTOS + * in a row and that causes lots of problems. + */ + + i2o_device_notify_off(d, &i2o_block_handler); + + printk(KERN_INFO "I2O Block Device Deleted\n"); + + for(unit = 0; unit < MAX_I2OB<<4; unit += 16) + { + if(i2ob_dev[unit].i2odev == d) + { + printk(KERN_INFO " /dev/%s: Controller %d Tid %d\n", + d->dev_name, c->unit, d->lct_data.tid); + break; + } + } + if(unit >= MAX_I2OB<<4) + { + printk(KERN_ERR "i2ob_del_device called, but not in dev table!\n"); + return; + } + + for(i = unit; i <= unit+15; i++) + { + i2ob_dev[i].i2odev = NULL; + i2ob_sizes[i] = 0; + i2ob_hardsizes[i] = 0; + i2ob_max_sectors[i] = 0; + i2ob[i].nr_sects = 0; + i2ob_gendisk.part[i].nr_sects = 0; + } + spin_unlock_irqrestore(&io_request_lock, flags); + + /* + * Sync the device...this will force all outstanding I/Os + * to attempt to complete, thus causing error messages. + * We have to do this as the user could immediatelly create + * a new volume that gets assigned the same minor number. + * If there are still outstanding writes to the device, + * that could cause data corruption on the new volume! + * + * The truth is that deleting a volume that you are currently + * accessing will do _bad things_ to your system. This + * handler will keep it from crashing, but must probably + * you'll have to do a 'reboot' to get the system running + * properly. Deleting disks you are using is dumb. + * Umount them first and all will be good! + * + * It's not this driver's job to protect the system from + * dumb user mistakes :) + */ + if(i2ob_dev[unit].refcnt) + fsync_dev(MKDEV(MAJOR_NR,unit)); + + /* + * Decrease usage count for module + */ + while(i2ob_dev[unit].refcnt--) + MOD_DEC_USE_COUNT; + + i2ob_dev[unit].refcnt = 0; + + i2ob_dev[i].tid = 0; + + /* + * Do we need this? + * The media didn't really change...the device is just gone + */ + i2ob_media_change_flag[unit] = 1; + + i2ob_dev_count--; + + return; +} + + + +/* * Have we seen a media change ? */ @@ -973,12 +1429,10 @@ return do_i2ob_revalidate(dev, 0); } -static int i2ob_reboot_event(struct notifier_block *n, unsigned long code, void *p) +static void i2ob_reboot_event(void) { int i; - if(code != SYS_RESTART && code != SYS_HALT && code != SYS_POWER_OFF) - return NOTIFY_DONE; for(i=0;icontroller, msg, 20, 2); } } - return NOTIFY_DONE; } -struct notifier_block i2ob_reboot_notifier = -{ - i2ob_reboot_event, - NULL, - 0 -}; - static struct file_operations i2ob_fops = { NULL, /* lseek - default */ @@ -1070,19 +1516,19 @@ { int i; - printk(KERN_INFO "I2O Block Storage OSM v0.07. (C) 1999 Red Hat Software.\n"); + printk(KERN_INFO "I2O Block Storage OSM v0.9. (C) 1999 Red Hat Software.\n"); /* * Register the block device interfaces */ if (register_blkdev(MAJOR_NR, "i2o_block", &i2ob_fops)) { - printk("Unable to get major number %d for i2o_block\n", - MAJOR_NR); + printk(KERN_ERR "Unable to get major number %d for i2o_block\n", + MAJOR_NR); return -EIO; } #ifdef MODULE - printk("i2o_block: registered device at major %d\n", MAJOR_NR); + printk(KERN_INFO "i2o_block: registered device at major %d\n", MAJOR_NR); #endif /* @@ -1142,13 +1588,25 @@ } i2ob_context = i2o_block_handler.context; + /* + * Initialize event handling thread + */ + sema_init(&i2ob_evt_sem, 0); + evt_pid = kernel_thread(i2ob_evt, NULL, CLONE_SIGHAND); + if(evt_pid < 0) + { + printk(KERN_ERR + "i2o_block: Could not initialize event thread. Aborting\n"); + i2o_remove_handler(&i2o_block_handler); + return 0; + } + + /* * Finally see what is actually plugged in to our controllers */ - i2ob_probe(); - register_reboot_notifier(&i2ob_reboot_notifier); return 0; } @@ -1161,9 +1619,22 @@ void cleanup_module(void) { struct gendisk **gdp; + int i; - unregister_reboot_notifier(&i2ob_reboot_notifier); - + /* + * Unregister for updates from any devices..otherwise we still + * get them and the core jumps to random memory :O + */ + if(i2ob_dev_count) { + struct i2o_device *d; + for(i = 0; i < MAX_I2OB; i++) + if((d=i2ob_dev[i<<4].i2odev)) { + i2o_device_notify_off(d, &i2o_block_handler); + i2o_event_register(d->controller, d->lct_data.tid, + i2ob_context, i<<4, 0); + } + } + /* * Flush the OSM */ @@ -1175,6 +1646,21 @@ */ if (unregister_blkdev(MAJOR_NR, "i2o_block") != 0) printk("i2o_block: cleanup_module failed\n"); + + if(evt_running) { + i = kill_proc(evt_pid, SIGTERM, 1); + if(!i) { + int count = 5 * 100; + while(evt_running && --count) { + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(1); + } + + if(!count) + printk(KERN_ERR "Giving up on i2oblock thread...\n"); + } + +} /* * Why isnt register/unregister gendisk in the kernel ??? diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/i2o/i2o_config.c linux.16p3/drivers/i2o/i2o_config.c --- linux.vanilla/drivers/i2o/i2o_config.c Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/i2o/i2o_config.c Wed Apr 19 14:25:10 2000 @@ -85,8 +85,19 @@ { u32 *msg = (u32 *)m; - if (msg[0] & (1<<13)) +// if (msg[0] & (1<<13)) + if (msg[0] & MSG_FAIL) { + u32 *preserved_msg = (u32*)(c->mem_offset + msg[7]); + printk(KERN_ERR "i2o_config: IOP failed to process the msg.\n"); + /* Release the preserved msg frame by resubmitting it as a NOP */ + + preserved_msg[0] = THREE_WORD_MSG_SIZE | SGL_OFFSET_0; + preserved_msg[1] = I2O_CMD_UTIL_NOP << 24 | HOST_TID << 12 | 0; + preserved_msg[2] = 0; + i2o_post_message(c, msg[7]); + } + if (msg[4] >> 24) // RegStatus != SUCCESS i2o_report_status(KERN_INFO,"i2o_config",msg); @@ -166,6 +177,9 @@ struct i2o_handler cfg_handler= { i2o_cfg_reply, + NULL, + NULL, + NULL, "Configuration", 0, 0xffffffff // All classes @@ -416,7 +430,8 @@ if (len < 0) { kfree(res); - return len; /* -DetailedStatus */ + //return len; /* -DetailedStatus */ + return -EAGAIN; } put_user(len, kcmd.reslen); @@ -749,7 +764,7 @@ /* Device exists? */ for(d = iop->devices; d; d = d->next) - if(d->lct_data->tid == kdesc.tid) + if(d->lct_data.tid == kdesc.tid) break; if(!d) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/i2o/i2o_core.c linux.16p3/drivers/i2o/i2o_core.c --- linux.vanilla/drivers/i2o/i2o_core.c Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/i2o/i2o_core.c Mon May 1 00:33:29 2000 @@ -18,6 +18,7 @@ * Juha Sievänen * Auvo Häkkinen * Deepak Saxena + * Boji Tony Kannanthanam */ #include @@ -26,17 +27,25 @@ #include #include +#include #include #include #include #include +#include #include #include +#include #include +#include +#include +#include +#include #include +#include // #define DRIVERDEBUG // #define DEBUG_IRQ @@ -47,10 +56,11 @@ * Size of the I2O module table */ -static struct i2o_handler *i2o_handlers[MAX_I2O_MODULES]; -static struct i2o_controller *i2o_controllers[MAX_I2O_CONTROLLERS]; -struct i2o_controller *i2o_controller_chain; +static struct i2o_handler *i2o_handlers[MAX_I2O_MODULES]= {NULL}; +static struct i2o_controller *i2o_controllers[MAX_I2O_CONTROLLERS] = {NULL}; +struct i2o_controller *i2o_controller_chain = NULL; int i2o_num_controllers = 0; +/* Initiator Context for Core Message */ static int core_context = 0; static int i2o_activate_controller(struct i2o_controller *iop); @@ -58,18 +68,27 @@ static int i2o_init_outbound_q(struct i2o_controller *c); static void i2o_core_reply(struct i2o_handler *, struct i2o_controller *, struct i2o_message *); -static int i2o_add_management_user(struct i2o_device *, struct i2o_handler *); -static int i2o_remove_management_user(struct i2o_device *, struct i2o_handler *); void i2o_dump_message(u32 *msg); static int i2o_issue_claim(struct i2o_controller *, int, int, int, u32); static int i2o_reset_controller(struct i2o_controller *); static int i2o_lct_get(struct i2o_controller *); +static int i2o_lct_notify(struct i2o_controller *); static int i2o_hrt_get(struct i2o_controller *); +/* Dynamic LCT update handler */ +static int i2o_dyn_lct(void *); + +/* I2O core event handler */ +static int i2o_core_evt(void *); +static int evt_pid; +static int evt_running; + static void i2o_sys_init(void); static void i2o_sys_shutdown(void); +static int i2o_clear_controller(struct i2o_controller *); +static int i2o_reboot_event(struct notifier_block *, unsigned long, void *); static int i2o_build_sys_table(void); static int i2o_systab_send(struct i2o_controller *c); @@ -86,6 +105,14 @@ static int sys_tbl_ind = 0; static int sys_tbl_len = 0; +/* + * This spin lock is used to keep a device from being + * added and deleted concurrently across CPUs or interrupts. + * This can occur when a user creates a device and immediatelly + * deletes it before the new_dev_notify() handler is called. + */ +static spinlock_t i2o_dev_lock = SPIN_LOCK_UNLOCKED; + #ifdef MODULE /* * Function table to send to bus specific layers @@ -128,10 +155,29 @@ static struct i2o_handler i2o_core_handler = { (void *)i2o_core_reply, - "I2O core layer", - 0 + NULL, + NULL, + NULL, + "I2O core layer", + 0, + I2O_CLASS_EXECUTIVE +}; + +/* + * Used when queing a reply to be handled later + */ +struct reply_info +{ + struct i2o_controller *iop; + u32 msg[MSG_FRAME_SIZE]; }; +static struct reply_info evt_reply; +static struct reply_info events[I2O_EVT_Q_LEN]; +static int evt_in = 0; +static int evt_out = 0; +static int evt_q_len = 0; +#define MODINC(x,y) (x = x++ % y) /* * I2O configuration spinlock. This isnt a big deal for contention @@ -140,6 +186,28 @@ static spinlock_t i2o_configuration_lock = SPIN_LOCK_UNLOCKED; + +/* + * Event spinlock. Used to keep event queue sane and from + * handling multiple events simultaneously. + */ +static spinlock_t i2o_evt_lock = SPIN_LOCK_UNLOCKED; + +/* + * Semaphore used to syncrhonize event handling thread with + * interrupt handler. + */ +DECLARE_MUTEX(evt_sem); +DECLARE_WAIT_QUEUE_HEAD(evt_wait); + +static struct notifier_block i2o_reboot_notifier = +{ + i2o_reboot_event, + NULL, + 0 +}; + + /* * I2O Core reply handler * @@ -157,19 +225,36 @@ #endif if (msg[0] & (1<<13)) // Fail bit is set - { - printk(KERN_ERR "%s: Failed to process the msg:\n",c->name); - printk(KERN_ERR " Cmd = 0x%02X, InitiatorTid = %d, TargetTid =%d\n", - (msg[1] >> 24) & 0xFF, (msg[1] >> 12) & 0xFFF, msg[1] & - 0xFFF); - printk(KERN_ERR " FailureCode = 0x%02X\n Severity = 0x%02X\n" - "LowestVersion = 0x%02X\n HighestVersion = 0x%02X\n", - msg[4] >> 24, (msg[4] >> 16) & 0xFF, - (msg[4] >> 8) & 0xFF, msg[4] & 0xFF); - printk(KERN_ERR " FailingHostUnit = 0x%04X\n FailingIOP = 0x%03X\n", - msg[5] >> 16, msg[5] & 0xFFF); - return; - } + { + u32 *preserved_msg = (u32*)(c->mem_offset + msg[7]); + + printk(KERN_ERR "%s: Failed to process the msg:\n",c->name); + printk(KERN_ERR " Cmd = 0x%02X, InitiatorTid = %d, TargetTid =%d\n", + (msg[1] >> 24) & 0xFF, (msg[1] >> 12) & 0xFFF, msg[1] & + 0xFFF); + printk(KERN_ERR " FailureCode = 0x%02X\n Severity = 0x%02X\n" + "LowestVersion = 0x%02X\n HighestVersion = 0x%02X\n", + msg[4] >> 24, (msg[4] >> 16) & 0xFF, + (msg[4] >> 8) & 0xFF, msg[4] & 0xFF); + printk(KERN_ERR " FailingHostUnit = 0x%04X\n FailingIOP = 0x%03X\n", + msg[5] >> 16, msg[5] & 0xFFF); + + /* If the failed request needs special treatment, + * it should be done here. */ + + /* Release the preserved msg by resubmitting it as a NOP */ + + preserved_msg[0] = THREE_WORD_MSG_SIZE | SGL_OFFSET_0; + preserved_msg[1] = I2O_CMD_UTIL_NOP << 24 | HOST_TID << 12 | 0; + preserved_msg[2] = 0; + + i2o_post_message(c, msg[7]); + + + /* If reply to i2o_post_wait failed, return causes a timeout */ + + return; + } if(msg[2]&0x80000000) // Post wait message { @@ -182,7 +267,46 @@ status = I2O_POST_WAIT_OK; i2o_post_wait_complete(context, status); + return; } + + if(m->function == I2O_CMD_UTIL_EVT_REGISTER) + { + memcpy(events[evt_in].msg, msg, MSG_FRAME_SIZE); + events[evt_in].iop = c; + + spin_lock(&i2o_evt_lock); + MODINC(evt_in, I2O_EVT_Q_LEN); + if(evt_q_len == I2O_EVT_Q_LEN) + MODINC(evt_out, I2O_EVT_Q_LEN); + else + evt_q_len++; + spin_unlock(&i2o_evt_lock); + + up(&evt_sem); + wake_up_interruptible(&evt_wait); + return; + } + + if(m->function == I2O_CMD_LCT_NOTIFY) + { + up(&c->lct_sem); + return; + } + + /* + * If this happens, we want to dump the message to the syslog so + * it can be sent back to the card manufacturer by the end user + * to aid in debugging. + * + */ + printk(KERN_WARNING "%s: Unsolicited message reply sent to core!" + "Message dumped to syslog\n", + c->name); + i2o_dump_message(msg); + + return; + } /* @@ -243,15 +367,44 @@ int __i2o_delete_device(struct i2o_device *d) { struct i2o_device **p; + int i; p=&(d->controller->devices); /* * Hey we have a driver! + * Check to see if the driver wants us to notify it of + * device deletion. If it doesn't we assume that it + * is unsafe to delete a device with an owner and + * fail. */ if(d->owner) + { + if(d->owner->dev_del_notify) + { + dprintk((KERN_INFO "Device has owner, notifying\n")); + d->owner->dev_del_notify(d->controller, d); + if(d->owner) + { + printk(KERN_WARNING "Driver \"%s\" did not release device!\n", d->owner->name); + return -EBUSY; + } + } + else return -EBUSY; + } + + /* + * Tell any other users who are talking to this device + * that it's going away. We assume that everything works. + */ + for(i=0; i < I2O_MAX_MANAGERS; i++) + { + if(d->managers[i] && d->managers[i]->dev_del_notify) + d->managers[i]->dev_del_notify(d->controller, d); + } + /* * Seek, locate @@ -299,15 +452,22 @@ { if(i2o_controllers[i]==NULL) { - i2o_controllers[i]=c; - c->next=i2o_controller_chain; - i2o_controller_chain=c; - c->unit = i; + i2o_controllers[i]=c; + c->devices = NULL; + c->next=i2o_controller_chain; + i2o_controller_chain=c; + c->unit = i; + c->page_frame = NULL; + c->hrt = NULL; + c->lct = NULL; + c->dlct = (i2o_lct*)kmalloc(8192, GFP_KERNEL); + c->status_block = NULL; + sprintf(c->name, "i2o/iop%d", i); + i2o_num_controllers++; + sema_init(&c->lct_sem, 0); + spin_unlock(&i2o_configuration_lock); + return 0; - sprintf(c->name, "i2o/iop%d", i); - i2o_num_controllers++; - spin_unlock(&i2o_configuration_lock); - return 0; } } printk(KERN_ERR "No free i2o controller slots.\n"); @@ -320,6 +480,13 @@ struct i2o_controller **p; int users; char name[16]; + int stat; + + /* + * Clear event registration as this can cause weird behavior + */ + if(c->status_block->iop_state == ADAPTER_STATE_OPERATIONAL) + i2o_event_register(c, core_context, 0, 0, 0); spin_lock(&i2o_configuration_lock); if((users=atomic_read(&c->users))) @@ -340,14 +507,35 @@ } } + + /* + * If this is shutdown time, the thread's already been killed + */ + if(c->lct_running) { + stat = kill_proc(c->lct_pid, SIGTERM, 1); + if(!stat) { + int count = 10 * 100; + while(c->lct_running && --count) { + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(1); + } + + if(!count) + printk(KERN_ERR + "%s: LCT thread still running!\n", + c->name); + } + } + p=&i2o_controller_chain; while(*p) { if(*p==c) { - /* Ask the IOP to switch into RESET state */ - i2o_reset_controller(c); + /* Ask the IOP to switch to HOLD state */ + if (i2o_clear_controller(c) < 0) + printk(KERN_ERR "Unable to clear iop%d\n", c->unit); /* Release IRQ */ c->destructor(c); @@ -363,6 +551,8 @@ kfree(c->lct); if(c->status_block) kfree(c->status_block); + if(c->dlct) + kfree(c->dlct); i2o_controllers[c->unit]=NULL; memcpy(name, c->name, strlen(c->name)+1); @@ -405,117 +595,99 @@ * Claim a device for use as either the primary user or just * as a management/secondary user */ -int i2o_claim_device(struct i2o_device *d, struct i2o_handler *h, u32 type) +int i2o_claim_device(struct i2o_device *d, struct i2o_handler *h) { - /* Device already has a primary user or too many managers */ - if((type == I2O_CLAIM_PRIMARY && d->owner) || - (d->num_managers == I2O_MAX_MANAGERS)) - { - return -EBUSY; - } + spin_lock(&i2o_configuration_lock); - if(i2o_issue_claim(d->controller,d->lct_data->tid, h->context, 1, type)) + if(d->owner) { + printk(KERN_INFO "issue claim called, but dev has owner!"); + spin_unlock(&i2o_configuration_lock); return -EBUSY; } - spin_lock(&i2o_configuration_lock); - if(d->owner) + if(i2o_issue_claim(d->controller,d->lct_data.tid, h->context, 1, I2O_CLAIM_PRIMARY)) { spin_unlock(&i2o_configuration_lock); return -EBUSY; } - atomic_inc(&d->controller->users); - - if(type == I2O_CLAIM_PRIMARY) - d->owner=h; - else - if (i2o_add_management_user(d, h)) - printk(KERN_WARNING "i2o: Too many managers for TID %d\n", - d->lct_data->tid); - + d->owner=h; spin_unlock(&i2o_configuration_lock); return 0; } -int i2o_release_device(struct i2o_device *d, struct i2o_handler *h, u32 type) +int i2o_release_device(struct i2o_device *d, struct i2o_handler *h) { int err = 0; spin_lock(&i2o_configuration_lock); - - /* Primary user */ - if(type == I2O_CLAIM_PRIMARY) + if(d->owner != h) { - if(d->owner != h) - err = -ENOENT; - else - { - if(i2o_issue_claim(d->controller, d->lct_data->tid, h->context, 0, - type)) - { - err = -ENXIO; - } - else - { - d->owner = NULL; - atomic_dec(&d->controller->users); - } - } - spin_unlock(&i2o_configuration_lock); - return err; + return -ENOENT; } - /* Management or other user */ - if(i2o_remove_management_user(d, h)) - err = -ENOENT; - else + if(i2o_issue_claim(d->controller, d->lct_data.tid, h->context, 0, + I2O_CLAIM_PRIMARY)) { - atomic_dec(&d->controller->users); - - if(i2o_issue_claim(d->controller,d->lct_data->tid, h->context, 0, - type)) - err = -ENXIO; + err = -ENXIO; } + d->owner = NULL; + spin_unlock(&i2o_configuration_lock); return err; } -int i2o_add_management_user(struct i2o_device *d, struct i2o_handler *h) + +/* + * Called by OSMs to let the core know that they want to be + * notified if the given device is deleted from the system. + */ +int i2o_device_notify_on(struct i2o_device *d, struct i2o_handler *h) { - int i; + int i; - if(d->num_managers == I2O_MAX_MANAGERS) - return 1; + if(d->num_managers == I2O_MAX_MANAGERS) + return -ENOSPC; - for(i = 0; i < I2O_MAX_MANAGERS; i++) - if(!d->managers[i]) - d->managers[i] = h; - - d->num_managers++; - - return 0; + for(i = 0; i < I2O_MAX_MANAGERS; i++) + { + if(!d->managers[i]) + { + d->managers[i] = h; + break; + } + } + + d->num_managers++; + + return 0; } -int i2o_remove_management_user(struct i2o_device *d, struct i2o_handler *h) +/* + * Called by OSMs to let the core know that they no longer + * are interested in the fate of the given device. + */ +int i2o_device_notify_off(struct i2o_device *d, struct i2o_handler *h) { - int i; + int i; - for(i=0; i < I2O_MAX_MANAGERS; i++) - { - if(d->managers[i] == h) - { - d->managers[i] = NULL; - return 0; - } - } + for(i=0; i < I2O_MAX_MANAGERS; i++) + { + if(d->managers[i] == h) + { + d->managers[i] = NULL; + d->num_managers--; + return 0; + } + } - return -ENOENT; + return -ENOENT; } + /* * This is called by the bus specific driver layer when an interrupt * or poll of this card interface is desired. @@ -679,10 +851,14 @@ * Dump the information block associated with a given unit (TID) */ -void i2o_report_controller_unit(struct i2o_controller *c, int unit) +void i2o_report_controller_unit(struct i2o_controller *c, struct i2o_device *d) { char buf[64]; - + char str[22]; + int unit = d->lct_data.tid; + + printk(KERN_INFO "Target ID %d.\n", unit); + if(i2o_query_scalar(c, unit, 0xF100, 3, buf, 16)>=0) { buf[16]=0; @@ -691,20 +867,38 @@ if(i2o_query_scalar(c, unit, 0xF100, 4, buf, 16)>=0) { buf[16]=0; - printk(" Device: %s", buf); + printk(KERN_INFO " Device: %s", buf); } #if 0 if(i2o_query_scalar(c, unit, 0xF100, 5, buf, 16)>=0) { buf[16]=0; - printk("Description: %s", buf); + printk(KERN_INFO "Description: %s", buf); } #endif if(i2o_query_scalar(c, unit, 0xF100, 6, buf, 8)>=0) { buf[8]=0; - printk(" Rev: %s\n", buf); + printk(KERN_INFO " Rev: %s\n", buf); } + + printk(KERN_INFO " Class: "); + sprintf(str, "%-21s", i2o_get_class_name(d->lct_data.class_id)); + printk(KERN_INFO "%s\n", str); + + printk(KERN_INFO " Subclass: 0x%04X\n", d->lct_data.sub_class); + printk(KERN_INFO " Flags: "); + + if(d->lct_data.device_flags&(1<<0)) + printk("C"); // ConfigDialog requested + if(d->lct_data.device_flags&(1<<1)) + printk("U"); // Multi-user capable + if(!(d->lct_data.device_flags&(1<<4))) + printk("P"); // Peer service enabled! + if(!(d->lct_data.device_flags&(1<<5))) + printk("M"); // Mgmt service enabled! + printk("\n"); + } @@ -816,9 +1010,7 @@ int i; int max; int tid; - u32 *p; struct i2o_device *d; - char str[22]; i2o_lct *lct = c->lct; if (lct == NULL) { @@ -847,35 +1039,15 @@ d->controller = c; d->next = NULL; - d->lct_data = &lct->lct_entry[i]; + memcpy(&d->lct_data, &lct->lct_entry[i], sizeof(i2o_lct_entry)); d->flags = 0; - tid = d->lct_data->tid; + tid = d->lct_data.tid; - printk(KERN_INFO "Target ID %d.\n", tid); - - i2o_report_controller_unit(c, tid); + i2o_report_controller_unit(c, d); i2o_install_device(c, d); - printk(KERN_INFO " Class: "); - - sprintf(str, "%-21s", i2o_get_class_name(d->lct_data->class_id)); - printk("%s", str); - - printk(" Subclass: 0x%04X Flags: ", - d->lct_data->sub_class); - - if(d->lct_data->device_flags&(1<<0)) - printk("C"); // ConfigDialog requested - if(d->lct_data->device_flags&(1<<1)) - printk("M"); // Multi-user capable - if(!(d->lct_data->device_flags&(1<<4))) - printk("P"); // Peer service enabled! - if(!(d->lct_data->device_flags&(1<<5))) - printk("m"); // Mgmt service enabled! - printk("\n"); - p+=9; } return 0; } @@ -890,6 +1062,8 @@ u32 msg[4]; int ret; + i2o_status_get(c); + /* SysQuiesce discarded if IOP not in READY or OPERATIONAL state */ if ((c->status_block->iop_state != ADAPTER_STATE_READY) && @@ -924,6 +1098,12 @@ u32 msg[4]; int ret; + i2o_status_get(c); + + /* Enable only allowed on READY state */ + if(c->status_block->iop_state != ADAPTER_STATE_READY) + return -EINVAL; + msg[0]=FOUR_WORD_MSG_SIZE|SGL_OFFSET_0; msg[1]=I2O_CMD_SYS_ENABLE<<24|HOST_TID<<12|ADAPTER_TID; /* msg[2] filled in i2o_post_wait */ @@ -1203,8 +1383,7 @@ msg[5]= virt_to_phys(c->hrt); /* Dump it here */ if ((ret = i2o_post_wait(c, msg, sizeof(msg), 20))) { - printk(KERN_ERR "%s: Unable to get HRT (status=%#10x)\n", - c->name, ret); + printk(KERN_ERR "%s: Unable to get HRT (status=%#10x)\n", c->name, ret); return ret; } @@ -1222,43 +1401,43 @@ static int i2o_systab_send(struct i2o_controller *iop) { - u32 msg[12]; - u32 privmem[2]; - u32 privio[2]; - int ret; + u32 msg[12]; + u32 privmem[2]; + u32 privio[2]; + int ret; /* See i2o_status_block */ #if 0 - iop->status->current_mem_base; - iop->status->current_mem_size; - iop->status->current_io_base; - iop->status->current_io_size; + iop->status->current_mem_base; + iop->status->current_mem_size; + iop->status->current_io_base; + iop->status->current_io_size; #endif /* FIXME */ - privmem[0]=iop->priv_mem; /* Private memory space base address */ - privmem[1]=iop->priv_mem_size; - privio[0]=iop->priv_io; /* Private I/O address */ - privio[1]=iop->priv_io_size; + privmem[0]=iop->priv_mem; /* Private memory space base address */ + privmem[1]=iop->priv_mem_size; + privio[0]=iop->priv_io; /* Private I/O address */ + privio[1]=iop->priv_io_size; msg[0] = I2O_MESSAGE_SIZE(12) | SGL_OFFSET_6; - msg[1] = I2O_CMD_SYS_TAB_SET<<24 | HOST_TID<<12 | ADAPTER_TID; + msg[1] = I2O_CMD_SYS_TAB_SET<<24 | HOST_TID<<12 | ADAPTER_TID; /* msg[2] filled in i2o_post_wait */ msg[3] = 0; - msg[4] = (0<<16) | ((iop->unit+2) << 12); /* Host 0 IOP ID (unit + 2) */ - msg[5] = 0; /* Segment 0 */ + msg[4] = (0<<16) | ((iop->unit+2) << 12); /* Host 0 IOP ID (unit + 2) */ + msg[5] = 0; /* Segment 0 */ - /* - * Provide three SGL-elements: - * System table (SysTab), Private memory space declaration and - * Private i/o space declaration + /* + * Provide three SGL-elements: + * System table (SysTab), Private memory space declaration and + * Private i/o space declaration */ - msg[6] = 0x54000000 | sys_tbl_len; - msg[7] = virt_to_phys(sys_tbl); - msg[8] = 0x54000000 | 0; - msg[9] = virt_to_phys(privmem); - msg[10] = 0xD4000000 | 0; - msg[11] = virt_to_phys(privio); + msg[6] = 0x54000000 | sys_tbl_len; + msg[7] = virt_to_phys(sys_tbl); + msg[8] = 0x54000000 | 0; + msg[9] = virt_to_phys(privmem); + msg[10] = 0xD4000000 | 0; + msg[11] = virt_to_phys(privio); if ((ret=i2o_post_wait(iop, msg, sizeof(msg), 120))) printk(KERN_INFO "%s: Unable to set SysTab (status=%#10x).\n", @@ -1310,6 +1489,26 @@ } /* Active IOPs now in OPERATIONAL state */ + /* + * Register for status updates from all IOPs + */ + for(iop = i2o_controller_chain; iop; iop=iop->next) { + + /* Create a kernel thread to deal with dynamic LCT updates */ + iop->lct_pid = kernel_thread(i2o_dyn_lct, iop, CLONE_SIGHAND); + + printk(KERN_INFO "event thread created as pid %d \n", iop->lct_pid); + + /* Update change ind on DLCT */ + iop->dlct->change_ind = iop->lct->change_ind; + + /* Start dynamic LCT updates */ + i2o_lct_notify(iop); + + /* Register for all events from IRTOS */ + i2o_event_register(iop, core_context, 0, 0, 0xFFFFFFFF); + } + } /* @@ -1337,10 +1536,10 @@ /* In READY state, Get status */ if (i2o_status_get(iop) < 0) { - printk("Unable to obtain status of IOP, attempting a reset.\n"); + printk(KERN_INFO "Unable to obtain status of IOP, attempting a reset.\n"); i2o_reset_controller(iop); if (i2o_status_get(iop) < 0) { - printk("IOP not responding.\n"); + printk(KERN_INFO "IOP not responding.\n"); i2o_delete_controller(iop); return -1; } @@ -1352,9 +1551,9 @@ return -1; } -// if (iop->status_block->iop_state == ADAPTER_STATE_HOLD || if (iop->status_block->iop_state == ADAPTER_STATE_READY || iop->status_block->iop_state == ADAPTER_STATE_OPERATIONAL || + iop->status_block->iop_state == ADAPTER_STATE_HOLD || iop->status_block->iop_state == ADAPTER_STATE_FAILED) { dprintk((KERN_INFO "%s: already running...trying to reset\n", @@ -1463,7 +1662,7 @@ for(i=0; i< NMBR_MSG_FRAMES; i++) { I2O_REPLY_WRITE32(c,m); - mb(); + mb(); m += MSG_FRAME_SIZE; } @@ -1512,14 +1711,38 @@ } } while (c->lct == NULL); - if ((ret=i2o_parse_lct(c)) < 0) - return ret; + if ((ret=i2o_parse_lct(c)) < 0) + return ret; return 0; } /* + * Like above, but used for async notification. The main + * difference is that we keep track of the CurrentChangeIndiicator + * so that we only get updates when it actually changes. + * + */ +int i2o_lct_notify(struct i2o_controller *c) +{ + u32 msg[8]; + + msg[0] = EIGHT_WORD_MSG_SIZE|SGL_OFFSET_6; + msg[1] = I2O_CMD_LCT_NOTIFY<<24 | HOST_TID<<12 | ADAPTER_TID; + msg[2] = core_context; + msg[3] = 0xDEADBEEF; + msg[4] = 0xFFFFFFFF; /* All devices */ + msg[5] = c->dlct->change_ind+1; /* Next change */ + msg[6] = 0xD0000000|8192; + msg[7] = virt_to_bus(c->dlct); + + return i2o_post_this(c, msg, sizeof(msg)); +} + + + +/* * Bring a controller online into OPERATIONAL state. */ @@ -1661,6 +1884,7 @@ struct i2o_post_wait_data *wait_data = kmalloc(sizeof(struct i2o_post_wait_data), GFP_KERNEL); + if(!wait_data) return -ENOMEM; @@ -1675,7 +1899,7 @@ spin_unlock_irqrestore(&post_wait_lock, flags); wait_data->wq = &wq_i2o_post; - wait_data->status = -EAGAIN; + wait_data->status = -ETIMEDOUT; msg[2]=0x80000000|(u32)core_context|((u32)wait_data->id<<16); @@ -1684,6 +1908,18 @@ status = wait_data->status; } + if(status == -ETIMEDOUT) + printk(KERN_INFO "POST WAIT TIMEOUT\n"); + + /* + * Remove the entry from the queue. + * Since i2o_post_wait() may have been called again by + * a different thread while we were waiting for this + * instance to complete, we're not guaranteed that + * this entry is at the head of the queue anymore, so + * we need to search for it, find it, and delete it. + */ + p2 = NULL; spin_lock_irqsave(&post_wait_lock, flags); for(p1 = post_wait_queue; p1; p2 = p1, p1 = p1->next) { @@ -1733,47 +1969,328 @@ } spin_unlock(&post_wait_lock); - printk(KERN_DEBUG "i2o: i2o_post_wait reply after timeout!"); + printk(KERN_DEBUG "i2o: i2o_post_wait reply after timeout!\n"); } /* * Send UTIL_EVENT messages */ -int i2o_event_register(struct i2o_controller *c, int tid, int context, - u32 evt_mask) +int i2o_event_register(struct i2o_controller *c, u32 tid, u32 init_context, + u32 tr_context, u32 evt_mask) { - u32 msg[5]; - - msg[0] = FIVE_WORD_MSG_SIZE | SGL_OFFSET_0; - msg[1] = I2O_CMD_UTIL_EVT_REGISTER << 24 | HOST_TID << 12 | tid; - msg[2] = context; - msg[3] = 0; - msg[4] = evt_mask; - - if (i2o_post_this(c, msg, sizeof(msg)) < 0) - return -ETIMEDOUT; + u32 msg[5]; - return 0; -} - -int i2o_event_ack(struct i2o_controller *c, int tid, int context, - u32 evt_indicator, void *evt_data, int evt_data_len) + msg[0] = FIVE_WORD_MSG_SIZE | SGL_OFFSET_0; + msg[1] = I2O_CMD_UTIL_EVT_REGISTER << 24 | HOST_TID << 12 | tid; + msg[2] = (u32) init_context; + msg[3] = (u32)tr_context ; + msg[4] = evt_mask; + + if (i2o_post_this(c, msg, sizeof(msg)) < 0) + return -ETIMEDOUT; + + return 0; +} + +int i2o_event_ack(struct i2o_controller *c, u32 *msg) +{ + struct i2o_message *m = (struct i2o_message *)msg; + + m->function = I2O_CMD_UTIL_EVT_ACK; + return i2o_post_wait(c, msg, m->size * 4, 2); + +} + +/* + * Core event handler. Runs as a separate thread and is woken + * up whenever there is an Executive class event. + */ +static int i2o_core_evt(void *reply_data) +{ + struct reply_info *reply = (struct reply_info *) reply_data; + u32 *msg = reply->msg; + struct i2o_controller *c = NULL; + int flags; + struct fs_struct *fs; + + lock_kernel(); + + dprintk((KERN_INFO "i2o_core_evt: I2O CORE Event thread at %p\n", +&i2o_core_evt)); + exit_files(current); + exit_mm(current); + current->session = 1; + current->pgrp = 1; + /* Become as one with the init task */ + exit_fs(current); + fs = init_task.fs; + current->fs = fs; + atomic_inc(&fs->count); + + unlock_kernel(); + + strcpy(current->comm, "i2oevtd"); + evt_running = 1; + + while(1) + { + down_interruptible(&evt_sem); + if(signal_pending(current)) + { + dprintk((KERN_INFO "I2O event thread dead\n")); + evt_running = 0; + return 0; + } + + /* + * Copy the data out of the queue so that we don't have to lock + * around the whole function and just around the qlen update + */ + spin_lock_irqsave(&i2o_evt_lock, flags); + memcpy(reply, &events[evt_out], sizeof(struct reply_info)); + MODINC(evt_out, I2O_EVT_Q_LEN); + evt_q_len--; + spin_unlock_irqrestore(&i2o_evt_lock, flags); + + c = reply->iop; + dprintk((KERN_INFO "I2O IRTOS EVENT: iop%d, event %#10x\n", c->unit, msg[4])); + + /* + * We do not attempt to delete/quiesce/etc. the controller if + * some sort of error indidication occurs. We may want to do + * so in the future, but for now we just let the user deal with + * it. One reason for this is that what to do with an error + * or when to send what ćrror is not really agreed on, so + * we get errors that may not be fatal but just look like they + * are...so let the user deal with it. + */ + switch(msg[4]) + { + case I2O_EVT_IND_EXEC_RESOURCE_LIMITS: + printk(KERN_ERR "iop%d: Out of resources\n", c->unit); + break; + + case I2O_EVT_IND_EXEC_POWER_FAIL: + printk(KERN_ERR "iop%d: Power failure\n", c->unit); + break; + + case I2O_EVT_IND_EXEC_HW_FAIL: + { + char *fail[] = + { + "Unknown Error", + "Power Lost", + "Code Violation", + "Parity Error", + "Code Execution Exception", + "Watchdog Timer Expired" + }; + + if(msg[5] <= 6) + printk(KERN_ERR "%s: Hardware Failure: %s\n", c->name, fail[msg[5]]); + else + printk(KERN_ERR "%s: Unknown Hardware Failure\n", c->name); + + break; + } + + /* + * New device created + * - Create a new i2o_device entry + * - Inform all interested drivers about this device's existence + */ + case I2O_EVT_IND_EXEC_NEW_LCT_ENTRY: + { + struct i2o_device *d = (struct i2o_device *) + kmalloc(sizeof(struct i2o_device), GFP_KERNEL); + int i; + + memcpy(&d->lct_data, &msg[5], sizeof(i2o_lct_entry)); + + d->next = NULL; + d->controller = c; + d->flags = 0; + + i2o_report_controller_unit(c, d); + i2o_install_device(c,d); + + for(i = 0; i < MAX_I2O_MODULES; i++) + { + if(i2o_handlers[i] && i2o_handlers[i]->new_dev_notify && (i2o_handlers[i]->class&d->lct_data.class_id)) + { + spin_lock(&i2o_dev_lock); + i2o_handlers[i]->new_dev_notify(c,d); + spin_unlock(&i2o_dev_lock); + } + } + + break; + } + + /* + * LCT entry for a device has been modified, so update it + * internally. + */ + case I2O_EVT_IND_EXEC_MODIFIED_LCT: + { + struct i2o_device *d; + i2o_lct_entry *new_lct = (i2o_lct_entry *)&msg[5]; + for(d = c->devices; d; d = d->next) + { + if(d->lct_data.tid == new_lct->tid) + { + memcpy(&d->lct_data, new_lct, sizeof(i2o_lct_entry)); + break; + } + } + break; + } + + case I2O_EVT_IND_CONFIGURATION_FLAG: + printk(KERN_WARNING "%s requires user configuration\n", c->name); + break; + + case I2O_EVT_IND_GENERAL_WARNING: + printk(KERN_WARNING "%s: Warning notification received! Check configuration for errors!\n", c->name); + break; + + default: + printk(KERN_WARNING "%s: Unknown event...check config\n", c->name); + break; + } + } + + return 0; +} + +/* + * Dynamic LCT update. This compares the LCT with the currently + * installed devices to check for device deletions..this needed b/c there + * is no DELETED_LCT_ENTRY EventIndicator for the Executive class so + * we can't just have the event handler do this...annoying + * + * This is a hole in the spec that will hopefully be fixed someday. + */ +static int i2o_dyn_lct(void *foo) { - u32 msg[c->inbound_size]; + struct i2o_controller *c = (struct i2o_controller *)foo; + struct i2o_device *d = NULL; + struct i2o_device *d1 = NULL; + int i = 0; + int found = 0; + int entries; + void *tmp; + char name[16]; + struct fs_struct *fs; + + lock_kernel(); + + dprintk((KERN_INFO "i2o_dyn_lct: I2O CORE Event thread at %p\n", +&i2o_dyn_lct)); + exit_files(current); + exit_mm(current); + current->session = 1; + current->pgrp = 1; + /* Become as one with the init task */ + exit_fs(current); + fs = init_task.fs; + current->fs = fs; + atomic_inc(&fs->count); + + unlock_kernel(); + + sprintf(name, "iop%d_lctd", c->unit); + strcpy(current->comm, name); + + c->lct_running = 1; + + while(1) + { + down_interruptible(&c->lct_sem); + if(signal_pending(current)) + { + dprintk((KERN_ERR "%s: LCT thread dead\n", c->name)); + c->lct_running = 0; + return 0; + } + + entries = c->dlct->table_size; + entries -= 3; + entries /= 9; + + dprintk((KERN_INFO "I2O: Dynamic LCT Update\n")); + dprintk((KERN_INFO "I2O: Dynamic LCT contains %d entries\n", entries)); + + if(!entries) + { + printk(KERN_INFO "iop%d: Empty LCT???\n", c->unit); + continue; + } + + /* + * Loop through all the devices on the IOP looking for their + * LCT data in the LCT. We assume that TIDs are not repeated. + * as that is the only way to really tell. It's been confirmed + * by the IRTOS vendor(s?) that TIDs are not reused until they + * wrap arround(4096), and I doubt a system will up long enough + * to create/delete that many devices. + */ + for(d = c->devices; d; ) + { + found = 0; + d1 = d->next; + + for(i = 0; i < entries; i++) + { + if(d->lct_data.tid == c->dlct->lct_entry[i].tid) + { + found = 1; + break; + } + } + if(!found) + { + dprintk((KERN_INFO "Deleted device!\n")); + spin_lock(&i2o_dev_lock); + i2o_delete_device(d); + spin_unlock(&i2o_dev_lock); + } + d = d1; + } + + /* + * Tell LCT to renotify us next time there is a change + */ + i2o_lct_notify(c); + + /* + * Copy new LCT into public LCT + * + * Possible race if someone is reading LCT while we are copying + * over it. If this happens, we'll fix it then. but I doubt that + * the LCT will get updated often enough or will get read by + * a user often enough to worry. + */ + if(c->lct->table_size < c->dlct->table_size) + { + tmp = c->lct; + c->lct = kmalloc(c->dlct->table_size<<2, GFP_KERNEL); + if(!c->lct) + { + printk(KERN_ERR "%s: No memory for LCT!\n", c->name); + c->lct = tmp; + continue; + } + kfree(tmp); + } + memcpy(c->lct, c->dlct, c->dlct->table_size<<2); + } - msg[0] = I2O_MESSAGE_SIZE(5 + evt_data_len / 4) | SGL_OFFSET_5; - msg[1] = I2O_CMD_UTIL_EVT_ACK << 24 | HOST_TID << 12 | tid; - msg[2] = context; - msg[3] = 0; - msg[4] = evt_indicator; - memcpy(msg+5, evt_data, evt_data_len); + return 0; +} - if (i2o_post_this(c, msg, sizeof(msg)) < 0) - return -ETIMEDOUT; - return 0; -} /* * Issue UTIL_CLAIM or UTIL_RELEASE messages @@ -1805,7 +2322,7 @@ * ResultCount, ErrorInfoSize, BlockStatus and BlockSize. */ int i2o_issue_params(int cmd, struct i2o_controller *iop, int tid, - void *opblk, int oplen, void *resblk, int reslen) + void *opblk, int oplen, void *resblk, int reslen) { u32 msg[9]; u32 *res = (u32 *)resblk; @@ -1835,21 +2352,21 @@ return -((res[1] >> 16) & 0xFF); /* -BlockStatus */ } - return 4 + ((res[1] & 0x0000FFFF) << 2); /* bytes used in resblk */ + return 4 + ((res[1] & 0x0000FFFF) << 2); /* bytes used in resblk */ } /* * Query one scalar group value or a whole scalar group. - */ + */ int i2o_query_scalar(struct i2o_controller *iop, int tid, - int group, int field, void *buf, int buflen) + int group, int field, void *buf, int buflen) { u16 opblk[] = { 1, 0, I2O_PARAMS_FIELD_GET, group, 1, field }; u8 resblk[8+buflen]; /* 8 bytes for header */ int size; if (field == -1) /* whole group */ - opblk[4] = -1; + opblk[4] = -1; size = i2o_issue_params(I2O_CMD_UTIL_PARAMS_GET, iop, tid, opblk, sizeof(opblk), resblk, sizeof(resblk)); @@ -1869,7 +2386,7 @@ { u16 *opblk; u8 resblk[8+buflen]; /* 8 bytes for header */ - int size; + int size; opblk = kmalloc(buflen+64, GFP_KERNEL); if (opblk == NULL) @@ -1878,16 +2395,16 @@ return -ENOMEM; } - opblk[0] = 1; /* operation count */ - opblk[1] = 0; /* pad */ + opblk[0] = 1; /* operation count */ + opblk[1] = 0; /* pad */ opblk[2] = I2O_PARAMS_FIELD_SET; opblk[3] = group; - if(field == -1) { /* whole group */ + if(field == -1) { /* whole group */ opblk[4] = -1; memcpy(opblk+5, buf, buflen); } - else /* single field */ + else /* single field */ { opblk[4] = 1; opblk[5] = field; @@ -2052,9 +2569,9 @@ }; if (req_status > I2O_REPLY_STATUS_PROGRESS_REPORT) - printk("%0#4x / ", req_status); + printk(KERN_INFO "%0#4x / ", req_status); else - printk("%s / ", REPLY_STATUS[req_status]); + printk(KERN_INFO "%s / ", REPLY_STATUS[req_status]); return; } @@ -2099,9 +2616,9 @@ }; if (detailed_status > I2O_DSC_DEVICE_NOT_AVAILABLE) - printk("%0#4x.\n", detailed_status); + printk(KERN_INFO "%0#4x.\n", detailed_status); else - printk("%s.\n", COMMON_DSC[detailed_status]); + printk(KERN_INFO "%s.\n", COMMON_DSC[detailed_status]); return; } @@ -2274,25 +2791,30 @@ u8 cmd = (msg[1]>>24)&0xFF; u8 req_status = (msg[4]>>24)&0xFF; u16 detailed_status = msg[4]&0xFFFF; + struct i2o_handler *h = i2o_handlers[msg[2] & (MAX_I2O_MODULES-1)]; printk("%s%s: ", severity, module); - if (cmd < 0x1F) { // Utility Class - i2o_report_util_cmd(cmd); - i2o_report_common_status(req_status); - i2o_report_common_dsc(detailed_status); - return; - } - if (cmd >= 0xA0 && cmd <= 0xEF) { // Executive class - i2o_report_exec_cmd(cmd); - i2o_report_common_status(req_status); - i2o_report_common_dsc(detailed_status); - return; - } - - printk("%02x, %02x / %04x.\n", cmd, req_status, detailed_status); - return; + switch (h->class) { + case I2O_CLASS_EXECUTIVE: + if (cmd < 0x1F) { // Utility cmd + i2o_report_util_cmd(cmd); + i2o_report_common_status(req_status); + i2o_report_common_dsc(detailed_status); + } + if (cmd >= 0xA0 && cmd <= 0xEF) { // Executive cmd + i2o_report_exec_cmd(cmd); + i2o_report_common_status(req_status); + i2o_report_common_dsc(detailed_status); + } + break; + + default: + printk(KERN_INFO "%02x, %02x / %04x.\n", + cmd, req_status, detailed_status); + } + } /* Used to dump a message to syslog during debugging */ @@ -2308,6 +2830,55 @@ #endif } + +/* + * I2O reboot/shutdown notification. + * + * - Call each OSM's reboot notifier (if one exists) + * - Quiesce each IOP in the system + * + * Each IOP has to be quiesced before we can ensure that the system + * can be properly shutdown as a transaction that has already been + * acknowledged still needs to be placed in permanent store on the IOP. + * The SysQuiesce causes the IOP to force all HDMs to complete their + * transactions before returning, so only at that point is it safe + * + */ + +static int i2o_reboot_event(struct notifier_block *n, unsigned long code, void +*p) +{ + int i = 0; + struct i2o_controller *c = NULL; + + if(code != SYS_RESTART && code != SYS_HALT && code != SYS_POWER_OFF) + return NOTIFY_DONE; + + printk(KERN_INFO "Shutting down I2O system.\n"); + printk(KERN_INFO + " This could take a few minutes if there are many devices attached\n"); + + for(i = 0; i < MAX_I2O_MODULES; i++) + { + if(i2o_handlers[i] && i2o_handlers[i]->reboot_notify) + i2o_handlers[i]->reboot_notify(); + } + + for(c = i2o_controller_chain; c; c = c->next) + { + if(i2o_quiesce_controller(c)) + { + printk(KERN_WARNING "i2o: Could not quiesce %s." " + Verify setup on next system power up.\n", c->name); + } + } + + printk(KERN_INFO "I2O system down.\n"); + return NOTIFY_DONE; +} + + + #ifdef MODULE EXPORT_SYMBOL(i2o_install_handler); @@ -2324,6 +2895,9 @@ EXPORT_SYMBOL(i2o_claim_device); EXPORT_SYMBOL(i2o_release_device); +EXPORT_SYMBOL(i2o_device_notify_on); +EXPORT_SYMBOL(i2o_device_notify_off); + EXPORT_SYMBOL(i2o_run_queue); EXPORT_SYMBOL(i2o_activate_controller); EXPORT_SYMBOL(i2o_get_class_name); @@ -2363,22 +2937,62 @@ printk(KERN_INFO "i2o: No PCI I2O controllers found\n"); #endif + + /* + * Initialize event handling thread + */ + sema_init(&evt_sem, 0); + evt_pid = kernel_thread(i2o_core_evt, &evt_reply, CLONE_SIGHAND); + if(evt_pid < 0) + { + printk(KERN_ERR "I2O: Could not create event handler kernel thread\n"); + i2o_remove_handler(&i2o_core_handler); + return 0; + } + else printk(KERN_INFO "event thread created as pid %d \n", evt_pid); + if(i2o_num_controllers) i2o_sys_init(); + register_reboot_notifier(&i2o_reboot_notifier); + return 0; } void cleanup_module(void) { + int stat; + + unregister_reboot_notifier(&i2o_reboot_notifier); + if(i2o_num_controllers) i2o_sys_shutdown(); + /* + * If this is shutdown time, the thread has already been killed + */ + if(evt_running) { + stat = kill_proc(evt_pid, SIGTERM, 1); + if(!stat) { + int count = 10 * 100; + while(evt_running && count) { + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(1); + } + + if(!count) + printk(KERN_ERR "i2o: Event thread still running!\n"); + } + } + + #ifdef CONFIG_I2O_PCI_MODULE i2o_pci_core_detach(); #endif i2o_remove_handler(&i2o_core_handler); + unregister_reboot_notifier(&i2o_reboot_notifier); + } #else @@ -2402,6 +3016,21 @@ core_context = i2o_core_handler.context; + /* + * Initialize event handling thread + * We may not find any controllers, but still want this as + * down the road we may have hot pluggable controllers that + * need to be dealt with. + */ + sema_init(&evt_sem, 0); + if((evt_pid = kernel_thread(i2o_core_evt, &evt_reply, CLONE_SIGHAND)) < +0) + { + printk(KERN_ERR "I2O: Could not create event handler kernel thread\n"); + i2o_remove_handler(&i2o_core_handler); + return 0; + } + #ifdef CONFIG_I2O_PCI i2o_pci_init(); #endif @@ -2409,16 +3038,22 @@ if(i2o_num_controllers) i2o_sys_init(); + register_reboot_notifier(&i2o_reboot_notifier); + i2o_config_init(); + #ifdef CONFIG_I2O_BLOCK i2o_block_init(); #endif + #ifdef CONFIG_I2O_SCSI i2o_scsi_init(); #endif + #ifdef CONFIG_I2O_LAN i2o_lan_init(); #endif + #ifdef CONFIG_I2O_PROC i2o_proc_init(); #endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/i2o/i2o_pci.c linux.16p3/drivers/i2o/i2o_pci.c --- linux.vanilla/drivers/i2o/i2o_pci.c Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/i2o/i2o_pci.c Mon May 1 00:33:29 2000 @@ -6,6 +6,8 @@ * * Written by Alan Cox, Building Number Three Ltd * Modified by Deepak Saxena + * Mar 23 ,2000: MTRR fix for Intel i960- + * Boji T Kannanthanam * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -195,11 +197,11 @@ c->bus.pci.mtrr_reg1 = -1; if(dev->vendor == PCI_VENDOR_ID_INTEL) - { - printk(KERN_INFO "i2o_pci: MTRR workaround for Intel i960 processor\n"); - c->bus.pci.mtrr_reg1 = mtrr_add(c->mem_phys, 65536, MTRR_TYPE_UNCACHABLE, 1); - if(c->bus.pci.mtrr_reg1< 0) - { + { + printk(KERN_INFO "I2O: MTRR workaround for Intel i960 processor\n"); + c->bus.pci.mtrr_reg1 = mtrr_add(c->mem_phys, 65536, MTRR_TYPE_UNCACHABLE, 1); + if(c->bus.pci.mtrr_reg1< 0) + { printk(KERN_INFO "i2o_pci: Error in setting MTRR_TYPE_UNCACHABLE\n"); if(c->bus.pci.mtrr_reg0>=0) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/i2o/i2o_scsi.c linux.16p3/drivers/i2o/i2o_scsi.c --- linux.vanilla/drivers/i2o/i2o_scsi.c Fri Apr 21 12:46:07 2000 +++ linux.16p3/drivers/i2o/i2o_scsi.c Mon May 1 02:03:49 2000 @@ -292,6 +292,9 @@ struct i2o_handler i2o_scsi_handler= { i2o_scsi_reply, + NULL, + NULL, + NULL, "I2O SCSI OSM", 0, I2O_CLASS_SCSI_PERIPHERAL @@ -301,12 +304,12 @@ { u8 reply[8]; - if(i2o_query_scalar(c, d->lct_data->tid, 0, 3, reply, 4)<0) + if(i2o_query_scalar(c, d->lct_data.tid, 0, 3, reply, 4)<0) return -1; *target=reply[0]; - if(i2o_query_scalar(c, d->lct_data->tid, 0, 4, reply, 8)<0) + if(i2o_query_scalar(c, d->lct_data.tid, 0, 4, reply, 8)<0) return -1; *lun=reply[1]; @@ -323,7 +326,7 @@ int target; h->controller=c; - h->bus_task=d->lct_data->tid; + h->bus_task=d->lct_data.tid; for(target=0;target<16;target++) for(lun=0;lun<8;lun++) @@ -332,33 +335,33 @@ for(unit=c->devices;unit!=NULL;unit=unit->next) { dprintk(("Class %03X, parent %d, want %d.\n", - unit->lct_data->class_id, unit->lct_data->parent_tid, d->lct_data->tid)); + unit->lct_data.class_id, unit->lct_data.parent_tid, d->lct_data.tid)); /* Only look at scsi and fc devices */ - if ( (unit->lct_data->class_id != I2O_CLASS_SCSI_PERIPHERAL) - && (unit->lct_data->class_id != I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL) + if ( (unit->lct_data.class_id != I2O_CLASS_SCSI_PERIPHERAL) + && (unit->lct_data.class_id != I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL) ) continue; /* On our bus ? */ - dprintk(("Found a disk (%d).\n", unit->lct_data->tid)); - if ((unit->lct_data->parent_tid == d->lct_data->tid) - || (unit->lct_data->parent_tid == d->lct_data->parent_tid) + dprintk(("Found a disk (%d).\n", unit->lct_data.tid)); + if ((unit->lct_data.parent_tid == d->lct_data.tid) + || (unit->lct_data.parent_tid == d->lct_data.parent_tid) ) { u16 limit; dprintk(("Its ours.\n")); if(i2o_find_lun(c, unit, &target, &lun)==-1) { - printk(KERN_ERR "i2o_scsi: Unable to get lun for tid %d.\n", unit->lct_data->tid); + printk(KERN_ERR "i2o_scsi: Unable to get lun for tid %d.\n", unit->lct_data.tid); continue; } dprintk(("Found disk %d %d.\n", target, lun)); - h->task[target][lun]=unit->lct_data->tid; + h->task[target][lun]=unit->lct_data.tid; h->tagclock[target][lun]=jiffies; /* Get the max fragments/request */ - i2o_query_scalar(c, d->lct_data->tid, 0xF103, 3, &limit, 2); + i2o_query_scalar(c, d->lct_data.tid, 0xF103, 3, &limit, 2); /* sanity */ if ( limit == 0 ) @@ -432,8 +435,8 @@ /* * bus_adapter, SCSI (obsolete), or FibreChannel busses only */ - if( (d->lct_data->class_id!=I2O_CLASS_BUS_ADAPTER_PORT) // bus_adapter -// && (d->lct_data->class_id!=I2O_CLASS_FIBRE_CHANNEL_PORT) // FC_PORT + if( (d->lct_data.class_id!=I2O_CLASS_BUS_ADAPTER_PORT) // bus_adapter +// && (d->lct_data.class_id!=I2O_CLASS_FIBRE_CHANNEL_PORT) // FC_PORT ) continue; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/isdn/avmb1/capi.c linux.16p3/drivers/isdn/avmb1/capi.c --- linux.vanilla/drivers/isdn/avmb1/capi.c Fri Apr 21 12:46:08 2000 +++ linux.16p3/drivers/isdn/avmb1/capi.c Wed Apr 19 13:54:46 2000 @@ -564,7 +564,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/isdn/avmb1/kcapi.c linux.16p3/drivers/isdn/avmb1/kcapi.c --- linux.vanilla/drivers/isdn/avmb1/kcapi.c Fri Apr 21 12:46:08 2000 +++ linux.16p3/drivers/isdn/avmb1/kcapi.c Wed Apr 19 13:54:46 2000 @@ -250,7 +250,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -289,7 +289,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -321,7 +321,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -350,7 +350,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -387,7 +387,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -424,7 +424,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -461,7 +461,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/isdn/hisax/w6692.c linux.16p3/drivers/isdn/hisax/w6692.c --- linux.vanilla/drivers/isdn/hisax/w6692.c Fri Apr 21 12:46:12 2000 +++ linux.16p3/drivers/isdn/hisax/w6692.c Wed Apr 19 15:36:56 2000 @@ -1,4 +1,4 @@ -/* $Id: w6692.c,v 1.1 1999/09/04 06:28:58 keil Exp $ +/* $Id: w6692.c,v 1.4 2000/03/16 23:24:11 werner Exp $ * w6692.c Winbond W6692 specific routines * @@ -8,6 +8,17 @@ * This file is (c) under GNU PUBLIC LICENSE * * $Log: w6692.c,v $ + * Revision 1.4 2000/03/16 23:24:11 werner + * + * Fixed an additional location + * + * Revision 1.3 2000/03/16 22:41:36 werner + * + * Tried to fix second B-channel problem (still not tested) + * + * Revision 1.2 2000/02/26 00:35:13 keil + * Fix skb freeing in interrupt context + * * Revision 1.1 1999/09/04 06:28:58 keil * first revision * @@ -47,7 +58,7 @@ extern const char *CardType[]; -const char *w6692_revision = "$Revision: 1.1 $"; +const char *w6692_revision = "$Revision: 1.4 $"; #define DBUSY_TIMER_VALUE 80 @@ -314,10 +325,13 @@ { u_char val; u_char r; - struct BCState *bcs = cs->bcs + bchan; + struct BCState *bcs = cs->bcs; struct sk_buff *skb; int count; + if (bcs->channel != bchan) + bcs++; /* hardware bchan must match ! */ + val = cs->BC_Read_Reg(cs, bchan, W_B_EXIR); debugl1(cs, "W6692B chan %d B_EXIR 0x%02X", bchan, val); @@ -721,7 +735,9 @@ W6692Bmode(struct BCState *bcs, int mode, int bc) { struct IsdnCardState *cs = bcs->cs; - int bchan = bcs->hw.w6692.bchan; + int bchan = bc; + + bcs->hw.w6692.bchan = bc; if (cs->debug & L1_DEB_HSCX) debugl1(cs, "w6692 %c mode %d ichan %d", diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/misc/parport_pc.c linux.16p3/drivers/misc/parport_pc.c --- linux.vanilla/drivers/misc/parport_pc.c Fri Apr 21 12:46:14 2000 +++ linux.16p3/drivers/misc/parport_pc.c Mon May 15 12:18:20 2000 @@ -904,6 +904,8 @@ { { 0, -1 }, } }, { PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_TK9902, 1, { { 0, 1 }, } }, + { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889, 1, + { { 2, -1 }, } }, { 0, } }; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/3c59x.c linux.16p3/drivers/net/3c59x.c --- linux.vanilla/drivers/net/3c59x.c Fri Apr 21 12:46:15 2000 +++ linux.16p3/drivers/net/3c59x.c Thu May 4 00:41:16 2000 @@ -14,6 +14,29 @@ Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771 */ +/* + 15Apr00, Andrew Morton + - Don't set RxComplete in boomerang interrupt enable reg + - Added standard spinlocking. + - Removed setting/clearing of dev->interrupt + - Removed vp->in_interrupt + - spinlock in vortex_timer to protect mdio functions + - disable local interrupts around call to vortex_interrupt in + vortex_tx_timeout() (So vortex_interrupt can use spin_lock()) + - Removed global save/restore_flags() and cli() from get_stats + and vortex_start_xmit() + - Select window 3 in vortex_timer()'s write to Wn3_MAC_Ctrl + - In vortex_start_xmit(), move the lock to _after_ we've altered + vp->cur_tx and vp->tx_full. This defeats the race between + vortex_start_xmit() and vortex_interrupt which was identified + by Bogdan Costescu. + - Merged back support for six new cards from various sources + - Tell it that 3c905C has NWAY + - Fix handling of SetStatusEnd in 'Too much work..' code, as + per 2.3.99's 3c575_cb (Dave Hinds). Added vp->deferred for this. + - See http://www.uow.edu.au/~andrewm/linux/#3c59x-2.2 for more details. +*/ + static char *version = "3c59x.c:v0.99H 11/17/98 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html\n"; @@ -241,12 +264,18 @@ static struct pci_id_info pci_tbl[] = { {"3c590 Vortex 10Mbps", 0x10B7, 0x5900, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, vortex_probe1}, + {"3c592 EISA 10mbps Demon/Vortex", 0x10B7, 0x5920, 0xffff, /* AKPM: from Don's 3c59x_cb.c 0.49H */ + PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, vortex_probe1}, + {"3c597 EISA Fast Demon/Vortex", 0x10B7, 0x5970, 0xffff, /* AKPM: from Don's 3c59x_cb.c 0.49H */ + PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, vortex_probe1}, {"3c595 Vortex 100baseTx", 0x10B7, 0x5950, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, vortex_probe1}, {"3c595 Vortex 100baseT4", 0x10B7, 0x5951, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, vortex_probe1}, {"3c595 Vortex 100base-MII", 0x10B7, 0x5952, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, vortex_probe1}, + +#define EISA_TBL_OFFSET 6 /* AKPM: the offset of this entry */ {"3Com Vortex", 0x10B7, 0x5900, 0xff00, PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG, 64, vortex_probe1}, {"3c900 Boomerang 10baseT", 0x10B7, 0x9000, 0xffff, @@ -257,6 +286,10 @@ PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, {"3c900B-FL Cyclone 10base-FL", 0x10B7, 0x900A, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, + {"3c900 Cyclone 10Mbps TPO", 0x10B7, 0x9004, 0xffff, /* AKPM: from Don's 0.99M */ + PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, + {"3c900 Cyclone 10Mbps TPC", 0x10B7, 0x9006, 0xffff, /* AKPM: from Don's 0.99M */ + PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, {"3c905 Boomerang 100baseTx", 0x10B7, 0x9050, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII, 64, vortex_probe1}, {"3c905 Boomerang 100baseT4", 0x10B7, 0x9051, 0xffff, @@ -268,7 +301,7 @@ {"3c905B-FX Cyclone 100baseFx", 0x10B7, 0x905A, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, {"3c905C Tornado", 0x10B7, 0x9200, 0xffff, - PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, + PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY, 128, vortex_probe1}, {"3c980 Cyclone", 0x10B7, 0x9800, 0xfff0, PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE, 128, vortex_probe1}, {"3cSOHO100-TX Hurricane", 0x10B7, 0x7646, 0xffff, @@ -283,8 +316,13 @@ {"3CCFE656 Cyclone CardBus", 0x10B7, 0x6560, 0xffff, PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS, 128, vortex_probe1}, + {"3CCFEM656 Cyclone CardBus", 0x10B7, 0x6562, 0xffff, /* AKPM: From the 2.3 driver ? */ + PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY|HAS_CB_FNS, + 128, vortex_probe1}, {"3c575 series CardBus (unknown version)", 0x10B7, 0x5057, 0xf0ff, PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG|HAS_MII, 64, vortex_probe1}, + {"3c450 Cyclone/unknown", 0x10B7, 0x4500, 0xffff, /* AKPM: from Don's 0.99N */ + PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_NWAY, 128, vortex_probe1}, {"3Com Boomerang (unknown version)", 0x10B7, 0x9000, 0xff00, PCI_USES_IO|PCI_USES_MASTER, IS_BOOMERANG, 64, vortex_probe1}, {0,}, /* 0 terminated list. */ @@ -446,7 +484,6 @@ int chip_id; /* The remainder are related to chip state, mostly media selection. */ - unsigned long in_interrupt; struct timer_list timer; /* Media selection timer. */ int options; /* User-settable misc. driver options. */ unsigned int media_override:3, /* Passed-in media type. */ @@ -462,6 +499,9 @@ u16 capabilities, info1, info2; /* Various, from EEPROM. */ u16 advertising; /* NWay media advertisement */ unsigned char phys[2]; /* MII device addresses. */ + u16 deferred; /* Resend these interrupts when we + * bale from the ISR */ + spinlock_t lock; }; /* The action to take with a media selection timer tick. @@ -765,7 +805,7 @@ if ((device_id & 0xFF00) != 0x5900) continue; vortex_probe1(0, 0, dev, ioaddr, inw(ioaddr + 0xC88) >> 12, - 4, cards_found); + EISA_TBL_OFFSET, cards_found); dev = 0; cards_found++; } @@ -814,6 +854,7 @@ vp->next_module = root_vortex_dev; root_vortex_dev = dev; + spin_lock_init(&vp->lock); vp->chip_id = chip_idx; vp->pci_bus = pci_bus; vp->pci_devfn = pci_devfn; @@ -1151,9 +1192,7 @@ set_rx_mode(dev); outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ - vp->in_interrupt = 0; dev->tbusy = 0; - dev->interrupt = 0; dev->start = 1; outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ @@ -1163,7 +1202,8 @@ (vp->full_bus_master_tx ? DownComplete : TxAvailable) | (vp->full_bus_master_rx ? UpComplete : RxComplete) | (vp->bus_master ? DMADone : 0); - vp->intr_enable = SetIntrEnb | IntLatch | TxAvailable | RxComplete | + vp->intr_enable = SetIntrEnb | IntLatch | TxAvailable | + (vp->full_bus_master_rx ? 0 : RxComplete) | StatsFull | HostError | TxComplete | IntReq | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete; outw(vp->status_enable, ioaddr + EL3_CMD); @@ -1197,7 +1237,7 @@ EL3WINDOW(4); media_status = inw(ioaddr + Wn4_Media); switch (dev->if_port) { - case XCVR_10baseT: case XCVR_100baseTx: case XCVR_100baseFx: + case XCVR_10baseT: case XCVR_100baseTx: case XCVR_100baseFx: if (media_status & Media_LnkBeat) { ok = 1; if (vortex_debug > 1) @@ -1208,6 +1248,9 @@ dev->name, media_tbl[dev->if_port].name, media_status); break; case XCVR_MII: case XCVR_NWAY: + { + unsigned long flags; + spin_lock_irqsave(&vp->lock, flags); mii_status = mdio_read(ioaddr, vp->phys[0], 1); ok = 1; if (debug > 1) @@ -1225,6 +1268,7 @@ dev->name, vp->full_duplex ? "full" : "half", vp->phys[0], mii_reg5); /* Set the full-duplex bit. */ + EL3WINDOW(3); /* AKPM */ outb((vp->full_duplex ? 0x20 : 0) | (dev->mtu > 1500 ? 0x40 : 0), ioaddr + Wn3_MAC_Ctrl); @@ -1232,10 +1276,12 @@ next_tick = 60*HZ; } } - break; + spin_unlock_irqrestore(&vp->lock, flags); + } + break; default: /* Other media types handled by Tx timeouts. */ if (vortex_debug > 1) - printk(KERN_DEBUG "%s: Media %s is has no indication, %x.\n", + printk(KERN_DEBUG "%s: Media %s has no indication, %x.\n", dev->name, media_tbl[dev->if_port].name, media_status); ok = 1; } @@ -1276,10 +1322,10 @@ printk(KERN_DEBUG "%s: Media selection timer finished, %s.\n", dev->name, media_tbl[dev->if_port].name); - if (next_tick) { - vp->timer.expires = RUN_AT(next_tick); - add_timer(&vp->timer); - } + vp->timer.expires = RUN_AT(next_tick); + add_timer(&vp->timer); + if (vp->deferred) + outw(FakeIntr, ioaddr + EL3_CMD); return; } @@ -1300,7 +1346,17 @@ printk(KERN_ERR "%s: Interrupt posted but not delivered --" " IRQ blocked by another device?\n", dev->name); /* Bad idea here.. but we might as well handle a few events. */ - vortex_interrupt(dev->irq, dev, 0); + { + /* + * AKPM: block interrupts because vortex_interrupt + * does a bare spin_lock() + */ + unsigned long flags; + __save_flags(flags); + __cli(); + vortex_interrupt(dev->irq, dev, 0); + __restore_flags(flags); + } } outw(TxReset, ioaddr + EL3_CMD); for (j = 200; j >= 0 ; j--) @@ -1344,7 +1400,7 @@ /* Issue Tx Enable */ outw(TxEnable, ioaddr + EL3_CMD); dev->trans_start = jiffies; - + /* Switch to register set 7 for normal use. */ EL3WINDOW(7); } @@ -1537,8 +1593,7 @@ vp->tx_ring[entry].length = cpu_to_le32(skb->len | LAST_FRAG); vp->tx_ring[entry].status = cpu_to_le32(skb->len | TxIntrUploaded); - save_flags(flags); - cli(); + spin_lock_irqsave(&vp->lock, flags); outw(DownStall, ioaddr + EL3_CMD); /* Wait for the stall to complete. */ for (i = 600; i >= 0 ; i--) @@ -1549,16 +1604,16 @@ outl(virt_to_bus(&vp->tx_ring[entry]), ioaddr + DownListPtr); queued_packet++; } - outw(DownUnstall, ioaddr + EL3_CMD); - restore_flags(flags); vp->cur_tx++; if (vp->cur_tx - vp->dirty_tx > TX_RING_SIZE - 1) vp->tx_full = 1; - else { /* Clear previous interrupt enable. */ + else { /* Clear previous interrupt enable. */ prev_entry->status &= cpu_to_le32(~TxIntrUploaded); clear_bit(0, (void*)&dev->tbusy); } + outw(DownUnstall, ioaddr + EL3_CMD); + spin_unlock_irqrestore(&vp->lock, flags); dev->trans_start = jiffies; vp->stats.tx_bytes += skb->len; return 0; @@ -1575,27 +1630,17 @@ int latency, status; int work_done = max_interrupt_work; -#if defined(__i386__) - /* A lock to prevent simultaneous entry bug on Intel SMP machines. */ - if (test_and_set_bit(0, (void*)&dev->interrupt)) { - printk(KERN_ERR"%s: SMP simultaneous entry of an interrupt handler.\n", - dev->name); - dev->interrupt = 0; /* Avoid halting machine. */ - return; - } -#else - if (dev->interrupt) { - printk(KERN_ERR "%s: Re-entering the interrupt handler.\n", dev->name); - return; - } - dev->interrupt = 1; -#endif + spin_lock(&vp->lock); - dev->interrupt = 1; ioaddr = dev->base_addr; latency = inb(ioaddr + Timer); status = inw(ioaddr + EL3_STATUS); + if (status & IntReq) { + status |= vp->deferred; + vp->deferred = 0; + } + if (vortex_debug > 4) printk(KERN_DEBUG "%s: interrupt, status %4.4x, latency %d ticks.\n", dev->name, status, latency); @@ -1666,15 +1711,22 @@ outw(AckIntr | UpComplete | DownComplete, ioaddr + EL3_CMD); } else { printk(KERN_WARNING "%s: Too much work in interrupt, status " - "%4.4x. Temporarily disabling functions (%4.4x).\n", - dev->name, status, SetStatusEnb | ((~status) & 0x7FE)); + "%4.4x.\n", dev->name, status); /* Disable all pending interrupts. */ - outw(SetStatusEnb | ((~status) & 0x7FE), ioaddr + EL3_CMD); - outw(AckIntr | 0x7FF, ioaddr + EL3_CMD); + do { + vp->deferred |= status; + outw(SetStatusEnb | (~vp->deferred & vp->status_enable), + ioaddr + EL3_CMD); + outw(AckIntr | (vp->deferred & 0x7ff), ioaddr + EL3_CMD); + } while ((status = inw(ioaddr + EL3_CMD)) & IntLatch); /* The timer will reenable interrupts. */ + del_timer(&vp->timer); + vp->timer.expires = RUN_AT(1); + add_timer(&vp->timer); break; } } + /* Acknowledge the IRQ. */ outw(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD); if (vp->cb_fn_base) /* The PCMCIA people are idiots. */ @@ -1686,11 +1738,7 @@ printk(KERN_DEBUG "%s: exiting interrupt, status %4.4x.\n", dev->name, status); -#if defined(__i386__) - clear_bit(0, (void*)&dev->interrupt); -#else - dev->interrupt = 0; -#endif + spin_unlock(&vp->lock); return; } @@ -1702,7 +1750,7 @@ short rx_status; if (vortex_debug > 5) - printk(KERN_DEBUG" In rx_packet(), status %4.4x, rx_status %4.4x.\n", + printk(KERN_DEBUG" In vortex_rx(), status %4.4x, rx_status %4.4x.\n", inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); while ((rx_status = inw(ioaddr + RxStatus)) > 0) { if (rx_status & 0x4000) { /* Error, update stats. */ @@ -1929,10 +1977,9 @@ unsigned long flags; if (dev->start) { - save_flags(flags); - cli(); + spin_lock_irqsave(&vp->lock, flags); update_stats(dev->base_addr, dev); - restore_flags(flags); + spin_unlock_irqrestore(&vp->lock, flags); } return &vp->stats; } @@ -1981,6 +2028,10 @@ long ioaddr = dev->base_addr; u16 *data = (u16 *)&rq->ifr_data; int phy = vp->phys[0] & 0x1f; + int retval; + unsigned long flags; + + spin_lock_irqsave(&vp->lock, flags); switch(cmd) { case SIOCDEVPRIVATE: /* Get the address of the PHY in use. */ @@ -1988,16 +2039,23 @@ case SIOCDEVPRIVATE+1: /* Read the specified MII register. */ EL3WINDOW(4); data[3] = mdio_read(ioaddr, data[0] & 0x1f, data[1] & 0x1f); - return 0; + retval = 0; + break; case SIOCDEVPRIVATE+2: /* Write the specified MII register */ - if (!suser()) - return -EPERM; - EL3WINDOW(4); - mdio_write(ioaddr, data[0] & 0x1f, data[1] & 0x1f, data[2]); - return 0; + if (!suser()) { + retval = -EPERM; + } else { + EL3WINDOW(4); + mdio_write(ioaddr, data[0] & 0x1f, data[1] & 0x1f, data[2]); + retval = 0; + } + break; default: - return -EOPNOTSUPP; + retval = -EOPNOTSUPP; } + + spin_unlock_irqrestore(&vp->lock, flags); + return retval; } /* Pre-Cyclone chips have no documented multicast filter, so the only diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/82596.c linux.16p3/drivers/net/82596.c --- linux.vanilla/drivers/net/82596.c Fri Apr 21 12:46:15 2000 +++ linux.16p3/drivers/net/82596.c Wed Apr 19 14:18:18 2000 @@ -11,10 +11,15 @@ by Richard Hirst Renamed to be 82596.c - *** Untested on Apricot hardware, and may require some hacking - *** to make it work. The old 82596.c reported hasn't worked - *** since 1.3.xx anyway. I have been unable to find any users - *** of Apricot hardware to test this on. + 980825: Changed to receive directly in to sk_buffs which are + allocated at open() time. Eliminates copy on incoming frames + (small ones are still copied). Shared data now held in a + non-cached page, so we can run on 68060 in copyback mode. + + TBD: + * look at deferring rx frames rather than discarding (as per tulip) + * handle tx ring full as per tulip + * performance test to tune rx_copybreak Most of my modifications relate to the braindead big-endian implementation by Intel. When the i596 is operating in @@ -35,7 +40,7 @@ */ -static const char *version = "82596.c:v1.0 15/07/98\n"; +static const char *version = "82596.c $Revision: 1.2 $\n"; #include #include @@ -57,12 +62,47 @@ #include #include #include -#include /*?? */ +#include -#ifdef CONFIG_MVME16x_NET +/* DEBUG flags + */ + +#define DEB_INIT 0x0001 +#define DEB_PROBE 0x0002 +#define DEB_SERIOUS 0x0004 +#define DEB_ERRORS 0x0008 +#define DEB_MULTI 0x0010 +#define DEB_TDR 0x0020 +#define DEB_OPEN 0x0040 +#define DEB_RESET 0x0080 +#define DEB_ADDCMD 0x0100 +#define DEB_STATUS 0x0200 +#define DEB_STARTTX 0x0400 +#define DEB_RXADDR 0x0800 +#define DEB_TXADDR 0x1000 +#define DEB_RXFRAME 0x2000 +#define DEB_INTS 0x4000 +#define DEB_STRUCT 0x8000 +#define DEB_ANY 0xffff + + +#define DEB(x,y) if (i596_debug & (x)) y + + +#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_MVME16x_NET_MODULE) +#define ENABLE_MVME16x_NET +#endif +#if defined(CONFIG_BVME6000_NET) || defined(CONFIG_BVME6000_NET_MODULE) +#define ENABLE_BVME6000_NET +#endif +#if defined(CONFIG_APRICOT) || defined(CONFIG_APRICOT_MODULE) +#define ENABLE_APRICOT +#endif + +#ifdef ENABLE_MVME16x_NET #include #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET #include #endif @@ -82,12 +122,13 @@ #define ISCP_BUSY 0x00010000 #define MACH_IS_APRICOT 0 #else -#define WSWAPrfd(x) x -#define WSWAPiscp(x) ((struct i596_iscp *)(x)) -#define WSWAPscb(x) ((struct i596_scb *)(x)) -#define WSWAPcmd(x) x -#define WSWAPtbd(x) x -#define WSWAPchar(x) x +#define WSWAPrfd(x) ((struct i596_rfd *)(x)) +#define WSWAPrbd(x) ((struct i596_rbd *)(x)) +#define WSWAPiscp(x) ((struct i596_iscp *)(x)) +#define WSWAPscb(x) ((struct i596_scb *)(x)) +#define WSWAPcmd(x) ((struct i596_cmd *)(x)) +#define WSWAPtbd(x) ((struct i596_tbd *)(x)) +#define WSWAPchar(x) ((char *)(x)) #define ISCP_BUSY 0x0001 #define MACH_IS_APRICOT 1 #endif @@ -103,27 +144,24 @@ #define PORT_ALTSCP 0x02 /* alternate SCB address */ #define PORT_ALTDUMP 0x03 /* Alternate DUMP address */ -#ifndef HAVE_PORTRESERVE -#define check_region(addr, size) 0 -#define request_region(addr, size,name) do ; while(0) -#endif +static int i596_debug = (DEB_SERIOUS|DEB_PROBE); -#ifndef HAVE_ALLOC_SKB -#define alloc_skb(size, priority) (struct sk_buff *) kmalloc(size,priority) -#define kfree_skbmem(buff, size) kfree_s(buff,size) -#endif +MODULE_AUTHOR("Richard Hirst"); +MODULE_DESCRIPTION("i82596 driver"); +MODULE_PARM(i596_debug, "i"); -#define APRICOT_DEBUG 2 -#ifdef APRICOT_DEBUG -int i596_debug = APRICOT_DEBUG; -#else -int i596_debug = 1; -#endif +/* Copy frames shorter than rx_copybreak, otherwise pass on up in + * a full sized sk_buff. Value of 100 stolen from tulip.c (!alpha). + */ +static int rx_copybreak = 100; + +#define PKT_BUF_SZ 1536 +#define MAX_MC_CNT 64 #define I596_TOTAL_SIZE 17 -#define I596_NULL -1 +#define I596_NULL ((void *)0xffffffff) #define CMD_EOL 0x8000 /* The last command of the list, stop. */ #define CMD_SUSP 0x4000 /* Suspend after doing cmd. */ @@ -156,12 +194,6 @@ unsigned long ca; }; -struct i596_cmd { - unsigned short status; - unsigned short command; - struct i596_cmd *next; -}; - #define EOF 0x8000 #define SIZE_MASK 0x3fff @@ -172,6 +204,23 @@ char *data; }; +/* The command structure has two 'next' pointers; v_next is the address of + * the next command as seen by the CPU, b_next is the address of the next + * command as seen by the 82596. The b_next pointer, as used by the 82596 + * always references the status field of the next command, rather than the + * v_next field, because the 82596 is unaware of v_next. It may seem more + * logical to put v_next at the end of the structure, but we cannot do that + * because the 82596 expects other fields to be there, depending on command + * type. + */ + +struct i596_cmd { + struct i596_cmd *v_next; /* Address from CPUs viewpoint */ + unsigned short status; + unsigned short command; + struct i596_cmd *b_next; /* Address from i596 viewpoint */ +}; + struct tx_cmd { struct i596_cmd cmd; struct i596_tbd *tbd; @@ -180,16 +229,53 @@ struct sk_buff *skb; /* So we can free it after tx */ }; +struct tdr_cmd { + struct i596_cmd cmd; + unsigned short status; + unsigned short pad; +}; + +struct mc_cmd { + struct i596_cmd cmd; + short mc_cnt; + char mc_addrs[MAX_MC_CNT*6]; +}; + +struct sa_cmd { + struct i596_cmd cmd; + char eth_addr[8]; +}; + +struct cf_cmd { + struct i596_cmd cmd; + char i596_config[16]; +}; + struct i596_rfd { unsigned short stat; unsigned short cmd; - struct i596_rfd *next; - long rbd; + struct i596_rfd *b_next; /* Address from i596 viewpoint */ + struct i596_rbd *rbd; unsigned short count; unsigned short size; - char data[1532]; + struct i596_rfd *v_next; /* Address from CPUs viewpoint */ + struct i596_rfd *v_prev; +}; + +struct i596_rbd { + unsigned short count; + unsigned short zero1; + struct i596_rbd *b_next; + unsigned char *b_data; /* Address from i596 viewpoint */ + unsigned short size; + unsigned short zero2; + struct sk_buff *skb; + struct i596_rbd *v_next; + struct i596_rbd *b_addr; /* This rbd addr from i596 view */ + unsigned char *v_data; /* Address from CPUs viewpoint */ }; +#define TX_RING_SIZE 64 #define RX_RING_SIZE 16 struct i596_scb { @@ -222,19 +308,24 @@ volatile struct i596_scp scp; volatile struct i596_iscp iscp; volatile struct i596_scb scb; - struct i596_cmd set_add; - char eth_addr[8]; - struct i596_cmd set_conf; - char i596_config[16]; - struct i596_cmd tdr; + struct sa_cmd sa_cmd; + struct cf_cmd cf_cmd; + struct tdr_cmd tdr_cmd; + struct mc_cmd mc_cmd; unsigned long stat; int last_restart __attribute__((aligned(4))); - struct i596_rfd *rx_tail; + struct i596_rfd *rfd_head; + struct i596_rbd *rbd_head; struct i596_cmd *cmd_tail; struct i596_cmd *cmd_head; int cmd_backlog; unsigned long last_cmd; struct net_device_stats stats; + struct i596_rfd rfds[RX_RING_SIZE]; + struct i596_rbd rbds[RX_RING_SIZE]; + struct tx_cmd tx_cmds[TX_RING_SIZE]; + struct i596_tbd tbds[TX_RING_SIZE]; + int next_tx_cmd; }; char init_setup[] = @@ -264,26 +355,29 @@ static int i596_close(struct device *dev); static struct net_device_stats *i596_get_stats(struct device *dev); static void i596_add_cmd(struct device *dev, struct i596_cmd *cmd); -static void print_eth(char *); +static void print_eth(unsigned char *buf, char *str); static void set_multicast_list(struct device *dev); +static int rx_ring_size = RX_RING_SIZE; static int ticks_limit = 25; -static int max_cmd_backlog = 16; +static int max_cmd_backlog = TX_RING_SIZE-1; static inline void CA(struct device *dev) { -#ifdef CONFIG_MVME16x_NET +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { ((struct i596_reg *) dev->base_addr)->ca = 1; } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { - volatile u32 i = *(volatile u32 *) (dev->base_addr); + volatile u32 i; + + i = *(volatile u32 *) (dev->base_addr); } #endif -#ifdef CONFIG_APRICOT +#ifdef ENABLE_APRICOT if (MACH_IS_APRICOT) { outw(0, (short) (dev->base_addr) + 4); } @@ -293,14 +387,14 @@ static inline void MPU_PORT(struct device *dev, int c, volatile void *x) { -#ifdef CONFIG_MVME16x_NET +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { struct i596_reg *p = (struct i596_reg *) (dev->base_addr); p->porthi = ((c) | (u32) (x)) & 0xffff; p->portlo = ((c) | (u32) (x)) >> 16; } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { u32 v = (u32) (c) | (u32) (x); v = ((u32) (v) << 16) | ((u32) (v) >> 16); @@ -312,103 +406,203 @@ } -#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) -static void i596_error(int irq, void *dev_id, struct pt_regs *regs) +static inline int wait_istat(struct device *dev, struct i596_private *lp, int delcnt, char *str) { - struct device *dev = dev_id; - struct i596_cmd *cmd; + while (--delcnt && lp->iscp.stat) + udelay(10); + if (!delcnt) { + printk("%s: %s, status %4.4x, cmd %4.4x.\n", + dev->name, str, lp->scb.status, lp->scb.command); + return -1; + } + else + return 0; +} - struct i596_private *lp = (struct i596_private *) dev->priv; - printk("i596_error: lp = 0x%08x\n", (u32) lp); - printk("scp at %08x, .sysbus = %08x, .iscp = %08x\n", - (u32) & lp->scp, (u32) lp->scp.sysbus, (u32) lp->scp.iscp); - printk("iscp at %08x, .stat = %08x, .scb = %08x\n", - (u32) & lp->iscp, (u32) lp->iscp.stat, (u32) lp->iscp.scb); - printk("scb at %08x, .status = %04x, .command = %04x\n", - (u32) & lp->scb, lp->scb.status, lp->scb.command); - printk(" .cmd = %08x, .rfd = %08x\n", (u32) lp->scb.cmd, - (u32) lp->scb.rfd); - cmd = WSWAPcmd(lp->scb.cmd); - while (cmd && (u32) cmd < 0x1000000) { - printk("cmd at %08x, .status = %04x, .command = %04x, .next = %08x\n", - (u32) cmd, cmd->status, cmd->command, (u32) cmd->next); - cmd = WSWAPcmd(cmd->next); + +static inline int wait_cmd(struct device *dev, struct i596_private *lp, int delcnt, char *str) +{ + while (--delcnt && lp->scb.command) + udelay(10); + if (!delcnt) { + printk("%s: %s, status %4.4x, cmd %4.4x.\n", + dev->name, str, lp->scb.status, lp->scb.command); + return -1; } - while (1); + else + return 0; } -#endif -static inline int init_rx_bufs(struct device *dev, int num) + +static void i596_display_data(struct device *dev) { struct i596_private *lp = (struct i596_private *) dev->priv; - int i; + struct i596_cmd *cmd; struct i596_rfd *rfd; + struct i596_rbd *rbd; + + printk("lp and scp at %p, .sysbus = %08lx, .iscp = %p\n", + &lp->scp, lp->scp.sysbus, lp->scp.iscp); + printk("iscp at %p, iscp.stat = %08lx, .scb = %p\n", + &lp->iscp, lp->iscp.stat, lp->iscp.scb); + printk("scb at %p, scb.status = %04x, .command = %04x," + " .cmd = %p, .rfd = %p\n", + &lp->scb, lp->scb.status, lp->scb.command, + lp->scb.cmd, lp->scb.rfd); + printk(" errors: crc %lx, align %lx, resource %lx," + " over %lx, rcvdt %lx, short %lx\n", + lp->scb.crc_err, lp->scb.align_err, lp->scb.resource_err, + lp->scb.over_err, lp->scb.rcvdt_err, lp->scb.short_err); + cmd = lp->cmd_head; + while (cmd != I596_NULL) { + printk("cmd at %p, .status = %04x, .command = %04x, .b_next = %p\n", + cmd, cmd->status, cmd->command, cmd->b_next); + cmd = cmd->v_next; + } + rfd = lp->rfd_head; + printk("rfd_head = %p\n", rfd); + do { + printk (" %p .stat %04x, .cmd %04x, b_next %p, rbd %p," + " count %04x\n", + rfd, rfd->stat, rfd->cmd, rfd->b_next, rfd->rbd, + rfd->count); + rfd = rfd->v_next; + } while (rfd != lp->rfd_head); + rbd = lp->rbd_head; + printk("rbd_head = %p\n", rbd); + do { + printk(" %p .count %04x, b_next %p, b_data %p, size %04x\n", + rbd, rbd->count, rbd->b_next, rbd->b_data, rbd->size); + rbd = rbd->v_next; + } while (rbd != lp->rbd_head); +} - lp->scb.rfd = (struct i596_rfd *) I596_NULL; - if (i596_debug > 1) - printk("%s: init_rx_bufs %d.\n", dev->name, num); +#if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET) +static void i596_error(int irq, void *dev_id, struct pt_regs *regs) +{ + struct device *dev = dev_id; + volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000; - for (i = 0; i < num; i++) { - if (!(rfd = (struct i596_rfd *) kmalloc(sizeof(struct i596_rfd), GFP_KERNEL))) - break; + pcc2[0x28] = 1; + pcc2[0x2b] = 0x1d; + printk("%s: Error interrupt\n", dev->name); + i596_display_data(dev); +} +#endif - rfd->stat = 0x0000; - rfd->rbd = I596_NULL; - rfd->count = 0; - rfd->size = 1532; - if (i == 0) { - rfd->cmd = CMD_EOL; - lp->rx_tail = rfd; - } else - rfd->cmd = 0x0000; +static inline void init_rx_bufs(struct device *dev) +{ + struct i596_private *lp = (struct i596_private *)dev->priv; + int i; + struct i596_rfd *rfd; + struct i596_rbd *rbd; + + /* First build the Receive Buffer Descriptor List */ + + for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) { + struct sk_buff *skb = dev_alloc_skb(PKT_BUF_SZ); - rfd->next = lp->scb.rfd; - lp->scb.rfd = WSWAPrfd(rfd); + if (skb == NULL) + panic("82596: alloc_skb() failed"); + skb->dev = dev; + rbd->v_next = rbd+1; + rbd->b_next = WSWAPrbd(virt_to_bus(rbd+1)); + rbd->b_addr = WSWAPrbd(virt_to_bus(rbd)); + rbd->skb = skb; + rbd->v_data = skb->tail; + rbd->b_data = WSWAPchar(virt_to_bus(skb->tail)); + rbd->size = PKT_BUF_SZ; +#ifdef __mc68000__ + cache_clear(virt_to_phys(skb->tail), PKT_BUF_SZ); +#endif } + lp->rbd_head = lp->rbds; + rbd = lp->rbds + rx_ring_size - 1; + rbd->v_next = lp->rbds; + rbd->b_next = WSWAPrbd(virt_to_bus(lp->rbds)); - if (i != 0) - lp->rx_tail->next = lp->scb.rfd; + /* Now build the Receive Frame Descriptor List */ - return (i); + for (i = 0, rfd = lp->rfds; i < rx_ring_size; i++, rfd++) { + rfd->rbd = I596_NULL; + rfd->v_next = rfd+1; + rfd->v_prev = rfd-1; + rfd->b_next = WSWAPrfd(virt_to_bus(rfd+1)); + rfd->cmd = CMD_FLEX; + } + lp->rfd_head = lp->rfds; + lp->scb.rfd = WSWAPrfd(virt_to_bus(lp->rfds)); + rfd = lp->rfds; + rfd->rbd = lp->rbd_head; + rfd->v_prev = lp->rfds + rx_ring_size - 1; + rfd = lp->rfds + rx_ring_size - 1; + rfd->v_next = lp->rfds; + rfd->b_next = WSWAPrfd(virt_to_bus(lp->rfds)); + rfd->cmd = CMD_EOL|CMD_FLEX; } static inline void remove_rx_bufs(struct device *dev) { + struct i596_private *lp = (struct i596_private *)dev->priv; + struct i596_rbd *rbd; + int i; + + for (i = 0, rbd = lp->rbds; i < rx_ring_size; i++, rbd++) { + if (rbd->skb == NULL) + break; + dev_kfree_skb(rbd->skb); + } +} + + +static void rebuild_rx_bufs(struct device *dev) +{ struct i596_private *lp = (struct i596_private *) dev->priv; - struct i596_rfd *rfd = WSWAPrfd(lp->scb.rfd); + int i; - lp->rx_tail->next = (struct i596_rfd *) I596_NULL; + /* Ensure rx frame/buffer descriptors are tidy */ - do { - lp->scb.rfd = rfd->next; - kfree(rfd); - rfd = WSWAPrfd(lp->scb.rfd); - } - while (rfd != lp->rx_tail); + for (i = 0; i < rx_ring_size; i++) { + lp->rfds[i].rbd = I596_NULL; + lp->rfds[i].cmd = CMD_FLEX; + } + lp->rfds[rx_ring_size-1].cmd = CMD_EOL|CMD_FLEX; + lp->rfd_head = lp->rfds; + lp->scb.rfd = WSWAPrfd(virt_to_bus(lp->rfds)); + lp->rbd_head = lp->rbds; + lp->rfds[0].rbd = WSWAPrbd(virt_to_bus(lp->rbds)); } -static inline void init_i596_mem(struct device *dev) + +static int init_i596_mem(struct device *dev) { struct i596_private *lp = (struct i596_private *) dev->priv; -#if !defined(CONFIG_MVME16x_NET) && !defined(CONFIG_BVME6000_NET) +#if !defined(ENABLE_MVME16x_NET) && !defined(ENABLE_BVME6000_NET) short ioaddr = dev->base_addr; #endif - int boguscnt = 100000; unsigned long flags; -#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) -#ifdef CONFIG_MVME16x_NET + MPU_PORT(dev, PORT_RESET, 0); + + udelay(100); /* Wait 100us - seems to help */ + +#if defined(ENABLE_MVME16x_NET) || defined(ENABLE_BVME6000_NET) +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000; /* Disable all ints for now */ pcc2[0x28] = 1; - pcc2[0x2a] = 0x40; - pcc2[0x2b] = 0x40; /* Set snooping bits now! */ + pcc2[0x2a] = 0x48; + /* Following disables snooping. Snooping is not required + * as we make appropriate use of non-cached pages for + * shared data, and cache_push/cache_clear. + */ + pcc2[0x2b] = 0x08; } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG; @@ -416,74 +610,72 @@ } #endif - MPU_PORT(dev, PORT_RESET, 0); - - udelay(100); /* Wait 100us - seems to help */ - /* change the scp address */ - MPU_PORT(dev, PORT_ALTSCP, &lp->scp); + MPU_PORT(dev, PORT_ALTSCP, (void *)virt_to_bus(&lp->scp)); -#else +#elif defined(ENABLE_APRICOT) - /* change the scp address */ - outw(0, ioaddr); - outw(0, ioaddr); - outb(4, ioaddr + 0xf); - outw(((((int) &lp->scp) & 0xffff) | 2), ioaddr); - outw((((int) &lp->scp) >> 16) & 0xffff, ioaddr); + { + u32 scp = virt_to_bus(&lp->scp); + + /* change the scp address */ + outw(0, ioaddr); + outw(0, ioaddr); + outb(4, ioaddr + 0xf); + outw(scp | 2, ioaddr); + outw(scp >> 16, ioaddr); + } #endif lp->last_cmd = jiffies; -#ifdef CONFIG_MVME16x_NET +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) lp->scp.sysbus = 0x00000054; #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) lp->scp.sysbus = 0x0000004c; #endif -#ifdef CONFIG_APRICOT +#ifdef ENABLE_APRICOT if (MACH_IS_APRICOT) lp->scp.sysbus = 0x00440000; #endif - lp->scp.iscp = WSWAPiscp(&(lp->iscp)); - lp->iscp.scb = WSWAPscb(&(lp->scb)); + lp->scp.iscp = WSWAPiscp(virt_to_bus(&(lp->iscp))); + lp->iscp.scb = WSWAPscb(virt_to_bus(&(lp->scb))); lp->iscp.stat = ISCP_BUSY; lp->cmd_backlog = 0; - lp->cmd_head = lp->scb.cmd = (struct i596_cmd *) I596_NULL; + lp->cmd_head = lp->scb.cmd = I596_NULL; - if (i596_debug > 1) - printk("%s: starting i82596.\n", dev->name); + DEB(DEB_INIT,printk("%s: starting i82596.\n", dev->name)); -#if !defined(CONFIG_MVME16x_NET) && !defined(CONFIG_BVME6000_NET) +#if defined(ENABLE_APRICOT) (void) inb(ioaddr + 0x10); outb(4, ioaddr + 0xf); #endif CA(dev); - while (lp->iscp.stat) - if (--boguscnt == 0) { - printk("%s: i82596 initialization timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } + if (wait_istat(dev,lp,1000,"initialization timed out")) + goto failed; + DEB(DEB_INIT,printk("%s: i82596 initialization successful\n", dev->name)); + + /* Ensure rx frame/buffer descriptors are tidy */ + rebuild_rx_bufs(dev); lp->scb.command = 0; -#ifdef CONFIG_MVME16x_NET +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000; /* Enable ints, etc. now */ - pcc2[0x2a] = 0x08; pcc2[0x2a] = 0x55; /* Edge sensitive */ - pcc2[0x2b] = 0x55; + pcc2[0x2b] = 0x15; } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG; @@ -491,77 +683,131 @@ } #endif - memcpy(lp->i596_config, init_setup, 14); - lp->set_conf.command = CmdConfigure; - i596_add_cmd(dev, &lp->set_conf); - - memcpy(lp->eth_addr, dev->dev_addr, 6); - lp->set_add.command = CmdSASetup; - i596_add_cmd(dev, &lp->set_add); - lp->tdr.command = CmdTDR; - i596_add_cmd(dev, &lp->tdr); + DEB(DEB_INIT,printk("%s: queuing CmdConfigure\n", dev->name)); + memcpy(lp->cf_cmd.i596_config, init_setup, 14); + lp->cf_cmd.cmd.command = CmdConfigure; + i596_add_cmd(dev, &lp->cf_cmd.cmd); + + DEB(DEB_INIT,printk("%s: queuing CmdSASetup\n", dev->name)); + memcpy(lp->sa_cmd.eth_addr, dev->dev_addr, 6); + lp->sa_cmd.cmd.command = CmdSASetup; + i596_add_cmd(dev, &lp->sa_cmd.cmd); + + DEB(DEB_INIT,printk("%s: queuing CmdTDR\n", dev->name)); + lp->tdr_cmd.cmd.command = CmdTDR; + i596_add_cmd(dev, &lp->tdr_cmd.cmd); - boguscnt = 200000; save_flags(flags); cli(); - while (lp->scb.command) - if (--boguscnt == 0) { - printk("%s: receive unit start timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } + if (wait_cmd(dev,lp,1000,"timed out waiting to issue RX_START")) + goto failed; + DEB(DEB_INIT,printk("%s: Issuing RX_START\n", dev->name)); lp->scb.command = RX_START; CA(dev); restore_flags(flags); - boguscnt = 2000; - while (lp->scb.command) - if (--boguscnt == 0) { - printk("i82596 init timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - return; + if (wait_cmd(dev,lp,1000,"RX_START not processed")) + goto failed; + DEB(DEB_INIT,printk("%s: Receive unit started OK\n", dev->name)); + return 0; + +failed: + printk("%s: Failed to initialise 82596\n", dev->name); + MPU_PORT(dev, PORT_RESET, 0); + return -1; } static inline int i596_rx(struct device *dev) { - struct i596_private *lp = (struct i596_private *) dev->priv; + struct i596_private *lp = (struct i596_private *)dev->priv; struct i596_rfd *rfd; + struct i596_rbd *rbd; int frames = 0; - if (i596_debug > 3) - printk("i596_rx()\n"); - - rfd = WSWAPrfd(lp->scb.rfd); /* Reference next frame descriptor to check */ + DEB(DEB_RXFRAME,printk ("i596_rx(), rfd_head %p, rbd_head %p\n", + lp->rfd_head, lp->rbd_head)); - while ((rfd->stat) & STAT_C) { /* Loop while we have complete frames */ - if (i596_debug > 2) - print_eth(rfd->data); + rfd = lp->rfd_head; /* Ref next frame to check */ - if ((rfd->stat) & STAT_OK) { + while ((rfd->stat) & STAT_C) { /* Loop while complete frames */ + if (rfd->rbd == I596_NULL) + rbd = I596_NULL; + else if (rfd->rbd == lp->rbd_head->b_addr) + rbd = lp->rbd_head; + else { + printk("%s: rbd chain broken!\n", dev->name); + /* XXX Now what? */ + rbd = I596_NULL; + } + DEB(DEB_RXFRAME, printk(" rfd %p, rfd.rbd %p, rfd.stat %04x\n", + rfd, rfd->rbd, rfd->stat)); + + if (rbd != I596_NULL && ((rfd->stat) & STAT_OK)) { /* a good frame */ - int pkt_len = rfd->count & 0x3fff; - struct sk_buff *skb = dev_alloc_skb(pkt_len); + int pkt_len = rbd->count & 0x3fff; + struct sk_buff *skb = rbd->skb; + int rx_in_place = 0; + DEB(DEB_RXADDR,print_eth(rbd->v_data, "received")); frames++; + /* Check if the packet is long enough to just accept + * without copying to a properly sized skbuff. + */ + + if (pkt_len > rx_copybreak) { + struct sk_buff *newskb; + + /* Get fresh skbuff to replace filled one. */ + newskb = dev_alloc_skb(PKT_BUF_SZ); + if (newskb == NULL) { + skb = NULL; /* drop pkt */ + goto memory_squeeze; + } + /* Pass up the skb already on the Rx ring. */ + skb_put(skb, pkt_len); + rx_in_place = 1; + rbd->skb = newskb; + newskb->dev = dev; + rbd->v_data = newskb->tail; + rbd->b_data = WSWAPchar(virt_to_bus(newskb->tail)); +#ifdef __mc68000__ + cache_clear(virt_to_phys(newskb->tail), PKT_BUF_SZ); +#endif + } + else + skb = dev_alloc_skb(pkt_len + 2); +memory_squeeze: if (skb == NULL) { - printk("%s: i596_rx Memory squeeze, dropping packet.\n", dev->name); + /* XXX tulip.c can defer packets here!! */ + printk ("%s: i596_rx Memory squeeze, dropping packet.\n", dev->name); lp->stats.rx_dropped++; - } else { + } + else { skb->dev = dev; - memcpy(skb_put(skb, pkt_len), rfd->data, pkt_len); - skb->protocol = eth_type_trans(skb, dev); + if (!rx_in_place) { + /* 16 byte align the data fields */ + skb_reserve(skb, 2); + memcpy(skb_put(skb,pkt_len), rbd->v_data, pkt_len); + } + skb->protocol=eth_type_trans(skb,dev); + skb->len = pkt_len; +#ifdef __mc68000__ + cache_clear(virt_to_phys(rbd->skb->tail), + pkt_len); +#endif netif_rx(skb); lp->stats.rx_packets++; - lp->stats.rx_bytes += pkt_len; + lp->stats.rx_bytes+=pkt_len; } - } else { + } + else { + DEB(DEB_ERRORS, printk("%s: Error, rfd.stat = 0x%04x\n", + dev->name, rfd->stat)); lp->stats.rx_errors++; if ((rfd->stat) & 0x0001) lp->stats.collisions++; @@ -581,33 +827,42 @@ /* Clear the buffer descriptor count and EOF + F flags */ + if (rbd != I596_NULL && (rbd->count & 0x4000)) { + rbd->count = 0; + lp->rbd_head = rbd->v_next; + } + + /* Tidy the frame descriptor, marking it as end of list */ + + rfd->rbd = I596_NULL; rfd->stat = 0; + rfd->cmd = CMD_EOL|CMD_FLEX; rfd->count = 0; - rfd->cmd = CMD_EOL; - lp->rx_tail->cmd = 0; - lp->rx_tail = rfd; - lp->scb.rfd = rfd->next; - rfd = WSWAPrfd(lp->scb.rfd); /* Next frame descriptor to check */ + + /* Remove end-of-list from old end descriptor */ + + rfd->v_prev->cmd = CMD_FLEX; + + /* Update record of next frame descriptor to process */ + + lp->scb.rfd = rfd->b_next; + lp->rfd_head = rfd->v_next; + rfd = lp->rfd_head; } - if (i596_debug > 3) - printk("frames %d\n", frames); + DEB(DEB_RXFRAME,printk ("frames %d\n", frames)); return 0; } -static inline void i596_cleanup_cmd(struct i596_private *lp) + +static inline void i596_cleanup_cmd(struct device *dev, struct i596_private *lp) { struct i596_cmd *ptr; - int boguscnt = 1000; - - if (i596_debug > 4) - printk("i596_cleanup_cmd\n"); - while (lp->cmd_head != (struct i596_cmd *) I596_NULL) { + while (lp->cmd_head != I596_NULL) { ptr = lp->cmd_head; - - lp->cmd_head = WSWAPcmd(lp->cmd_head->next); + lp->cmd_head = ptr->v_next; lp->cmd_backlog--; switch ((ptr->command) & 0x7) { @@ -621,47 +876,29 @@ lp->stats.tx_errors++; lp->stats.tx_aborted_errors++; - ptr->next = (struct i596_cmd *) I596_NULL; - kfree(tx_cmd); - break; - } - case CmdMulticastList: - { - ptr->next = (struct i596_cmd *) I596_NULL; - kfree(ptr); + ptr->v_next = ptr->b_next = I596_NULL; + tx_cmd->cmd.command = 0; /* Mark as free */ break; } default: - ptr->next = (struct i596_cmd *) I596_NULL; + ptr->v_next = ptr->b_next = I596_NULL; } } - while (lp->scb.command) - if (--boguscnt == 0) { - printk("i596_cleanup_cmd timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - lp->scb.cmd = WSWAPcmd(lp->cmd_head); + wait_cmd(dev,lp,100,"i596_cleanup_cmd timed out"); + lp->scb.cmd = I596_NULL; } static inline void i596_reset(struct device *dev, struct i596_private *lp, int ioaddr) { - int boguscnt = 1000; unsigned long flags; - if (i596_debug > 1) - printk("i596_reset\n"); + DEB(DEB_RESET,printk("i596_reset\n")); save_flags(flags); cli(); - while (lp->scb.command) - if (--boguscnt == 0) { - printk("i596_reset timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } + wait_cmd(dev,lp,100,"i596_reset timed out"); dev->start = 0; dev->tbusy = 1; @@ -669,17 +906,10 @@ CA(dev); /* wait for shutdown */ - boguscnt = 4000; - - while (lp->scb.command) - if (--boguscnt == 0) { - printk("i596_reset 2 timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } + wait_cmd(dev,lp,1000,"i596_reset 2 timed out"); restore_flags(flags); - i596_cleanup_cmd(lp); + i596_cleanup_cmd(dev,lp); i596_rx(dev); dev->start = 1; @@ -693,14 +923,12 @@ struct i596_private *lp = (struct i596_private *) dev->priv; int ioaddr = dev->base_addr; unsigned long flags; - int boguscnt = 1000; - if (i596_debug > 4) - printk("i596_add_cmd\n"); + DEB(DEB_ADDCMD,printk("i596_add_cmd\n")); cmd->status = 0; cmd->command |= (CMD_EOL | CMD_INTR); - cmd->next = (struct i596_cmd *) I596_NULL; + cmd->v_next = cmd->b_next = I596_NULL; save_flags(flags); cli(); @@ -714,24 +942,19 @@ * the CU. */ - if (lp->cmd_head != (struct i596_cmd *) I596_NULL) { - lp->cmd_tail->next = WSWAPcmd(cmd); + if (lp->cmd_head != I596_NULL) { + lp->cmd_tail->v_next = cmd; + lp->cmd_tail->b_next = WSWAPcmd(virt_to_bus(&cmd->status)); } else { lp->cmd_head = cmd; - while (lp->scb.command) - if (--boguscnt == 0) { - printk("i596_add_cmd timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - lp->scb.cmd = WSWAPcmd(cmd); + wait_cmd(dev,lp,100,"i596_add_cmd timed out"); + lp->scb.cmd = WSWAPcmd(virt_to_bus(&cmd->status)); lp->scb.command = CUC_START; CA(dev); } lp->cmd_tail = cmd; lp->cmd_backlog++; - lp->cmd_head = WSWAPcmd(lp->scb.cmd); /* Is this redundant? RGH 300597 */ restore_flags(flags); if (lp->cmd_backlog > max_cmd_backlog) { @@ -748,35 +971,34 @@ static int i596_open(struct device *dev) { - int i; + int res = 0; - if (i596_debug > 1) - printk("%s: i596_open() irq %d.\n", dev->name, dev->irq); + DEB(DEB_OPEN,printk("%s: i596_open() irq %d.\n", dev->name, dev->irq)); - if (request_irq(dev->irq, &i596_interrupt, 0, "apricot", dev)) + if (request_irq(dev->irq, &i596_interrupt, 0, "i82596", dev)) { + printk("%s: IRQ %d not free\n", dev->name, dev->irq); return -EAGAIN; -#ifdef CONFIG_MVME16x_NET + } +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { - if (request_irq(0x56, &i596_error, 0, "apricot_error", dev)) + if (request_irq(0x56, &i596_error, 0, "i82596_error", dev)) return -EAGAIN; } #endif - if ((i = init_rx_bufs(dev, RX_RING_SIZE)) < RX_RING_SIZE) - printk("%s: only able to allocate %d receive buffers\n", dev->name, i); + init_rx_bufs(dev); - if (i < 4) { - free_irq(dev->irq, dev); - return -EAGAIN; - } dev->tbusy = 0; dev->interrupt = 0; dev->start = 1; MOD_INC_USE_COUNT; /* Initialize the 82596 memory */ - init_i596_mem(dev); + if (init_i596_mem(dev)) { + res = -EAGAIN; + free_irq(dev->irq, dev); + } - return 0; /* Always succeed */ + return res; } static int i596_start_xmit(struct sk_buff *skb, struct device *dev) @@ -784,29 +1006,27 @@ struct i596_private *lp = (struct i596_private *) dev->priv; int ioaddr = dev->base_addr; struct tx_cmd *tx_cmd; - - if (i596_debug > 2) - printk("%s: 82596 start xmit\n", dev->name); + struct i596_tbd *tbd; /* Transmitter timeout, serious problems. */ if (dev->tbusy) { int tickssofar = jiffies - dev->trans_start; if (tickssofar < 5) return 1; - printk("%s: transmit timed out, status resetting.\n", - dev->name); + DEB(DEB_SERIOUS,printk("%s: transmit timed out, status resetting.\n", + dev->name)); lp->stats.tx_errors++; /* Try to restart the adaptor */ if (lp->last_restart == lp->stats.tx_packets) { - if (i596_debug > 1) - printk("Resetting board.\n"); + DEB(DEB_SERIOUS,printk("%s: Resetting board.\n", + dev->name)); /* Shutdown and restart */ i596_reset(dev, lp, ioaddr); } else { /* Issue a channel attention signal */ - if (i596_debug > 1) - printk("Kicking board.\n"); + DEB(DEB_SERIOUS,printk("%s: Kicking board.\n", + dev->name)); lp->scb.command = CUC_START | RX_START; CA(dev); lp->last_restart = lp->stats.tx_packets; @@ -814,8 +1034,8 @@ dev->tbusy = 0; dev->trans_start = jiffies; } - if (i596_debug > 3) - printk("%s: i596_start_xmit() called\n", dev->name); + DEB(DEB_STARTTX,printk("%s: i596_start_xmit(%x,%x) called\n", dev->name, + skb->len, (unsigned int)skb->data)); /* Block a timer-based transmit from overlapping. This could better be done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ @@ -825,16 +1045,20 @@ short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; dev->trans_start = jiffies; - tx_cmd = (struct tx_cmd *) kmalloc((sizeof(struct tx_cmd) + sizeof(struct i596_tbd)), GFP_ATOMIC); - if (tx_cmd == NULL) { - printk("%s: i596_xmit Memory squeeze, dropping packet.\n", dev->name); + tx_cmd = lp->tx_cmds + lp->next_tx_cmd; + tbd = lp->tbds + lp->next_tx_cmd; + + if (tx_cmd->cmd.command) { + DEB(DEB_ERRORS,printk ("%s: xmit ring full, dropping packet.\n", + dev->name)); lp->stats.tx_dropped++; dev_kfree_skb(skb); } else { - struct i596_tbd *tbd = (struct i596_tbd *) (tx_cmd + 1); - tx_cmd->tbd = WSWAPtbd(tbd); - tbd->next = (struct i596_tbd *) I596_NULL; + if (++lp->next_tx_cmd == TX_RING_SIZE) + lp->next_tx_cmd = 0; + tx_cmd->tbd = WSWAPtbd(virt_to_bus(tbd)); + tbd->next = I596_NULL; tx_cmd->cmd.command = CMD_FLEX | CmdTx; tx_cmd->skb = skb; @@ -844,11 +1068,13 @@ tbd->pad = 0; tbd->size = EOF | length; - tbd->data = WSWAPchar(skb->data); + tbd->data = WSWAPchar(virt_to_bus(skb->data)); - if (i596_debug > 3) - print_eth(skb->data); - i596_add_cmd(dev, (struct i596_cmd *) tx_cmd); +#ifdef __mc68000__ + cache_push(virt_to_phys(skb->data), length); +#endif + DEB(DEB_TXADDR,print_eth(skb->data, "tx-queued")); + i596_add_cmd(dev, &tx_cmd->cmd); lp->stats.tx_packets++; lp->stats.tx_bytes += length; @@ -859,23 +1085,18 @@ return 0; } - -static void print_eth(char *add) +static void print_eth(unsigned char *add, char *str) { int i; - printk("print_eth(%08x)\n", (unsigned int) add); - printk("Dest "); + printk("i596 0x%p, ", add); for (i = 0; i < 6; i++) - printk(" %2.2X", (unsigned char) add[i]); - printk("\n"); - - printk("Source"); + printk(" %02X", add[i + 6]); + printk(" -->"); for (i = 0; i < 6; i++) - printk(" %2.2X", (unsigned char) add[i + 6]); - printk("\n"); - printk("type %2.2X%2.2X\n", (unsigned char) add[12], (unsigned char) add[13]); + printk(" %02X", add[i]); + printk(" %02X%02X, %s\n", add[12], add[13], str); } __initfunc(int i82596_probe(struct device *dev)) @@ -883,24 +1104,25 @@ int i; struct i596_private *lp; char eth_addr[6]; + static int probed = 0; -#ifdef CONFIG_MVME16x_NET + if (probed) + return -ENODEV; + probed++; +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { - static int probed = 0; - +#ifdef XXX_FIXME if (mvme16x_config & MVME16x_CONFIG_NO_ETHERNET) { printk("Ethernet probe disabled - chip not present\n"); - return ENODEV; + return -ENODEV; } - if (probed) - return ENODEV; - probed++; +#endif memcpy(eth_addr, (void *) 0xfffc1f2c, 6); /* YUCK! Get addr from NOVRAM */ dev->base_addr = MVME_I596_BASE; dev->irq = (unsigned) MVME16x_IRQ_I596; } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { volatile unsigned char *rtc = (unsigned char *) BVME_RTC_BASE; unsigned char msr = rtc[3]; @@ -914,69 +1136,84 @@ dev->irq = (unsigned) BVME_IRQ_I596; } #endif -#ifdef CONFIG_APRICOT - int checksum = 0; - int ioaddr = 0x300; +#ifdef ENABLE_APRICOT + { + int checksum = 0; + int ioaddr = 0x300; - /* this is easy the ethernet interface can only be at 0x300 */ - /* first check nothing is already registered here */ + /* this is easy the ethernet interface can only be at 0x300 */ + /* first check nothing is already registered here */ - if (check_region(ioaddr, I596_TOTAL_SIZE)) - return ENODEV; + if (check_region(ioaddr, I596_TOTAL_SIZE)) { + printk("82596: IO address 0x%04x in use\n", ioaddr); + return -ENODEV; + } - for (i = 0; i < 8; i++) { - eth_addr[i] = inb(ioaddr + 8 + i); - checksum += eth_addr[i]; - } + for (i = 0; i < 8; i++) { + eth_addr[i] = inb(ioaddr + 8 + i); + checksum += eth_addr[i]; + } - /* checksum is a multiple of 0x100, got this wrong first time - some machines have 0x100, some 0x200. The DOS driver doesn't - even bother with the checksum */ + /* checksum is a multiple of 0x100, got this wrong first time + some machines have 0x100, some 0x200. The DOS driver doesn't + even bother with the checksum */ - if (checksum % 0x100) - return ENODEV; + if (checksum % 0x100) + return -ENODEV; - /* Some other boards trip the checksum.. but then appear as ether - address 0. Trap these - AC */ + /* Some other boards trip the checksum.. but then appear as + * ether address 0. Trap these - AC */ - if (memcmp(eth_addr, "\x00\x00\x49", 3) != 0) - return ENODEV; + if (memcmp(eth_addr, "\x00\x00\x49", 3) != 0) + return -ENODEV; - request_region(ioaddr, I596_TOTAL_SIZE, "i596"); + request_region(ioaddr, I596_TOTAL_SIZE, "i596"); - dev->base_addr = ioaddr; - dev->irq = 10; + dev->base_addr = ioaddr; + dev->irq = 10; + } +#endif + dev->mem_start = (int)__get_free_pages(GFP_ATOMIC, 0); + if (!dev->mem_start) { +#ifdef ENABLE_APRICOT + release_region(dev->base_addr, I596_TOTAL_SIZE); #endif + return -ENOMEM; + } + ether_setup(dev); - printk("%s: 82596 at %#3lx,", dev->name, dev->base_addr); + DEB(DEB_PROBE,printk("%s: 82596 at %#3lx,", dev->name, dev->base_addr)); for (i = 0; i < 6; i++) - printk(" %2.2X", dev->dev_addr[i] = eth_addr[i]); + DEB(DEB_PROBE,printk(" %2.2X", dev->dev_addr[i] = eth_addr[i])); - printk(" IRQ %d.\n", dev->irq); + DEB(DEB_PROBE,printk(" IRQ %d.\n", dev->irq)); - if (i596_debug > 0) - printk(version); + DEB(DEB_PROBE,printk(version)); - /* The APRICOT-specific entries in the device structure. */ + /* The 82596-specific entries in the device structure. */ dev->open = &i596_open; dev->stop = &i596_close; dev->hard_start_xmit = &i596_start_xmit; dev->get_stats = &i596_get_stats; dev->set_multicast_list = &set_multicast_list; - dev->mem_start = (int) kmalloc(sizeof(struct i596_private) + 0x0f, GFP_KERNEL); - /* align for scp */ - dev->priv = (void *) ((dev->mem_start + 0xf) & 0xfffffff0); + dev->priv = (void *)(dev->mem_start); lp = (struct i596_private *) dev->priv; - if (i596_debug) - printk("%s: lp at 0x%08lx, lp->scb at 0x%08lx\n" - ,dev->name, (unsigned long) lp, (unsigned long) &lp->scb); + DEB(DEB_INIT,printk ("%s: lp at 0x%08lx (%d bytes), lp->scb at 0x%08lx\n", + dev->name, (unsigned long)lp, + sizeof(struct i596_private), (unsigned long)&lp->scb)); memset((void *) lp, 0, sizeof(struct i596_private)); + +#ifdef __mc68000__ + cache_push(virt_to_phys((void *)(dev->mem_start)), 4096); + cache_clear(virt_to_phys((void *)(dev->mem_start)), 4096); + kernel_set_cachemode((void *)(dev->mem_start), 4096, IOMAP_NOCACHE_SER); +#endif lp->scb.command = 0; - lp->scb.cmd = (struct i596_cmd *) I596_NULL; - lp->scb.rfd = (struct i596_rfd *) I596_NULL; + lp->scb.cmd = I596_NULL; + lp->scb.rfd = I596_NULL; return 0; } @@ -986,10 +1223,9 @@ struct device *dev = dev_id; struct i596_private *lp; short ioaddr; - int boguscnt = 2000; unsigned short status, ack_cmd = 0; -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { if (*(char *) BVME_LOCAL_IRQ_STAT & BVME_ETHERR) { i596_error(BVME_IRQ_I596, NULL, NULL); @@ -1001,8 +1237,6 @@ printk("i596_interrupt(): irq %d for unknown device.\n", irq); return; } - if (i596_debug > 3) - printk("%s: i596_interrupt(): irq %d\n", dev->name, irq); if (dev->interrupt) printk("%s: Re-entering the interrupt handler.\n", dev->name); @@ -1013,140 +1247,113 @@ lp = (struct i596_private *) dev->priv; - while (lp->scb.command) - if (--boguscnt == 0) { - printk("%s: i596 interrupt, timeout status %4.4x command %4.4x.\n", dev->name, lp->scb.status, lp->scb.command); - break; - } + wait_cmd(dev,lp,100,"i596 interrupt, timeout"); status = lp->scb.status; - if (i596_debug > 4) - printk("%s: i596 interrupt, status %4.4x.\n", dev->name, status); + DEB(DEB_INTS,printk("%s: i596 interrupt, IRQ %d, status %4.4x.\n", + dev->name, irq, status)); ack_cmd = status & 0xf000; if ((status & 0x8000) || (status & 0x2000)) { struct i596_cmd *ptr; - if ((i596_debug > 4) && (status & 0x8000)) - printk("%s: i596 interrupt completed command.\n", dev->name); - if ((i596_debug > 4) && (status & 0x2000)) - printk("%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700); + if ((status & 0x8000)) + DEB(DEB_INTS,printk("%s: i596 interrupt completed command.\n", dev->name)); + if ((status & 0x2000)) + DEB(DEB_INTS,printk("%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700)); - while ((lp->cmd_head != (struct i596_cmd *) I596_NULL) && (lp->cmd_head->status & STAT_C)) { + while ((lp->cmd_head != I596_NULL) && (lp->cmd_head->status & STAT_C)) { ptr = lp->cmd_head; - if (i596_debug > 2) - printk("cmd_head->status = %04x, ->command = %04x\n", - lp->cmd_head->status, lp->cmd_head->command); - lp->cmd_head = WSWAPcmd(lp->cmd_head->next); + DEB(DEB_STATUS,printk("cmd_head->status = %04x, ->command = %04x\n", + lp->cmd_head->status, lp->cmd_head->command)); + lp->cmd_head = ptr->v_next; lp->cmd_backlog--; switch ((ptr->command) & 0x7) { case CmdTx: - { - struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr; - struct sk_buff *skb = tx_cmd->skb; - - if ((ptr->status) & STAT_OK) { - if (i596_debug > 2) - print_eth(skb->data); - } else { - lp->stats.tx_errors++; - if ((ptr->status) & 0x0020) - lp->stats.collisions++; - if (!((ptr->status) & 0x0040)) - lp->stats.tx_heartbeat_errors++; - if ((ptr->status) & 0x0400) - lp->stats.tx_carrier_errors++; - if ((ptr->status) & 0x0800) - lp->stats.collisions++; - if ((ptr->status) & 0x1000) - lp->stats.tx_aborted_errors++; - } - - dev_kfree_skb(skb); - - ptr->next = (struct i596_cmd *) I596_NULL; - kfree(tx_cmd); - break; - } - case CmdMulticastList: - { - ptr->next = (struct i596_cmd *) I596_NULL; - kfree(ptr); - break; + { + struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr; + struct sk_buff *skb = tx_cmd->skb; + + if ((ptr->status) & STAT_OK) { + DEB(DEB_TXADDR,print_eth(skb->data, "tx-done")); + } else { + lp->stats.tx_errors++; + if ((ptr->status) & 0x0020) + lp->stats.collisions++; + if (!((ptr->status) & 0x0040)) + lp->stats.tx_heartbeat_errors++; + if ((ptr->status) & 0x0400) + lp->stats.tx_carrier_errors++; + if ((ptr->status) & 0x0800) + lp->stats.collisions++; + if ((ptr->status) & 0x1000) + lp->stats.tx_aborted_errors++; } + + dev_kfree_skb(skb); + + tx_cmd->cmd.command = 0; /* Mark free */ + break; + } case CmdTDR: - { - unsigned long status = *((unsigned long *) (ptr + 1)); + { + unsigned short status = ((struct tdr_cmd *)ptr)->status; + + if (status & 0x8000) { + DEB(DEB_ANY,printk("%s: link ok.\n", dev->name)); + } else { + if (status & 0x4000) + printk("%s: Transceiver problem.\n", dev->name); + if (status & 0x2000) + printk("%s: Termination problem.\n", dev->name); + if (status & 0x1000) + printk("%s: Short circuit.\n", dev->name); - if (status & 0x8000) { - if (i596_debug > 3) - printk("%s: link ok.\n", dev->name); - } else { - if (status & 0x4000) - printk("%s: Transceiver problem.\n", dev->name); - if (status & 0x2000) - printk("%s: Termination problem.\n", dev->name); - if (status & 0x1000) - printk("%s: Short circuit.\n", dev->name); - - if (i596_debug > 1) - printk("%s: Time %ld.\n", dev->name, status & 0x07ff); - } - break; + DEB(DEB_TDR,printk("%s: Time %d.\n", dev->name, status & 0x07ff)); } + break; + } case CmdConfigure: - { - ptr->next = (struct i596_cmd *) I596_NULL; - /* Zap command so set_multicast_list() knows it is free */ - ptr->command = 0; - break; - } - default: - ptr->next = (struct i596_cmd *) I596_NULL; + /* Zap command so set_multicast_list() knows it is free */ + ptr->command = 0; + break; } + ptr->v_next = ptr->b_next = I596_NULL; lp->last_cmd = jiffies; } ptr = lp->cmd_head; - while ((ptr != (struct i596_cmd *) I596_NULL) && (ptr != lp->cmd_tail)) { + while ((ptr != I596_NULL) && (ptr != lp->cmd_tail)) { ptr->command &= 0x1fff; - ptr = WSWAPcmd(ptr->next); + ptr = ptr->v_next; } - if ((lp->cmd_head != (struct i596_cmd *) I596_NULL) && (dev->start)) + if ((lp->cmd_head != I596_NULL) && (dev->start)) ack_cmd |= CUC_START; - lp->scb.cmd = WSWAPcmd(lp->cmd_head); + lp->scb.cmd = WSWAPcmd(virt_to_bus(&lp->cmd_head->status)); } if ((status & 0x1000) || (status & 0x4000)) { - if ((i596_debug > 4) && (status & 0x4000)) - printk("%s: i596 interrupt received a frame.\n", dev->name); + if ((status & 0x4000)) + DEB(DEB_INTS,printk("%s: i596 interrupt received a frame.\n", dev->name)); + i596_rx(dev); /* Only RX_START if stopped - RGH 07-07-96 */ if (status & 0x1000) { - if (dev->start) + if (dev->start) { + DEB(DEB_ERRORS,printk("%s: i596 interrupt receive unit inactive, status 0x%x\n", dev->name, status)); ack_cmd |= RX_START; - if (i596_debug > 1) - printk("%s: i596 interrupt receive unit inactive %x.\n", dev->name, status & 0x00f0); + lp->stats.rx_errors++; + lp->stats.rx_fifo_errors++; + rebuild_rx_bufs(dev); + } } - i596_rx(dev); } - /* acknowledge the interrupt */ - -/* COMMENTED OUT <<<<< - if ((lp->scb.cmd != (struct i596_cmd *) I596_NULL) && (dev->start)) - ack_cmd |= CUC_START; - */ - boguscnt = 1000; - while (lp->scb.command) - if (--boguscnt == 0) { - printk("%s: i596 interrupt, timeout status %4.4x command %4.4x.\n", dev->name, lp->scb.status, lp->scb.command); - break; - } + wait_cmd(dev,lp,100,"i596 interrupt, timeout"); lp->scb.command = ack_cmd; -#ifdef CONFIG_MVME16x_NET +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { /* Ack the interrupt */ @@ -1155,7 +1362,7 @@ pcc2[0x2a] |= 0x08; } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG; @@ -1163,14 +1370,13 @@ *ethirq = 3; } #endif -#ifdef CONFIG_APRICOT +#ifdef ENABLE_APRICOT (void) inb(ioaddr + 0x10); outb(4, ioaddr + 0xf); #endif CA(dev); - if (i596_debug > 4) - printk("%s: exiting interrupt.\n", dev->name); + DEB(DEB_INTS,printk("%s: exiting interrupt.\n", dev->name)); dev->interrupt = 0; return; @@ -1179,41 +1385,27 @@ static int i596_close(struct device *dev) { struct i596_private *lp = (struct i596_private *) dev->priv; - int boguscnt = 2000; unsigned long flags; dev->start = 0; dev->tbusy = 1; - if (i596_debug > 1) - printk("%s: Shutting down ethercard, status was %4.4x.\n", - dev->name, lp->scb.status); + DEB(DEB_INIT,printk("%s: Shutting down ethercard, status was %4.4x.\n", + dev->name, lp->scb.status)); save_flags(flags); cli(); - while (lp->scb.command) - if (--boguscnt == 0) { - printk("%s: close1 timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } + wait_cmd(dev,lp,100,"close1 timed out"); lp->scb.command = CUC_ABORT | RX_ABORT; CA(dev); - boguscnt = 2000; - - while (lp->scb.command) - if (--boguscnt == 0) { - printk("%s: close2 timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } + wait_cmd(dev,lp,100,"close2 timed out"); restore_flags(flags); + DEB(DEB_STRUCT,i596_display_data(dev)); + i596_cleanup_cmd(dev,lp); - i596_cleanup_cmd(lp); - -#ifdef CONFIG_MVME16x_NET +#ifdef ENABLE_MVME16x_NET if (MACH_IS_MVME16x) { volatile unsigned char *pcc2 = (unsigned char *) 0xfff42000; @@ -1223,7 +1415,7 @@ pcc2[0x2b] = 0x40; /* Set snooping bits now! */ } #endif -#ifdef CONFIG_BVME6000_NET +#ifdef ENABLE_BVME6000_NET if (MACH_IS_BVME6000) { volatile unsigned char *ethirq = (unsigned char *) BVME_ETHIRQ_REG; @@ -1253,57 +1445,60 @@ static void set_multicast_list(struct device *dev) { struct i596_private *lp = (struct i596_private *) dev->priv; - struct i596_cmd *cmd; - int config = 0; + int config = 0, cnt; - if (i596_debug > 1) - printk("%s: set multicast list, %d entries, promisc %s, allmulti %s\n", dev->name, dev->mc_count, dev->flags & IFF_PROMISC ? "ON" : "OFF", dev->flags & IFF_ALLMULTI ? "ON" : "OFF"); + DEB(DEB_MULTI,printk("%s: set multicast list, %d entries, promisc %s, allmulti %s\n", dev->name, dev->mc_count, dev->flags & IFF_PROMISC ? "ON" : "OFF", dev->flags & IFF_ALLMULTI ? "ON" : "OFF")); - if ((dev->flags & IFF_PROMISC) && !(lp->i596_config[8] & 0x01)) { - lp->i596_config[8] |= 0x01; + if ((dev->flags & IFF_PROMISC) && !(lp->cf_cmd.i596_config[8] & 0x01)) { + lp->cf_cmd.i596_config[8] |= 0x01; config = 1; } - if (!(dev->flags & IFF_PROMISC) && (lp->i596_config[8] & 0x01)) { - lp->i596_config[8] &= ~0x01; + if (!(dev->flags & IFF_PROMISC) && (lp->cf_cmd.i596_config[8] & 0x01)) { + lp->cf_cmd.i596_config[8] &= ~0x01; config = 1; } - if ((dev->flags & IFF_ALLMULTI) && (lp->i596_config[11] & 0x20)) { - lp->i596_config[11] &= ~0x20; + if ((dev->flags & IFF_ALLMULTI) && (lp->cf_cmd.i596_config[11] & 0x20)) { + lp->cf_cmd.i596_config[11] &= ~0x20; config = 1; } - if (!(dev->flags & IFF_ALLMULTI) && !(lp->i596_config[11] & 0x20)) { - lp->i596_config[11] |= 0x20; + if (!(dev->flags & IFF_ALLMULTI) && !(lp->cf_cmd.i596_config[11] & 0x20)) { + lp->cf_cmd.i596_config[11] |= 0x20; config = 1; } if (config) { - if (lp->set_conf.command) + if (lp->cf_cmd.cmd.command) printk("%s: config change request already queued\n", dev->name); else { - lp->set_conf.command = CmdConfigure; - i596_add_cmd(dev, &lp->set_conf); + lp->cf_cmd.cmd.command = CmdConfigure; + i596_add_cmd(dev, &lp->cf_cmd.cmd); } } + + cnt = dev->mc_count; + if (cnt > MAX_MC_CNT) + { + cnt = MAX_MC_CNT; + printk("%s: Only %d multicast addresses supported", + dev->name, cnt); + } + if (dev->mc_count > 0) { struct dev_mc_list *dmi; unsigned char *cp; - cmd = (struct i596_cmd *) kmalloc(sizeof(struct i596_cmd) + 2 + dev->mc_count * 6, GFP_ATOMIC); - if (cmd == NULL) { - printk("%s: set_multicast Memory squeeze.\n", dev->name); - return; - } - cmd->command = CmdMulticastList; - *((unsigned short *) (cmd + 1)) = dev->mc_count * 6; - cp = ((unsigned char *) (cmd + 1)) + 2; - for (dmi = dev->mc_list; dmi != NULL; dmi = dmi->next) { + struct mc_cmd *cmd; + + cmd = &lp->mc_cmd; + cmd->cmd.command = CmdMulticastList; + cmd->mc_cnt = dev->mc_count * 6; + cp = cmd->mc_addrs; + for (dmi = dev->mc_list; cnt && dmi != NULL; dmi = dmi->next, cnt--, cp += 6) { memcpy(cp, dmi->dmi_addr, 6); if (i596_debug > 1) - printk("%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n", dev->name, *(cp + 0), *(cp + 1), *(cp + 2), *(cp + 3), *(cp + 4), *(cp + 5)); - cp += 6; + DEB(DEB_MULTI,printk("%s: Adding address %02x:%02x:%02x:%02x:%02x:%02x\n", + dev->name, cp[0],cp[1],cp[2],cp[3],cp[4],cp[5])); } - if (i596_debug > 2) - print_eth(((char *) (cmd + 1)) + 2); - i596_add_cmd(dev, cmd); + i596_add_cmd(dev, &cmd->cmd); } } @@ -1311,40 +1506,58 @@ static unsigned int i596_portlist[] __initdata = {0x300, 0}; struct netdev_entry i596_drv = -{"apricot", i82596_probe, I596_TOTAL_SIZE, apricot_portlist}; +{"i82596", i82596_probe, I596_TOTAL_SIZE, i596_portlist}; #endif #ifdef MODULE static char devicename[9] = {0,}; -static struct device dev_apricot = +static struct device dev_82596 = { - devicename, /* device name inserted by /linux/drivers/net/net_init.c */ + devicename, /* device name inserted by drivers/net/net_init.c */ 0, 0, 0, 0, - 0x300, 10, + 0, 0, /* base, irq */ 0, 0, 0, NULL, i82596_probe}; +#ifdef ENABLE_APRICOT static int io = 0x300; static int irq = 10; MODULE_PARM(irq, "i"); +#endif + +MODULE_PARM(debug, "i"); +static int debug = -1; int init_module(void) { - dev_apricot.base_addr = io; - dev_apricot.irq = irq; - if (register_netdev(&dev_apricot) != 0) +#ifdef ENABLE_APRICOT + dev_82596.base_addr = io; + dev_82596.irq = irq; +#endif + if (debug >= 0) + i596_debug = debug; + if (register_netdev(&dev_82596) != 0) return -EIO; return 0; } void cleanup_module(void) { - unregister_netdev(&dev_apricot); - kfree((void *) dev_apricot.mem_start); - dev_apricot.priv = NULL; + unregister_netdev(&dev_82596); +#ifdef __mc68000__ + /* XXX This assumes default cache mode to be IOMAP_FULL_CACHING, + * XXX which may be invalid (CONFIG_060_WRITETHROUGH) + */ + kernel_set_cachemode((void *)(dev_82596.mem_start), 4096, + IOMAP_FULL_CACHING); +#endif + free_page ((u32)(dev_82596.mem_start)); + dev_82596.priv = NULL; +#ifdef ENABLE_APRICOT /* If we don't do this, we can't re-insmod it later. */ - release_region(dev_apricot.base_addr, I596_TOTAL_SIZE); + release_region(dev_82596.base_addr, I596_TOTAL_SIZE); +#endif } #endif /* MODULE */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/Config.in linux.16p3/drivers/net/Config.in --- linux.vanilla/drivers/net/Config.in Fri Apr 21 12:46:16 2000 +++ linux.16p3/drivers/net/Config.in Mon May 15 12:32:29 2000 @@ -103,7 +103,7 @@ tristate 'DEPCA, DE10x, DE200, DE201, DE202, DE422 support' CONFIG_DEPCA tristate 'EtherWORKS 3 (DE203, DE204, DE205) support' CONFIG_EWRK3 tristate 'EtherExpress 16 support' CONFIG_EEXPRESS - tristate 'EtherExpressPro support' CONFIG_EEXPRESS_PRO + tristate 'EtherExpressPro/EtherExpress 10 (i82595) support' CONFIG_EEXPRESS_PRO tristate 'FMV-181/182/183/184 support' CONFIG_FMV18X tristate 'HP PCLAN+ (27247B and 27252A) support' CONFIG_HPLAN_PLUS tristate 'HP PCLAN (27245 and other 27xxx series) support' CONFIG_HPLAN diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/comx-proto-ppp.c linux.16p3/drivers/net/comx-proto-ppp.c --- linux.vanilla/drivers/net/comx-proto-ppp.c Fri Apr 21 12:46:16 2000 +++ linux.16p3/drivers/net/comx-proto-ppp.c Mon May 15 18:49:06 2000 @@ -62,7 +62,7 @@ struct device *dev=(struct device *)d; struct comx_channel *ch=dev->priv; struct syncppp_data *spch=ch->LINE_privdata; - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); if(!(ch->line_status & PROTO_UP) && (sp->pp_link_state==SPPP_LINK_UP)) { @@ -202,10 +202,11 @@ static int syncppp_init(struct device *dev) { struct comx_channel *ch = dev->priv; - struct ppp_device *pppdev = (struct ppp_device*)dev; + struct ppp_device *pppdev = (struct ppp_device *)ch->if_ptr; ch->LINE_privdata = kmalloc(sizeof(struct syncppp_data), GFP_KERNEL); + pppdev->dev = dev; sppp_attach(pppdev); if(ch->protocol == &hdlc_protocol) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/comx.c linux.16p3/drivers/net/comx.c --- linux.vanilla/drivers/net/comx.c Fri Apr 21 12:46:16 2000 +++ linux.16p3/drivers/net/comx.c Mon May 15 18:49:06 2000 @@ -890,12 +890,10 @@ debug_file->write_proc = &comx_write_proc; debug_file->nlink = 1; - /* struct ppp_device is a bit larger then struct device and the - syncppp driver needs it */ - if ((dev = kmalloc(sizeof(struct ppp_device), GFP_KERNEL)) == NULL) { + if ((dev = kmalloc(sizeof(struct device), GFP_KERNEL)) == NULL) { return -ENOMEM; } - memset(dev, 0, sizeof(struct ppp_device)); + memset(dev, 0, sizeof(struct device)); dev->name = (char *)new_dir->name; dev->init = comx_init_dev; @@ -903,6 +901,11 @@ return -EIO; } ch=dev->priv; + if((ch->if_ptr = (void *)kmalloc(sizeof(struct ppp_device), + GFP_KERNEL)) == NULL) { + return -ENOMEM; + } + memset(ch->if_ptr, 0, sizeof(struct ppp_device)); ch->debug_file = debug_file; ch->procdir = new_dir; new_dir->data = dev; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/comx.h linux.16p3/drivers/net/comx.h --- linux.vanilla/drivers/net/comx.h Fri Apr 21 12:46:16 2000 +++ linux.16p3/drivers/net/comx.h Mon May 15 18:49:06 2000 @@ -45,6 +45,7 @@ }; struct comx_channel { + void *if_ptr; // General purpose pointer struct device *dev; // Where we belong to struct device *twin; // On dual-port cards struct proc_dir_entry *procdir; // the directory diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/cosa.c linux.16p3/drivers/net/cosa.c --- linux.vanilla/drivers/net/cosa.c Fri Apr 21 12:46:16 2000 +++ linux.16p3/drivers/net/cosa.c Mon May 15 18:49:06 2000 @@ -118,6 +118,7 @@ /* Per-channel data structure */ struct channel_data { + void *if_ptr; /* General purpose pointer (used by SPPP) */ int usage; /* Usage count; >0 for chrdev, -1 for netdev */ int num; /* Number of the channel */ struct cosa_data *cosa; /* Pointer to the per-card structure */ @@ -572,8 +573,10 @@ static void sppp_channel_init(struct channel_data *chan) { struct device *d; + chan->if_ptr = &chan->pppdev; + chan->pppdev.dev = kmalloc(sizeof(struct device), GFP_KERNEL); sppp_attach(&chan->pppdev); - d=&chan->pppdev.dev; + d=chan->pppdev.dev; d->name = chan->name; d->base_addr = chan->cosa->datareg; d->irq = chan->cosa->irq; @@ -588,15 +591,15 @@ dev_init_buffers(d); if (register_netdev(d) == -1) { printk(KERN_WARNING "%s: register_netdev failed.\n", d->name); - sppp_detach(&chan->pppdev.dev); + sppp_detach(chan->pppdev.dev); return; } } static void sppp_channel_delete(struct channel_data *chan) { - sppp_detach(&chan->pppdev.dev); - unregister_netdev(&chan->pppdev.dev); + sppp_detach(chan->pppdev.dev); + unregister_netdev(chan->pppdev.dev); } @@ -707,7 +710,7 @@ chan->stats.rx_dropped++; return NULL; } - chan->pppdev.dev.trans_start = jiffies; + chan->pppdev.dev->trans_start = jiffies; return skb_put(chan->rx_skb, size); } @@ -721,13 +724,13 @@ return 0; } chan->rx_skb->protocol = htons(ETH_P_WAN_PPP); - chan->rx_skb->dev = &chan->pppdev.dev; + chan->rx_skb->dev = chan->pppdev.dev; chan->rx_skb->mac.raw = chan->rx_skb->data; chan->stats.rx_packets++; chan->stats.rx_bytes += chan->cosa->rxsize; netif_rx(chan->rx_skb); chan->rx_skb = 0; - chan->pppdev.dev.trans_start = jiffies; + chan->pppdev.dev->trans_start = jiffies; return 0; } @@ -745,7 +748,7 @@ chan->tx_skb = 0; chan->stats.tx_packets++; chan->stats.tx_bytes += size; - chan->pppdev.dev.tbusy = 0; + chan->pppdev.dev->tbusy = 0; mark_bh(NET_BH); return 1; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/dmfe.c linux.16p3/drivers/net/dmfe.c --- linux.vanilla/drivers/net/dmfe.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/dmfe.c Mon May 1 01:22:03 2000 @@ -363,10 +363,9 @@ pci_read_config_dword(net_dev, PCI_REVISION_ID, &dev_rev); /* IO range check */ - if (check_region(pci_iobase, CHK_IO_SIZE(pci_id, dev_rev))) { - printk(KERN_ERR "dmfe: I/O conflict : IO=%x Range=%x\n", pci_iobase, CHK_IO_SIZE(pci_id, dev_rev)); + if (check_region(pci_iobase, CHK_IO_SIZE(pci_id, dev_rev))) continue; - } + /* Interrupt check */ if (pci_irqline == 0) { printk(KERN_ERR "dmfe: Interrupt wrong : IRQ=%d\n", pci_irqline); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/eepro.c linux.16p3/drivers/net/eepro.c --- linux.vanilla/drivers/net/eepro.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/eepro.c Mon May 15 12:32:29 2000 @@ -23,6 +23,8 @@ This is a compatibility hardware problem. Versions: + 0.12 added support to 82595FX etherexpress 10 based cards + (aris ), 04/26/2000) 0.11e some tweaks about multiple cards support (PdP, jul/aug 1999) 0.11d added __initdata, __initfunc stuff; call spin_lock_init in eepro_probe1. Replaced "eepro" by dev->name. Augmented @@ -93,7 +95,7 @@ */ static const char *version = - "eepro.c: v0.11d 08/12/1998 dupuis@lei.ucl.ac.be\n"; + "eepro.c: v0.12 04/26/2000 aris@conectiva.com.br\n"; #include @@ -176,7 +178,12 @@ /* First, a few definitions that the brave might change. */ /* A zero-terminated list of I/O addresses to be probed. */ static unsigned int eepro_portlist[] compat_init_data = - { 0x300, 0x210, 0x240, 0x280, 0x2C0, 0x200, 0x320, 0x340, 0x360, 0}; +#ifdef PnPWakeup + { 0x210, 0x300, +#else + { 0x300, 0x210, +#endif + 0x240, 0x280, 0x2C0, 0x200, 0x320, 0x340, 0x360, 0}; /* note: 0x300 is default, the 595FX supports ALL IO Ports from 0x000 to 0x3F0, some of which are reserved in PCs */ @@ -199,6 +206,9 @@ #define LAN595TX 1 #define LAN595FX 2 +/* global to recall the read_eepro */ +static unsigned char etherexpress10 = 0; + /* Information that need to be kept for each board. */ struct eepro_local { struct enet_statistics stats; @@ -350,18 +360,33 @@ buffer (transmit-buffer = 32K - receive-buffer). */ + +/* now this section could be used by both boards: the oldies and the ee10: + * ee10 uses tx buffer before of rx buffer and the oldies the inverse. + * (aris) + */ #define RAM_SIZE 0x8000 + #define RCV_HEADER 8 -#define RCV_RAM 0x6000 /* 24KB default for RCV buffer */ -#define RCV_LOWER_LIMIT 0x00 /* 0x0000 */ -/* #define RCV_UPPER_LIMIT ((RCV_RAM - 2) >> 8) */ /* 0x5ffe */ -#define RCV_UPPER_LIMIT (((rcv_ram) - 2) >> 8) -/* #define XMT_RAM (RAM_SIZE - RCV_RAM) */ /* 8KB for XMT buffer */ -#define XMT_RAM (RAM_SIZE - (rcv_ram)) /* 8KB for XMT buffer */ -/* #define XMT_LOWER_LIMIT (RCV_RAM >> 8) */ /* 0x6000 */ -#define XMT_LOWER_LIMIT ((rcv_ram) >> 8) -#define XMT_UPPER_LIMIT ((RAM_SIZE - 2) >> 8) /* 0x7ffe */ -#define XMT_HEADER 8 +#define RCV_DEFAULT_RAM 0x6000 +#define RCV_RAM rcv_ram + +static unsigned rcv_ram = RCV_DEFAULT_RAM; + +#define XMT_HEADER 8 +#define XMT_RAM (RAM_SIZE - RCV_RAM) + +#define XMT_START ((rcv_start + RCV_RAM) % RAM_SIZE) + +#define RCV_LOWER_LIMIT (rcv_start >> 8) +#define RCV_UPPER_LIMIT (((rcv_start + RCV_RAM) - 2) >> 8) +#define XMT_LOWER_LIMIT (XMT_START >> 8) +#define XMT_UPPER_LIMIT (((XMT_START + XMT_RAM) - 2) >> 8) + +#define RCV_START_PRO 0x00 +#define RCV_START_10 XMT_RAM + /* by default the old driver */ +static unsigned rcv_start = RCV_START_PRO; #define RCV_DONE 0x0008 #define RX_OK 0x2000 @@ -407,7 +432,11 @@ #define IO_32_BIT 0x10 #define RCV_BAR 0x04 /* The following are word (16-bit) registers */ #define RCV_STOP 0x06 -#define XMT_BAR 0x0a + +#define XMT_BAR_PRO 0x0a +#define XMT_BAR_10 0x0b +static unsigned xmt_bar = XMT_BAR_PRO; + #define HOST_ADDRESS_REG 0x0c #define IO_PORT 0x0e #define IO_PORT_32_BIT 0x0c @@ -419,8 +448,13 @@ #define INT_NO_REG 0x02 #define RCV_LOWER_LIMIT_REG 0x08 #define RCV_UPPER_LIMIT_REG 0x09 -#define XMT_LOWER_LIMIT_REG 0x0a -#define XMT_UPPER_LIMIT_REG 0x0b + +#define XMT_LOWER_LIMIT_REG_PRO 0x0a +#define XMT_UPPER_LIMIT_REG_PRO 0x0b +#define XMT_LOWER_LIMIT_REG_10 0x0b +#define XMT_UPPER_LIMIT_REG_10 0x0a +static unsigned xmt_lower_limit_reg = XMT_LOWER_LIMIT_REG_PRO; +static unsigned xmt_upper_limit_reg = XMT_UPPER_LIMIT_REG_PRO; /* Bank 2 registers */ #define XMT_Chain_Int 0x20 /* Interrupt at the end of the transmit chain */ @@ -443,7 +477,10 @@ #define I_ADD_REG4 0x08 #define I_ADD_REG5 0x09 -#define EEPROM_REG 0x0a +#define EEPROM_REG_PRO 0x0a +#define EEPROM_REG_10 0x0b +static unsigned eeprom_reg = EEPROM_REG_PRO; + #define EESK 0x01 #define EECS 0x02 #define EEDI 0x04 @@ -457,10 +494,10 @@ (detachable devices only). */ #ifdef HAVE_DEVLIST -/* Support for an alternate probe manager, which will eliminate the - boilerplate below. */ + /* Support for an alternate probe manager, which will eliminate the + boilerplate below. */ struct netdev_entry netcard_drv = -{"eepro", eepro_probe1, EEPRO_IO_EXTENT, eepro_portlist}; + {"eepro", eepro_probe1, EEPRO_IO_EXTENT, eepro_portlist}; #else compat_init_func(int eepro_probe(struct device *dev)) { @@ -517,7 +554,7 @@ } #endif -void printEEPROMInfo(short ioaddr) +static void printEEPROMInfo(short ioaddr) { unsigned short Word; int i,j; @@ -589,40 +626,59 @@ id=inb(ioaddr + ID_REG); - printk(KERN_DEBUG " id: %#x ",id); - printk(" io: %#x ",ioaddr); - if (((id) & ID_REG_MASK) == ID_REG_SIG) { /* We seem to have the 82595 signature, let's play with its counter (last 2 bits of register 2 of bank 0) to be sure. */ - + counter = (id & R_ROBIN_BITS); if (((id=inb(ioaddr+ID_REG)) & R_ROBIN_BITS) == (counter + 0x40)) { /* Yes, the 82595 has been found */ + printk(KERN_DEBUG " id: %#x ",id); + printk(" io: %#x ",ioaddr); /* Now, get the ethernet hardware address from the EEPROM */ station_addr[0] = read_eeprom(ioaddr, 2); + + /* FIXME - find another way to know that we've found + * a Etherexpress 10 + */ + if (station_addr[0] == 0x0000 || + station_addr[0] == 0xffff) { + etherexpress10 = 1; + eeprom_reg = EEPROM_REG_10; + rcv_start = RCV_START_10; + xmt_lower_limit_reg = XMT_LOWER_LIMIT_REG_10; + xmt_upper_limit_reg = XMT_UPPER_LIMIT_REG_10; + + station_addr[0] = read_eeprom(ioaddr, 2); + } + station_addr[1] = read_eeprom(ioaddr, 3); station_addr[2] = read_eeprom(ioaddr, 4); /* Check the station address for the manufacturer's code */ if (net_debug>3) printEEPROMInfo(ioaddr); - - if (read_eeprom(ioaddr,7)== ee_FX_INT2IRQ) { /* int to IRQ Mask */ + + if (etherexpress10) { + eepro = 2; + printk("%s: Intel EtherExpress 10 ISA\n at %#x,", + dev->name, ioaddr); + } else if (read_eeprom(ioaddr,7)== ee_FX_INT2IRQ) { + /* int to IRQ Mask */ eepro = 2; printk("%s: Intel EtherExpress Pro/10+ ISA\n at %#x,", dev->name, ioaddr); } else if (station_addr[2] == 0x00aa) { eepro = 1; - printk("%s: Intel EtherExpress Pro/10 ISA at %#x,", + printk("%s: Intel EtherExpress Pro/10 ISA at %#x,", dev->name, ioaddr); } else { @@ -639,17 +695,25 @@ printk("%c%02x", i ? ':' : ' ', dev->dev_addr[i]); } + dev->mem_start = (RCV_LOWER_LIMIT << 8); + if ((dev->mem_end & 0x3f) < 3 || /* RX buffer must be more than 3K */ (dev->mem_end & 0x3f) > 29) /* and less than 29K */ - dev->mem_end = RCV_RAM; /* or it will be set to 24K */ - else dev->mem_end = 1024*dev->mem_end; /* Maybe I should shift << 10 */ + dev->mem_end = (RCV_UPPER_LIMIT << 8); + else { + dev->mem_end = (dev->mem_end * 1024) + + (RCV_LOWER_LIMIT << 8); + rcv_ram = dev->mem_end - (RCV_LOWER_LIMIT << 8); + } - /* From now on, dev->mem_end contains the actual size of rx buffer */ + /* From now on, dev->mem_end - dev->mem_start contains + * the actual size of rx buffer + */ if (net_debug > 3) - printk(", %dK RCV buffer", (int)(dev->mem_end)/1024); - - + printk(", %dK RCV buffer", + (int)(dev->mem_end - dev->mem_start)/1024); + /* ............... */ if (GetBit( read_eeprom(ioaddr, 5),ee_BNC_TPE)) @@ -678,10 +742,8 @@ return ENODEV; } else - if (dev->irq==2) dev->irq = 9; - - else if (dev->irq == 2) - dev->irq = 9; + if (dev->irq==2) + dev->irq = 9; } if (dev->irq > 2) { @@ -690,9 +752,6 @@ } else printk(", %s.\n", ifmap[dev->if_port]); - if ((dev->mem_start & 0xf) > 0) /* I don't know if this is */ - net_debug = dev->mem_start & 7; /* still useful or not */ - if (net_debug > 3) { i = read_eeprom(ioaddr, 5); if (i & 0x2000) /* bit 13 of EEPROM word 5 */ @@ -809,7 +868,8 @@ { unsigned short temp_reg, old8, old9; int irqMask; - int i, ioaddr = dev->base_addr, rcv_ram = dev->mem_end; + int i, ioaddr = dev->base_addr; + struct eepro_local *lp = (struct eepro_local *)dev->priv; if (net_debug > 3) @@ -854,7 +914,7 @@ /* Initialize the 82595. */ outb(BANK2_SELECT, ioaddr); /* be CAREFUL, BANK 2 now */ - temp_reg = inb(ioaddr + EEPROM_REG); + temp_reg = inb(ioaddr + eeprom_reg); lp->stepping = temp_reg >> 5; /* Get the stepping number of the 595 */ @@ -862,8 +922,8 @@ printk(KERN_DEBUG "The stepping of the 82595 is %d\n", lp->stepping); if (temp_reg & 0x10) /* Check the TurnOff Enable bit */ - outb(temp_reg & 0xef, ioaddr + EEPROM_REG); - for (i=0; i < 6; i++) + outb(temp_reg & 0xef, ioaddr + eeprom_reg); + for (i=0; i < 6; i++) outb(dev->dev_addr[i] , ioaddr + I_ADD_REG0 + i); temp_reg = inb(ioaddr + REG1); /* Setup Transmit Chaining */ @@ -898,8 +958,8 @@ /* Initialize the RCV and XMT upper and lower limits */ outb(RCV_LOWER_LIMIT, ioaddr + RCV_LOWER_LIMIT_REG); outb(RCV_UPPER_LIMIT, ioaddr + RCV_UPPER_LIMIT_REG); - outb(XMT_LOWER_LIMIT, ioaddr + XMT_LOWER_LIMIT_REG); - outb(XMT_UPPER_LIMIT, ioaddr + XMT_UPPER_LIMIT_REG); + outb(XMT_LOWER_LIMIT, ioaddr + xmt_lower_limit_reg); + outb(XMT_UPPER_LIMIT, ioaddr + xmt_upper_limit_reg); /* Enable the interrupt line. */ temp_reg = inb(ioaddr + REG1); @@ -914,12 +974,12 @@ outb(ALL_MASK, ioaddr + STATUS_REG); /* Initialize RCV */ - outw(RCV_LOWER_LIMIT << 8, ioaddr + RCV_BAR); - lp->rx_start = (RCV_LOWER_LIMIT << 8) ; - outw((RCV_UPPER_LIMIT << 8) | 0xfe, ioaddr + RCV_STOP); + outw((RCV_LOWER_LIMIT << 8), ioaddr + RCV_BAR); + lp->rx_start = (RCV_LOWER_LIMIT << 8); + outw(((RCV_UPPER_LIMIT << 8) | 0xfe), ioaddr + RCV_STOP); /* Initialize XMT */ - outw(XMT_LOWER_LIMIT << 8, ioaddr + XMT_BAR); + outw((XMT_LOWER_LIMIT << 8), ioaddr + xmt_bar); /* Check for the i82595TX and i82595FX */ old8 = inb(ioaddr + 8); @@ -969,7 +1029,7 @@ SLOW_DOWN; SLOW_DOWN; - lp->tx_start = lp->tx_end = XMT_LOWER_LIMIT << 8; /* or = RCV_RAM */ + lp->tx_start = lp->tx_end = (XMT_LOWER_LIMIT << 8); lp->tx_last = 0; dev->tbusy = 0; @@ -989,7 +1049,6 @@ { struct eepro_local *lp = (struct eepro_local *)dev->priv; int ioaddr = dev->base_addr; - int rcv_ram = dev->mem_end; #if defined (LINUX_VERSION_CODE) && LINUX_VERSION_CODE > 0x20155 unsigned long flags; @@ -1005,6 +1064,10 @@ if (tickssofar < 40) return 1; + /* let's disable interrupts so we can avoid confusion on SMP + */ + outb(ALL_MASK, ioaddr + INT_MASK_REG); + /* if (net_debug > 1) */ printk(KERN_ERR "%s: transmit timed out, %s?\n", dev->name, "network cable problem"); @@ -1021,27 +1084,19 @@ SLOW_DOWN; /* Do I also need to flush the transmit buffers here? YES? */ - lp->tx_start = lp->tx_end = rcv_ram; + lp->tx_start = lp->tx_end = (XMT_LOWER_LIMIT << 8); lp->tx_last = 0; dev->tbusy=0; dev->trans_start = jiffies; - outb(RCV_ENABLE_CMD, ioaddr); + /* re-enabling all interrupts */ + outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); + + outb(RCV_ENABLE_CMD, ioaddr); } -#if defined (LINUX_VERSION_CODE) && LINUX_VERSION_CODE < 0x20155 - /* If some higher layer thinks we've missed an tx-done interrupt - we are passed NULL. Caution: dev_tint() handles the cli()/sti() - itself. */ - /* if (skb == NULL) { - dev_tint(dev); - return 0; - }*/ - /* according to A. Cox, this is obsolete since 1.0 */ -#endif - #if defined (LINUX_VERSION_CODE) && LINUX_VERSION_CODE > 0x20155 spin_lock_irqsave(&lp->lock, flags); #endif @@ -1056,12 +1111,17 @@ } else { short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; unsigned char *buf = skb->data; + int discard = lp->stats.tx_dropped; #if defined (LINUX_VERSION_CODE) && LINUX_VERSION_CODE > 0x20155 lp->stats.tx_bytes+=skb->len; #endif hardware_send_packet(dev, buf, length); + + if (lp->stats.tx_dropped != discard) + return 1; + dev->trans_start = jiffies; } @@ -1119,33 +1179,36 @@ ioaddr = dev->base_addr; - do { - status = inb(ioaddr + STATUS_REG); - + while (((status = inb(ioaddr + STATUS_REG)) & 0x06) && (boguscount--)) + { + switch (status & (RX_INT | TX_INT)) { + case (RX_INT | TX_INT): + outb (RX_INT | TX_INT, ioaddr + STATUS_REG); + break; + case RX_INT: + outb (RX_INT, ioaddr + STATUS_REG); + break; + case TX_INT: + outb (TX_INT, ioaddr + STATUS_REG); + break; + } if (status & RX_INT) { if (net_debug > 4) - printk(KERN_DEBUG "%s: packet received interrupt.\n", dev->name); + printk(KERN_DEBUG "%s: packet received interrupt.\n", dev->name); - /* Acknowledge the RX_INT */ - outb(RX_INT, ioaddr + STATUS_REG); /* Get the received packets */ eepro_rx(dev); } - - else if (status & TX_INT) { + if (status & TX_INT) { if (net_debug > 4) - printk(KERN_DEBUG "%s: packet transmit interrupt.\n", dev->name); - - /* Acknowledge the TX_INT */ - outb(TX_INT, ioaddr + STATUS_REG); + printk(KERN_DEBUG "%s: packet transmit interrupt.\n", dev->name); /* Process the status of transmitted packets */ eepro_transmit_interrupt(dev); } + } - } while ((boguscount-- > 0) && (status & 0x06)); - - dev->interrupt = 0; + dev->interrupt = 0; if (net_debug > 5) printk(KERN_DEBUG "%s: exiting eepro_interrupt routine.\n", dev->name); @@ -1160,7 +1223,6 @@ { struct eepro_local *lp = (struct eepro_local *)dev->priv; int ioaddr = dev->base_addr; - int rcv_ram = dev->mem_end; short temp_reg; dev->tbusy = 1; @@ -1176,7 +1238,7 @@ /* Flush the Tx and disable Rx. */ outb(STOP_RCV_CMD, ioaddr); - lp->tx_start = lp->tx_end = rcv_ram ; + lp->tx_start = lp->tx_end = (XMT_LOWER_LIMIT << 8); lp->tx_last = 0; /* Mask all the interrupts. */ @@ -1289,7 +1351,7 @@ outw(eaddrs[0], ioaddr + IO_PORT); outw(eaddrs[1], ioaddr + IO_PORT); outw(eaddrs[2], ioaddr + IO_PORT); - outw(lp->tx_end, ioaddr + XMT_BAR); + outw(lp->tx_end, ioaddr + xmt_bar); outb(MC_SETUP, ioaddr); /* Update the transmit queue */ @@ -1351,10 +1413,19 @@ { int i; unsigned short retval = 0; - short ee_addr = ioaddr + EEPROM_REG; + short ee_addr = ioaddr + eeprom_reg; int read_cmd = location | EE_READ_CMD; short ctrl_val = EECS ; + /* XXXX - this is not the final version. We must test this on other + * boards other than eepro10. I think that it won't let other + * boards to fail. (aris) + */ + if (etherexpress10) { + outb(BANK1_SELECT, ioaddr); + outb(0x00, ioaddr + STATUS_REG); + } + outb(BANK2_SELECT, ioaddr); outb(ctrl_val, ee_addr); @@ -1391,7 +1462,6 @@ { struct eepro_local *lp = (struct eepro_local *)dev->priv; short ioaddr = dev->base_addr; - int rcv_ram = dev->mem_end; unsigned status, tx_available, last, end, boguscount = 100; if (net_debug > 5) @@ -1406,7 +1476,7 @@ if (dev->interrupt == 1) { /* Enable RX and TX interrupts */ - outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); + outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); continue; } @@ -1430,21 +1500,19 @@ last = lp->tx_end; end = last + (((length + 3) >> 1) << 1) + XMT_HEADER; - if (end >= RAM_SIZE) { /* the transmit buffer is wrapped around */ - - if ((RAM_SIZE - last) <= XMT_HEADER) { + if (end >= (XMT_UPPER_LIMIT << 8)) { /* the transmit buffer is wrapped around */ + if (((XMT_UPPER_LIMIT << 8) - last) <= XMT_HEADER) { /* Arrrr!!!, must keep the xmt header together, several days were lost to chase this one down. */ - last = rcv_ram; + last = (XMT_LOWER_LIMIT << 8); end = last + (((length + 3) >> 1) << 1) + XMT_HEADER; } - - else end = rcv_ram + (end - RAM_SIZE); + else end = (XMT_LOWER_LIMIT << 8) + (end - XMT_RAM); } outw(last, ioaddr + HOST_ADDRESS_REG); - outw(XMT_CMD, ioaddr + IO_PORT); + outw(XMT_CMD, ioaddr + IO_PORT); outw(0, ioaddr + IO_PORT); outw(end, ioaddr + IO_PORT); outw(length, ioaddr + IO_PORT); @@ -1461,9 +1529,9 @@ /* A dummy read to flush the DRAM write pipeline */ status = inw(ioaddr + IO_PORT); - if (lp->tx_start == lp->tx_end) { - outw(last, ioaddr + XMT_BAR); - outb(XMT_CMD, ioaddr); + if (lp->tx_start == lp->tx_end) { + outw(last, ioaddr + xmt_bar); + outb(XMT_CMD, ioaddr); lp->tx_start = last; /* I don't like to change tx_start here */ } else { @@ -1490,6 +1558,12 @@ dev->tbusy = 0; } + /* now we are serializing tx. tbusy won't come back until + * the tx interrupt + */ + if (etherexpress10) + dev->tbusy = 1; + /* Enable RX and TX interrupts */ outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); @@ -1498,7 +1572,9 @@ return; } + outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); dev->tbusy = 1; + if (net_debug > 5) printk(KERN_DEBUG "%s: exiting hardware_send_packet routine.\n", dev->name); } @@ -1507,14 +1583,17 @@ eepro_rx(struct device *dev) { struct eepro_local *lp = (struct eepro_local *)dev->priv; - short ioaddr = dev->base_addr, rcv_ram = dev->mem_end; + short ioaddr = dev->base_addr; short boguscount = 20; - short rcv_car = lp->rx_start; + unsigned rcv_car = lp->rx_start; unsigned rcv_event, rcv_status, rcv_next_frame, rcv_size; if (net_debug > 5) printk(KERN_DEBUG "%s: entering eepro_rx routine.\n", dev->name); + /* disabling all interrupts */ + outb(ALL_MASK, ioaddr + STATUS_REG); + /* Set the read pointer to the start of the RCV */ outw(rcv_car, ioaddr + HOST_ADDRESS_REG); @@ -1589,12 +1668,14 @@ } if (rcv_car == 0) - rcv_car = (RCV_UPPER_LIMIT << 8) | 0xff; + rcv_car = ((RCV_UPPER_LIMIT << 8) | 0xff); outw(rcv_car - 1, ioaddr + RCV_STOP); if (net_debug > 5) printk(KERN_DEBUG "%s: exiting eepro_rx routine.\n", dev->name); + + outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); } static void @@ -1603,7 +1684,7 @@ struct eepro_local *lp = (struct eepro_local *)dev->priv; short ioaddr = dev->base_addr; short boguscount = 20; - short xmt_status; + unsigned xmt_status; /* if (dev->tbusy == 0) { @@ -1613,30 +1694,71 @@ dev->name); } */ + while (lp->tx_start != lp->tx_end && boguscount) { - while (lp->tx_start != lp->tx_end) { - - outw(lp->tx_start, ioaddr + HOST_ADDRESS_REG); + outw(lp->tx_start, ioaddr + HOST_ADDRESS_REG); xmt_status = inw(ioaddr+IO_PORT); - - if ((xmt_status & TX_DONE_BIT) == 0) break; + + if ((xmt_status & TX_DONE_BIT) == 0) { + udelay(40); + boguscount--; + continue; + } xmt_status = inw(ioaddr+IO_PORT); lp->tx_start = inw(ioaddr+IO_PORT); + if (etherexpress10) { + lp->tx_start = (XMT_LOWER_LIMIT << 8); + lp->tx_end = lp->tx_start; + + /* yeah, black magic :( */ + outb(BANK0_SELECT, ioaddr); + outb(ALL_MASK & ~(RX_MASK | TX_MASK), ioaddr + INT_MASK_REG); + + outb(RCV_DISABLE_CMD, ioaddr); + outb(RCV_ENABLE_CMD, ioaddr); + } + + /* here the tbusy comes to 0 for normal and ee10 cards + */ dev->tbusy = 0; + mark_bh(NET_BH); - - if (xmt_status & 0x2000) + + if (xmt_status & 0x2000) { lp->stats.tx_packets++; + } else { lp->stats.tx_errors++; - if (xmt_status & 0x0400) + if (xmt_status & 0x0400) { lp->stats.tx_carrier_errors++; - printk("%s: XMT status = %#x\n", - dev->name, xmt_status); - printk(KERN_DEBUG "%s: XMT status = %#x\n", - dev->name, xmt_status); + printk(KERN_DEBUG "%s: carrier error\n", + dev->name); + printk(KERN_DEBUG "%s: XMT status = %#x\n", + dev->name, xmt_status); + } + else { + printk(KERN_DEBUG "%s: XMT status = %#x\n", + dev->name, xmt_status); + printk(KERN_DEBUG "%s: XMT status = %#x\n", + dev->name, xmt_status); + } + + if (etherexpress10) { + /* Try to restart the adaptor. */ + outb(SEL_RESET_CMD, ioaddr); + + /* We are supposed to wait for 2 us after a SEL_RESET */ + SLOW_DOWN; + SLOW_DOWN; + + /* first enable interrupts */ + outb(BANK0_SELECT, ioaddr); + outb(ALL_MASK & ~(RX_INT | TX_INT), ioaddr + STATUS_REG); + + outb(RCV_ENABLE_CMD, ioaddr); + } } if (xmt_status & 0x000f) { @@ -1646,9 +1768,7 @@ if ((xmt_status & 0x0040) == 0x0) { lp->stats.tx_heartbeat_errors++; } - - if (--boguscount == 0) - break; + boguscount--; } } @@ -1658,17 +1778,12 @@ static char devicename[MAX_EEPRO][9]; static struct device dev_eepro[MAX_EEPRO]; -static int io[MAX_EEPRO] = { -#ifdef PnPWakeup - 0x210, /*: default for PnP enabled FX chips */ -#else - 0x200, /* Why? */ -#endif - [1 ... MAX_EEPRO - 1] = -1 }; +static int io[MAX_EEPRO]; static int irq[MAX_EEPRO] = { [0 ... MAX_EEPRO-1] = 0 }; static int mem[MAX_EEPRO] = { /* Size of the rx buffer in KB */ - [0 ... MAX_EEPRO-1] = RCV_RAM/1024 + [0 ... MAX_EEPRO-1] = RCV_DEFAULT_RAM/1024 }; +static int autodetect; static int n_eepro = 0; /* For linux 2.1.xx */ @@ -1678,26 +1793,35 @@ MODULE_PARM(io, "1-" __MODULE_STRING(MAX_EEPRO) "i"); MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_EEPRO) "i"); MODULE_PARM(mem, "1-" __MODULE_STRING(MAX_EEPRO) "i"); +MODULE_PARM(autodetect, "1-" __MODULE_STRING(1) "i"); #endif int init_module(void) { - if (io[0] == 0) - printk("eepro_init_module: You should not use auto-probing with insmod!\n"); - - while (n_eepro < MAX_EEPRO && io[n_eepro] >= 0) { + int i; + if (io[0] == 0 && autodetect == 0) { + printk("eepro_init_module: Probe is very dangerous in ISA boards!\n"); + printk("eepro_init_module: Please add \"autodetect=1\" to force probe\n"); + return 1; + } + else if (autodetect) { + /* if autodetect is set then we must force detection */ + io[0] = 0; + + printk("eepro_init_module: Auto-detecting boards (May God protect us...)\n"); + } + + for (i = 0; i < MAX_EEPRO; i++) { struct device *d = &dev_eepro[n_eepro]; d->name = devicename[n_eepro]; /* inserted by drivers/net/net_init.c */ d->mem_end = mem[n_eepro]; - d->base_addr = io[n_eepro]; + d->base_addr = io[0]; d->irq = irq[n_eepro]; d->init = eepro_probe; if (register_netdev(d) == 0) n_eepro++; - else - break; } return n_eepro ? 0 : -ENODEV; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/eepro100.c linux.16p3/drivers/net/eepro100.c --- linux.vanilla/drivers/net/eepro100.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/eepro100.c Wed Apr 19 13:51:00 2000 @@ -24,11 +24,14 @@ The driver also contains updates by different kernel developers. This driver clone is maintained by Andrey V. Savochkin . Please use this email address and linux-kernel mailing list for bug reports. + + Disabled FC and ER, to avoid lockups when when we get FCP interrupts. + Dragan Stancevic March 24th, 2000. */ static const char *version = "eepro100.c:v1.09j-t 9/29/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html\n" -"eepro100.c: $Revision: 1.20.2.3 $ 2000/03/02 Modified by Andrey V. Savochkin and others\n"; +"eepro100.c: $Revision: 1.20.2.4 $ 2000/03/25 Modified by Andrey V. Savochkin and others\n"; /* A few user-configurable values that apply to all boards. First set is undocumented and spelled per Intel recommendations. */ @@ -103,17 +106,8 @@ #include #include #include -#ifdef HAS_PCI_NETIF -#include "pci-netif.h" -#else -#include -#endif #include -#if LINUX_VERSION_CODE >= 0x20312 -#include -#else #include -#endif #include #include @@ -144,21 +138,18 @@ #define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr)) #define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr)) -#if LINUX_VERSION_CODE < 0x020314 #define net_device device #define pci_base_address(p, n) (p)->base_address[n] -#else -#define pci_base_address(p, n) (p)->resource[n].start -#endif #define dev_free_skb(skb) dev_kfree_skb(skb); -#if ! defined(HAS_NETIF_QUEUE) #define netif_wake_queue(dev) do { \ clear_bit(0, (void*)&dev->tbusy); \ mark_bh(NET_BH); \ } while(0) #define netif_start_queue(dev) clear_bit(0, (void*)&dev->tbusy) #define netif_stop_queue(dev) set_bit(0, (void*)&dev->tbusy) +#ifndef PCI_DEVICE_ID_INTEL_82559ER +#define PCI_DEVICE_ID_INTEL_82559ER 0x1209 #endif /* The total I/O port extent of the board. @@ -506,7 +497,7 @@ const char i82558_config_cmd[22] = { 22, 0x08, 0, 1, 0, 0, 0x22, 0x03, 1, /* 1=Use MII 0=Use AUI */ 0, 0x2E, 0, 0x60, 0x08, 0x88, - 0x68, 0, 0x40, 0xf2, 0xBD, /* 0xBD->0xFD=Force full-duplex */ + 0x68, 0, 0x40, 0xf2, 0x84, /* Disable FC */ 0x31, 0x05, }; /* PHY media interface chips. */ @@ -1098,7 +1089,9 @@ wait_for_cmd_done(ioaddr + SCBCmd); outl(virt_to_bus(&sp->tx_ring[sp->dirty_tx % TX_RING_SIZE]), ioaddr + SCBPointer); - outw(CUStart, ioaddr + SCBCmd); + /* We are not ACK-ing FCP and ER in the interrupt handler yet so they should + remain masked --Dragan */ + outw(CUStart | SCBMaskEarlyRx | SCBMaskFlowCtl, ioaddr + SCBCmd); } /* Media monitoring and control. */ @@ -1495,6 +1488,8 @@ do { status = inw(ioaddr + SCBStatus); /* Acknowledge all of the current interrupt sources ASAP. */ + /* Will change from 0xfc00 to 0xff00 when we start handling + FCP and ER interrupts --Dragan */ outw(status & 0xfc00, ioaddr + SCBStatus); if (speedo_debug > 4) @@ -1594,6 +1589,8 @@ printk(KERN_ERR "%s: Too much work at interrupt, status=0x%4.4x.\n", dev->name, status); /* Clear all interrupt sources. */ + /* Will change from 0xfc00 to 0xff00 when we start handling + FCP and ER interrupts --Dragan */ outl(0xfc00, ioaddr + SCBStatus); break; } @@ -1995,7 +1992,10 @@ config_cmd_data[4] = rxdmacount; config_cmd_data[5] = txdmacount + 0x80; config_cmd_data[15] |= (new_rx_mode & 2) ? 1 : 0; - config_cmd_data[19] = sp->flow_ctrl ? 0xBD : 0x80; + /* 0x80 doesn't disable FC 0x84 does. + Disable Flow control since we are not ACK-ing any FC interrupts + for now. --Dragan */ + config_cmd_data[19] = 0x84; config_cmd_data[19] |= sp->full_duplex ? 0x40 : 0; config_cmd_data[21] = (new_rx_mode & 1) ? 0x0D : 0x05; if (sp->phy[0] & 0x8000) { /* Use the AUI port instead. */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/hostess_sv11.c linux.16p3/drivers/net/hostess_sv11.c --- linux.vanilla/drivers/net/hostess_sv11.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/hostess_sv11.c Mon May 15 18:49:06 2000 @@ -41,6 +41,7 @@ struct sv11_device { + void *if_ptr; /* General purpose pointer (used by SPPP) */ struct z8530_dev sync; struct ppp_device netdev; char name[16]; @@ -240,6 +241,11 @@ goto fail3; memset(sv, 0, sizeof(*sv)); + sv->if_ptr=&sv->netdev; + + sv->netdev.dev=(struct device *)kmalloc(sizeof(struct device), GFP_KERNEL); + if(!sv->netdev.dev) + goto fail2; dev=&sv->sync; @@ -264,12 +270,12 @@ if(request_irq(irq, &z8530_interrupt, SA_INTERRUPT, "Hostess SV/11", dev)<0) { printk(KERN_WARNING "hostess: IRQ %d already in use.\n", irq); - goto fail2; + goto fail1; } dev->irq=irq; dev->chanA.private=sv; - dev->chanA.netdevice=&sv->netdev.dev; + dev->chanA.netdevice=sv->netdev.dev; dev->chanA.dev=dev; dev->chanB.dev=dev; dev->name=sv->name; @@ -374,6 +380,8 @@ free_dma(dev->chanA.txdma); fail: free_irq(irq, dev); +fail1: + kfree(sv->netdev.dev); fail2: kfree(sv); fail3: @@ -383,9 +391,9 @@ static void sv11_shutdown(struct sv11_device *dev) { - sppp_detach(&dev->netdev.dev); + sppp_detach(dev->netdev.dev); z8530_shutdown(&dev->sync); - unregister_netdev(&dev->netdev.dev); + unregister_netdev(dev->netdev.dev); free_irq(dev->sync.irq, dev); if(dma) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/ibmtr.c linux.16p3/drivers/net/ibmtr.c --- linux.vanilla/drivers/net/ibmtr.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/ibmtr.c Mon May 15 12:13:07 2000 @@ -83,6 +83,11 @@ * Changes by Jochen Friedrich to enable RFC1469 Option 2 multicasting * i.e. using functional address C0 00 00 04 00 00 to transmit and * receive multicast packets. + * + * Changes by Mike Sullivan (based on original sram patch by Dave Grothe + * to support windowing into on adapter shared ram. + * i.e. Use LANAID to setup a PnP configuration with 16K RAM. Paging + * will shift this 16K window over the entire available shared RAM. */ /* change the define of IBMTR_DEBUG_MESSAGES to a nonzero value @@ -102,7 +107,8 @@ #define NO_AUTODETECT 1 #undef NO_AUTODETECT -#undef ENABLE_PAGING +//#undef ENABLE_PAGING +#define ENABLE_PAGING 1 #define FALSE 0 @@ -119,7 +125,8 @@ static char *version = "ibmtr.c: v1.3.57 8/ 7/94 Peter De Schrijver and Mark Swanson\n" " v2.1.125 10/20/98 Paul Norton \n" -" v2.2.0 12/30/98 Joel Sloan \n"; +" v2.2.0 12/30/98 Joel Sloan \n" +" v2.2.1 02/08/00 Mike Sullivan \n"; static char pcchannelid[] = { 0x05, 0x00, 0x04, 0x09, @@ -582,7 +589,7 @@ ti->mapped_ram_size = ti->avail_shared_ram; } else { #ifdef ENABLE_PAGING - unsigned char pg_size; + unsigned char pg_size=0; #endif #if !TR_NEWFORMAT @@ -602,15 +609,16 @@ pg_size=64; /* 32KB page size */ break; case 0xc: - ti->page_mask=(ti->mapped_ram_size==32) ? 0xc0 : 0; - ti->page_mask=(ti->mapped_ram_size==64) ? 0x80 : 0; - DPRINTK("Dual size shared RAM page (code=0xC), don't support it!\n"); - /* nb/dwm: I did this because RRR (3,2) bits are documented as - R/O and I can't find how to select which page size - Also, the above conditional statement sequence is invalid - as page_mask will always be set by the second stmt */ - kfree_s(ti, sizeof(struct tok_info)); - return -ENODEV; + switch (ti->mapped_ram_size) { + case 32: + ti->page_mask=0xc0; + pg_size=32; + break; + case 64: + ti->page_mask=0x80; + pg_size=64; + break; + } break; default: DPRINTK("Unknown shared ram paging info %01X\n",ti->shared_ram_paging); @@ -618,16 +626,23 @@ return -ENODEV; break; } + + if (ibmtr_debug_trace & TRC_INIT) + DPRINTK("Shared RAM paging code: " + "%02X mapped RAM size: %dK shared RAM size: %dK page mask: %0xX\n:", + ti->shared_ram_paging, ti->mapped_ram_size/2, ti->avail_shared_ram/2, ti->page_mask); + if (ti->page_mask) { if (pg_size > ti->mapped_ram_size) { DPRINTK("Page size (%d) > mapped ram window (%d), can't page.\n", - pg_size, ti->mapped_ram_size); + pg_size/2, ti->mapped_ram_size/2); ti->page_mask = 0; /* reset paging */ - } else { - ti->mapped_ram_size=ti->avail_shared_ram; - DPRINTK("Shared RAM paging enabled. Page size : %uK\n", - ((ti->page_mask^ 0xff)+1)>>2); } + } else if (pg_size > ti->mapped_ram_size) { + DPRINTK("Page size (%d) > mapped ram window (%d), can't page.\n", + pg_size/2, ti->mapped_ram_size/2); + } + #endif } /* finish figuring the shared RAM address */ @@ -685,9 +700,17 @@ DPRINTK("Hardware address : %02X:%02X:%02X:%02X:%02X:%02X\n", dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); + if (ti->page_mask) + DPRINTK("Shared RAM paging enabled. Page size: %uK Shared Ram size %dK\n", + ((ti->page_mask ^ 0xff)+1)>>2,ti->avail_shared_ram/2); + else + DPRINTK("Shared RAM paging disabled. ti->page_mask %x\n",ti->page_mask); #endif /* Calculate the maximum DHB we can use */ - switch (ti->mapped_ram_size) { + if (!ti->page_mask) { + ti->avail_shared_ram=ti->mapped_ram_size; + } + switch (ti->avail_shared_ram) { case 16 : /* 8KB shared RAM */ ti->dhb_size4mb = MIN(ti->dhb_size4mb, 2048); ti->rbuf_len4 = 1032; @@ -697,34 +720,34 @@ ti->rbuf_cnt16 = 2; break; case 32 : /* 16KB shared RAM */ - ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464); + ti->dhb_size4mb = MIN(ti->dhb_size4mb, 2048); ti->rbuf_len4 = 520; ti->rbuf_cnt4 = 9; - ti->dhb_size16mb = MIN(ti->dhb_size16mb, 4096); + ti->dhb_size16mb = MIN(ti->dhb_size16mb, 2048); ti->rbuf_len16 = 1032; /* 1024 usable */ ti->rbuf_cnt16 = 4; break; case 64 : /* 32KB shared RAM */ - ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464); + ti->dhb_size4mb = MIN(ti->dhb_size4mb, 2048); ti->rbuf_len4 = 1032; ti->rbuf_cnt4 = 6; - ti->dhb_size16mb = MIN(ti->dhb_size16mb, 10240); + ti->dhb_size16mb = MIN(ti->dhb_size16mb, 2048); ti->rbuf_len16 = 1032; ti->rbuf_cnt16 = 10; break; case 127 : /* 63KB shared RAM */ - ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464); + ti->dhb_size4mb = MIN(ti->dhb_size4mb, 2048); ti->rbuf_len4 = 1032; ti->rbuf_cnt4 = 6; - ti->dhb_size16mb = MIN(ti->dhb_size16mb, 16384); + ti->dhb_size16mb = MIN(ti->dhb_size16mb, 2048); ti->rbuf_len16 = 1032; ti->rbuf_cnt16 = 16; break; case 128 : /* 64KB shared RAM */ - ti->dhb_size4mb = MIN(ti->dhb_size4mb, 4464); + ti->dhb_size4mb = MIN(ti->dhb_size4mb, 2048); ti->rbuf_len4 = 1032; ti->rbuf_cnt4 = 6; - ti->dhb_size16mb = MIN(ti->dhb_size16mb, 17960); + ti->dhb_size16mb = MIN(ti->dhb_size16mb, 2048); ti->rbuf_len16 = 1032; ti->rbuf_cnt16 = 18; break; @@ -763,7 +786,7 @@ 'E' -- 8kb 'D' -- 16kb 'C' -- 32kb 'A' -- 64KB 'B' - 64KB less 512 bytes at top - (WARNING ... must zero top bytes in INIT */ + (WARNING ... must zero top bytes in INIT */ avail_sram_code=0xf-readb(adapt_info->mmio + AIPAVAILSHRAM); if (avail_sram_code) @@ -776,6 +799,7 @@ { struct tok_info *ti=(struct tok_info *)dev->priv; + SET_PAGE(ti->srb_page); ti->open_status = CLOSED; dev->init = tok_init_card; @@ -814,7 +838,7 @@ address[3] |= mclist->dmi_addr[5]; mclist = mclist->next; } - SET_PAGE(ti->srb); + SET_PAGE(ti->srb_page); for (i=0; isrb+i); @@ -862,6 +886,7 @@ struct tok_info *ti=(struct tok_info *) dev->priv; + SET_PAGE(ti->srb_page); writeb(DIR_CLOSE_ADAPTER, ti->srb + offsetof(struct srb_close_adapter, command)); writeb(CMD_IN_SRB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); @@ -870,6 +895,7 @@ sleep_on(&ti->wait_for_tok_int); + SET_PAGE(ti->srb_page); if (readb(ti->srb + offsetof(struct srb_close_adapter, ret_code))) DPRINTK("close adapter failed: %02X\n", (int)readb(ti->srb + offsetof(struct srb_close_adapter, ret_code))); @@ -889,6 +915,9 @@ unsigned char status; struct tok_info *ti; struct device *dev; +#ifdef ENABLE_PAGING + unsigned char save_srpr; +#endif dev = dev_id; #if TR_VERBOSE @@ -896,6 +925,9 @@ #endif ti = (struct tok_info *) dev->priv; spin_lock(&(ti->lock)); +#ifdef ENABLE_PAGING + save_srpr=readb(ti->mmio+ACA_OFFSET+ACA_RW+SRPR_EVEN); +#endif /* Disable interrupts till processing is finished */ dev->interrupt=1; @@ -922,18 +954,16 @@ if (status == 0xFF) { DPRINTK("PCMCIA card removed.\n"); - spin_unlock(&(ti->lock)); - dev->interrupt = 0; - return; + dev->interrupt = 0; + goto return_point; } /* Check ISRP EVEN too. */ if ( readb (ti->mmio + ACA_OFFSET + ACA_RW + ISRP_EVEN) == 0xFF) { DPRINTK("PCMCIA card removed.\n"); - spin_unlock(&(ti->lock)); dev->interrupt = 0; - return; + goto return_point; } #endif @@ -942,8 +972,15 @@ int i; __u32 check_reason; + __u8 check_reason_page=0; - check_reason=ti->mmio + ntohs(readw(ti->sram + ACA_OFFSET + ACA_RW +WWCR_EVEN)); + check_reason=ntohs(readw(ti->sram + ACA_OFFSET + ACA_RW +WWCR_EVEN)); + if (ti->page_mask) { + check_reason_page=(check_reason>>8) & ti->page_mask; + check_reason &= ~(ti->page_mask << 8); + } + check_reason += ti->sram; + SET_PAGE(check_reason_page); DPRINTK("Adapter check interrupt\n"); DPRINTK("8 reason bytes follow: "); @@ -970,6 +1007,12 @@ /* SRB, ASB, ARB or SSB response */ if (status & SRB_RESP_INT) { /* SRB response */ + SET_PAGE(ti->srb_page); +#if TR_VERBOSE + DPRINTK("SRB resp: cmd=%02X rsp=%02X\n", + readb(ti->srb), + readb(ti->srb + offsetof(struct srb_xmit, ret_code))); +#endif switch(readb(ti->srb)) { /* SRB command check */ @@ -1011,10 +1054,25 @@ unsigned char open_ret_code; __u16 open_error_code; - ti->srb=ti->sram+ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, srb_addr))); - ti->ssb=ti->sram+ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, ssb_addr))); - ti->arb=ti->sram+ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, arb_addr))); - ti->asb=ti->sram+ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, asb_addr))); + ti->srb=ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, srb_addr))); + ti->ssb=ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, ssb_addr))); + ti->arb=ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, arb_addr))); + ti->asb=ntohs(readw(ti->init_srb +offsetof(struct srb_open_response, asb_addr))); + if (ti->page_mask) { + ti->srb_page=(ti->srb>>8) & ti->page_mask; + ti->srb &= ~(ti->page_mask<<8); + ti->ssb_page=(ti->ssb>>8) & ti->page_mask; + ti->ssb &= ~(ti->page_mask<<8); + ti->arb_page=(ti->arb>>8) & ti->page_mask; + ti->arb &= ~(ti->page_mask<<8); + ti->asb_page=(ti->asb>>8) & ti->page_mask; + ti->asb &= ~(ti->page_mask<<8); + } + ti->srb+=ti->sram; + ti->ssb+=ti->sram; + ti->arb+=ti->sram; + ti->asb+=ti->sram; + ti->current_skb=NULL; open_ret_code = readb(ti->init_srb +offsetof(struct srb_open_response, ret_code)); @@ -1143,6 +1201,10 @@ } /* SRB response */ if (status & ASB_FREE_INT) { /* ASB response */ + SET_PAGE(ti->asb_page); +#if TR_VERBOSE + DPRINTK("ASB resp: cmd=%02X\n", readb(ti->asb)); +#endif switch(readb(ti->asb)) { /* ASB command check */ @@ -1165,6 +1227,12 @@ } /* ASB response */ if (status & ARB_CMD_INT) { /* ARB response */ + SET_PAGE(ti->arb_page); +#if TR_VERBOSE + DPRINTK("ARB resp: cmd=%02X rsp=%02X\n", + readb(ti->arb), + readb(ti->arb + offsetof(struct arb_dlc_status, status))); +#endif switch (readb(ti->arb)) { /* ARB command check */ @@ -1221,6 +1289,11 @@ if (status & SSB_RESP_INT) { /* SSB response */ unsigned char retcode; + SET_PAGE(ti->ssb_page); +#if TR_VERBOSE + DPRINTK("SSB resp: cmd=%02X rsp=%02X\n", + readb(ti->ssb), readb(ti->ssb+2)); +#endif switch (readb(ti->ssb)) { /* SSB command check */ case XMIT_DIR_FRAME: @@ -1234,6 +1307,7 @@ case XMIT_XID_CMD: DPRINTK("xmit xid ret_code: %02X\n", (int)readb(ti->ssb+2)); + break; default: DPRINTK("Unknown command %02X in ssb\n", (int)readb(ti->ssb)); @@ -1259,6 +1333,13 @@ DPRINTK("Unexpected interrupt from tr adapter\n"); } +#ifdef PCMCIA + return_point: +#endif +#ifdef ENABLE_PAGING + writeb(save_srpr, ti->mmio+ACA_OFFSET+ACA_RW+SRPR_EVEN); +#endif + spin_unlock(&(ti->lock)); } @@ -1281,9 +1362,26 @@ writeb(ti->sram_base, ti->mmio + ACA_OFFSET + ACA_RW + RRR_EVEN); ti->sram=((__u32)ti->sram_base << 12); } - ti->init_srb=ti->sram - +ntohs((unsigned short)readw(ti->mmio+ ACA_OFFSET + WRBR_EVEN)); - SET_PAGE(ntohs((unsigned short)readw(ti->mmio+ACA_OFFSET + WRBR_EVEN))); + ti->init_srb=ntohs((unsigned short)readw(ti->mmio+ ACA_OFFSET + WRBR_EVEN)); + if (ti->page_mask) { + ti->init_srb_page=(ti->init_srb>>8)&ti->page_mask; + ti->init_srb &= ~(ti->page_mask<<8); + } + ti->init_srb+=ti->sram; + + if (ti->avail_shared_ram == 127) { + int i; + int last_512=0xfe00; + if (ti->page_mask) { + last_512 &= ~(ti->page_mask<<8); + } + // initialize high section of ram (if necessary) + SET_PAGE(0xc0); + for (i=0; i<512; i++) { + writeb(0,ti->sram+last_512+i); + } + } + SET_PAGE(ti->init_srb_page); dev->mem_start = ti->sram; dev->mem_end = ti->sram + (ti->mapped_ram_size<<9) - 1; @@ -1291,7 +1389,7 @@ #if TR_VERBOSE { int i; - DPRINTK("init_srb(%p):", ti->init_srb); + DPRINTK("init_srb(%lx):", (long)ti->init_srb); for (i=0;i<17;i++) printk("%02X ", (int)readb(ti->init_srb+i)); printk("\n"); } @@ -1344,10 +1442,6 @@ /* Reset adapter */ dev->tbusy=1; /* nothing can be done before reset and open completed */ -#ifdef ENABLE_PAGING - if(ti->page_mask) - writeb(SRPR_ENABLE_PAGING, ti->mmio + ACA_OFFSET + ACA_RW + SRPR_EVEN); -#endif writeb(~INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_EVEN); @@ -1358,6 +1452,10 @@ outb(0, PIOaddr+ADAPTRESET); for (i=jiffies+TR_RESET_INTERVAL; time_before_eq(jiffies, i);); /* wait 50ms */ outb(0,PIOaddr+ADAPTRESETREL); +#ifdef ENABLE_PAGING + if(ti->page_mask) + writeb(SRPR_ENABLE_PAGING, ti->mmio + ACA_OFFSET + ACA_RW + SRPR_EVEN); +#endif #if !TR_NEWFORMAT DPRINTK("card reset\n"); @@ -1373,7 +1471,7 @@ int i; struct tok_info *ti=(struct tok_info *) dev->priv; - SET_PAGE(ti->srb); + SET_PAGE(ti->srb_page); for (i=0; isrb+i); @@ -1432,10 +1530,16 @@ ti->init_srb + offsetof(struct dir_open_adapter, num_dhb)); writeb(DLC_MAX_SAP, ti->init_srb + offsetof(struct dir_open_adapter, dlc_max_sap)); - writeb(DLC_MAX_STA, + writeb(DLC_MAX_STA, ti->init_srb + offsetof(struct dir_open_adapter, dlc_max_sta)); ti->srb=ti->init_srb; /* We use this one in the interrupt handler */ + ti->srb_page=ti->init_srb_page; + DPRINTK("Opend adapter: Xmit bfrs: %d X %d, Rcv bfrs: %d X %d\n", + readb(ti->init_srb+offsetof(struct dir_open_adapter,num_dhb)), + ntohs(readw(ti->init_srb+offsetof(struct dir_open_adapter,dhb_length))), + ntohs(readw(ti->init_srb+offsetof(struct dir_open_adapter,num_rcv_buf))), + ntohs(readw(ti->init_srb+offsetof(struct dir_open_adapter,rcv_buf_len))) ); writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN); writeb(CMD_IN_SRB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); @@ -1451,6 +1555,11 @@ unsigned char xmit_command; int i; struct trllc *llc; + struct srb_xmit xsrb; + __u8 dhb_page=0; + __u8 llc_ssap; + + SET_PAGE(ti->asb_page); if (readb(ti->asb + offsetof(struct asb_xmit_resp, ret_code))!=0xFF) DPRINTK("ASB not free !!!\n"); @@ -1460,8 +1569,13 @@ providing a shared memory address for us to stuff with data. Here we compute the effective address where we will place data.*/ - dhb=ti->sram - +ntohs(readw(ti->arb + offsetof(struct arb_xmit_req, dhb_address))); + SET_PAGE(ti->arb_page); + dhb=ntohs(readw(ti->arb + offsetof(struct arb_xmit_req, dhb_address))); + if (ti->page_mask) { + dhb_page=(dhb >> 8) & ti->page_mask; + dhb &= ~(ti->page_mask << 8); + } + dhb+=ti->sram; /* Figure out the size of the 802.5 header */ if (!(trhdr->saddr[0] & 0x80)) /* RIF present? */ @@ -1472,13 +1586,17 @@ llc = (struct trllc *)(ti->current_skb->data + hdr_len); - xmit_command = readb(ti->srb + offsetof(struct srb_xmit, command)); + llc_ssap=llc->ssap; + SET_PAGE(ti->srb_page); + memcpy_fromio(&xsrb, ti->srb, sizeof(xsrb)); + SET_PAGE(ti->asb_page); + xmit_command=xsrb.command; writeb(xmit_command, ti->asb + offsetof(struct asb_xmit_resp, command)); - writew(readb(ti->srb + offsetof(struct srb_xmit, station_id)), + writew(xsrb.station_id, ti->asb + offsetof(struct asb_xmit_resp, station_id)); - writeb(llc->ssap, ti->asb + offsetof(struct asb_xmit_resp, rsap_value)); - writeb(readb(ti->srb + offsetof(struct srb_xmit, cmd_corr)), + writeb(llc_ssap, ti->asb + offsetof(struct asb_xmit_resp, rsap_value)); + writeb(xsrb.cmd_corr, ti->asb + offsetof(struct asb_xmit_resp, cmd_corr)); writeb(0, ti->asb + offsetof(struct asb_xmit_resp, ret_code)); @@ -1487,6 +1605,7 @@ writew(htons(0x11), ti->asb + offsetof(struct asb_xmit_resp, frame_length)); writeb(0x0e, ti->asb + offsetof(struct asb_xmit_resp, hdr_length)); + SET_PAGE(dhb_page); writeb(AC, dhb); writeb(LLC_FRAME, dhb+1); @@ -1521,6 +1640,7 @@ { struct tok_info *ti=(struct tok_info *) dev->priv; __u32 rbuffer, rbufdata; + __u8 rbuffer_page=0; __u32 llc; unsigned char *data; unsigned int rbuffer_len, lan_hdr_len, hdr_len, ip_len, length; @@ -1529,31 +1649,41 @@ int IPv4_p = 0; unsigned int chksum = 0; struct iphdr *iph; + struct arb_rec_req rarb; - rbuffer=(ti->sram - +ntohs(readw(ti->arb + offsetof(struct arb_rec_req, rec_buf_addr))))+2; + SET_PAGE(ti->arb_page); + memcpy_fromio(&rarb, ti->arb, sizeof(rarb)); + rbuffer=ntohs(rarb.rec_buf_addr)+2; + if (ti->page_mask) { + rbuffer_page=(rbuffer >> 8) & ti->page_mask; + rbuffer &= ~(ti->page_mask<<8); + } + rbuffer += ti->sram; + + SET_PAGE(ti->asb_page); if(readb(ti->asb + offsetof(struct asb_rec, ret_code))!=0xFF) DPRINTK("ASB not free !!!\n"); writeb(REC_DATA, ti->asb + offsetof(struct asb_rec, command)); - writew(readw(ti->arb + offsetof(struct arb_rec_req, station_id)), + writew(rarb.station_id, ti->asb + offsetof(struct asb_rec, station_id)); - writew(readw(ti->arb + offsetof(struct arb_rec_req, rec_buf_addr)), + writew(rarb.rec_buf_addr, ti->asb + offsetof(struct asb_rec, rec_buf_addr)); - lan_hdr_len=readb(ti->arb + offsetof(struct arb_rec_req, lan_hdr_len)); + lan_hdr_len=rarb.lan_hdr_len; hdr_len = lan_hdr_len + sizeof(struct trllc) + sizeof(struct iphdr); + SET_PAGE(rbuffer_page); llc=(rbuffer + offsetof(struct rec_buf, data) + lan_hdr_len); #if TR_VERBOSE DPRINTK("offsetof data: %02X lan_hdr_len: %02X\n", (unsigned int)offsetof(struct rec_buf,data), (unsigned int)lan_hdr_len); - DPRINTK("llc: %08X rec_buf_addr: %04X ti->sram: %p\n", llc, - ntohs(readw(ti->arb + offsetof(struct arb_rec_req, rec_buf_addr))), - ti->sram); + DPRINTK("llc: %08X rec_buf_addr: %04X ti->sram: %lx\n", llc, + ntohs(rarb.rec_buf_addr), + (long)ti->sram); DPRINTK("dsap: %02X, ssap: %02X, llc: %02X, protid: %02X%02X%02X, " "ethertype: %04X\n", (int)readb(llc + offsetof(struct trllc, dsap)), @@ -1565,14 +1695,15 @@ (int)readw(llc + offsetof(struct trllc, ethertype))); #endif if (readb(llc + offsetof(struct trllc, llc))!=UI_CMD) { + SET_PAGE(ti->asb_page); writeb(DATA_LOST, ti->asb + offsetof(struct asb_rec, ret_code)); ti->tr_stats.rx_dropped++; writeb(RESP_IN_ASB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); return; } - length = ntohs(readw(ti->arb+offsetof(struct arb_rec_req, frame_len))); - if ((readb(llc + offsetof(struct trllc, dsap))==EXTENDED_SAP) && + length = ntohs(rarb.frame_len); + if ((readb(llc + offsetof(struct trllc, dsap))==EXTENDED_SAP) && (readb(llc + offsetof(struct trllc, ssap))==EXTENDED_SAP) && (length>=hdr_len)) { IPv4_p = 1; @@ -1605,7 +1736,7 @@ } #endif - skb_size = length-lan_hdr_len+sizeof(struct trh_hdr)+sizeof(struct trllc); + skb_size = length; if (!(skb=dev_alloc_skb(skb_size))) { DPRINTK("out of memory. frame dropped.\n"); @@ -1650,11 +1781,17 @@ break; length -= rbuffer_len; data += rbuffer_len; + if (ti->page_mask) { + rbuffer_page=(rbuffer>>8) & ti->page_mask; + rbuffer &= ~(ti->page_mask << 8); + } rbuffer += ti->sram; + SET_PAGE(rbuffer_page); rbuffer_len = ntohs(readw(rbuffer + offsetof(struct rec_buf, buf_len))); rbufdata = rbuffer + offsetof(struct rec_buf, data); } + SET_PAGE(ti->asb_page); writeb(0, ti->asb + offsetof(struct asb_rec, ret_code)); writeb(RESP_IN_ASB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); @@ -1696,6 +1833,7 @@ /* Save skb; we'll need it when the adapter asks for the data */ ti->current_skb=skb; + SET_PAGE(ti->srb_page); writeb(XMIT_UI_FRAME, ti->srb + offsetof(struct srb_xmit, command)); writew(ti->exsap_station_id, ti->srb +offsetof(struct srb_xmit, station_id)); @@ -1721,6 +1859,7 @@ ti=(struct tok_info *) dev->priv; ti->readlog_pending = 0; + SET_PAGE(ti->srb_page); writeb(DIR_READ_LOG, ti->srb); writeb(INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_SET + ISRP_EVEN); writeb(CMD_IN_SRB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/ibmtr.h linux.16p3/drivers/net/ibmtr.h --- linux.vanilla/drivers/net/ibmtr.h Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/ibmtr.h Mon May 15 12:13:05 2000 @@ -133,9 +133,9 @@ #define TCR_ODD 0x0D #define TVR_EVEN 0x0E /* Timer value registers - even and odd */ #define TVR_ODD 0x0F -#define SRPR_EVEN 0x10 /* Shared RAM paging registers - even and odd */ +#define SRPR_EVEN 0x18 /* Shared RAM paging registers - even and odd */ #define SRPR_ENABLE_PAGING 0xc0 -#define SRPR_ODD 0x11 /* Not used. */ +#define SRPR_ODD 0x19 /* Not used. */ #define TOKREAD 0x60 #define TOKOR 0x40 #define TOKAND 0x20 @@ -162,8 +162,8 @@ #define ACA_RW 0x00 #ifdef ENABLE_PAGING -#define SET_PAGE(x) (writeb(((x>>8)&ti.page_mask), \ - ti->mmio + ACA_OFFSET + ACA_RW + SRPR_EVEN)) +#define SET_PAGE(x) (writeb((x), \ + ti->mmio + ACA_OFFSET + ACA_RW + SRPR_EVEN)) #else #define SET_PAGE(x) #endif @@ -205,6 +205,11 @@ __u32 ssb; /* System Status Block address */ __u32 arb; /* Adapter Request Block address */ __u32 asb; /* Adapter Status Block address */ + __u8 init_srb_page; + __u8 srb_page; + __u8 ssb_page; + __u8 arb_page; + __u8 asb_page; unsigned short exsap_station_id; unsigned short global_int_enable; struct sk_buff *current_skb; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/irda/irport.c linux.16p3/drivers/net/irda/irport.c --- linux.vanilla/drivers/net/irda/irport.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/irda/irport.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sun Aug 3 13:49:59 1997 - * Modified at: Sat Mar 11 07:41:54 2000 + * Modified at: Tue Apr 25 21:18:48 2000 * Modified by: Dag Brattli * Sources: serial.c by Linus Torvalds * @@ -943,7 +943,12 @@ switch (cmd) { case SIOCSBANDWIDTH: /* Set bandwidth */ - if (!capable(CAP_NET_ADMIN)) + /* + * This function will also be used by IrLAP to change the + * speed, so we still must allow for speed change within + * interrupt context. + */ + if (!in_interrupt() && !capable(CAP_NET_ADMIN)) return -EPERM; irda_task_execute(self, __irport_change_speed, NULL, NULL, (void *) irq->ifr_baudrate); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/irda/irtty.c linux.16p3/drivers/net/irda/irtty.c --- linux.vanilla/drivers/net/irda/irtty.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/irda/irtty.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Tue Dec 9 21:18:38 1997 - * Modified at: Sat Mar 11 07:43:30 2000 + * Modified at: Tue Apr 25 21:17:49 2000 * Modified by: Dag Brattli * Sources: slip.c by Laurence Culhane, * Fred N. van Kempen, @@ -974,7 +974,12 @@ switch (cmd) { case SIOCSBANDWIDTH: /* Set bandwidth */ - if (!capable(CAP_NET_ADMIN)) + /* + * This function will also be used by IrLAP to change the + * speed, so we still must allow for speed change within + * interrupt context. + */ + if (!in_interrupt() && !capable(CAP_NET_ADMIN)) return -EPERM; irda_task_execute(self, irtty_change_speed, NULL, NULL, (void *) irq->ifr_baudrate); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/irda/nsc-ircc.c linux.16p3/drivers/net/irda/nsc-ircc.c --- linux.vanilla/drivers/net/irda/nsc-ircc.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/irda/nsc-ircc.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Stable. * Author: Dag Brattli * Created at: Sat Nov 7 21:43:15 1998 - * Modified at: Fri Mar 10 11:53:26 2000 + * Modified at: Tue Apr 25 21:19:12 2000 * Modified by: Dag Brattli * * Copyright (c) 1998-2000 Dag Brattli @@ -56,6 +56,7 @@ #include #include #include +#include #ifdef CONFIG_APM #include @@ -1969,8 +1970,15 @@ switch (cmd) { case SIOCSBANDWIDTH: /* Set bandwidth */ - if (!capable(CAP_NET_ADMIN)) + /* + * This function will also be used by IrLAP to change the + * speed, so we still must allow for speed change within + * interrupt context. + */ + if (!in_interrupt() && !capable(CAP_NET_ADMIN)) { + IRDA_DEBUG(0, __FUNCTION__ "(), not capable sysadm\n"); return -EPERM; + } nsc_ircc_change_speed(self, irq->ifr_baudrate); break; case SIOCSMEDIABUSY: /* Set media busy */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/irda/toshoboe.c linux.16p3/drivers/net/irda/toshoboe.c --- linux.vanilla/drivers/net/irda/toshoboe.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/irda/toshoboe.c Mon May 1 00:32:22 2000 @@ -612,7 +612,12 @@ switch (cmd) { case SIOCSBANDWIDTH: /* Set bandwidth */ - if (!capable(CAP_NET_ADMIN)) + /* + * This function will also be used by IrLAP to change the + * speed, so we still must allow for speed change within + * interrupt context. + */ + if (!in_interrupt() && !capable(CAP_NET_ADMIN)) return -EPERM; /* toshoboe_setbaud(self, irq->ifr_baudrate); */ /* Just change speed once - inserted by Paul Bristow */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/irda/w83977af_ir.c linux.16p3/drivers/net/irda/w83977af_ir.c --- linux.vanilla/drivers/net/irda/w83977af_ir.c Fri Apr 21 12:46:17 2000 +++ linux.16p3/drivers/net/irda/w83977af_ir.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Experimental. * Author: Paul VanderSpek * Created at: Wed Nov 4 11:46:16 1998 - * Modified at: Fri Mar 10 11:53:53 2000 + * Modified at: Tue Apr 25 21:18:35 2000 * Modified by: Dag Brattli * * Copyright (c) 1998-2000 Dag Brattli @@ -258,13 +258,12 @@ dev->get_stats = w83977af_net_get_stats; rtnl_lock(); - err = register_netdev(dev); + err = register_netdevice(dev); rtnl_unlock(); if (err) { - ERROR(__FUNCTION__ "(), register_netdev() failed!\n"); + ERROR(__FUNCTION__ "(), register_netdevice() failed!\n"); return -1; } - MESSAGE("IrDA: Registered device %s\n", dev->name); return 0; @@ -307,7 +306,7 @@ /* Release the PORT that this driver is using */ IRDA_DEBUG(0 , __FUNCTION__ "(), Releasing Region %03x\n", - self->io.fir_base); + self->io.fir_base); release_region(self->io.fir_base, self->io.fir_ext); if (self->tx_buff.head) @@ -1348,7 +1347,12 @@ switch (cmd) { case SIOCSBANDWIDTH: /* Set bandwidth */ - if (!capable(CAP_NET_ADMIN)) + /* + * This function will also be used by IrLAP to change the + * speed, so we still must allow for speed change within + * interrupt context. + */ + if (!in_interrupt() && !capable(CAP_NET_ADMIN)) return -EPERM; w83977af_change_speed(self, irq->ifr_baudrate); break; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/sealevel.c linux.16p3/drivers/net/sealevel.c --- linux.vanilla/drivers/net/sealevel.c Fri Apr 21 12:46:19 2000 +++ linux.16p3/drivers/net/sealevel.c Mon May 15 18:49:06 2000 @@ -32,6 +32,7 @@ struct slvl_device { + void *if_ptr; /* General purpose pointer (used by SPPP) */ struct z8530_channel *chan; struct ppp_device netdev; char name[16]; @@ -243,7 +244,18 @@ memset(b, 0, sizeof(*sv)); b->dev[0].chan = &b->board.chanA; + b->dev[0].if_ptr = &b->dev[0].netdev; + b->dev[0].netdev.dev=(struct device *) + kmalloc(sizeof(struct device), GFP_KERNEL); + if(!b->dev[0].netdev.dev) + goto fail2; + b->dev[1].chan = &b->board.chanB; + b->dev[1].if_ptr = &b->dev[1].netdev; + b->dev[1].netdev.dev=(struct device *) + kmalloc(sizeof(struct device), GFP_KERNEL); + if(!b->dev[1].netdev.dev) + goto fail1_0; dev=&b->board; @@ -283,14 +295,14 @@ if(request_irq(irq, &z8530_interrupt, SA_INTERRUPT, "SeaLevel", dev)<0) { printk(KERN_WARNING "sealevel: IRQ %d already in use.\n", irq); - goto fail2; + goto fail1_1; } dev->irq=irq; dev->chanA.private=&b->dev[0]; dev->chanB.private=&b->dev[1]; - dev->chanA.netdevice=&b->dev[0].netdev.dev; - dev->chanB.netdevice=&b->dev[1].netdev.dev; + dev->chanA.netdevice=b->dev[0].netdev.dev; + dev->chanB.netdevice=b->dev[1].netdev.dev; dev->chanA.dev=dev; dev->chanB.dev=dev; dev->name=b->dev[0].name; @@ -399,6 +411,10 @@ free_dma(dev->chanA.txdma); fail: free_irq(irq, dev); +fail1_1: + kfree(b->dev[1].netdev.dev); +fail1_0: + kfree(b->dev[0].netdev.dev); fail2: kfree(b); fail3: @@ -414,8 +430,8 @@ for(u=0; u<2; u++) { - sppp_detach(&b->dev[u].netdev.dev); - unregister_netdev(&b->dev[u].netdev.dev); + sppp_detach(b->dev[u].netdev.dev); + unregister_netdev(b->dev[u].netdev.dev); } free_irq(b->board.irq, &b->board); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/smc9194.c linux.16p3/drivers/net/smc9194.c --- linux.vanilla/drivers/net/smc9194.c Fri Apr 21 12:46:20 2000 +++ linux.16p3/drivers/net/smc9194.c Mon May 15 15:50:26 2000 @@ -45,10 +45,12 @@ . Fixed bug reported by Gardner Buchanan in . smc_enable, with outw instead of outb . 03/06/96 Erik Stahlman Added hardware multicast from Peter Cammaert + . 04/14/00 Heiko Pruessing (SMA Regelsysteme) Fixed bug in chip memory + . allocation ----------------------------------------------------------------------------*/ static const char *version = - "smc9194.c:v0.12 03/06/96 by Erik Stahlman (erik@vt.edu)\n"; + "smc9194.c:v0.13 04/14/00 by Erik Stahlman (erik@vt.edu)\n"; #ifdef MODULE #include @@ -562,11 +564,15 @@ length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; + /* - . the MMU wants the number of pages to be the number of 256 bytes - . 'pages', minus 1 ( since a packet can't ever have 0 pages :) ) + ** The MMU wants the number of pages to be the number of 256 bytes + ** 'pages', minus 1 ( since a packet can't ever have 0 pages :) ) + ** + ** Pkt size for allocating is data length +6 (for additional status words, + ** length and ctl!) If odd size last byte is included in this header. */ - numPages = length / 256; + numPages = ((length & 0xfffe) + 6) / 256; if (numPages > 7 ) { printk(CARDNAME": Far too big packet error. \n"); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/syncppp.c linux.16p3/drivers/net/syncppp.c --- linux.vanilla/drivers/net/syncppp.c Fri Apr 21 12:46:21 2000 +++ linux.16p3/drivers/net/syncppp.c Mon May 15 18:49:06 2000 @@ -153,9 +153,9 @@ static void if_down(struct device *dev) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); - sp->pp_link_state=SPPP_LINK_DOWN; + sp->pp_link_state = SPPP_LINK_DOWN; } /* @@ -191,7 +191,7 @@ void sppp_input (struct device *dev, struct sk_buff *skb) { struct ppp_header *h; - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); skb->dev=dev; skb->mac.raw=skb->data; @@ -320,7 +320,7 @@ static int sppp_hard_header(struct sk_buff *skb, struct device *dev, __u16 type, void *daddr, void *saddr, unsigned int len) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); struct ppp_header *h; skb_push(skb,sizeof(struct ppp_header)); h=(struct ppp_header *)skb->data; @@ -826,7 +826,7 @@ int sppp_close (struct device *dev) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); sp->pp_link_state = SPPP_LINK_DOWN; sp->lcp.state = LCP_STATE_CLOSED; sp->ipcp.state = IPCP_STATE_CLOSED; @@ -839,7 +839,7 @@ int sppp_open (struct device *dev) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); sppp_close(dev); if (!(sp->pp_flags & PP_CISCO)) { sppp_lcp_open (sp); @@ -852,7 +852,7 @@ int sppp_reopen (struct device *dev) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); sppp_close(dev); if (!(sp->pp_flags & PP_CISCO)) { @@ -881,7 +881,7 @@ int sppp_do_ioctl(struct device *dev, struct ifreq *ifr, int cmd) { - struct sppp *sp = &((struct ppp_device *)dev)->sppp; + struct sppp *sp = (struct sppp *)sppp_of(dev); if(dev->flags&IFF_UP) return -EBUSY; @@ -914,7 +914,7 @@ void sppp_attach(struct ppp_device *pd) { - struct device *dev=&pd->dev; + struct device *dev = pd->dev; struct sppp *sp = &pd->sppp; /* Initialize keepalive handler. */ @@ -971,8 +971,7 @@ void sppp_detach (struct device *dev) { - struct sppp **q, *p, *sp = &((struct ppp_device *)dev)->sppp; - + struct sppp **q, *p, *sp = (struct sppp *)sppp_of(dev); /* Remove the entry from the keepalive list. */ for (q = &spppq; (p = *q); q = &p->pp_next) @@ -1297,6 +1296,8 @@ sppp_packet_type.type=htons(ETH_P_WAN_PPP); dev_add_pack(&sppp_packet_type); } + +EXPORT_SYMBOL(sync_ppp_init); #ifdef MODULE diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/syncppp.h linux.16p3/drivers/net/syncppp.h --- linux.vanilla/drivers/net/syncppp.h Fri Apr 21 12:46:21 2000 +++ linux.16p3/drivers/net/syncppp.h Mon May 15 18:49:06 2000 @@ -52,10 +52,13 @@ struct ppp_device { - struct device dev; /* Network device */ + struct device *dev; /* Network device pointer */ struct sppp sppp; /* Synchronous PPP */ }; +#define sppp_of(dev) \ + (&((struct ppp_device *)(*(unsigned long *)((dev)->priv)))->sppp) + #define PP_KEEPALIVE 0x01 /* use keepalive protocol */ #define PP_CISCO 0x02 /* use Cisco protocol instead of PPP */ #define PP_TIMO 0x04 /* cp_timeout routine active */ @@ -86,6 +89,7 @@ int sppp_open (struct device *dev); int sppp_reopen (struct device *dev); int sppp_close (struct device *dev); +void sync_ppp_init (void); #endif #define SPPPIOCCISCO (SIOCDEVPRIVATE) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/Config.in linux.16p3/drivers/s390/Config.in --- linux.vanilla/drivers/s390/Config.in Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/Config.in Mon May 15 16:34:40 2000 @@ -19,6 +19,7 @@ if [ "$CONFIG_BLK_DEV_RAM" = "y" ]; then bool ' Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD fi +tristate 'XPRAM disk support' CONFIG_BLK_DEV_XPRAM bool 'Support for VM minidisk (VM only)' CONFIG_MDISK if [ "$CONFIG_MDISK" = "y" ]; then @@ -29,15 +30,21 @@ if [ "$CONFIG_DASD" != "n" ]; then comment 'DASD disciplines' bool ' Support for ECKD Disks' CONFIG_DASD_ECKD + bool ' Support for FBA Disks' CONFIG_DASD_FBA +# bool ' Support for CKD Disks (unsupported)' CONFIG_DASD_CKD + if [ "$CONFIG_MDISK" = "n" ]; then + bool ' Support for DIAG access to CMS formatted Disks' CONFIG_DASD_MDSK + fi fi #menu_option next_comment +# comment 'S/390-SCSI support' +# tristate 'S/390-SCSI support' CONFIG_SCSI #endmenu if [ "$CONFIG_NET" = "y" ]; then mainmenu_option next_comment comment 'S/390 Network device support' - bool 'Network device support' CONFIG_NETDEVICES if [ "$CONFIG_NETDEVICES" = "y" ]; then menu_option next_comment diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/Makefile linux.16p3/drivers/s390/Makefile --- linux.vanilla/drivers/s390/Makefile Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/Makefile Mon May 15 16:34:41 2000 @@ -16,7 +16,7 @@ SUBDIRS := $(SUBDIRS) arch/s390/drivers/block arch/s390/drivers/char \ arch/s390/drivers/misc arch/s390/drivers/net -MOD_SUB_DIRS += ./net +MOD_SUB_DIRS += ./net ./block O_OBJS := block/s390-block.o \ char/s390-char.o \ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/Makefile linux.16p3/drivers/s390/block/Makefile --- linux.vanilla/drivers/s390/block/Makefile Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/Makefile Mon May 15 16:34:41 2000 @@ -4,22 +4,60 @@ O_TARGET := s390-block.o O_OBJS := M_OBJS := +D_OBJS := ifeq ($(CONFIG_DASD),y) - O_OBJS += dasd.o dasd_ccwstuff.o + O_OBJS += dasd.o dasd_ccwstuff.o dasd_erp.o dasd_setup.o ifeq ($(CONFIG_PROC_FS),y) O_OBJS += dasd_proc.o dasd_profile.o endif ifeq ($(CONFIG_DASD_ECKD),y) - O_OBJS += dasd_eckd.o + O_OBJS += dasd_eckd.o dasd_eckd_erp.o dasd_3990_erp.o dasd_9343_erp.o endif + ifeq ($(CONFIG_DASD_FBA),y) + O_OBJS += dasd_fba.o + endif + ifeq ($(CONFIG_DASD_MDSK),y) + O_OBJS += dasd_mdsk.o + endif +# ifeq ($(CONFIG_DASD_CKD),y) +# O_OBJS += dasd_ckd.o +# endif +endif + +ifeq ($(CONFIG_DASD),m) + M_OBJS += dasd_mod.o + D_OBJS += dasd.o dasd_ccwstuff.o dasd_erp.o dasd_setup.o + ifeq ($(CONFIG_PROC_FS),y) + D_OBJS += dasd_proc.o dasd_profile.o + endif + ifeq ($(CONFIG_DASD_ECKD),y) + D_OBJS += dasd_eckd.o dasd_eckd_erp.o dasd_3990_erp.o dasd_9343_erp.o + endif + ifeq ($(CONFIG_DASD_FBA),y) + D_OBJS += dasd_fba.o + endif + ifeq ($(CONFIG_DASD_MDSK),y) + D_OBJS += dasd_mdsk.o + endif +# ifeq ($(CONFIG_DASD_CKD),y) +# D_OBJS += dasd_ckd.o +# endif endif ifeq ($(CONFIG_MDISK),y) O_OBJS += mdisk.o endif +ifeq ($(CONFIG_BLK_DEV_XPRAM),y) + O_OBJS += xpram.o +else + ifeq ($(CONFIG_BLK_DEV_XPRAM),m) + M_OBJS += xpram.o + endif +endif + dasd_mod.o: $(D_OBJS) - $(LD) $(LD_RFLAG) -r -o $@ $+ + $(LD) $(LD_RFLAG) -r -o $@ $(D_OBJS) include $(TOPDIR)/Rules.make diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd.c linux.16p3/drivers/s390/block/dasd.c --- linux.vanilla/drivers/s390/block/dasd.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd.c Mon May 15 16:34:41 2000 @@ -1,7 +1,6 @@ /* * File...........: linux/drivers/s390/block/dasd.c * Author(s)......: Holger Smolinski - * : Utz Bacher * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 */ @@ -9,10 +8,6 @@ #include #include -#ifdef MODULE -#include -#endif /* MODULE */ - #include #include #include @@ -27,16 +22,18 @@ #include #include +#include -#include "dasd.h" +#include #include +#include "dasd_erp.h" #include "dasd_types.h" #include "dasd_ccwstuff.h" -#define PRINTK_HEADER DASD_NAME":" +#include "../../../arch/s390/kernel/debug.h" -#define CCW_READ_DEVICE_CHARACTERISTICS 0x64 +#define PRINTK_HEADER DASD_NAME":" #define DASD_SSCH_RETRIES 2 @@ -45,220 +42,107 @@ (( info -> sid_data.cu_type ct ) && ( info -> sid_data.cu_model cm )) && \ (( info -> sid_data.dev_type dt ) && ( info -> sid_data.dev_model dm )) ) +#ifdef MODULE +#include + +char *dasd[DASD_MAX_DEVICES] = +{NULL,}; +#ifdef CONFIG_DASD_MDSK +char *dasd_force_mdsk[DASD_MAX_DEVICES] = +{NULL,}; +#endif + +kdev_t ROOT_DEV; + +EXPORT_NO_SYMBOLS; +MODULE_AUTHOR ("Holger Smolinski "); +MODULE_DESCRIPTION ("Linux on S/390 DASD device driver, Copyright 2000 IBM Corporation"); +MODULE_PARM (dasd, "1-" __MODULE_STRING (DASD_MAX_DEVICES) "s"); +#ifdef CONFIG_DASD_MDSK +MODULE_PARM (dasd_force_mdsk, "1-" __MODULE_STRING (DASD_MAX_DEVICES) "s"); +#endif +#endif + /* Prototypes for the functions called from external */ -static ssize_t dasd_read (struct file *, char *, size_t, loff_t *); -static ssize_t dasd_write (struct file *, const char *, size_t, loff_t *); -static int dasd_ioctl (struct inode *, struct file *, unsigned int, unsigned long); -static int dasd_open (struct inode *, struct file *); -static int dasd_fsync (struct file *, struct dentry *); -static int dasd_release (struct inode *, struct file *); +void dasd_partn_detect (int di); +int devindex_from_devno (int devno); +int dasd_is_accessible (int devno); +void dasd_add_devno_to_ranges (int devno); + +#ifdef CONFIG_DASD_MDSK +extern int dasd_force_mdsk_flag[DASD_MAX_DEVICES]; +extern void do_dasd_mdsk_interrupt (struct pt_regs *regs, __u16 code); +extern int dasd_parse_module_params (void); +extern void (**ext_mdisk_int) (void); +#endif + void dasd_debug (unsigned long tag); void dasd_profile_add (cqr_t *cqr); void dasd_proc_init (void); -static struct file_operations dasd_file_operations; +static int dasd_format (int dev, format_data_t * fdata); + +static struct file_operations dasd_device_operations; spinlock_t dasd_lock; /* general purpose lock for the dasd driver */ /* All asynchronous I/O should waint on this wait_queue */ struct wait_queue *dasd_waitq = NULL; -static int dasd_autodetect = 1; -static int dasd_devno[DASD_MAX_DEVICES] = -{0,}; -static int dasd_count = 0; - extern dasd_chanq_t *cq_head; +extern int dasd_probeonly; -static int -dasd_get_hexdigit (char c) -{ - if ((c >= '0') && (c <= '9')) - return c - '0'; - if ((c >= 'a') && (c <= 'f')) - return c + 10 - 'a'; - if ((c >= 'A') && (c <= 'F')) - return c + 10 - 'A'; - return -1; -} +debug_info_t *dasd_debug_info; -/* sets the string pointer after the next comma */ -static void -dasd_scan_for_next_comma (char **strptr) -{ - while (((**strptr) != ',') && ((**strptr)++)) - (*strptr)++; +extern dasd_information_t **dasd_information; - /* set the position AFTER the comma */ - if (**strptr == ',') - (*strptr)++; -} +dasd_information_t *dasd_info[DASD_MAX_DEVICES] = +{NULL,}; +static struct hd_struct dd_hdstruct[DASD_MAX_DEVICES << PARTN_BITS]; +static int dasd_blks[256] = +{0,}; +static int dasd_secsize[256] = +{0,}; +static int dasd_blksize[256] = +{0,}; +static int dasd_maxsecs[256] = +{0,}; -/*sets the string pointer after the next comma, if a parse error occured */ -static int -dasd_get_next_int (char **strptr) +void +dasd_geninit (struct gendisk *dd) { - int j, i = -1; /* for cosmetic reasons first -1, then 0 */ - if (isxdigit (**strptr)) { - for (i = 0; isxdigit (**strptr);) { - i <<= 4; - j = dasd_get_hexdigit (**strptr); - if (j == -1) { - PRINT_ERR ("no integer: skipping range.\n"); - dasd_scan_for_next_comma (strptr); - i = -1; - break; - } - i += j; - (*strptr)++; - if (i > 0xffff) { - PRINT_ERR (" value too big, skipping range.\n"); - dasd_scan_for_next_comma (strptr); - i = -1; - break; - } - } - } - return i; } -static inline int -devindex_from_devno (int devno) +struct gendisk dd_gendisk = { - int i; - for (i = 0; i < dasd_count; i++) { - if (dasd_devno[i] == devno) - return i; - } - if (dasd_autodetect) { - if (dasd_count < DASD_MAX_DEVICES) { - dasd_devno[dasd_count] = devno; - return dasd_count++; - } - return -EOVERFLOW; - } - return -ENODEV; -} + major:MAJOR_NR, /* Major number */ + major_name:"dasd", /* Major name */ + minor_shift:PARTN_BITS, /* Bits to shift to get real from partn */ + max_p:1 << PARTN_BITS, /* Number of partitions per real */ + max_nr:0, /* number */ + init:dasd_geninit, + part:dd_hdstruct, /* hd struct */ + sizes:dasd_blks, /* sizes in blocks */ + nr_real:0, + real_devices:NULL, /* internal */ + next:NULL /* next */ +}; -/* returns 1, if dasd_no is in the specified ranges, otherwise 0 */ -static inline int -dasd_is_accessible (int devno) -{ - return (devindex_from_devno (devno) >= 0); -} +static atomic_t bh_scheduled = ATOMIC_INIT (0); -/* dasd_insert_range skips ranges, if the start or the end is -1 */ -static void -dasd_insert_range (int start, int end) +void +dasd_schedule_bh (void (*func) (void)) { - int curr; - FUNCTION_ENTRY ("dasd_insert_range"); - if (dasd_count >= DASD_MAX_DEVICES) { - PRINT_ERR (" too many devices specified, ignoring some.\n"); - FUNCTION_EXIT ("dasd_insert_range"); - return; - } - if ((start == -1) || (end == -1)) { - PRINT_ERR ("invalid format of parameter, skipping range\n"); - FUNCTION_EXIT ("dasd_insert_range"); + static struct tq_struct dasd_tq = + {0,}; + /* Protect against rescheduling, when already running */ + if (atomic_compare_and_swap (0, 1, &bh_scheduled)) return; - } - if (end < start) { - PRINT_ERR (" ignoring range from %x to %x - start value " \ - "must be less than end value.\n", start, end); - FUNCTION_EXIT ("dasd_insert_range"); + dasd_tq.routine = (void *) (void *) func; + queue_task (&dasd_tq, &tq_immediate); + mark_bh (IMMEDIATE_BH); return; } -/* concurrent execution would be critical, but will not occur here */ - for (curr = start; curr <= end; curr++) { - if (dasd_is_accessible (curr)) { - PRINT_WARN (" %x is already in list as device %d\n", - curr, devindex_from_devno (curr)); - } - dasd_devno[dasd_count] = curr; - dasd_count++; - if (dasd_count >= DASD_MAX_DEVICES) { - PRINT_ERR (" too many devices specified, ignoring some.\n"); - break; - } - } - PRINT_INFO (" added dasd range from %x to %x.\n", - start, dasd_devno[dasd_count - 1]); - - FUNCTION_EXIT ("dasd_insert_range"); -} - -void -dasd_setup (char *str, int *ints) -{ - int devno, devno2; - - FUNCTION_ENTRY ("dasd_setup"); - dasd_autodetect = 0; - while (*str && *str != 1) { - if (!isxdigit (*str)) { - str++; /* to avoid looping on two commas */ - PRINT_ERR (" kernel parameter in invalid format.\n"); - continue; - } - devno = dasd_get_next_int (&str); - - /* range was skipped? -> scan for comma has been done */ - if (devno == -1) - continue; - - if (*str == ',') { - str++; - dasd_insert_range (devno, devno); - continue; - } - if (*str == '-') { - str++; - devno2 = dasd_get_next_int (&str); - if (devno2 == -1) { - PRINT_ERR (" invalid character in " \ - "kernel parameters."); - } else { - dasd_insert_range (devno, devno2); - } - dasd_scan_for_next_comma (&str); - continue; - } - if (*str == 0) { - dasd_insert_range (devno, devno); - break; - } - PRINT_ERR (" unexpected character in kernel parameter, " \ - "skipping range.\n"); - } - FUNCTION_EXIT ("dasd_setup"); -} - -static void -dd_geninit (struct gendisk *ignored) -{ - FUNCTION_ENTRY ("dd_geninit"); - FUNCTION_EXIT ("dd_geninit"); -} - -static struct hd_struct dd_hdstruct[DASD_MAX_DEVICES << PARTN_BITS]; -static int dd_blocksizes[DASD_MAX_DEVICES << PARTN_BITS]; - -struct gendisk dd_gendisk = -{ - MAJOR_NR, /* Major number */ - "dd", /* Major name */ - PARTN_BITS, /* Bits to shift to get real from partn */ - 1 << PARTN_BITS, /* Number of partitions per real */ - DASD_MAX_DEVICES, /* maximum number of real */ - dd_geninit, /* init function */ - dd_hdstruct, /* hd struct */ - dd_blocksizes, /* block sizes */ - 0, /* number */ - NULL, /* internal */ - NULL /* next */ - -}; void sleep_done (struct semaphore *sem) @@ -288,104 +172,49 @@ #ifdef CONFIG_DASD_ECKD extern dasd_operations_t dasd_eckd_operations; #endif /* CONFIG_DASD_ECKD */ +#ifdef CONFIG_DASD_FBA +extern dasd_operations_t dasd_fba_operations; +#endif /* CONFIG_DASD_FBA */ +#ifdef CONFIG_DASD_MDSK +extern dasd_operations_t dasd_mdsk_operations; +#endif /* CONFIG_DASD_MDSK */ dasd_operations_t *dasd_disciplines[] = { #ifdef CONFIG_DASD_ECKD - &dasd_eckd_operations + &dasd_eckd_operations, #endif /* CONFIG_DASD_ECKD */ +#ifdef CONFIG_DASD_FBA + &dasd_fba_operations, +#endif /* CONFIG_DASD_FBA */ +#ifdef CONFIG_DASD_MDSK + &dasd_mdsk_operations, +#endif /* CONFIG_DASD_MDSK */ +#ifdef CONFIG_DASD_CKD + &dasd_ckd_operations, +#endif /* CONFIG_DASD_CKD */ + NULL }; char *dasd_name[] = { #ifdef CONFIG_DASD_ECKD - "ECKD" + "ECKD", #endif /* CONFIG_DASD_ECKD */ +#ifdef CONFIG_DASD_FBA + "FBA", +#endif /* CONFIG_DASD_FBA */ +#ifdef CONFIG_DASD_MDSK + "MDSK", +#endif /* CONFIG_DASD_MDSK */ +#ifdef CONFIG_DASD_CKD + "CKD", +#endif /* CONFIG_DASD_CKD */ + "END" }; -dasd_information_t *dasd_info[DASD_MAX_DEVICES] = -{NULL,}; - -static int dasd_blks[256] = -{0,}; -static int dasd_secsize[256] = -{0,}; -static int dasd_blksize[256] = -{0,}; -static int dasd_maxsecs[256] = -{0,}; - -void -fill_sizes (int di) -{ - int rc; - int minor; - rc = dasd_disciplines[dasd_info[di]->type]->fill_sizes (di); - switch (rc) { - case -EMEDIUMTYPE: - dasd_info[di]->flags |= DASD_NOT_FORMATTED; - break; - } - PRINT_INFO ("%ld kB <- 'soft'-block: %d, hardsect %d Bytes\n", - dasd_info[di]->sizes.kbytes, - dasd_info[di]->sizes.bp_block, - dasd_info[di]->sizes.bp_sector); - switch (dasd_info[di]->type) { -#ifdef CONFIG_DASD_ECKD - case dasd_eckd: - dasd_info[di]->sizes.first_sector = - 3 << dasd_info[di]->sizes.s2b_shift; - break; -#endif /* CONFIG_DASD_ECKD */ - default: - INTERNAL_CHECK ("Unknown dasd type %d\n", dasd_info[di]->type); - } - minor = di << PARTN_BITS; - dasd_blks[minor] = dasd_info[di]->sizes.kbytes; - dasd_secsize[minor] = dasd_info[di]->sizes.bp_sector; - dasd_blksize[minor] = dasd_info[di]->sizes.bp_block; - dasd_maxsecs[minor] = 252<sizes.s2b_shift; - dasd_blks[minor + 1] = dasd_info[di]->sizes.kbytes - - (dasd_info[di]->sizes.first_sector >> 1); - dasd_secsize[minor + 1] = dasd_info[di]->sizes.bp_sector; - dasd_blksize[minor + 1] = dasd_info[di]->sizes.bp_block; - dasd_maxsecs[minor+1] = 252<sizes.s2b_shift; -} - -int -dasd_format (int dev, format_data_t * fdata) -{ - int rc; - int devindex = DEVICE_NR (dev); - PRINT_INFO ("Format called with devno %x\n", dev); - if (MINOR (dev) & (0xff >> (8 - PARTN_BITS))) { - PRINT_WARN ("Can't format partition! minor %x %x\n", - MINOR (dev), 0xff >> (8 - PARTN_BITS)); - return -EINVAL; - } - down (&dasd_info[devindex]->sem); - if (dasd_info[devindex]->open_count == 1) { - rc = dasd_disciplines[dasd_info[devindex]->type]-> - dasd_format (devindex, fdata); - if (rc) { - PRINT_WARN ("Formatting failed rc=%d\n", rc); - } - } else { - PRINT_WARN ("device is open! %d\n", dasd_info[devindex]->open_count); - rc = -EINVAL; - } - if (!rc) { - fill_sizes (devindex); - dasd_info[devindex]->flags &= ~DASD_NOT_FORMATTED; - } else { - dasd_info[devindex]->flags |= DASD_NOT_FORMATTED; - } - up (&dasd_info[devindex]->sem); - return rc; -} - -static inline int -do_dasd_ioctl (struct inode *inp, unsigned int no, unsigned long data) +static int +do_dasd_ioctl (struct inode *inp, /* unsigned */ int no, unsigned long data) { int rc; int di; @@ -415,14 +244,10 @@ switch (no) { case BLKGETSIZE:{ /* Return device size */ - unsigned long blocks; - if (inp->i_rdev & 0x01) { - blocks = (dev->sizes.blocks - 3) << - dev->sizes.s2b_shift; - } else { - blocks = dev->sizes.kbytes << dev->sizes.s2b_shift; - } - rc = copy_to_user ((long *) data, &blocks, sizeof (long)); + int blocks = dasd_blks[MINOR (inp->i_rdev)] << 1; + rc = copy_to_user ((long *) data, + &blocks, + sizeof (long)); break; } case BLKFLSBUF:{ @@ -440,17 +265,30 @@ break; } case BLKRRPART:{ - INTERNAL_CHECK ("BLKRPART not implemented%s", ""); - rc = -EINVAL; + dasd_partn_detect (di); + rc = 0; + break; + } + case BIODASDRLB:{ + rc = copy_to_user ((int *) data, + &dasd_info[di]->sizes.label_block, + sizeof (int)); + break; + } + case BLKGETBSZ:{ + rc = copy_to_user ((int *) data, + &dasd_info[di]->sizes.bp_block, + sizeof (int)); break; } case HDIO_GETGEO:{ - INTERNAL_CHECK ("HDIO_GETGEO not implemented%s", ""); - rc = -EINVAL; + struct hd_geometry geo; + dasd_disciplines[dev->type]->fill_geometry (di, &geo); + rc = copy_to_user ((struct hd_geometry *) data, &geo, + sizeof (struct hd_geometry)); break; } RO_IOCTLS (inp->i_rdev, data); - case BIODASDRSID:{ rc = copy_to_user ((void *) data, &(dev->info.sid_data), @@ -462,13 +300,17 @@ int xlt; rc = copy_from_user (&xlt, (void *) data, sizeof (int)); +#if 0 PRINT_INFO("Xlating %d to",xlt); +#endif if (rc) break; - if (MINOR (inp->i_rdev) & 1) - offset = 3; + offset = dd_gendisk.part[MINOR (inp->i_rdev)].start_sect >> + dev->sizes.s2b_shift; xlt += offset; +#if 0 printk(" %d \n",xlt); +#endif rc = copy_to_user ((void *) data, &xlt, sizeof (int)); break; @@ -476,6 +318,7 @@ case BIODASDFORMAT:{ /* fdata == NULL is a valid arg to dasd_format ! */ format_data_t *fdata = NULL; + PRINT_WARN ("called format ioctl\n"); if (data) { fdata = kmalloc (sizeof (format_data_t), GFP_ATOMIC); @@ -495,6 +338,7 @@ break; } default: + PRINT_WARN ("unknown ioctl number %08x %08lx\n", no, BIODASDFORMAT); rc = -EINVAL; break; } @@ -533,13 +377,58 @@ wake_up (&dasd_waitq); } + +int +dasd_watch_volume (int di) +{ + int rc = 0; + + return rc; +} + +void +dasd_watcher (void) +{ + int i = 0; + int rc; + do { + for ( i = 0; i < DASD_MAX_DEVICES; i++ ) { + if ( dasd_info [i] ) { + rc = dasd_watch_volume ( i ); + } + } + interruptible_sleep_on(&dasd_waitq); + } while(1); +} + int -dasd_unregister_dasd (int irq, dasd_type_t dt, dev_info_t * info) +dasd_unregister_dasd (int di) { int rc = 0; - FUNCTION_ENTRY ("dasd_unregister_dasd"); - INTERNAL_CHECK ("dasd_unregister_dasd not implemented%s\n", ""); - FUNCTION_EXIT ("dasd_unregister_dasd"); + int minor; + int i; + + minor = di << PARTN_BITS; + if (!dasd_info[di]) { /* devindex is not free */ + INTERNAL_CHECK ("trying to free unallocated device %d\n", di); + return -ENODEV; + } + /* delete all that partition stuff */ + for (i = 0; i < (1 << PARTN_BITS); i++) { + dasd_blks[minor] = 0; + dasd_secsize[minor + i] = 0; + dasd_blksize[minor + i] = 0; + dasd_maxsecs[minor + i] = 0; + } + /* reset DASD to unknown statuss */ + atomic_set (&dasd_info[di]->status, DASD_INFO_STATUS_UNKNOWN); + + free_irq (dasd_info[di]->info.irq, &(dasd_info[di]->dev_status)); + if (dasd_info[di]->rdc_data) + kfree (dasd_info[di]->rdc_data); + kfree (dasd_info[di]); + PRINT_INFO ("%04d deleted from list of valid DASDs\n", + dasd_info[di]->info.devno); return rc; } @@ -548,8 +437,17 @@ check_type (dev_info_t * info) { dasd_type_t type = dasd_none; + int di; FUNCTION_ENTRY ("check_type"); + di = devindex_from_devno (info->devno); + +#ifdef CONFIG_DASD_MDSK + if (MACHINE_IS_VM && dasd_force_mdsk_flag[di] == 1) { + type = dasd_mdsk; + } else +#endif /* CONFIG_DASD_MDSK */ + #ifdef CONFIG_DASD_ECKD if (MATCH (info, == 0x3990, ||1, == 0x3390, ||1) || MATCH (info, == 0x9343, ||1, == 0x9345, ||1) || @@ -557,9 +455,20 @@ type = dasd_eckd; } else #endif /* CONFIG_DASD_ECKD */ +#ifdef CONFIG_DASD_FBA + if (MATCH (info, == 0x6310, ||1, == 0x9336, ||1)) { + type = dasd_fba; + } else +#endif /* CONFIG_DASD_FBA */ +#ifdef CONFIG_DASD_MDSK + if (MACHINE_IS_VM) { + type = dasd_mdsk; + } else +#endif /* CONFIG_DASD_MDSK */ { type = dasd_none; } + FUNCTION_EXIT ("check_type"); return type; } @@ -567,7 +476,7 @@ static int dasd_read_characteristics (dasd_information_t * info) { - int rc; + int rc = 0; int ct = 0; dev_info_t *di; dasd_type_t dt; @@ -598,13 +507,25 @@ #ifdef CONFIG_DASD_ECKD case dasd_eckd: ct = 64; + rc = read_dev_chars (info->info.irq, + (void *) &(info->rdc_data), ct); break; #endif /* CONFIG_DASD_ECKD */ +#ifdef CONFIG_DASD_FBA + case dasd_fba: + ct = 32; + rc = read_dev_chars (info->info.irq, + (void *) &(info->rdc_data), ct); + break; +#endif /* CONFIG_DASD_FBA */ +#ifdef CONFIG_DASD_MDSK + case dasd_mdsk: + ct = 0; + break; +#endif /* CONFIG_DASD_FBA */ default: INTERNAL_ERROR ("don't know dasd type %d\n", dt); } - rc = read_dev_chars (info->info.irq, - (void *) &(info->rdc_data), ct); if (rc) { PRINT_WARN ("RDC resulted in rc=%d\n", rc); } @@ -613,28 +534,12 @@ } /* How many sectors must be in a request to dequeue it ? */ -#define QUEUE_BLOCKS 100 +#define QUEUE_BLOCKS 25 #define QUEUE_SECTORS (QUEUE_BLOCKS << dasd_info[di]->sizes.s2b_shift) /* How often to retry an I/O before raising an error */ #define DASD_MAX_RETRIES 5 -static atomic_t bh_scheduled = ATOMIC_INIT (0); - -static inline void -schedule_bh (void (*func) (void)) -{ - static struct tq_struct dasd_tq = - {0,}; - /* Protect against rescheduling, when already running */ - if (atomic_compare_and_swap (0, 1, &bh_scheduled)) - return; - dasd_tq.routine = (void *) (void *) func; - queue_task (&dasd_tq, &tq_immediate); - mark_bh (IMMEDIATE_BH); - return; -} - static inline cqr_t * dasd_cqr_from_req (struct request *req) @@ -652,8 +557,9 @@ if (!info) return NULL; /* if applicable relocate block */ - if (MINOR (req->rq_dev) & 0x1) { - req->sector += info->sizes.first_sector; + if (MINOR (req->rq_dev) & ((1 << PARTN_BITS) - 1)) { + req->sector += + dd_gendisk.part[MINOR (req->rq_dev)].start_sect; } /* Now check for consistency */ if (!req->nr_sectors) { @@ -677,12 +583,7 @@ #ifdef DASD_PROFILE asm volatile ("STCK %0":"=m" (cqr->buildclk)); #endif /* DASD_PROFILE */ - if (atomic_compare_and_swap (CQR_STATUS_EMPTY, - CQR_STATUS_FILLED, - &cqr->status)) { - PRINT_WARN ("cqr from req stat changed %d\n", - atomic_read (&cqr->status)); - } + ACS (cqr->status, CQR_STATUS_EMPTY, CQR_STATUS_FILLED); } return cqr; } @@ -694,24 +595,22 @@ int retries = DASD_SSCH_RETRIES; int di, irq; - dasd_debug (cqr); /* cqr */ + dasd_debug ((unsigned long) cqr); /* cqr */ if (!cqr) { PRINT_WARN ("(start_IO) no cqr passed\n"); return -EINVAL; } - if (cqr->magic != DASD_MAGIC) { - PRINT_WARN ("(start_IO) magic number mismatch\n"); - return -EINVAL; - } - if (atomic_compare_and_swap (CQR_STATUS_QUEUED, - CQR_STATUS_IN_IO, - &cqr->status)) { - PRINT_WARN ("start_IO: status changed %d\n", - atomic_read (&cqr->status)); - atomic_set (&cqr->status, CQR_STATUS_ERROR); +#ifdef CONFIG_DASD_MDSK + if (cqr->magic == MDSK_MAGIC) { + return dasd_mdsk_start_IO (cqr); + } +#endif /* CONFIG_DASD_MDSK */ + if (cqr->magic != DASD_MAGIC && cqr->magic != ERP_MAGIC) { + PRINT_ERR ("(start_IO) magic number mismatch\n"); return -EINVAL; } + ACS (cqr->status, CQR_STATUS_QUEUED, CQR_STATUS_IN_IO); di = cqr->devindex; irq = dasd_info[di]->info.irq; do { @@ -732,10 +631,12 @@ cqr, dasd_info[di]->info.devno, retries); break; case -EBUSY: /* set up timer, try later */ + PRINT_WARN ("cqr %p: 0x%04x busy, %d retries left\n", cqr, dasd_info[di]->info.devno, retries); break; default: + PRINT_WARN ("cqr %p: 0x%04x %d, %d retries left\n", cqr, rc, dasd_info[di]->info.devno, retries); @@ -743,13 +644,7 @@ } } while (rc && --retries); if (rc) { - if (atomic_compare_and_swap (CQR_STATUS_IN_IO, - CQR_STATUS_ERROR, - &cqr->status)) { - PRINT_WARN ("start_IO:(done) status changed %d\n", - atomic_read (&cqr->status)); - atomic_set (&cqr->status, CQR_STATUS_ERROR); - } + ACS (cqr->status, CQR_STATUS_IN_IO, CQR_STATUS_ERROR); } return rc; } @@ -773,8 +668,11 @@ dasd_dump_sense (devstat_t * stat) { int sl, sct; + if (!stat->flag | DEVSTAT_FLAG_SENSE_AVAIL) { + PRINT_INFO ("I/O status w/o sense data\n"); + } else { printk (KERN_INFO PRINTK_HEADER - "-------------------I/O resulted in unit check:-----------\n"); + "-------------------I/O result:-----------\n"); for (sl = 0; sl < 4; sl++) { printk (KERN_INFO PRINTK_HEADER "Sense:"); for (sct = 0; sct < 8; sct++) { @@ -784,35 +682,65 @@ printk ("\n"); } } +} + +int +register_dasd_last (int di) +{ + int rc = 0; + int minor; + int i; + + rc = dasd_disciplines[dasd_info[di]->type]->fill_sizes_last (di); + if (!rc) { + ACS (dasd_info[di]->status, + DASD_INFO_STATUS_DETECTED, DASD_INFO_STATUS_FORMATTED); + } else { /* -EMEDIUMTYPE: */ + ACS (dasd_info[di]->status, + DASD_INFO_STATUS_DETECTED, DASD_INFO_STATUS_ANALYSED); + } + PRINT_INFO ("%04X (dasd%c):%ld kB <- block: %d on sector %d B\n", + dasd_info[di]->info.devno, + 'a' + di, + dasd_info[di]->sizes.kbytes, + dasd_info[di]->sizes.bp_block, + dasd_info[di]->sizes.bp_sector); + minor = di << PARTN_BITS; + dasd_blks[minor] = dasd_info[di]->sizes.kbytes; + for (i = 0; i < (1 << PARTN_BITS); i++) { + dasd_secsize[minor + i] = dasd_info[di]->sizes.bp_sector; + dasd_blksize[minor + i] = dasd_info[di]->sizes.bp_block; + dasd_maxsecs[minor + i] = 252 << dasd_info[di]->sizes.s2b_shift; + } + return rc; +} + +void +dasd_partn_detect (int di) +{ + int minor = di << PARTN_BITS; + while (atomic_read (&dasd_info[di]->status) != + DASD_INFO_STATUS_FORMATTED) { + interruptible_sleep_on(&dasd_info[di]->wait_q); + } + dd_gendisk.part[minor].nr_sects = dasd_info[di]->sizes.kbytes << 1; + resetup_one_dev (&dd_gendisk, di); +} void dasd_do_chanq (void) { dasd_chanq_t *qp = NULL; - cqr_t *cqr; + cqr_t *cqr, *next; long flags; int irq; int tasks; + atomic_set (&bh_scheduled, 0); dasd_debug (0xc4c40000); /* DD */ - while ((tasks = atomic_read(&chanq_tasks)) != 0) { -/* initialization and wraparound */ - if (qp == NULL) { - dasd_debug (0xc4c46df0); /* DD_0 */ - qp = cq_head; - if (!qp) { - dasd_debug (0xc4c46ff1); /* DD?1 */ - dasd_debug (tasks); - PRINT_ERR("Mismatch of NULL queue pointer and " - "still %d chanq_tasks to do!!\n" - "Please send output of /proc/dasd/debug " - "to Linux390@de.ibm.com\n", tasks); - atomic_set(&chanq_tasks,0); - break; - } - } + for (qp = cq_head; qp != NULL;) { /* Get first request */ - dasd_debug (qp); /* qp */ + dasd_debug ((unsigned long) qp); cqr = (cqr_t *) (qp->head); /* empty queue -> dequeue and proceed */ if (!cqr) { @@ -823,9 +751,11 @@ } /* process all requests on that queue */ do { - cqr_t *next; + next = NULL; dasd_debug ((unsigned long) cqr); /* cqr */ - if (cqr->magic != DASD_MAGIC) { + if (cqr->magic != DASD_MAGIC && + cqr->magic != MDSK_MAGIC && + cqr->magic != ERP_MAGIC) { dasd_debug (0xc4c46ff2); /* DD?2 */ panic ( PRINTK_HEADER "do_cq:" "magic mismatch %p -> %x\n", @@ -837,51 +767,106 @@ switch (atomic_read (&cqr->status)) { case CQR_STATUS_IN_IO: dasd_debug (0xc4c4c9d6); /* DDIO */ - cqr = NULL; break; case CQR_STATUS_QUEUED: dasd_debug (0xc4c4e2e3); /* DDST */ - if (dasd_start_IO (cqr) == 0) { - atomic_dec (&chanq_tasks); - cqr = NULL; + if (dasd_start_IO (cqr) != 0) { + PRINT_WARN("start_io failed\n"); } break; - case CQR_STATUS_ERROR: + case CQR_STATUS_ERROR:{ dasd_debug (0xc4c4c5d9); /* DDER */ - dasd_dump_sense (cqr->dstat); if ( ++ cqr->retries < 2 ) { atomic_set (&cqr->status, CQR_STATUS_QUEUED); - dasd_debug (0xc4c4e2e3); /* DDST */ + dasd_debug (0xc4c4e2e3); if (dasd_start_IO (cqr) == 0) { - atomic_dec (&chanq_tasks); - cqr = NULL; + atomic_dec (&qp-> + dirty_requests); + break; } + } + ACS (cqr->status, + CQR_STATUS_ERROR, + CQR_STATUS_FAILED); + break; + } + case CQR_STATUS_ERP_PEND:{ + /* This case is entered, when an interrupt + ended with a condittion */ + dasd_erp_action_t erp_action; + erp_t *erp = NULL; + + if ( cqr -> magic != ERP_MAGIC ) { + erp = request_er (); + if (erp == NULL) { + PRINT_WARN ("No memory for ERP%s\n", ""); + break; + } + memset (erp, 0, sizeof (erp_t)); + erp->cqr.magic = ERP_MAGIC; + erp->cqr.int4cqr = cqr; + erp->cqr.devindex= cqr->devindex; + erp_action = dasd_erp_action (cqr); + if (erp_action) { + PRINT_WARN ("Taking ERP action %p\n", erp_action); + erp_action (erp); + } + dasd_chanq_enq_head(qp, (cqr_t *) erp); + next = (cqr_t *) erp; } else { - atomic_set (&cqr->status, + PRINT_WARN("ERP_ACTION failed\n"); + ACS (cqr->status, + CQR_STATUS_ERP_PEND, CQR_STATUS_FAILED); } break; - case CQR_STATUS_DONE: + } + case CQR_STATUS_ERP_ACTIVE: + break; + case CQR_STATUS_DONE:{ next = cqr->next; - dasd_debug (0xc4c49692); /* DDok */ + if (cqr->magic == DASD_MAGIC) { + dasd_debug (0xc4c49692); + } else if (cqr->magic == ERP_MAGIC) { + dasd_erp_action_t erp_postaction; + erp_t *erp = (erp_t *) cqr; + erp_postaction = + dasd_erp_postaction (erp); + if (erp_postaction) + erp_postaction (erp); + atomic_dec (&qp->dirty_requests); + } else if (cqr->magic == MDSK_MAGIC) { + } else { + PRINT_WARN ("unknown magic%s\n", ""); + } dasd_end_cqr (cqr, 1); - atomic_dec (&chanq_tasks); - cqr = next; break; - case CQR_STATUS_FAILED: + } + case CQR_STATUS_FAILED: { next = cqr->next; - dasd_debug (0xc4c47a7a); /* DD:: */ + if (cqr->magic == DASD_MAGIC) { + dasd_debug (0xc4c49692); + } else if (cqr->magic == ERP_MAGIC) { + dasd_erp_action_t erp_postaction; + erp_t *erp = (erp_t *) cqr; + erp_postaction = + dasd_erp_postaction (erp); + if (erp_postaction) + erp_postaction (erp); + } else if (cqr->magic == MDSK_MAGIC) { + } else { + PRINT_WARN ("unknown magic%s\n", ""); + } dasd_end_cqr (cqr, 0); - atomic_dec (&chanq_tasks); - cqr = next; + atomic_dec (&qp->dirty_requests); break; + } default: PRINT_WARN ("unknown cqrstatus\n"); - cqr = NULL; } s390irq_spin_unlock_irqrestore (irq, flags); - } while (cqr); + } while ((cqr = next) != NULL); qp = qp->next_q; } spin_lock (&io_request_lock); @@ -901,20 +886,15 @@ void do_dasd_request (void) { - struct request *req; - struct request *prev; - struct request *next; - char broken[DASD_MAX_DEVICES] = {0,}; - char busy[DASD_MAX_DEVICES] = {0,}; - int di; + struct request *req, *next, *prev; cqr_t *cqr; - long caller; dasd_chanq_t *q; long flags; - int irq; + int di, irq; + int broken, busy; dasd_debug (0xc4d90000); /* DR */ - dasd_debug (__builtin_return_address(0)); /* calleraddres */ + dasd_debug ((unsigned long) __builtin_return_address (0)); prev = NULL; for (req = CURRENT; req != NULL; req = next) { next = req->next; @@ -926,12 +906,11 @@ irq = dasd_info[di]->info.irq; s390irq_spin_lock_irqsave (irq, flags); q = &dasd_info[di]->queue; - busy[di] = busy[di]||(atomic_read(&q->flags)&DASD_CHANQ_BUSY); - if ( !busy[di] || - ((!broken[di]) && (req->nr_sectors >= QUEUE_SECTORS))) { -#if 0 - if ( q -> queued_requests < QUEUE_THRESHOLD ) { -#endif + busy = atomic_read (&q->flags) & DASD_CHANQ_BUSY; + broken = atomic_read (&q->flags) & DASD_REQUEST_Q_BROKEN; + if (!busy || + (!broken && + (req->nr_sectors >= QUEUE_SECTORS))) { if (prev) { prev->next = next; } else { @@ -950,24 +929,22 @@ } dasd_debug ((unsigned long) cqr); /* cqr */ dasd_chanq_enq (q, cqr); - if (!(atomic_read (&q->flags) & - DASD_CHANQ_ACTIVE)) { + if (!(atomic_read (&q->flags) & DASD_CHANQ_ACTIVE)) { cql_enq_head (q); } - if (!busy[di]) { - dasd_debug (0xc4d9e2e3); /* DRST */ - if (dasd_start_IO (cqr) != 0) { - atomic_inc (&chanq_tasks); - schedule_bh (dasd_do_chanq); - busy[di] = 1; + if (!busy) { + atomic_clear_mask (DASD_REQUEST_Q_BROKEN, + &q->flags); + if ( atomic_read (&q->dirty_requests) == 0 ) { + if (dasd_start_IO (cqr) == 0) { + } else { + dasd_schedule_bh (dasd_do_chanq); } } -#if 0 } -#endif } else { dasd_debug (0xc4d9c2d9); /* DRBR */ - broken[di] = 1; + atomic_set_mask (DASD_REQUEST_Q_BROKEN, &q->flags); prev = req; } cont: @@ -983,60 +960,88 @@ int ip; cqr_t *cqr; int done_fast_io = 0; + dasd_era_t era; + static int counter = 0; dasd_debug (0xc4c80000); /* DH */ - if (!stat) + if (!stat) { PRINT_ERR ("handler called without devstat"); + return; + } ip = stat->intparm; dasd_debug (ip); /* intparm */ - switch (ip) { /* filter special intparms... */ - case 0x00000000: /* no intparm: unsolicited interrupt */ + if (!ip) { /* no intparm: unsolicited interrupt */ dasd_debug (0xc4c8a489); /* DHui */ - PRINT_INFO ("Unsolicited interrupt on device %04X\n", + PRINT_INFO ("%04X caught unsolicited interrupt\n", stat->devno); - dasd_dump_sense (stat); return; - default: + } if (ip & 0x80000001) { dasd_debug (0xc4c8a489); /* DHui */ - PRINT_INFO ("Spurious interrupt %08x on device %04X\n", - ip, stat->devno); + PRINT_INFO ("%04X caught spurious interrupt with parm %08x\n", + stat->devno, ip); return; } cqr = (cqr_t *) ip; - if (cqr->magic != DASD_MAGIC) { - dasd_debug (0xc4c86ff1); /* DH?1 */ - PRINT_ERR ("handler:magic mismatch on %p %08x\n", - cqr, cqr->magic); - return; - } + if (cqr->magic == DASD_MAGIC || cqr->magic == ERP_MAGIC) { asm volatile ("STCK %0":"=m" (cqr->stopclk)); - if (stat->cstat == 0x00 && stat->dstat == 0x0c) { + if ((stat->cstat == 0x00 && + stat->dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END)) || + ((era = dasd_erp_examine (cqr, stat)) == dasd_era_none)) { dasd_debug (0xc4c89692); /* DHok */ - if (atomic_compare_and_swap (CQR_STATUS_IN_IO, - CQR_STATUS_DONE, - &cqr->status)) { - PRINT_WARN ("handler: cqrstat changed%d\n", - atomic_read (&cqr->status)); +#if 0 + if ( counter < 20 || cqr -> magic == ERP_MAGIC) { + counter ++; +#endif + ACS (cqr->status, CQR_STATUS_IN_IO, CQR_STATUS_DONE); +#if 0 + } else { + counter=0; + PRINT_WARN ("Faking I/O error\n"); + ACS (cqr->status, CQR_STATUS_IN_IO, CQR_STATUS_ERP_PEND); + atomic_inc (&dasd_info[cqr->devindex]-> + queue.dirty_requests); + } +#endif + if (atomic_read (&dasd_info[cqr->devindex]->status) == + DASD_INFO_STATUS_DETECTED) { + register_dasd_last (cqr->devindex); + if ( dasd_info[cqr->devindex]->wait_q ) { + wake_up( &dasd_info[cqr->devindex]-> + wait_q); + } } - if (cqr->next) { + if (cqr->next && + (atomic_read (&cqr->next->status) == + CQR_STATUS_QUEUED)) { dasd_debug (0xc4c8e2e3); /* DHST */ - if (dasd_start_IO (cqr->next) == 0) + if (dasd_start_IO (cqr->next) == 0) { done_fast_io = 1; + } else { } - break; } + } else { /* only visited in case of error ! */ dasd_debug (0xc4c8c5d9); /* DHER */ + dasd_dump_sense (stat); if (!cqr->dstat) cqr->dstat = kmalloc (sizeof (devstat_t), GFP_ATOMIC); if (cqr->dstat) { memcpy (cqr->dstat, stat, sizeof (devstat_t)); } else { - PRINT_ERR ("no memory for dtstat\n"); + PRINT_ERR ("no memory for dstat\n"); } + atomic_inc (&dasd_info[cqr->devindex]-> + queue.dirty_requests); /* errorprocessing */ - atomic_set (&cqr->status, CQR_STATUS_ERROR); + if (era == dasd_era_fatal) { + PRINT_WARN ("ERP returned fatal error\n"); + ACS (cqr->status, + CQR_STATUS_IN_IO, CQR_STATUS_FAILED); + } else { + ACS (cqr->status, + CQR_STATUS_IN_IO, CQR_STATUS_ERP_PEND); + } } if (done_fast_io == 0) atomic_clear_mask (DASD_CHANQ_BUSY, @@ -1048,20 +1053,86 @@ dasd_wakeup (); } else if (! (cqr->options & DOIO_WAIT_FOR_INTERRUPT) ){ dasd_debug (0xc4c8a293); /* DHsl */ - atomic_inc (&chanq_tasks); - schedule_bh (dasd_do_chanq); + dasd_schedule_bh (dasd_do_chanq); } else { dasd_debug (0x64686f6f); /* DH_g */ dasd_debug (cqr->flags); /* DH_g */ } + } else { + dasd_debug (0xc4c86ff1); /* DH?1 */ + PRINT_ERR ("handler:magic mismatch on %p %08x\n", + cqr, cqr->magic); + return; + } dasd_debug (0xc4c86d6d); /* DHwu */ } static int +dasd_format (int dev, format_data_t * fdata) +{ + int rc; + int devindex = DEVICE_NR (dev); + dasd_chanq_t *q; + cqr_t *cqr; + int irq; + long flags; + PRINT_INFO ("%04X called format on %x\n", + dasd_info[devindex]->info.devno, dev); + if (MINOR (dev) & (0xff >> (8 - PARTN_BITS))) { + PRINT_WARN ("Can't format partition! minor %x %x\n", + MINOR (dev), 0xff >> (8 - PARTN_BITS)); + return -EINVAL; + } + down (&dasd_info[devindex]->sem); + atomic_set (&dasd_info[devindex]->status, + DASD_INFO_STATUS_UNKNOWN); + if (dasd_info[devindex]->open_count == 1) { + rc = dasd_disciplines[dasd_info[devindex]->type]-> + dasd_format (devindex, fdata); + if (rc) { + PRINT_WARN ("Formatting failed rc=%d\n", rc); + up (&dasd_info[devindex]->sem); + return rc; + } + } else { + PRINT_WARN ("device is open! %d\n", dasd_info[devindex]->open_count); + up (&dasd_info[devindex]->sem); + return -EINVAL; + } +#if DASD_PARANOIA > 1 + if (!dasd_disciplines[dasd_info[devindex]->type]->fill_sizes_first) { + INTERNAL_CHECK ("No fill_sizes for dt=%d\n", dasd_info[devindex]->type); + } else +#endif /* DASD_PARANOIA */ + { + ACS (dasd_info[devindex]->status, + DASD_INFO_STATUS_UNKNOWN, DASD_INFO_STATUS_DETECTED); + irq = dasd_info[devindex]->info.irq; + PRINT_INFO ("%04X reacessing, irq %x, index %d\n", + get_devno_by_irq (irq), irq, devindex); + s390irq_spin_lock_irqsave (irq, flags); + q = &dasd_info[devindex]->queue; + cqr = dasd_disciplines[dasd_info[devindex]->type]-> + fill_sizes_first (devindex); + dasd_chanq_enq (q, cqr); + if (!(atomic_read (&q->flags) & DASD_CHANQ_ACTIVE)) { + cql_enq_head (q); + } + dasd_schedule_bh (dasd_do_chanq); + s390irq_spin_unlock_irqrestore (irq, flags); + } + up (&dasd_info[devindex]->sem); + return rc; +} + +static int register_dasd (int irq, dasd_type_t dt, dev_info_t * info) { int rc = 0; int di; + unsigned long flags; + dasd_chanq_t *q; + cqr_t *cqr; static spinlock_t register_lock = SPIN_LOCK_UNLOCKED; spin_lock (®ister_lock); FUNCTION_ENTRY ("register_dasd"); @@ -1084,10 +1155,23 @@ memcpy (&(dasd_info[di]->info), info, sizeof (dev_info_t)); spin_lock_init (&dasd_info[di]->queue.f_lock); spin_lock_init (&dasd_info[di]->queue.q_lock); - atomic_set (&dasd_info[di]->queue.flags, 0); dasd_info[di]->type = dt; dasd_info[di]->irq = irq; dasd_info[di]->sem = MUTEX; +#ifdef CONFIG_DASD_MDSK + if (dt == dasd_mdsk) { + dasd_info[di]->rdc_data = kmalloc ( + sizeof (dasd_characteristics_t), GFP_ATOMIC); + if (!dasd_info[di]->rdc_data) { + PRINT_WARN ("No memory for char on irq %d\n", irq); + goto unalloc; + } + dasd_info[di]->rdc_data->mdsk.dev_nr = dasd_info[di]-> + info.devno; + dasd_info[di]->rdc_data->mdsk.rdc_len = + sizeof (dasd_mdsk_characteristics_t); + } else +#endif /* CONFIG_DASD_MDSK */ rc = dasd_read_characteristics (dasd_info[di]); if (rc) { PRINT_WARN ("RDC returned error %d\n", rc); @@ -1106,30 +1190,52 @@ rc = -ENODEV; goto unalloc; } +#ifdef CONFIG_DASD_MDSK + if (dt == dasd_mdsk) { + + } else +#endif /* CONFIG_DASD_MDSK */ rc = request_irq (irq, dasd_handler, 0, "dasd", &(dasd_info[di]->dev_status)); + ACS (dasd_info[di]->status, + DASD_INFO_STATUS_UNKNOWN, DASD_INFO_STATUS_DETECTED); if (rc) { #if DASD_PARANOIA > 0 printk (KERN_WARNING PRINTK_HEADER "Cannot register irq %d, rc=%d\n", irq, rc); -#endif /* DASD_DEBUG */ +#endif /* DASD_PARANOIA */ rc = -ENODEV; goto unalloc; } #if DASD_PARANOIA > 1 - if (!dasd_disciplines[dt]->fill_sizes) { + if (!dasd_disciplines[dt]->fill_sizes_first) { INTERNAL_CHECK ("No fill_sizes for dt=%d\n", dt); goto unregister; } #endif /* DASD_PARANOIA */ - fill_sizes (di); + irq = dasd_info[di]->info.irq; + PRINT_INFO ("%04X trying to access, irq %x, index %d\n", + get_devno_by_irq (irq), irq, di); + s390irq_spin_lock_irqsave (irq, flags); + q = &dasd_info[di]->queue; + cqr = dasd_disciplines[dt]->fill_sizes_first (di); + dasd_chanq_enq (q, cqr); + if (!(atomic_read (&q->flags) & DASD_CHANQ_ACTIVE)) { + cql_enq_head (q); + } + if (dasd_start_IO (cqr) != 0) { + dasd_schedule_bh (dasd_do_chanq); + } + s390irq_spin_unlock_irqrestore (irq, flags); + goto exit; unregister: free_irq (irq, &(dasd_info[di]->dev_status)); unalloc: kfree (dasd_info[di]); + dasd_info[di] = NULL; exit: spin_unlock (®ister_lock); FUNCTION_EXIT ("register_dasd"); @@ -1143,68 +1249,57 @@ dev_info_t info; dasd_type_t dt; - FUNCTION_ENTRY ("probe_for_dasd"); - rc = get_dev_info_by_irq (irq, &info); + if (rc == -ENODEV) { /* end of device list */ return rc; + } else if ((info.status & DEVSTAT_DEVICE_OWNED)) { + return -EBUSY; + } else if ((info.status & DEVSTAT_NOT_OPER)) { + return -ENODEV; } #if DASD_PARANOIA > 2 - if (rc) { + else { INTERNAL_CHECK ("unknown rc %d of get_dev_info", rc); return rc; } #endif /* DASD_PARANOIA */ - if ((info.status & DEVSTAT_NOT_OPER)) { + + dt = check_type (&info); /* make a first guess */ + + if (dt == dasd_none) { return -ENODEV; } - dt = check_type (&info); - switch (dt) { -#ifdef CONFIG_DASD_ECKD - case dasd_eckd: -#endif /* CONFIG_DASD_ECKD */ - FUNCTION_CONTROL ("Probing devno %d...\n", info.devno); if (!dasd_is_accessible (info.devno)) { - FUNCTION_CONTROL ("out of range...skip%s\n", ""); return -ENODEV; } - if (dasd_disciplines[dt]->ck_devinfo) { - rc = dasd_disciplines[dt]->ck_devinfo (&info); - } -#if DASD_PARANOIA > 1 - else { + if (!dasd_disciplines[dt]->ck_devinfo) { INTERNAL_ERROR ("no ck_devinfo function%s\n", ""); return -ENODEV; } -#endif /* DASD_PARANOIA */ - if (rc == -ENODEV) { + rc = dasd_disciplines[dt]->ck_devinfo (&info); + if (rc) { return rc; } -#if DASD_PARANOIA > 2 - if (rc) { - INTERNAL_CHECK ("unknown error rc=%d\n", rc); + if (dasd_probeonly) { + PRINT_INFO ("%04X not enabled due to probeonly mode\n", + info.devno); + dasd_add_devno_to_ranges (info.devno); return -ENODEV; - } -#endif /* DASD_PARANOIA */ + } else { rc = register_dasd (irq, dt, &info); + } if (rc) { - PRINT_INFO ("devno %x not enabled as minor %d due to errors\n", - info.devno, - devindex_from_devno (info.devno) << - PARTN_BITS); + PRINT_WARN ("%04X not enabled due to errors\n", + info.devno); } else { - PRINT_INFO ("devno %x added as minor %d (%s)\n", + PRINT_INFO ("%04X is (dasd%c) minor %d (%s)\n", info.devno, + 'a' + devindex_from_devno (info.devno), devindex_from_devno (info.devno) << PARTN_BITS, dasd_name[dt]); } - case dasd_none: - break; - default: - PRINT_DEBUG ("unknown device type\n"); - break; - } - FUNCTION_EXIT ("probe_for_dasd"); + return rc; } @@ -1214,7 +1309,7 @@ int rc = 0; FUNCTION_ENTRY ("register_major"); - rc = register_blkdev (major, DASD_NAME, &dasd_file_operations); + rc = register_blkdev (major, DASD_NAME, &dasd_device_operations); #if DASD_PARANOIA > 1 if (rc) { PRINT_WARN ("registering major -> rc=%d aborting... \n", rc); @@ -1233,24 +1328,6 @@ modifier is to make sure, that they are only called via the kernel's methods */ -static ssize_t -dasd_read (struct file *filp, char *b, size_t s, loff_t * o) -{ - ssize_t rc; - FUNCTION_ENTRY ("dasd_read"); - rc = block_read (filp, b, s, o); - FUNCTION_EXIT ("dasd_read"); - return rc; -} -static ssize_t -dasd_write (struct file *filp, const char *b, size_t s, loff_t * o) -{ - ssize_t rc; - FUNCTION_ENTRY ("dasd_write"); - rc = block_write (filp, b, s, o); - FUNCTION_EXIT ("dasd_write"); - return rc; -} static int dasd_ioctl (struct inode *inp, struct file *filp, unsigned int no, unsigned long data) @@ -1298,19 +1375,6 @@ } static int -dasd_fsync (struct file *filp, struct dentry *d) -{ - int rc = 0; - FUNCTION_ENTRY ("dasd_fsync"); - if (!filp) { - return -EINVAL; - } - rc = block_fsync (filp, d); - FUNCTION_EXIT ("dasd_fsync"); - return rc; -} - -static int dasd_release (struct inode *inp, struct file *filp) { int rc = 0; @@ -1346,23 +1410,14 @@ } static struct -file_operations dasd_file_operations = +file_operations dasd_device_operations = { - NULL, /* loff_t(*llseek)(struct file *,loff_t,int); */ - dasd_read, - dasd_write, - NULL, /* int(*readdir)(struct file *,void *,filldir_t); */ - NULL, /* u int(*poll)(struct file *,struct poll_table_struct *); */ - dasd_ioctl, - NULL, /* int (*mmap) (struct file *, struct vm_area_struct *); */ - dasd_open, - NULL, /* int (*flush) (struct file *) */ - dasd_release, - dasd_fsync, - NULL, /* int (*fasync) (int, struct file *, int); - int (*check_media_change) (kdev_t dev); - int (*revalidate) (kdev_t dev); - int (*lock) (struct file *, int, struct file_lock *); */ + read:block_read, + write:block_write, + fsync:block_fsync, + ioctl:dasd_ioctl, + open:dasd_open, + release:dasd_release, }; int @@ -1371,20 +1426,29 @@ int rc = 0; int i; - FUNCTION_ENTRY ("dasd_init"); PRINT_INFO ("initializing...\n"); - atomic_set (&chanq_tasks, 0); atomic_set (&bh_scheduled, 0); spin_lock_init (&dasd_lock); +#ifdef CONFIG_DASD_MDSK + /* + * enable service-signal external interruptions, + * Control Register 0 bit 22 := 1 + * (besides PSW bit 7 must be set to 1 somewhere for external + * interruptions) + */ + ctl_set_bit (0, 9); + register_external_interrupt (0x2603, do_dasd_mdsk_interrupt); +#endif + dasd_debug_info = debug_register ("dasd", 1, 4); /* First register to the major number */ + rc = register_major (MAJOR_NR); #if DASD_PARANOIA > 1 if (rc) { PRINT_WARN ("registering major_nr returned rc=%d\n", rc); return rc; } -#endif /* DASD_PARANOIA */ - read_ahead[MAJOR_NR] = 8; +#endif /* DASD_PARANOIA */ read_ahead[MAJOR_NR] = 8; blk_size[MAJOR_NR] = dasd_blks; hardsect_size[MAJOR_NR] = dasd_secsize; blksize_size[MAJOR_NR] = dasd_blksize; @@ -1393,17 +1457,14 @@ dasd_proc_init (); #endif /* CONFIG_PROC_FS */ /* Now scan the device list for DASDs */ - FUNCTION_CONTROL ("entering detection loop%s\n", ""); for (i = 0; i < NR_IRQS; i++) { int irc; /* Internal return code */ - LOOP_CONTROL ("Probing irq %d...\n", i); irc = probe_for_dasd (i); switch (irc) { case 0: - LOOP_CONTROL ("Added DASD%s\n", ""); break; case -ENODEV: - LOOP_CONTROL ("No DASD%s\n", ""); + case -EBUSY: break; case -EMEDIUMTYPE: PRINT_WARN ("DASD not formatted%s\n", ""); @@ -1413,33 +1474,64 @@ break; } } - FUNCTION_CONTROL ("detection loop completed%s\n", ""); + FUNCTION_CONTROL ("detection loop completed %s partn check...\n", ""); /* Finally do the genhd stuff */ -#if 0 /* 2 b done */ dd_gendisk.next = gendisk_head; gendisk_head = &dd_gendisk; - for (i = 0; i < DASD_MAXDEVICES; i++) { - LOOP_CONTROL ("Setting partitions of DASD %d\n", i); - resetup_one_dev (&dd_gendisk, i); + dasd_information = dasd_info; /* to enable genhd to know about DASD */ + tod_wait (1000000); + + /* wait on root filesystem before detecting partitions */ + if (MAJOR (ROOT_DEV) == DASD_MAJOR) { + int count = 10; + i = DEVICE_NR (ROOT_DEV); + if (dasd_info[i] == NULL) { + panic ("root device not accessible\n"); + } + while ((atomic_read (&dasd_info[i]->status) != + DASD_INFO_STATUS_FORMATTED) && + count ) { + PRINT_INFO ("Waiting on root volume...%d seconds left\n", count); + tod_wait (1000000); + count--; + } + if (count == 0) { + panic ("Waiting on root volume...giving up!\n"); + } + } + for (i = 0; i < DASD_MAX_DEVICES; i++) { + if (dasd_info[i]) { + if (atomic_read (&dasd_info[i]->status) == + DASD_INFO_STATUS_FORMATTED) { + dasd_partn_detect (i); + } else { /* start kernel thread for devices not ready now */ + kernel_thread (dasd_partn_detect, (void *) i, + CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + } + } } -#endif /* 0 */ - FUNCTION_EXIT ("dasd_init"); return rc; } #ifdef MODULE + int init_module (void) { int rc = 0; - FUNCTION_ENTRY ("init_module"); - PRINT_INFO ("trying to load module\n"); + PRINT_INFO ("Initializing module\n"); + rc = dasd_parse_module_params (); + if (rc == 0) { + PRINT_INFO ("module parameters parsed successfully\n"); + } else { + PRINT_WARN ("parsing parameters returned rc=%d\n", rc); + } rc = dasd_init (); if (rc == 0) { - PRINT_INFO ("module loaded successfully\n"); + PRINT_INFO ("module initialized successfully\n"); } else { - PRINT_WARN ("warning: Module load returned rc=%d\n", rc); + PRINT_WARN ("initializing module returned rc=%d\n", rc); } FUNCTION_EXIT ("init_module"); return rc; @@ -1449,19 +1541,32 @@ cleanup_module (void) { int rc = 0; + struct gendisk *genhd = gendisk_head, *prev = NULL; - FUNCTION_ENTRY ("cleanup_module"); PRINT_INFO ("trying to unload module \n"); - /* FIXME: replace by proper unload functionality */ - INTERNAL_ERROR ("Modules not yet implemented %s", ""); + /* unregister gendisk stuff */ + for (genhd = gendisk_head; genhd; prev = genhd, genhd = genhd->next) { + if (genhd == dd_gendisk) { + if (prev) + prev->next = genhd->next; + else { + gendisk_head = genhd->next; + } + break; + } + } + /* unregister devices */ + for (i = 0; i = DASD_MAX_DEVICES; i++) { + if (dasd_info[i]) + dasd_unregister_dasd (i); + } if (rc == 0) { PRINT_INFO ("module unloaded successfully\n"); } else { PRINT_WARN ("module unloaded with errors\n"); } - FUNCTION_EXIT ("cleanup_module"); } #endif /* MODULE */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd.h linux.16p3/drivers/s390/block/dasd.h --- linux.vanilla/drivers/s390/block/dasd.h Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd.h Thu Jan 1 01:00:00 1970 @@ -1,226 +0,0 @@ - -#ifndef DASD_H -#define DASD_H - -/* First of all the external stuff */ -#include -#include - -#define IOCTL_LETTER 'D' -#define BIODASDFORMAT _IO(IOCTL_LETTER,0) /* Format the volume or an extent */ -#define BIODASDDISABLE _IO(IOCTL_LETTER,1) /* Disable the volume (for Linux) */ -#define BIODASDENABLE _IO(IOCTL_LETTER,2) /* Enable the volume (for Linux) */ -/* Stuff for reading and writing the Label-Area to/from user space */ -#define BIODASDGTVLBL _IOR(IOCTL_LETTER,3,dasd_volume_label_t) -#define BIODASDSTVLBL _IOW(IOCTL_LETTER,4,dasd_volume_label_t) -#define BIODASDRWTB _IOWR(IOCTL_LETTER,5,int) -#define BIODASDRSID _IOR(IOCTL_LETTER,6,senseid_t) - -typedef -union { - char bytes[512]; - struct { - /* 80 Bytes of Label data */ - char identifier[4]; /* e.g. "LNX1", "VOL1" or "CMS1" */ - char label[6]; /* Given by user */ - char security; - char vtoc[5]; /* Null in "LNX1"-labelled partitions */ - char reserved0[5]; - long ci_size; - long blk_per_ci; - long lab_per_ci; - char reserved1[4]; - char owner[0xe]; - char no_part; - char reserved2[0x1c]; - /* 16 Byte of some information on the dasd */ - short blocksize; - char nopart; - char unused; - long unused2[3]; - /* 7*10 = 70 Bytes of partition data */ - struct { - char type; - long start; - long size; - char unused; - } part[7]; - } __attribute__ ((packed)) label; -} dasd_volume_label_t; - -typedef union { - struct { - unsigned long no; - unsigned int ct; - } __attribute__ ((packed)) input; - struct { - unsigned long noct; - } __attribute__ ((packed)) output; -} __attribute__ ((packed)) dasd_xlate_t; - -void dasd_setup (char *, int *); -int dasd_init (void); -#ifdef MODULE -int init_module (void); -void cleanup_module (void); -#endif /* MODULE */ - -/* Definitions for blk.h */ -/* #define DASD_MAGIC 0x44415344 is ascii-"DASD" */ -/* #define dasd_MAGIC 0x64617364; is ascii-"DASD" */ -#define DASD_MAGIC 0xC4C1E2C4 /* is ebcdic-"DASD" */ -#define dasd_MAGIC 0x8481A284 /* is ebcdic-"DASD" */ -#define DASD_NAME "dasd" -#define DASD_PARTN_BITS 2 -#define DASD_MAX_DEVICES (256>>DASD_PARTN_BITS) - -#define MAJOR_NR DASD_MAJOR -#define PARTN_BITS DASD_PARTN_BITS - -#ifdef __KERNEL__ -/* Now lets turn to the internal sbtuff */ - -/* - define the debug levels: - - 0 No debugging output to console or syslog - - 1 Log internal errors to syslog, ignore check conditions - - 2 Log internal errors and check conditions to syslog - - 3 Log internal errors to console, log check conditions to syslog - - 4 Log internal errors and check conditions to console - - 5 panic on internal errors, log check conditions to console - - 6 panic on both, internal errors and check conditions - */ -#define DASD_DEBUG 4 - -#define DASD_PROFILE -/* - define the level of paranoia - - 0 quite sure, that things are going right - - 1 sanity checking, only to avoid panics - - 2 normal sanity checking - - 3 extensive sanity checks - - 4 exhaustive debug messages - */ -#define DASD_PARANOIA 2 - -/* - define the depth of flow control, which is logged as a check condition - - 0 No flow control messages - - 1 Entry of functions logged like check condition - - 2 Entry and exit of functions logged like check conditions - - 3 Internal structure broken down - - 4 unrolling of loops,... - */ -#define DASD_FLOW_CONTROL 0 - -#if DASD_DEBUG > 0 -#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#define PRINT_INFO(x...) printk ( KERN_INFO PRINTK_HEADER x ) -#define PRINT_WARN(x...) printk ( KERN_WARNING PRINTK_HEADER x ) -#define PRINT_ERR(x...) printk ( KERN_ERR PRINTK_HEADER x ) -#define PRINT_FATAL(x...) panic ( PRINTK_HEADER x ) -#else -#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#define PRINT_INFO(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#define PRINT_WARN(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#define PRINT_ERR(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#endif /* DASD_DEBUG */ - -#define INTERNAL_ERRMSG(x,y...) \ -"Internal error: in file " __FILE__ " line: %d: " x, __LINE__, y -#define INTERNAL_CHKMSG(x,y...) \ -"Inconsistency: in file " __FILE__ " line: %d: " x, __LINE__, y -#define INTERNAL_FLWMSG(x,y...) \ -"Flow control: file " __FILE__ " line: %d: " x, __LINE__, y - -#if DASD_DEBUG > 4 -#define INTERNAL_ERROR(x...) PRINT_FATAL ( INTERNAL_ERRMSG ( x ) ) -#elif DASD_DEBUG > 2 -#define INTERNAL_ERROR(x...) PRINT_ERR ( INTERNAL_ERRMSG ( x ) ) -#elif DASD_DEBUG > 0 -#define INTERNAL_ERROR(x...) PRINT_WARN ( INTERNAL_ERRMSG ( x ) ) -#else -#define INTERNAL_ERROR(x...) -#endif /* DASD_DEBUG */ - -#if DASD_DEBUG > 5 -#define INTERNAL_CHECK(x...) PRINT_FATAL ( INTERNAL_CHKMSG ( x ) ) -#elif DASD_DEBUG > 3 -#define INTERNAL_CHECK(x...) PRINT_ERR ( INTERNAL_CHKMSG ( x ) ) -#elif DASD_DEBUG > 1 -#define INTERNAL_CHECK(x...) PRINT_WARN ( INTERNAL_CHKMSG ( x ) ) -#else -#define INTERNAL_CHECK(x...) -#endif /* DASD_DEBUG */ - -#if DASD_DEBUG > 3 -#define INTERNAL_FLOW(x...) PRINT_ERR ( INTERNAL_FLWMSG ( x ) ) -#elif DASD_DEBUG > 2 -#define INTERNAL_FLOW(x...) PRINT_WARN ( INTERNAL_FLWMSG ( x ) ) -#else -#define INTERNAL_FLOW(x...) -#endif /* DASD_DEBUG */ - -#if DASD_FLOW_CONTROL > 0 -#define FUNCTION_ENTRY(x) INTERNAL_FLOW( x "entered %s\n","" ); -#else -#define FUNCTION_ENTRY(x) -#endif /* DASD_FLOW_CONTROL */ - -#if DASD_FLOW_CONTROL > 1 -#define FUNCTION_EXIT(x) INTERNAL_FLOW( x "exited %s\n","" ); -#else -#define FUNCTION_EXIT(x) -#endif /* DASD_FLOW_CONTROL */ - -#if DASD_FLOW_CONTROL > 2 -#define FUNCTION_CONTROL(x...) INTERNAL_FLOW( x ); -#else -#define FUNCTION_CONTROL(x...) -#endif /* DASD_FLOW_CONTROL */ - -#if DASD_FLOW_CONTROL > 3 -#define LOOP_CONTROL(x...) INTERNAL_FLOW( x ); -#else -#define LOOP_CONTROL(x...) -#endif /* DASD_FLOW_CONTROL */ - -#define DASD_DO_IO_SLEEP 0x01 -#define DASD_DO_IO_NOLOCK 0x02 -#define DASD_DO_IO_NODEC 0x04 - -#define DASD_NOT_FORMATTED 0x01 - -extern struct wait_queue *dasd_waitq; - -#undef DEBUG_DASD_MALLOC -#ifdef DEBUG_DASD_MALLOC -void *b; -#define kmalloc(x...) (PRINT_INFO(" kmalloc %p\n",b=kmalloc(x)),b) -#define kfree(x) PRINT_INFO(" kfree %p\n",x);kfree(x) -#define get_free_page(x...) (PRINT_INFO(" gfp %p\n",b=get_free_page(x)),b) -#define __get_free_pages(x...) (PRINT_INFO(" gfps %p\n",b=__get_free_pages(x)),b) -#endif /* DEBUG_DASD_MALLOC */ - -#endif /* __KERNEL__ */ -#endif /* DASD_H */ - -/* - * Overrides for Emacs so that we follow Linus's tabbing style. - * Emacs will notice this stuff at the end of the file and automatically - * adjust the settings for this buffer only. This must remain at the end - * of the file. - * --------------------------------------------------------------------------- - * Local variables: - * c-indent-level: 4 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -4 - * c-argdecl-indent: 4 - * c-label-offset: -4 - * c-continued-statement-offset: 4 - * c-continued-brace-offset: 0 - * indent-tabs-mode: nil - * tab-width: 8 - * End: - */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_3990_erp.c linux.16p3/drivers/s390/block/dasd_3990_erp.c --- linux.vanilla/drivers/s390/block/dasd_3990_erp.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_3990_erp.c Mon May 15 16:34:41 2000 @@ -0,0 +1,140 @@ +/* + * File...........: linux/drivers/s390/block/dasd_3990_erp.c + * Author(s)......: Holger Smolinski + * Horst Hummel + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 + */ + +#include +#include "dasd_erp.h" + +#define PRINTK_HEADER "dasd_erp(3990)" + +/* + * DASD_3990_ERP_EXAMINE_32 + * + * DESCRIPTION + * Checks only for fatal/no/recoverable error. + * A detailed examination of the sense data is done later outside + * the interrupt handler. + * + * RETURN VALUES + * dasd_era_none no error + * dasd_era_fatal for all fatal (unrecoverable errors) + * dasd_era_recover for recoverable others. + */ +dasd_era_t +dasd_3990_erp_examine_32 (char *sense) +{ + + switch (sense[25]) { + case 0x00: + return dasd_era_none; + case 0x01: + return dasd_era_fatal; + default: + return dasd_era_recover; + } + +} /* end dasd_3990_erp_examine_32 */ + +/* + * DASD_3990_ERP_EXAMINE_24 + * + * DESCRIPTION + * Checks only for fatal (unrecoverable) error. + * A detailed examination of the sense data is done later outside + * the interrupt handler. + * + * Each bit configuration leading to an action code 2 (Exit with + * programming error or unusual condition indication) + * and 10 (disabled interface) are handled as fatal error´s. + * + * All other configurations are handled as recoverable errors. + * + * RETURN VALUES + * dasd_era_fatal for all fatal (unrecoverable errors) + * dasd_era_recover for all others. + */ +dasd_era_t +dasd_3990_erp_examine_24 (char *sense) +{ + + /* check for 'Command Recejct' which is always a fatal error */ + if (sense[0] & 0x80) { + return dasd_era_fatal; + } + /* check for 'Invalid Track Format' */ + if (sense[1] & 0x40) { + return dasd_era_fatal; + } + /* check for 'No Record Found' */ + if (sense[1] & 0x08) { + return dasd_era_fatal; + } + /* return recoverable for all others */ + return dasd_era_recover; + +} /* END dasd_3990_erp_examine_24 */ + +/* + * DASD_3990_ERP_EXAMINE + * + * DESCRIPTION + * Checks only for fatal/no/recover error. + * A detailed examination of the sense data is done later outside + * the interrupt handler. + * + * The logic is based on the 'IBM 3990 Storage Control Reference' manual + * 'Chapter 7. Error Recovery Procedures'. + * + * RETURN VALUES + * dasd_era_none no error + * dasd_era_fatal for all fatal (unrecoverable errors) + * dasd_era_recover for all others. + */ +dasd_era_t +dasd_3990_erp_examine (cqr_t * cqr, devstat_t * stat) +{ + + char *sense = stat->ii.sense.data; + + /* check for successful execution first */ + if (stat->cstat == 0x00 && + stat->dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END)) + return dasd_era_none; + + /* distinguish between 24 and 32 byte sense data */ + if (sense[27] & 0x80) { + + /* examine the 32 byte sense data */ + return dasd_3990_erp_examine_32 (sense); + + } else { + + /* examine the 24 byte sense data */ + return dasd_3990_erp_examine_24 (sense); + + } /* end distinguish between 24 and 32 byte sense data */ + +} /* END dasd_3990_erp_examine */ + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 4 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -4 + * c-argdecl-indent: 4 + * c-label-offset: -4 + * c-continued-statement-offset: 4 + * c-continued-brace-offset: 0 + * indent-tabs-mode: nil + * tab-width: 8 + * End: + */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_9343_erp.c linux.16p3/drivers/s390/block/dasd_9343_erp.c --- linux.vanilla/drivers/s390/block/dasd_9343_erp.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_9343_erp.c Mon May 15 16:34:41 2000 @@ -0,0 +1,20 @@ +/* + * File...........: linux/drivers/s390/block/dasd_9345_erp.h + * Author(s)......: Holger Smolinski + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 + */ + +#include +#include "dasd_erp.h" + +#define PRINTK_HEADER "dasd_erp(9343)" + +dasd_era_t +dasd_9343_erp_examine (cqr_t * cqr, devstat_t * stat) +{ + if (stat->cstat == 0x00 && + stat->dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END)) + return dasd_era_none; + return dasd_era_recover; +} diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_ccwstuff.c linux.16p3/drivers/s390/block/dasd_ccwstuff.c --- linux.vanilla/drivers/s390/block/dasd_ccwstuff.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd_ccwstuff.c Mon May 15 16:34:41 2000 @@ -9,9 +9,9 @@ #include #include #include +#include #include -#include "dasd.h" #include "dasd_types.h" #define PRINTK_HEADER "dasd_ccw:" @@ -148,7 +148,6 @@ } #endif /* DASD_PARANOIA */ exit: - FUNCTION_EXIT ("request_cpa"); return freeblk; } @@ -263,6 +262,69 @@ return; } +/* ---------------------------------------------------------- */ + +static erp_t *erpp = NULL; +#ifdef __SMP__ +static spinlock_t erp_lock = SPIN_LOCK_UNLOCKED; +#endif /* __SMP__ */ + +void +erf_enq (erp_t * cqf) +{ + *(erp_t **) cqf = erpp; + erpp = cqf; +} + +erp_t * +erf_deq (void) +{ + erp_t *erp = erpp; + erpp = *(erp_t **) erpp; + return erp; +} + +erp_t * +request_er (void) +{ + erp_t *erp = NULL; + int i; + erp_t *area; + + spin_lock (&erp_lock); + while (erpp == NULL) { + do { + area = (erp_t *) get_free_page (GFP_ATOMIC); + if (area == NULL) { + printk (KERN_WARNING PRINTK_HEADER + "No memory for chanq area\n"); + } + } while (!area); + memset (area, 0, PAGE_SIZE); + if (dasd_page_count + 1 >= MAX_DASD_PAGES) { + PRINT_WARN ("Requesting too many pages..."); + } else { + dasd_page[dasd_page_count++] = + (long) area; + } + for (i = 0; i < 4096 / sizeof (erp_t); i++) { + erf_enq (area + i); + } + } + erp = erf_deq (); + spin_unlock (&erp_lock); + return erp; +} + +void +release_er (erp_t * erp) +{ + spin_lock (&erp_lock); + erf_enq (erp); + spin_unlock (&erp_lock); + return; +} + /* ----------------------------------------------------------- */ cqr_t * request_cqr (int cpsize, int datasize) @@ -296,8 +358,6 @@ memset (cqr->data,0,datasize); } goto exit; - nodata: - release_cp (cqr->cplength, cqr->cpaddr); nocp: release_cq (cqr); cqr = NULL; @@ -327,6 +387,59 @@ return rc; } +/* ----------------------------------------------------------- */ +erp_t * +allloc_erp (erp_t * erp, int cpsize, int datasize) +{ + if (cpsize) { + erp->cqr.cpaddr = request_cp (cpsize); + if (erp->cqr.cpaddr == NULL) { + printk (KERN_WARNING PRINTK_HEADER __FILE__ + "No memory for channel program\n"); + goto nocp; + } + erp->cqr.cplength = cpsize; + } + if (datasize) { + do { + erp->cqr.data = (char *) kmalloc (datasize, GFP_ATOMIC); + if (erp->cqr.data == NULL) { + printk (KERN_WARNING PRINTK_HEADER __FILE__ + "No memory for ERP data area\n"); + } + } while (!erp->cqr.data); + memset (erp->cqr.data, 0, datasize); + } + goto exit; + nocp: + release_er (erp); + erp = NULL; + exit: + return erp; +} + +int +release_erp (erp_t * erp) +{ + int rc = 0; + if (erp == NULL) { + rc = -ENOENT; + return rc; + } + if (erp->cqr.data) { + kfree (erp->cqr.data); + } + if (erp->cqr.dstat) { + kfree (erp->cqr.dstat); + } + if (erp->cqr.cpaddr) { + release_cp (erp->cqr.cplength, erp->cqr.cpaddr); + } + erp->cqr.magic = dasd_MAGIC; + release_er (erp); + return rc; +} + /* -------------------------------------------------------------- */ void dasd_chanq_enq (dasd_chanq_t * q, cqr_t * cqr) @@ -338,13 +451,18 @@ cqr->next = NULL; q->tail = cqr; q->queued_requests ++; - if (atomic_compare_and_swap(CQR_STATUS_FILLED, - CQR_STATUS_QUEUED, - &cqr->status)) { - PRINT_WARN ("q_cqr: %p status changed %d\n", - cqr,atomic_read(&cqr->status)); - atomic_set(&cqr->status,CQR_STATUS_QUEUED); + ACS (cqr->status, CQR_STATUS_FILLED, CQR_STATUS_QUEUED); } + +void +dasd_chanq_enq_head (dasd_chanq_t * q, cqr_t * cqr) +{ + cqr->next = q->head; + q->head = cqr; + if (q->tail == NULL) + q->tail = cqr; + q->queued_requests++; + ACS (cqr->status, CQR_STATUS_FILLED, CQR_STATUS_QUEUED); } int @@ -370,6 +488,9 @@ } cqr->next = NULL; q->queued_requests --; + if (cqr->magic == ERP_MAGIC) + return release_erp ((erp_t *) cqr); + else return release_cqr(cqr); } @@ -408,8 +529,7 @@ spin_lock(&cq_lock); if (! (atomic_read(&q->flags) & DASD_CHANQ_ACTIVE)) { PRINT_WARN("Queue not active\n"); - } - else if (cq_head == q) { + } else if (cq_head == q) { cq_head = q->next_q; } else { c = cq_head; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_ccwstuff.h linux.16p3/drivers/s390/block/dasd_ccwstuff.h --- linux.vanilla/drivers/s390/block/dasd_ccwstuff.h Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd_ccwstuff.h Mon May 15 16:34:41 2000 @@ -3,6 +3,8 @@ cqr_t *request_cqr (int, int); int release_cqr (cqr_t *); +erp_t *request_er (void); +int release_er (erp_t *); int dasd_chanq_enq (dasd_chanq_t *, cqr_t *); int dasd_chanq_deq (dasd_chanq_t *, cqr_t *); void cql_enq_head (dasd_chanq_t * q); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_eckd.c linux.16p3/drivers/s390/block/dasd_eckd.c --- linux.vanilla/drivers/s390/block/dasd_eckd.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd_eckd.c Mon May 15 16:34:41 2000 @@ -8,11 +8,10 @@ #include #include -#ifdef MODULE -#include -#endif /* MODULE */ - #include +#include +#include /* HDIO_GETGEO */ + #include #include @@ -20,8 +19,6 @@ #include "dasd_types.h" #include "dasd_ccwstuff.h" -#include "dasd.h" - #ifdef PRINTK_HEADER #undef PRINTK_HEADER #endif /* PRINTK_HEADER */ @@ -270,16 +267,7 @@ eckd_home_t; -/* eckd count area */ -typedef struct { - __u16 cyl; - __u16 head; - __u8 record; - __u8 kl; - __u16 dl; -} __attribute__ ((packed)) - -eckd_count_t; +dasd_era_t dasd_eckd_erp_examine (cqr_t *, devstat_t *); static unsigned int round_up_multiple (unsigned int no, unsigned int mult) @@ -401,7 +389,7 @@ memset (de_ccw, 0, sizeof (ccw1_t)); de_ccw->cmd_code = CCW_DEFINE_EXTENT; de_ccw->count = 16; - de_ccw->cda = (void *) virt_to_phys (data); + de_ccw->cda = (void *) __pa (data); memset (data, 0, sizeof (DE_eckd_data_t)); switch (cmd) { @@ -417,6 +405,7 @@ break; case DASD_ECKD_CCW_WRITE: case DASD_ECKD_CCW_WRITE_MT: + data->mask.perm = 0x02; data->attributes.operation = 0x3; /* enable seq. caching */ break; case DASD_ECKD_CCW_WRITE_CKD: @@ -458,7 +447,7 @@ memset (lo_ccw, 0, sizeof (ccw1_t)); lo_ccw->cmd_code = DASD_ECKD_CCW_LOCATE_RECORD; lo_ccw->count = 16; - lo_ccw->cda = (void *) virt_to_phys (data); + lo_ccw->cda = (void *) __pa (data); memset (data, 0, sizeof (LO_eckd_data_t)); switch (cmd) { @@ -471,7 +460,7 @@ data->operation.operation = 0x16; break; case DASD_ECKD_CCW_WRITE_RECORD_ZERO: - data->operation.orientation = 0x3; + data->operation.orientation = 0x1; data->operation.operation = 0x03; data->count++; break; @@ -623,10 +612,10 @@ r0_data->record = 0; r0_data->kl = 0; r0_data->dl = 8; - last_ccw->cmd_code = 0x03; + last_ccw->cmd_code = DASD_ECKD_CCW_WRITE_RECORD_ZERO; last_ccw->count = 8; last_ccw->flags = CCW_FLAG_CC | CCW_FLAG_SLI; - last_ccw->cda = (void *) virt_to_phys (r0_data); + last_ccw->cda = (void *) __pa (r0_data); last_ccw++; } /* write remaining records */ @@ -640,14 +629,14 @@ last_ccw->cmd_code = DASD_ECKD_CCW_WRITE_CKD; last_ccw->flags = CCW_FLAG_CC | CCW_FLAG_SLI; last_ccw->count = 8; - last_ccw->cda = (void *) - virt_to_phys (ct_data + i); + last_ccw->cda = (void *) __pa (ct_data + i); } (last_ccw - 1)->flags &= ~(CCW_FLAG_CC | CCW_FLAG_DC); fcp -> devindex = di; fcp -> flags = DASD_DO_IO_SLEEP; do { - struct wait_queue wait = {current, NULL}; + struct wait_queue wait = + {current, NULL}; unsigned long flags; int irq; int cs; @@ -698,15 +687,11 @@ int blk_per_trk = recs_per_track (&(info->rdc_data->eckd), 0, info->sizes.bp_block); int byt_per_blk = info->sizes.bp_block; - int noblk = req-> nr_sectors >> info->sizes.s2b_shift; int btrk = (req->sector >> info->sizes.s2b_shift) / blk_per_trk; int etrk = ((req->sector + req->nr_sectors - 1) >> info->sizes.s2b_shift) / blk_per_trk; - - if ( ! noblk ) { - PRINT_ERR("No blocks to write...returning\n"); - return NULL; - } + int bhct; + long size; if (req->cmd == READ) { rw_cmd = DASD_ECKD_CCW_READ_MT; @@ -724,7 +709,21 @@ } #endif /* DASD_PARANOIA */ /* Build the request */ - rw_cp = request_cqr (2 + noblk, +#if 0 + PRINT_INFO ("req %d %d %d %d\n", devindex, req->cmd, req->sector, req->nr_sectors); +#endif + /* count bhs to prevent errors, when bh smaller than block */ + bhct = 0; + + for (bh = req->bh; bh; bh = bh->b_reqnext) { + if (bh->b_size > byt_per_blk) + for (size = 0; size < bh->b_size; size += byt_per_blk) + bhct++; + else + bhct++; + } + + rw_cp = request_cqr (2 + bhct, sizeof (DE_eckd_data_t) + sizeof (LO_eckd_data_t)); if ( ! rw_cp ) { @@ -743,58 +742,38 @@ req->nr_sectors >> info->sizes.s2b_shift, rw_cmd, info); ccw->flags = CCW_FLAG_CC; - for (bh = req->bh; bh; bh = bh->b_reqnext) { - long size; + for (bh = req->bh; bh != NULL;) { + if (bh->b_size > byt_per_blk) { for (size = 0; size < bh->b_size; size += byt_per_blk) { ccw++; ccw->flags = CCW_FLAG_CC; ccw->cmd_code = rw_cmd; ccw->count = byt_per_blk; - ccw->cda = (void *) virt_to_phys (bh->b_data + size); + ccw->cda = (void *) __pa (bh->b_data + size); + } + bh = bh->b_reqnext; + } else { /* group N bhs to fit into byt_per_blk */ + for (size = 0; bh != NULL && size < byt_per_blk;) { + ccw++; + ccw->flags = CCW_FLAG_DC; + ccw->cmd_code = rw_cmd; + ccw->count = bh->b_size; + ccw->cda = (void *) __pa (bh->b_data); + size += bh->b_size; + bh = bh->b_reqnext; + } + if (size != byt_per_blk) { + PRINT_WARN ("Cannot fulfill small request %d vs. %d (%d sects)\n", size, byt_per_blk, req->nr_sectors); + release_cqr (rw_cp); + return NULL; + } + ccw->flags = CCW_FLAG_CC; } } ccw->flags &= ~(CCW_FLAG_DC | CCW_FLAG_CC); return rw_cp; } -cqr_t * -dasd_eckd_rw_label (int devindex, int rw, char *buffer) -{ - int cmd_code = 0x03; - dasd_information_t *info = dasd_info[devindex]; - cqr_t *cqr; - ccw1_t *ccw; - - switch (rw) { - case READ: - cmd_code = DASD_ECKD_CCW_READ; - break; - case WRITE: - cmd_code = DASD_ECKD_CCW_WRITE; - break; -#if DASD_PARANOIA > 2 - default: - INTERNAL_ERROR ("unknown cmd %d", rw); - return NULL; -#endif /* DASD_PARANOIA */ - } - cqr = request_cqr (3, sizeof (DE_eckd_data_t) + - sizeof (LO_eckd_data_t)); - ccw = cqr->cpaddr; - define_extent (ccw, cqr->data, 0, 0, cmd_code, info); - ccw->flags |= CCW_FLAG_CC; - ccw++; - locate_record (ccw, cqr->data + 1, 0, 2, 1, cmd_code, info); - ccw->flags |= CCW_FLAG_CC; - ccw++; - ccw->cmd_code = cmd_code; - ccw->flags |= CCW_FLAG_SLI; - ccw->count = sizeof (dasd_volume_label_t); - ccw->cda = (void *) virt_to_phys ((void *) buffer); - return cqr; - -} - void dasd_eckd_print_char (dasd_characteristics_t * i) { @@ -886,27 +865,23 @@ return rc; } -int -dasd_eckd_read_count (int di) +cqr_t * +dasd_eckd_fill_sizes_first (int di) { - int rc; cqr_t *rw_cp = NULL; ccw1_t *ccw; DE_eckd_data_t *DE_data; LO_eckd_data_t *LO_data; - eckd_count_t *count_data; - int retries = 5; - unsigned long flags; - int irq; - int cs; dasd_information_t *info = dasd_info[di]; + eckd_count_t *count_data = &(info->private.eckd.count_data); + + dasd_info[di]->sizes.label_block = 2; + rw_cp = request_cqr (3, sizeof (DE_eckd_data_t) + - sizeof (LO_eckd_data_t) + - sizeof (eckd_count_t)); + sizeof (LO_eckd_data_t)); DE_data = rw_cp->data; LO_data = rw_cp->data + sizeof (DE_eckd_data_t); - count_data = (eckd_count_t*)((long)LO_data + sizeof (LO_eckd_data_t)); ccw = rw_cp->cpaddr; define_extent (ccw, DE_data, 0, 0, DASD_ECKD_CCW_READ_COUNT, info); ccw->flags = CCW_FLAG_CC; @@ -916,43 +891,18 @@ ccw++; ccw->cmd_code = DASD_ECKD_CCW_READ_COUNT; ccw->count = 8; - ccw->cda = (void *) virt_to_phys (count_data); + ccw->cda = (void *) __pa (count_data); rw_cp->devindex = di; - rw_cp -> options = DOIO_WAIT_FOR_INTERRUPT; - do { - irq = dasd_info[di]->info.irq; - s390irq_spin_lock_irqsave (irq, flags); - atomic_set(&rw_cp -> status, CQR_STATUS_QUEUED); - rc = dasd_start_IO ( rw_cp ); - s390irq_spin_unlock_irqrestore (irq, flags); - retries --; - cs = atomic_read(&rw_cp->status); - if ( cs != CQR_STATUS_DONE && retries == 5 ) { - dasd_eckd_print_error(rw_cp->dstat); - } - } while ( ( ( cs != CQR_STATUS_DONE) || rc ) && retries ); - if ( ( rc || cs != CQR_STATUS_DONE) ) { - if ( ( cs == CQR_STATUS_ERROR ) && - ( rw_cp -> dstat -> ii.sense.data[1] == 0x08 ) ) { - rc = -EMEDIUMTYPE; - } else { - dasd_eckd_print_error (rw_cp->dstat); - rc = -EIO; - } - } else { - rc = count_data->dl; - } - release_cqr (rw_cp); - return rc; + atomic_set (&rw_cp->status, CQR_STATUS_FILLED); + return rw_cp; } int -dasd_eckd_fill_sizes (int devindex) +dasd_eckd_fill_sizes_last (int devindex) { - int bs = 0; - int sb; + int sb,rpt; dasd_information_t *in = dasd_info[devindex]; - bs = dasd_eckd_read_count (devindex); + int bs = in->private.eckd.count_data.dl; if (bs <= 0) { PRINT_INFO("Cannot figure out blocksize. did you format the disk?\n"); memset (&(in -> sizes), 0, sizeof(dasd_sizes_t )); @@ -962,10 +912,10 @@ } in->sizes.bp_sector = in->sizes.bp_block; - in->sizes.b2k_shift = 0; /* bits to shift a block to get 1k */ - for (sb = 1024; sb < bs; sb = sb << 1) - in->sizes.b2k_shift++; - + if (bs & 511) { + PRINT_INFO ("Probably no Linux formatted device!\n"); + return -EMEDIUMTYPE; + } in->sizes.s2b_shift = 0; /* bits to shift 512 to get a block */ for (sb = 512; sb < bs; sb = sb << 1) in->sizes.s2b_shift++; @@ -973,26 +923,42 @@ in->sizes.blocks = in->rdc_data->eckd.no_cyl * in->rdc_data->eckd.trk_per_cyl * recs_per_track (&(in->rdc_data->eckd), 0, bs); - in->sizes.kbytes = in->sizes.blocks << in->sizes.b2k_shift; + + in->sizes.kbytes = ( in->sizes.blocks << in->sizes.s2b_shift) >> 1; + + rpt = recs_per_track (&(in->rdc_data->eckd), 0, in->sizes.bp_block), PRINT_INFO ("Verified: %d B/trk %d B/Blk(%d B) %d Blks/trk %d kB/trk \n", bytes_per_track (&(in->rdc_data->eckd)), - bytes_per_record (&(in->rdc_data->eckd), 0, in->sizes.bp_block), + bytes_per_record (&(in->rdc_data->eckd), 0, + in->sizes.bp_block), in->sizes.bp_block, - recs_per_track (&(in->rdc_data->eckd), 0, in->sizes.bp_block), - (recs_per_track (&(in->rdc_data->eckd), 0, in->sizes.bp_block) << - in->sizes.b2k_shift )); + rpt, + (rpt << in->sizes.s2b_shift) >> 1); return 0; } +void +dasd_eckd_fill_geometry (int di, struct hd_geometry *geo) +{ + dasd_information_t *info = dasd_info[di]; + geo->cylinders = info->rdc_data->eckd.no_cyl; + geo->heads = info->rdc_data->eckd.trk_per_cyl; + geo->sectors = recs_per_track (&(info->rdc_data->eckd), + 0, info->sizes.bp_block); + geo->start = info->sizes.label_block + 1; +} + dasd_operations_t dasd_eckd_operations = { - dasd_eckd_ck_devinfo, - dasd_eckd_build_req, - dasd_eckd_rw_label, - dasd_eckd_ck_char, - dasd_eckd_fill_sizes, - dasd_eckd_format, + ck_devinfo:dasd_eckd_ck_devinfo, + get_req_ccw:dasd_eckd_build_req, + ck_characteristics:dasd_eckd_ck_char, + fill_sizes_first:dasd_eckd_fill_sizes_first, + fill_sizes_last:dasd_eckd_fill_sizes_last, + dasd_format:dasd_eckd_format, + fill_geometry:dasd_eckd_fill_geometry, + erp_examine:dasd_eckd_erp_examine }; /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_eckd_erp.c linux.16p3/drivers/s390/block/dasd_eckd_erp.c --- linux.vanilla/drivers/s390/block/dasd_eckd_erp.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_eckd_erp.c Mon May 15 16:34:41 2000 @@ -0,0 +1,29 @@ +/* + * File...........: linux/drivers/s390/block/dasd_eckd_erp.h + * Author(s)......: Holger Smolinski + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 + */ + +#include +#include "dasd_erp.h" + +#define PRINTK_HEADER "dasd_erp(eckd)" + +dasd_era_t +dasd_eckd_erp_examine (cqr_t * cqr, devstat_t * stat) +{ + + if (stat->cstat == 0x00 && + stat->dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END)) + return dasd_era_none; + + switch (dasd_info[cqr->devindex]->info.sid_data.cu_model) { + case 0x3990: + return dasd_3990_erp_examine (cqr, stat); + case 0x9343: + return dasd_9343_erp_examine (cqr, stat); + default: + return dasd_era_recover; + } +} diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_erp.c linux.16p3/drivers/s390/block/dasd_erp.c --- linux.vanilla/drivers/s390/block/dasd_erp.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_erp.c Mon May 15 16:34:41 2000 @@ -0,0 +1,77 @@ +/* + * File...........: linux/drivers/s390/block/dasd_erp.c + * Author(s)......: Holger Smolinski + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 + */ + +#include +#include +#include "dasd_erp.h" + +#define PRINTK_HEADER "dasd_erp" + +dasd_era_t +dasd_erp_examine (cqr_t * cqr, devstat_t * stat) +{ + int rc; + if (stat->cstat == 0x00 && + stat->dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END)) { + PRINT_WARN ("No error detected\n"); + rc = dasd_era_none; + } else if (!(stat->flag & DEVSTAT_FLAG_SENSE_AVAIL)) { + PRINT_WARN ("No sense data available, try to recover anyway\n"); + rc = dasd_era_recover; + } else +#if DASD_PARANOIA > 1 + if (!dasd_disciplines[dasd_info[cqr->devindex]->type]-> + erp_examine) { + INTERNAL_CHECK ("No erp_examinator for dt=%d\n", + dasd_info[cqr->devindex]->type); + rc = dasd_era_fatal; + } else +#endif + { + PRINT_WARN ("calling examinator\n"); + rc = dasd_disciplines[dasd_info[cqr->devindex]->type]-> + erp_examine (cqr, stat); + } + PRINT_WARN("ERP action code = %d\n",rc); + return rc; +} + +void +default_erp_action (erp_t * erp) +{ + cqr_t *cqr = erp->cqr.int4cqr; + ccw1_t *cpa = request_cp(1,0); + + memset (cpa,0,sizeof(ccw1_t)); + + cpa -> cmd_code = CCW_CMD_NOOP; + + ((cqr_t *) erp)->cpaddr = cpa; + if (cqr->retries++ <= 16) { + ACS (cqr->status, + CQR_STATUS_ERP_PEND, + CQR_STATUS_QUEUED); + } else { + PRINT_WARN ("ERP retry count exceeded\n"); + ACS (cqr->status, + CQR_STATUS_ERP_PEND, + CQR_STATUS_FAILED); + } + atomic_set (&(((cqr_t *) erp)->status), CQR_STATUS_FILLED); +} + +dasd_erp_action_t +dasd_erp_action (struct cqr_t *cqr) +{ + return default_erp_action; +} + +dasd_erp_action_t +dasd_erp_postaction (struct erp_t * erp) +{ + return NULL; +} diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_erp.h linux.16p3/drivers/s390/block/dasd_erp.h --- linux.vanilla/drivers/s390/block/dasd_erp.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_erp.h Mon May 15 16:34:41 2000 @@ -0,0 +1,32 @@ +/* + * File...........: linux/drivers/s390/block/dasd_erp.h + * Author(s)......: Holger Smolinski + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 + */ + +#ifndef DASD_ERP_H +#define DASD_ERP_H + +typedef enum { + dasd_era_fatal = -1, /* no chance to recover */ + dasd_era_none = 0, /* don't recover, everything alright */ + dasd_era_msg = 1, /* don't recover, just report... */ + dasd_era_recover = 2 /* recovery action recommended */ +} dasd_era_t; + +#include "dasd_types.h" + +typedef struct erp_t { + struct cqr_t cqr; +} __attribute__ ((packed)) + +erp_t; + +typedef void (*dasd_erp_action_t) (erp_t *); + +dasd_era_t dasd_erp_examine (struct cqr_t *, devstat_t *); +dasd_erp_action_t dasd_erp_action (struct cqr_t *); +dasd_erp_action_t dasd_erp_postaction (struct erp_t *); + +#endif /* DASD_ERP_H */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_fba.c linux.16p3/drivers/s390/block/dasd_fba.c --- linux.vanilla/drivers/s390/block/dasd_fba.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_fba.c Mon May 15 16:34:41 2000 @@ -0,0 +1,356 @@ + +#include +#include + +#ifdef MODULE +#include +#endif /* MODULE */ + +#include +#include +#include /* HDIO_GETGEO */ + +#include + +#include + +#include "dasd_types.h" +#include "dasd_ccwstuff.h" + +#define DASD_FBA_CCW_LOCATE 0x43 +#define DASD_FBA_CCW_READ 0x42 +#define DASD_FBA_CCW_WRITE 0x41 + +#ifdef PRINTK_HEADER +#undef PRINTK_HEADER +#endif /* PRINTK_HEADER */ +#define PRINTK_HEADER "dasd(fba):" + +typedef +struct { + struct { + unsigned char perm:2; /* Permissions on this extent */ + unsigned char zero:2; /* Must be zero */ + unsigned char da:1; /* usually zero */ + unsigned char diag:1; /* allow diagnose */ + unsigned char zero2:2; /* zero */ + } __attribute__ ((packed)) mask; + unsigned char zero; /* Must be zero */ + unsigned short blk_size; /* Blocksize */ + unsigned long ext_loc; /* Extent locator */ + unsigned long ext_beg; /* logical number of block 0 in extent */ + unsigned long ext_end; /* logocal number of last block in extent */ +} __attribute__ ((packed, aligned (32))) + +DE_fba_data_t; + +typedef +struct { + struct { + unsigned char zero:4; + unsigned char cmd:4; + } __attribute__ ((packed)) operation; + unsigned char auxiliary; + unsigned short blk_ct; + unsigned long blk_nr; +} __attribute__ ((packed, aligned (32))) + +LO_fba_data_t; + +static void +define_extent (ccw1_t * ccw, DE_fba_data_t * DE_data, int rw, + int blksize, int beg, int nr) +{ + memset (DE_data, 0, sizeof (DE_fba_data_t)); + ccw->cmd_code = CCW_DEFINE_EXTENT; + ccw->count = 16; + ccw->cda = (void *) __pa (DE_data); + if (rw == WRITE) + (DE_data->mask).perm = 0x0; + else if (rw == READ) + (DE_data->mask).perm = 0x1; + else + DE_data->mask.perm = 0x2; + DE_data->blk_size = blksize; + DE_data->ext_loc = beg; + DE_data->ext_end = nr - 1; +} + +static void +locate_record (ccw1_t * ccw, LO_fba_data_t * LO_data, int rw, int block_nr, + int block_ct) +{ + memset (LO_data, 0, sizeof (LO_fba_data_t)); + ccw->cmd_code = DASD_FBA_CCW_LOCATE; + ccw->count = 8; + ccw->cda = (void *) __pa (LO_data); + if (rw == WRITE) + LO_data->operation.cmd = 0x5; + else if (rw == READ) + LO_data->operation.cmd = 0x6; + else + LO_data->operation.cmd = 0x8; + LO_data->blk_nr = block_nr; + LO_data->blk_ct = block_ct; +} + +int +dasd_fba_ck_devinfo (dev_info_t * info) +{ + return 0; +} + +cqr_t * +dasd_fba_build_req (int devindex, + struct request * req) +{ + cqr_t *rw_cp = NULL; + ccw1_t *ccw; + + DE_fba_data_t *DE_data; + LO_fba_data_t *LO_data; + struct buffer_head *bh; + int rw_cmd; + int byt_per_blk = dasd_info[devindex]->sizes.bp_block; + int bhct; + long size; + + if (!req->nr_sectors) { + PRINT_ERR ("No blocks to write...returning\n"); + return NULL; + } + if (req->cmd == READ) { + rw_cmd = DASD_FBA_CCW_READ; + } else +#if DASD_PARANOIA > 2 + if (req->cmd == WRITE) +#endif /* DASD_PARANOIA */ + { + rw_cmd = DASD_FBA_CCW_WRITE; + } +#if DASD_PARANOIA > 2 + else { + PRINT_ERR ("Unknown command %d\n", req->cmd); + return NULL; + } +#endif /* DASD_PARANOIA */ + bhct = 0; + for (bh = req->bh; bh; bh = bh->b_reqnext) { + if (bh->b_size > byt_per_blk) + for (size = 0; size < bh->b_size; size += byt_per_blk) + bhct++; + else + bhct++; + } + + /* Build the request */ + rw_cp = request_cqr (2 + bhct, + sizeof (DE_fba_data_t) + + sizeof (LO_fba_data_t)); + if (!rw_cp) { + return NULL; + } + DE_data = rw_cp->data; + LO_data = rw_cp->data + sizeof (DE_fba_data_t); + ccw = rw_cp->cpaddr; + + define_extent (ccw, DE_data, req->cmd, byt_per_blk, + req->sector, req->nr_sectors); + ccw->flags = CCW_FLAG_CC; + ccw++; + locate_record (ccw, LO_data, req->cmd, 0, req->nr_sectors); + ccw->flags = CCW_FLAG_CC; + for (bh = req->bh; bh;) { + if (bh->b_size > byt_per_blk) { + for (size = 0; size < bh->b_size; size += byt_per_blk) { + ccw++; + if (dasd_info[devindex]->rdc_data->fba.mode.bits.data_chain) { + ccw->flags = CCW_FLAG_DC; + } else { + ccw->flags = CCW_FLAG_CC; + } + ccw->cmd_code = rw_cmd; + ccw->count = byt_per_blk; + ccw->cda = (void *) __pa (bh->b_data + size); + } + bh = bh->b_reqnext; + } else { /* group N bhs to fit into byt_per_blk */ + for (size = 0; bh != NULL && size < byt_per_blk;) { + ccw++; + if (dasd_info[devindex]->rdc_data->fba.mode.bits.data_chain) { + ccw->flags = CCW_FLAG_DC; + } else { + PRINT_WARN ("Cannot chain chunks smaller than one block\n"); + release_cqr (rw_cp); + return NULL; + } + ccw->cmd_code = rw_cmd; + ccw->count = bh->b_size; + ccw->cda = (void *) __pa (bh->b_data); + size += bh->b_size; + bh = bh->b_reqnext; + } + ccw->flags = CCW_FLAG_CC; + if (size != byt_per_blk) { + PRINT_WARN ("Cannot fulfill request smaller than block\n"); + release_cqr (rw_cp); + return NULL; + } + } + } + ccw->flags &= ~(CCW_FLAG_DC | CCW_FLAG_CC); + return rw_cp; +} + +void +dasd_fba_print_char (dasd_characteristics_t * ct) +{ + dasd_fba_characteristics_t *c = + (dasd_fba_characteristics_t *) ct; + PRINT_INFO ("%d blocks of %d bytes %d MB\n", + c->blk_bdsa, c->blk_size, + (c->blk_bdsa * (c->blk_size >> 9)) >> 11); + PRINT_INFO ("%soverrun, %s mode, data chains %sallowed\n" + "%sremovable, %sshared\n", + (c->mode.bits.overrunnable ? "" : "no "), + (c->mode.bits.burst_byte ? "burst" : "byte"), + (c->mode.bits.data_chain ? "" : "not "), + (c->features.bits.removable ? "" : "not "), + (c->features.bits.shared ? "" : "not ")); +}; + +int +dasd_fba_ck_char (dasd_characteristics_t * rdc) +{ + int rc = 0; + dasd_fba_print_char (rdc); + return rc; +} + +cqr_t * +dasd_fba_fill_sizes_first (int di) +{ + cqr_t *rw_cp = NULL; + ccw1_t *ccw; + DE_fba_data_t *DE_data; + LO_fba_data_t *LO_data; + dasd_information_t *info = dasd_info[di]; + static char buffer[8]; + + dasd_info[di]->sizes.label_block = 1; + + rw_cp = request_cqr (3, + sizeof (DE_fba_data_t) + + sizeof (LO_fba_data_t)); + DE_data = rw_cp->data; + LO_data = rw_cp->data + sizeof (DE_fba_data_t); + ccw = rw_cp->cpaddr; + define_extent (ccw, DE_data, READ, info->sizes.bp_block, 1, 1); + ccw->flags = CCW_FLAG_CC; + ccw++; + locate_record (ccw, LO_data, READ, 0, 1); + ccw->flags = CCW_FLAG_CC; + ccw++; + ccw->cmd_code = DASD_FBA_CCW_READ; + ccw->flags = CCW_FLAG_SLI; + ccw->count = 8; + ccw->cda = (void *) __pa (buffer); + rw_cp->devindex = di; + atomic_set (&rw_cp->status, CQR_STATUS_FILLED); + return rw_cp; +} + +int +dasd_fba_fill_sizes_last (int devindex) +{ + int rc = 0; + int sb; + dasd_information_t *info = dasd_info[devindex]; + + info->sizes.bp_sector = info->rdc_data->fba.blk_size; + info->sizes.bp_block = info->sizes.bp_sector; + + info->sizes.s2b_shift = 0; /* bits to shift 512 to get a block */ + for (sb = 512; sb < info->sizes.bp_sector; sb = sb << 1) + info->sizes.s2b_shift++; + + info->sizes.blocks = (info->rdc_data->fba.blk_bdsa); + + if (info->sizes.s2b_shift >= 1) + info->sizes.kbytes = info->sizes.blocks << + (info->sizes.s2b_shift - 1); + else + info->sizes.kbytes = info->sizes.blocks >> + (-(info->sizes.s2b_shift - 1)); + + return rc; +} + +int +dasd_fba_format (int devindex, format_data_t * fdata) +{ + int rc = 0; + return rc; +} + +void +dasd_fba_fill_geometry (int di, struct hd_geometry *geo) +{ + int bfactor, nr_sectors, sec_size; + int trk_cap, trk_low, trk_high, tfactor, nr_trks, trk_size; + int cfactor, nr_cyls, cyl_size; + int remainder; + + dasd_information_t *info = dasd_info[di]; + PRINT_INFO ("FBA has no geometry! Faking one...\n%s", ""); + + /* determine the blocking factor of sectors */ + for (bfactor = 8; bfactor > 0; bfactor--) { + remainder = info->rdc_data->fba.blk_bdsa % bfactor; + PRINT_INFO ("bfactor %d remainder %d\n", bfactor, remainder); + if (!remainder) + break; + } + nr_sectors = info->rdc_data->fba.blk_bdsa / bfactor; + sec_size = info->rdc_data->fba.blk_size * bfactor; + + geo -> sectors = bfactor; + + /* determine the nr of sectors per track */ + trk_cap = (64 * 1 << 10) / sec_size; /* 64k in sectors */ + trk_low = trk_cap * 2 / 3; + trk_high = trk_cap * 4 / 3; + for (tfactor = trk_high; tfactor > trk_low; tfactor--) { + PRINT_INFO ("remainder %d\n", remainder); + remainder = nr_sectors % bfactor; + if (!remainder) + break; + } + nr_trks = nr_sectors / tfactor; + trk_size = sec_size * tfactor; + + /* determine the nr of trks per cylinder */ + for (cfactor = 31; cfactor > 0; cfactor--) { + PRINT_INFO ("remainder %d\n", remainder); + remainder = nr_trks % bfactor; + if (!remainder) + break; + } + nr_cyls = nr_trks / cfactor; + sec_size = info->rdc_data->fba.blk_size * bfactor; + + geo -> heads = nr_trks; + geo -> cylinders = nr_cyls; + geo -> start = info->sizes.label_block + 1; +} + +dasd_operations_t dasd_fba_operations = +{ + ck_devinfo:dasd_fba_ck_devinfo, + get_req_ccw:dasd_fba_build_req, + ck_characteristics:dasd_fba_ck_char, + fill_sizes_first:dasd_fba_fill_sizes_first, + fill_sizes_last:dasd_fba_fill_sizes_last, + dasd_format:dasd_fba_format, + fill_geometry:dasd_fba_fill_geometry +}; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_mdsk.c linux.16p3/drivers/s390/block/dasd_mdsk.c --- linux.vanilla/drivers/s390/block/dasd_mdsk.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_mdsk.c Mon May 15 16:34:41 2000 @@ -0,0 +1,366 @@ +#include +#include +#include +#include "dasd_types.h" +#include "dasd_ccwstuff.h" +#include "dasd_mdsk.h" + +#ifdef PRINTK_HEADER +#undef PRINTK_HEADER +#endif /* PRINTK_HEADER */ +#define PRINTK_HEADER "dasd(mdsk):" + +int dasd_is_accessible (int devno); +void dasd_insert_range (int start, int end); + +/* + * The device characteristics function + */ +static __inline__ int +dia210 (void *devchar) +{ + int rc; + + asm volatile (" lr 2,%1\n" + " .long 0x83200210\n" + " ipm %0\n" + " srl %0,28" + :"=d" (rc) + :"d" ((void *) __pa (devchar)) + :"2"); + return rc; +} + +static __inline__ int +dia250 (void *iob, int cmd) +{ + int rc; + + asm volatile (" lr 2,%1\n" + " lr 3,%2\n" + " .long 0x83230250\n" + " lr %0,3" + :"=d" (rc) + :"d" ((void *) __pa (iob)), "d" (cmd) + :"2", "3"); + return rc; +} + +/* + * Init of minidisk device + */ + +static __inline__ int +mdsk_init_io (int di, int blocksize, int offset, int size) +{ + mdsk_init_io_t *iib = &(dasd_info[di]->private.mdsk.iib); + int rc; + + memset (iib, 0, sizeof (mdsk_init_io_t)); + + iib->dev_nr = dasd_info[di]->info.devno; + iib->block_size = blocksize; + iib->offset = offset; + iib->start_block = 0; + iib->end_block = size; + + rc = dia250 (iib, INIT_BIO); + + return rc; +} + +/* + * release of minidisk device + */ + +static __inline__ int +mdsk_term_io (int di) +{ + mdsk_init_io_t *iib = &(dasd_info[di]->private.mdsk.iib); + int rc; + + memset (iib, 0, sizeof (mdsk_init_io_t)); + iib->dev_nr = dasd_info[di]->info.devno; + rc = dia250 (iib, TERM_BIO); + return rc; +} + +void dasd_do_chanq (void); +void dasd_schedule_bh (void (*func) (void)); +int register_dasd_last (int di); + +int +dasd_mdsk_start_IO (cqr_t * cqr) +{ + int rc; + mdsk_rw_io_t *iob = &(dasd_info[cqr->devindex]->private.mdsk.iob); + + iob->dev_nr = dasd_info[cqr->devindex]->info.devno; + iob->key = 0; + iob->flags = 2; + iob->block_count = cqr->cplength >> 1; + iob->interrupt_params = (u32) cqr; + iob->bio_list = __pa (cqr->cpaddr); + + asm volatile ("STCK %0":"=m" (cqr->startclk)); + rc = dia250 (iob, RW_BIO); + if (rc > 8) { + PRINT_WARN ("dia250 returned CC %d\n", rc); + ACS (cqr->status, CQR_STATUS_QUEUED, CQR_STATUS_ERROR); + } else { + ACS (cqr->status, CQR_STATUS_QUEUED, CQR_STATUS_IN_IO); + atomic_dec (&chanq_tasks); + } + return rc; +} + +void +do_dasd_mdsk_interrupt (struct pt_regs *regs, __u16 code) +{ + int intparm = S390_lowcore.ext_params; + char status = *((char *) S390_lowcore.ext_params + 5); + cqr_t *cqr = (cqr_t *) intparm; + if (!intparm) + return; + if (cqr->magic != MDSK_MAGIC) { + panic ("unknown magic number\n"); + } + asm volatile ("STCK %0":"=m" (cqr->stopclk)); + if (atomic_read (&dasd_info[cqr->devindex]->status) == + DASD_INFO_STATUS_DETECTED) { + register_dasd_last (cqr->devindex); + } + switch (status) { + case 0x00: + ACS (cqr->status, CQR_STATUS_IN_IO, CQR_STATUS_DONE); + break; + case 0x01: + case 0x02: + case 0x03: + default: + ACS (cqr->status, CQR_STATUS_IN_IO, CQR_STATUS_FAILED); + atomic_inc (&dasd_info[cqr->devindex]-> + queue.dirty_requests); + break; + } + atomic_inc (&chanq_tasks); + dasd_schedule_bh (dasd_do_chanq); +} + +cqr_t * +dasd_mdsk_build_req (int devindex, + struct request *req) +{ + cqr_t *rw_cp = NULL; + struct buffer_head *bh; + int rw_cmd; + dasd_information_t *info = dasd_info[devindex]; + int noblk = req->nr_sectors >> info->sizes.s2b_shift; + int byt_per_blk = info->sizes.bp_block; + int block; + mdsk_bio_t *bio; + int bhct; + long size; + + if (!noblk) { + PRINT_ERR ("No blocks to write...returning\n"); + return NULL; + } + if (req->cmd == READ) { + rw_cmd = MDSK_READ_REQ; + } else +#if DASD_PARANOIA > 2 + if (req->cmd == WRITE) +#endif /* DASD_PARANOIA */ + { + rw_cmd = MDSK_WRITE_REQ; + } +#if DASD_PARANOIA > 2 + else { + PRINT_ERR ("Unknown command %d\n", req->cmd); + return NULL; + } +#endif /* DASD_PARANOIA */ + bhct = 0; + for (bh = req->bh; bh; bh = bh->b_reqnext) { + if (bh->b_size > byt_per_blk) + for (size = 0; size < bh->b_size; size += byt_per_blk) + bhct++; + else + bhct++; + } + /* Build the request */ + rw_cp = request_cqr (MDSK_BIOS (bhct), 0); + if (!rw_cp) { + return NULL; + } + rw_cp->magic = MDSK_MAGIC; + bio = (mdsk_bio_t *) (rw_cp->cpaddr); + + block = req->sector >> info->sizes.s2b_shift; + for (bh = req->bh; bh; bh = bh->b_reqnext) { + if (bh->b_size >= byt_per_blk) { + memset (bio, 0, sizeof (mdsk_bio_t)); + for (size = 0; size < bh->b_size; size += byt_per_blk) { + bio->type = rw_cmd; + bio->block_number = block + 1; + bio->buffer = __pa (bh->b_data + size); + bio++; + block++; + } + } else { + PRINT_WARN ("Cannot fulfill request smaller than block\n"); + release_cqr (rw_cp); + return NULL; + } + } + return rw_cp; +} + +int +dasd_mdsk_ck_devinfo (dev_info_t * info) +{ + int rc = 0; + + dasd_mdsk_characteristics_t devchar = + {0,}; + + devchar.dev_nr = info->devno; + devchar.rdc_len = sizeof (dasd_mdsk_characteristics_t); + + if (dia210 (&devchar) != 0) { + return -ENODEV; + } + if (devchar.vdev_class == DEV_CLASS_FBA || + devchar.vdev_class == DEV_CLASS_ECKD || + devchar.vdev_class == DEV_CLASS_CKD) { + return 0; + } else { + return -ENODEV; + } + return rc; +} + +int +dasd_mdsk_ck_characteristics (dasd_characteristics_t * dchar) +{ + int rc = 0; + dasd_mdsk_characteristics_t *devchar = + (dasd_mdsk_characteristics_t *) dchar; + + if (dia210 (devchar) != 0) { + return -ENODEV; + } + if (devchar->vdev_class != DEV_CLASS_FBA && + devchar->vdev_class != DEV_CLASS_ECKD && + devchar->vdev_class != DEV_CLASS_CKD) { + return -ENODEV; + } + return rc; +} + +cqr_t * +dasd_mdsk_fill_sizes_first (int di) +{ + cqr_t *cqr = NULL; + dasd_information_t *info = dasd_info[di]; + mdsk_bio_t *bio; + int bsize; + int rc; + /* Figure out position of label block */ + if (info->rdc_data->mdsk.vdev_class == DEV_CLASS_FBA) { + info->sizes.label_block = 1; + } else if (info->rdc_data->mdsk.vdev_class == DEV_CLASS_ECKD || + info->rdc_data->mdsk.vdev_class == DEV_CLASS_CKD) { + dasd_info[di]->sizes.label_block = 2; + } else { + return NULL; + } + + /* figure out blocksize of device */ + mdsk_term_io (di); + for (bsize = 512; bsize <= PAGE_SIZE; bsize = bsize << 1) { + rc = mdsk_init_io (di, bsize, 0, 64); + if (rc <= 4) { + break; + } + } + if (bsize > PAGE_SIZE) { + PRINT_INFO ("Blocksize larger than 4096??\n"); + rc = mdsk_term_io (di); + return NULL; + } + dasd_info[di]->sizes.bp_sector = bsize; + + info->private.mdsk.label = (long *) get_free_page (GFP_KERNEL); + cqr = request_cqr (MDSK_BIOS (1), 0); + cqr->magic = MDSK_MAGIC; + bio = (mdsk_bio_t *) (cqr->cpaddr); + memset (bio, 0, sizeof (mdsk_bio_t)); + bio->type = MDSK_READ_REQ; + bio->block_number = info->sizes.label_block + 1; + bio->buffer = __pa (info->private.mdsk.label); + cqr->devindex = di; + atomic_set (&cqr->status, CQR_STATUS_FILLED); + + return cqr; +} + +int +dasd_mdsk_fill_sizes_last (int di) +{ + int sb; + dasd_information_t *info = dasd_info[di]; + long *label = info->private.mdsk.label; + int bs = info->private.mdsk.iib.block_size; + + info->sizes.s2b_shift = 0; /* bits to shift 512 to get a block */ + for (sb = 512; sb < bs; sb = sb << 1) + info->sizes.s2b_shift++; + + if (label[3] != bs) { + PRINT_WARN ("%04X mismatching blocksizes\n", info->info.devno); + atomic_set (&dasd_info[di]->status, + DASD_INFO_STATUS_DETECTED); + return -EINVAL; + } + if (label[0] != 0xc3d4e2f1) { /* CMS1 */ + PRINT_WARN ("%04X is not CMS formatted\n", info->info.devno); + } + if (label[13] == 0) { + PRINT_WARN ("%04X is not reserved\n", info->info.devno); + } + /* defaults for first partition */ + info->private.mdsk.setup.size = + (label[7] - 1 - label[13]) * (label[3] >> 9) >> 1; + info->private.mdsk.setup.blksize = label[3]; + info->private.mdsk.setup.offset = label[13] + 1; + + /* real size of the volume */ + info->sizes.bp_block = label[3]; + info->sizes.kbytes = label[7] * (label[3] >> 9) >> 1; + + if (info->sizes.s2b_shift >= 1) + info->sizes.blocks = info->sizes.kbytes >> + (info->sizes.s2b_shift - 1); + else + info->sizes.blocks = info->sizes.kbytes << + (-(info->sizes.s2b_shift - 1)); + + PRINT_INFO ("%ld kBytes in %d blocks of %d Bytes\n", + info->sizes.kbytes, + info->sizes.blocks, + info->sizes.bp_sector); + return 0; + +} + +dasd_operations_t dasd_mdsk_operations = +{ + ck_devinfo:dasd_mdsk_ck_devinfo, + get_req_ccw:dasd_mdsk_build_req, + ck_characteristics:dasd_mdsk_ck_characteristics, + fill_sizes_first:dasd_mdsk_fill_sizes_first, + fill_sizes_last:dasd_mdsk_fill_sizes_last, + dasd_format:NULL +}; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_mdsk.h linux.16p3/drivers/s390/block/dasd_mdsk.h --- linux.vanilla/drivers/s390/block/dasd_mdsk.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_mdsk.h Mon May 15 16:34:41 2000 @@ -0,0 +1,63 @@ +#ifndef DASD_MDSK_H +#define DASD_MDSK_H + +#define MDSK_WRITE_REQ 0x01 +#define MDSK_READ_REQ 0x02 + +#define INIT_BIO 0x00 +#define RW_BIO 0x01 +#define TERM_BIO 0x02 + +#define DEV_CLASS_FBA 0x01 +#define DEV_CLASS_ECKD 0x02 /* sure ?? */ +#define DEV_CLASS_CKD 0x04 /* sure ?? */ + +#define MDSK_BIOS(x) (2*(x)) + +typedef struct mdsk_dev_char_t { + u8 type; + u8 status; + u16 spare1; + u32 block_number; + u32 alet; + u32 buffer; +} __attribute__ ((packed, aligned (8))) + +mdsk_bio_t; + +typedef struct { + u16 dev_nr; + u16 spare1[11]; + u32 block_size; + u32 offset; + u32 start_block; + u32 end_block; + u32 spare2[6]; +} __attribute__ ((packed, aligned (8))) + +mdsk_init_io_t; + +typedef struct { + u16 dev_nr; + u16 spare1[11]; + u8 key; + u8 flags; + u16 spare2; + u32 block_count; + u32 alet; + u32 bio_list; + u32 interrupt_params; + u32 spare3[5]; +} __attribute__ ((packed, aligned (8))) + +mdsk_rw_io_t; + +typedef struct { + long vdev; + long size; + long offset; + long blksize; + int force_mdsk; +} mdsk_setup_data_t; + +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_proc.c linux.16p3/drivers/s390/block/dasd_proc.c --- linux.vanilla/drivers/s390/block/dasd_proc.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd_proc.c Mon May 15 16:34:41 2000 @@ -9,7 +9,8 @@ #include -#include "dasd.h" +#include + #include "dasd_types.h" int dasd_proc_read_devices ( char *, char **, off_t, int, int); @@ -18,48 +19,61 @@ extern int dasd_proc_read_debug ( char *, char **, off_t, int, int); #endif /* DASD_PROFILE */ -struct proc_dir_entry dasd_proc_root_entry = { - 0, - 4,"dasd", - S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, - 1,0,0, - 0, - NULL, +struct proc_dir_entry dasd_proc_root_entry = +{ + low_ino:0, + namelen:4, + name:"dasd", + mode:S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, + nlink:1, + uid:0, + gid:0, + size:0 }; -struct proc_dir_entry dasd_proc_devices_entry = { - 0, - 7,"devices", - S_IFREG | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, - 1,0,0, - 0, - NULL, - &dasd_proc_read_devices, +struct proc_dir_entry dasd_proc_devices_entry = +{ + low_ino:0, + namelen:7, + name:"devices", + mode:S_IFREG | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, + nlink:1, + uid:0, + gid:0, + size:0, + get_info:&dasd_proc_read_devices, }; #ifdef DASD_PROFILE -struct proc_dir_entry dasd_proc_stats_entry = { - 0, - 10,"statistics", - S_IFREG | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, - 1,0,0, - 0, - NULL, - &dasd_proc_read_statistics, +struct proc_dir_entry dasd_proc_stats_entry = +{ + low_ino:0, + namelen:10, + name:"statistics", + mode:S_IFREG | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, + nlink:1, + uid:0, + gid:0, + size:0, + get_info:&dasd_proc_read_statistics }; -struct proc_dir_entry dasd_proc_debug_entry = { - 0, - 5,"debug", - S_IFREG | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, - 1,0,0, - 0, - NULL, - &dasd_proc_read_debug, +struct proc_dir_entry dasd_proc_debug_entry = +{ + low_ino:0, + namelen:5, + name:"debug", + mode:S_IFREG | S_IRUGO | S_IXUGO | S_IWUSR | S_IWGRP, + nlink:1, + uid:0, + gid:0, + size:0, + get_info:&dasd_proc_read_debug }; #endif /* DASD_PROFILE */ -struct proc_dir_entry dasd_proc_device_template = { +struct proc_dir_entry dasd_proc_device_template = +{ 0, 6,"dd????", S_IFBLK | S_IRUGO | S_IWUSR | S_IWGRP, @@ -79,7 +93,6 @@ #endif /* DASD_PROFILE */ } - int dasd_proc_read_devices ( char * buf, char **start, off_t off, int len, int d) { @@ -97,17 +110,24 @@ DASD_MAJOR, i << PARTN_BITS, 'a' + i ); - if (info->flags == DASD_NOT_FORMATTED) { - len += sprintf ( buf + len, " n/a"); - } else { - len += sprintf ( buf + len, " %6d", + switch (atomic_read (&info->status)) { + case DASD_INFO_STATUS_UNKNOWN: + len += sprintf (buf + len, " unknown"); + break; + case DASD_INFO_STATUS_DETECTED: + len += sprintf (buf + len, " avail"); + break; + case DASD_INFO_STATUS_ANALYSED: + len += sprintf (buf + len, " n/f"); + break; + default: + len += sprintf (buf + len, " %7d", info->sizes.bp_block); } len += sprintf ( buf + len, "\n"); } return len; } - void dasd_proc_add_node (int di) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_profile.c linux.16p3/drivers/s390/block/dasd_profile.c --- linux.vanilla/drivers/s390/block/dasd_profile.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd_profile.c Mon May 15 16:34:41 2000 @@ -1,7 +1,9 @@ + #include #include -#include "dasd.h" +#include + #include "dasd_types.h" #define PRINTK_HEADER "dasd_profile:" @@ -141,7 +143,9 @@ } __attribute__ ((packed)) u; unsigned long caller_address; unsigned long tag; -} __attribute__ ((packed)) dasd_debug_entry; +} __attribute__ ((packed)) + +dasd_debug_entry; static dasd_debug_entry *dasd_debug_area = NULL; static dasd_debug_entry *dasd_debug_actual; @@ -155,7 +159,7 @@ /* initialize in first call ... */ if ( ! dasd_debug_area ) { dasd_debug_actual = dasd_debug_area = - get_free_page (GFP_ATOMIC); + (dasd_debug_entry *) get_free_page (GFP_ATOMIC); if ( ! dasd_debug_area ) { PRINT_WARN("No debug area allocated\n"); return; @@ -174,7 +178,7 @@ __asm__ __volatile__ ( "STCK %0" :"=m" (d->u.clock)); d->tag = tag; - d -> caller_address = __builtin_return_address(0); + d->caller_address = (unsigned long) __builtin_return_address (0); d->u.s.cpu = smp_processor_id(); } @@ -183,7 +187,8 @@ off_t off, int len, int dd) { dasd_debug_entry *d; - char tag[9] = { 0, }; + char tag[9] = + {0,}; long flags; spin_lock_irqsave(&debug_lock,flags); len = 0; @@ -193,13 +198,12 @@ if ( *(char*)(&d->tag) == 'D' ) { memcpy(tag,&(d->tag),4); tag[4]=0; - } - else { - sprintf(tag,"%08x",d->tag); + } else { + sprintf (tag, "%08lx", d->tag); tag[8]=0; } len += sprintf ( buf+len, - "%lx %08x%05x %08lx (%8s)\n", + "%x %08x%05x %08lx (%8s)\n", d->u.s.cpu, d->u.s.ts1, d->u.s.ts2, d->caller_address,tag); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_setup.c linux.16p3/drivers/s390/block/dasd_setup.c --- linux.vanilla/drivers/s390/block/dasd_setup.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/dasd_setup.c Mon May 15 16:34:41 2000 @@ -0,0 +1,343 @@ +/* + * File...........: linux/drivers/s390/block/dasd_setup.c + * Author(s)......: Holger Smolinski + * : Utz Bacher + * Bugreports.to..: + * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 + */ + +#include +#include + +#include +#include "dasd_types.h" + +#define PRINTK_HEADER "dasd(setup):" + +#define MIN(a,b) (((a)<(b))?(a):(b)) + +static int dasd_autodetect = 0; +int dasd_probeonly = 1; +static int dasd_count = 0; +static int dasd_devno[DASD_MAX_DEVICES] = +{0,}; +int dasd_force_mdsk_flag[DASD_MAX_DEVICES] = +{0,}; + +extern char *dasd[DASD_MAX_DEVICES]; +#ifdef CONFIG_DASD_MDSK +extern char *dasd_force_mdsk[DASD_MAX_DEVICES]; +#endif + +typedef struct dasd_range { + int from, to; + struct dasd_range *next; +} dasd_range; + +static dasd_range *first_range = NULL; + +void +dasd_add_devno_to_ranges (int devno) +{ + dasd_range *p, *prev; + for (p = first_range; p; prev = p, p = prev->next) { + if (devno >= p->from && devno <= p->to) { + PRINT_WARN ("devno %04X already in range %04X-%04X\n", + devno, p->from, p->to); + return; + } + if (devno == (p->from - 1)) { + p->from--; + return; + } + if (devno == (p->to + 1)) { + p->to++; + return; + } + } + prev = kmalloc (sizeof (dasd_range), GFP_ATOMIC); + prev->from = prev->to = devno; + if (!first_range) { + first_range = prev; + } + return; +} + +int +dasd_proc_print_probed_ranges (char *buf, char **start, off_t off, int len, int d) +{ + dasd_range *p; + len = sprintf (buf, "Probed ranges of the DASD driver\n"); + for (p = first_range; p; p = p->next) { + if (len >= PAGE_SIZE - 80) + len += sprintf (buf + len, "terminated...\n"); + if (p != first_range) { + len += sprintf (buf + len, ","); + } + if (p->from == p->to) { + len += sprintf (buf + len, "%04x", p->from); + } else { + len += sprintf (buf + len, "%04x-%04x", + p->from, p->to); + } + } + len += sprintf (buf + len, "\n"); + return len; +} + +static int +dasd_get_hexdigit (char c) +{ + if ((c >= '0') && (c <= '9')) + return c - '0'; + if ((c >= 'a') && (c <= 'f')) + return c + 10 - 'a'; + if ((c >= 'A') && (c <= 'F')) + return c + 10 - 'A'; + return -1; +} + +/* sets the string pointer after the next comma */ +static void +dasd_scan_for_next_comma (char **strptr) +{ + while (((**strptr) != ',') && (**strptr)) + (*strptr)++; + + /* set the position AFTER the comma */ + if (**strptr == ',') + (*strptr)++; +} + +/*sets the string pointer after the next comma, if a parse error occured */ +static int +dasd_get_next_int (char **strptr) +{ + int j, i = -1; /* for cosmetic reasons first -1, then 0 */ + if (isxdigit (**strptr)) { + for (i = 0; isxdigit (**strptr);) { + i <<= 4; + j = dasd_get_hexdigit (**strptr); + if (j == -1) { + PRINT_ERR ("no integer: skipping range.\n"); + dasd_scan_for_next_comma (strptr); + i = -1; + break; + } + i += j; + (*strptr)++; + if (i > 0xffff) { + PRINT_ERR (" value too big, skipping range.\n"); + dasd_scan_for_next_comma (strptr); + i = -1; + break; + } + } + } + return i; +} + +int +devindex_from_devno (int devno) +{ + int i; + if (dasd_probeonly) { + return 0; + } + for (i = 0; i < dasd_count; i++) { + if (dasd_devno[i] == devno) + return i; + } + if (dasd_autodetect) { + if (dasd_count < DASD_MAX_DEVICES) { + dasd_devno[dasd_count] = devno; + return dasd_count++; + } + return -EOVERFLOW; + } + return -ENODEV; +} + +/* returns 1, if dasd_no is in the specified ranges, otherwise 0 */ +int +dasd_is_accessible (int devno) +{ + return (devindex_from_devno (devno) >= 0); +} + +/* dasd_insert_range skips ranges, if the start or the end is -1 */ +void +dasd_insert_range (int start, int end) +{ + int curr; + if (dasd_count >= DASD_MAX_DEVICES) { + PRINT_ERR (" too many devices specified, ignoring some.\n"); + return; + } + if ((start == -1) || (end == -1)) { + PRINT_ERR + ("invalid format of parameter, skipping range\n"); + return; + } + if (end < start) { + PRINT_ERR (" ignoring range from %x to %x - start value " \ + "must be less than end value.\n", start, end); + return; + } +/* concurrent execution would be critical, but will not occur here */ + for (curr = start; curr <= end; curr++) { + if (dasd_is_accessible (curr)) { + PRINT_WARN (" %x is already in list as device %d\n", + curr, devindex_from_devno (curr)); + } + dasd_devno[dasd_count] = curr; + dasd_count++; + if (dasd_count >= DASD_MAX_DEVICES) { + PRINT_ERR (" too many devices specified, ignoring some.\n"); + break; + } + } + PRINT_INFO (" added dasd range from %x to %x.\n", + start, dasd_devno[dasd_count - 1]); + +} + +void +dasd_setup (char *str, int *ints) +{ + int devno, devno2; + static const char *adstring = "autodetect"; + static const char *prstring = "probeonly"; + if (!strncmp (str, prstring, + MIN (strlen (str), strlen (prstring)))) { + dasd_autodetect = 1; + return; + } + if (!strncmp (str, adstring, + MIN (strlen (str), strlen (adstring)))) { + dasd_autodetect = 1; + dasd_probeonly = 0; + return; + } + dasd_probeonly = 0; + while (*str && *str != 1) { + if (!isxdigit (*str)) { + str++; /* to avoid looping on two commas */ + PRINT_ERR (" kernel parameter in invalid format.\n"); + continue; + } + devno = dasd_get_next_int (&str); + + /* range was skipped? -> scan for comma has been done */ + if (devno == -1) + continue; + + if (*str == ',') { + str++; + dasd_insert_range (devno, devno); + continue; + } + if (*str == '-') { + str++; + devno2 = dasd_get_next_int (&str); + if (devno2 == -1) { + PRINT_ERR (" invalid character in " \ + "kernel parameters."); + } else { + dasd_insert_range (devno, devno2); + } + dasd_scan_for_next_comma (&str); + continue; + } + if (*str == 0) { + dasd_insert_range (devno, devno); + break; + } + PRINT_ERR (" unexpected character in kernel parameter, " \ + "skipping range.\n"); + } +} +#ifdef CONFIG_DASD_MDSK +int dasd_force_mdsk_flag[DASD_MAX_DEVICES]; + +/* + * Parameter parsing function, called from init/main.c + * size : size in kbyte + * offset : offset after which minidisk is available + * blksize : blocksize minidisk is formated + * Format is: mdisk=,,... + */ +void +dasd_mdsk_setup (char *str, int *ints) +{ + int devno, devno2; + int di, i; + + while (*str && *str != 1) { + if (!isxdigit (*str)) { + str++; /* to avoid looping on two commas */ + PRINT_ERR (" kernel parameter in invalid format.\n"); + continue; + } + devno = dasd_get_next_int (&str); + + /* range was skipped? -> scan for comma has been done */ + if (devno == -1) + continue; + + if (*str == ',') { + str++; + di = devindex_from_devno (devno); + if (di >= DASD_MAX_DEVICES) { + return; + } else if (di < 0) + dasd_insert_range (devno, devno); + dasd_force_mdsk_flag[di] = 1; + continue; + } + if (*str == '-') { + str++; + devno2 = dasd_get_next_int (&str); + if (devno2 == -1) { + PRINT_ERR (" invalid character in " \ + "kernel parameters."); + } else { + for (i = devno; i <= devno2; i++) { + di = devindex_from_devno (i); + if (di >= DASD_MAX_DEVICES) { + return; + } else if (di < 0) + dasd_insert_range (i, i); + dasd_force_mdsk_flag[di] = 1; + } + } + dasd_scan_for_next_comma (&str); + continue; + } + if (*str == 0) { + di = devindex_from_devno (devno); + if (di >= DASD_MAX_DEVICES) { + return; + } else if (di < 0) + dasd_insert_range (devno, devno); + dasd_force_mdsk_flag[di] = 1; + break; + } + PRINT_ERR (" unexpected character in kernel parameter, " \ + "skipping range.\n"); + } +} +#endif + +#ifdef MODULE +int +dasd_parse_module_params (void) +{ + while (dasd) + dasd_setup (dasd, NULL); +#ifdef CONFIG_DASD_MDSK + while (dasd_force_mdsk) + dasd_mdsk_setup (dasd_force_mdsk, NULL); +#endif +} +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/dasd_types.h linux.16p3/drivers/s390/block/dasd_types.h --- linux.vanilla/drivers/s390/block/dasd_types.h Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/dasd_types.h Mon May 15 16:34:41 2000 @@ -1,3 +1,4 @@ + /* * File...........: linux/drivers/s390/block/dasd_types.h * Author.........: Holger Smolinski @@ -21,12 +22,22 @@ #ifndef DASD_TYPES_H #define DASD_TYPES_H -#include "dasd.h" +#include #include +#include + #include +#include "dasd_mdsk.h" + +#define ACS(where,from,to) if (atomic_compare_and_swap (from, to, &where)) {\ + PRINT_WARN ("%s/%d atomic %s from %d(%s) to %d(%s) failed, was %d\n",\ + __FILE__,__LINE__,#where,from,#from,to,#to,\ + atomic_read (&where));\ + atomic_set(&where,to);} + #define CCW_DEFINE_EXTENT 0x63 #define CCW_LOCATE_RECORD 0x43 #define CCW_READ_DEVICE_CHARACTERISTICS 0x64 @@ -34,15 +45,19 @@ typedef enum { dasd_none = -1, +#ifdef CONFIG_DASD_ECKD + dasd_eckd, +#endif /* CONFIG_DASD_ECKD */ #ifdef CONFIG_DASD_FBA dasd_fba, #endif /* CONFIG_DASD_FBA */ +#ifdef CONFIG_DASD_MDSK + dasd_mdsk, +#endif /* CONFIG_DASD_MDSK */ #ifdef CONFIG_DASD_CKD dasd_ckd, #endif /* CONFIG_DASD_CKD */ -#ifdef CONFIG_DASD_ECKD - dasd_eckd -#endif /* CONFIG_DASD_ECKD */ + dasd_end } dasd_type_t; typedef @@ -158,6 +173,32 @@ dasd_eckd_characteristics_t; +typedef struct { + u16 dev_nr; + u16 rdc_len; + u8 vdev_class; + u8 vdev_type; + u8 vdev_status; + u8 vdev_flags; + u8 rdev_class; + u8 rdev_type; + u8 rdev_model; + u8 rdev_features; +} __attribute__ ((packed, aligned (32))) + +dasd_mdsk_characteristics_t; + +/* eckd count area */ +typedef struct { + __u16 cyl; + __u16 head; + __u8 record; + __u8 kl; + __u16 dl; +} __attribute__ ((packed)) + +eckd_count_t; + #ifdef CONFIG_DASD_CKD struct dasd_ckd_characteristics { char info[64]; @@ -165,13 +206,6 @@ #endif /* CONFIG_DASD_CKD */ -#ifdef CONFIG_DASD_ECKD -struct dasd_eckd_characteristics { - char info[64]; -}; - -#endif /* CONFIG_DASD_ECKD */ - typedef union { char __attribute__ ((aligned (32))) bytes[64]; @@ -184,6 +218,9 @@ #ifdef CONFIG_DASD_ECKD dasd_eckd_characteristics_t eckd; #endif /* CONFIG_DASD_ECKD */ +#ifdef CONFIG_DASD_MDSK + dasd_mdsk_characteristics_t mdsk; +#endif /* CONFIG_DASD_ECKD */ } __attribute__ ((aligned (32))) dasd_characteristics_t; @@ -193,10 +230,10 @@ #define CQR_STATUS_QUEUED 0x02 #define CQR_STATUS_IN_IO 0x04 #define CQR_STATUS_DONE 0x08 -#define CQR_STATUS_RETRY 0x10 -#define CQR_STATUS_ERROR 0x20 -#define CQR_STATUS_FAILED 0x40 -#define CQR_STATUS_SLEEP 0x80 +#define CQR_STATUS_ERROR 0x10 +#define CQR_STATUS_ERP_PEND 0x20 +#define CQR_STATUS_ERP_ACTIVE 0x40 +#define CQR_STATUS_FAILED 0x80 #define CQR_FLAGS_SLEEP 0x01 #define CQR_FLAGS_WAIT 0x02 @@ -225,6 +262,7 @@ spinlock_t lock; int options; } __attribute__ ((packed)) + cqr_t; typedef @@ -234,12 +272,13 @@ unsigned int bp_block; unsigned int blocks; unsigned int s2b_shift; - unsigned int b2k_shift; - unsigned int first_sector; + unsigned int label_block; } dasd_sizes_t; #define DASD_CHANQ_ACTIVE 0x01 #define DASD_CHANQ_BUSY 0x02 +#define DASD_REQUEST_Q_BROKEN 0x04 + typedef struct dasd_chanq_t { volatile cqr_t *head; @@ -248,10 +287,18 @@ spinlock_t f_lock; /* lock for flag operations */ int queued_requests; atomic_t flags; + atomic_t dirty_requests; struct dasd_chanq_t *next_q; /* pointer to next queue */ } __attribute__ ((packed, aligned (16))) + dasd_chanq_t; +#define DASD_INFO_STATUS_UNKNOWN 0x00 /* nothing known about DASD */ +#define DASD_INFO_STATUS_DETECTED 0x01 /* DASD identified as DASD, irq taken */ +#define DASD_INFO_STATUS_ANALYSED 0x02 /* first block read, filled sizes */ +#define DASD_INFO_STATUS_FORMATTED 0x04 /* identified valid format */ +#define DASD_INFO_STATUS_PARTITIONED 0x08 /* identified partitions */ + typedef struct dasd_information_t { devstat_t dev_status; @@ -264,38 +311,49 @@ int open_count; spinlock_t lock; struct semaphore sem; - unsigned long flags; + atomic_t status; int irq; + mdsk_setup_data_t *mdsk_setup; struct proc_dir_entry *proc_device; union { struct { + eckd_count_t count_data; + } eckd; + struct { char dummy; } fba; struct { + mdsk_init_io_t iib; + mdsk_rw_io_t iob; + mdsk_setup_data_t setup; + long *label; + } mdsk; + struct { char dummy; } ckd; - struct { - int blk_per_trk; - } eckd; } private; + struct wait_queue *wait_q; } dasd_information_t; -typedef struct { - int start_unit; - int stop_unit; - int blksize; -} format_data_t; +extern dasd_information_t *dasd_info[]; + +#include "dasd_erp.h" typedef struct { int (*ck_devinfo) (dev_info_t *); cqr_t *(*get_req_ccw) (int, struct request *); - cqr_t *(*rw_label) (int, int, char *); int (*ck_characteristics) (dasd_characteristics_t *); - int (*fill_sizes) (int); + cqr_t *(*fill_sizes_first) (int); + int (*fill_sizes_last) (int); int (*dasd_format) (int, format_data_t *); + void (*fill_geometry) (int, struct hd_geometry *); + dasd_era_t (*erp_examine) (cqr_t *, devstat_t *); } dasd_operations_t; -extern dasd_information_t *dasd_info[]; +extern dasd_operations_t *dasd_disciplines[]; + +/* Prototypes */ +int dasd_start_IO (cqr_t * cqr); #endif /* DASD_TYPES_H */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/mdisk.c linux.16p3/drivers/s390/block/mdisk.c --- linux.vanilla/drivers/s390/block/mdisk.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/block/mdisk.c Mon May 15 16:34:41 2000 @@ -38,6 +38,7 @@ /* Added statement HSM 12/03/99 */ #include +#include #define MAJOR_NR MDISK_MAJOR /* force definitions on in blk.h */ @@ -637,7 +638,7 @@ * queues and marks a bottom half. * */ -void do_mdisk_interrupt(void) +void do_mdisk_interrupt(struct pt_regs *regs, __u16 code) { u16 code; mdisk_Dev *dev; @@ -713,7 +714,7 @@ ,MAJOR_NR); return MAJOR_NR; } - + register_external_interrupt(0x2603,do_mdisk_interrupt); /* * setup global major dependend structures */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/block/xpram.c linux.16p3/drivers/s390/block/xpram.c --- linux.vanilla/drivers/s390/block/xpram.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/block/xpram.c Mon May 15 16:34:41 2000 @@ -0,0 +1,1037 @@ + +/* + * xpram.c -- the S/390 expanded memory RAM-disk + * + * significant parts of this code are based on + * the sbull device driver presented in + * A. Rubini: Linux Device Drivers + * + * Author of XPRAM specific coding: Reinhard Buendgen + * buendgen@de.ibm.com + * + * External interfaces: + * Interfaces to linux kernel + * xpram_setup: read kernel parameters (see init/main.c) + * xpram_init: initialize device driver (see drivers/block/ll_rw_blk.c) + * Module interfaces + * init_module + * cleanup_module + * Device specific file operations + * xpram_iotcl + * xpram_open + * xpram_release + * + * "ad-hoc" partitioning: + * the expanded memory can be partitioned among several devices + * (with different minors). The partitioning set up can be + * set by kernel or module parameters (int devs & int sizes[]) + * + * module parameters: devs= and sizes= + * kernel parameters: xpram_parts= + * note: I did not succeed in parsing numbers + * for module parameters of type string "s" ?!? + * + * Other kenel files/modules affected(gerp for "xpram" or "XPRAM": + * drivers/s390/block/Config.in + * drivers/s390/block/Makefile + * include/linux/blk.h + * include/linux/major.h + * init/main.c + * drivers/block/s390/block/ll_rw_blk.c + * + * + * Potential future improvements: + * request clustering: first coding started not yet tested or integrated + * I doubt that it really pays off + * generic hard disk support to replace ad-hoc partitioning + * + * Tested with 2.2.14 (under VM) + */ + + +#ifdef MODULE +# ifndef __KERNEL__ +# define __KERNEL__ +# endif +# define __NO_VERSION__ /* don't define kernel_version in module.h */ +#endif /* MODULE */ + +#include +#include + +#ifdef MODULE +char kernel_version [] = UTS_RELEASE; +#endif + +#include +#include /* printk() */ +#include /* kmalloc() */ +#include /* everything... */ +#include /* error codes */ +#include +#include /* size_t */ +#include /* isdigit, isxdigit */ +#include /* O_ACCMODE */ +#include /* HDIO_GETGEO */ + +#include /* cli(), *_flags */ +#include /* put_user */ + +/* + define the debug levels: + - 0 No debugging output to console or syslog + - 1 Log internal errors to syslog, ignore check conditions + - 2 Log internal errors and check conditions to syslog + - 3 Log internal errors to console, log check conditions to syslog + - 4 Log internal errors and check conditions to console + - 5 panic on internal errors, log check conditions to console + - 6 panic on both, internal errors and check conditions + */ +#define XPRAM_DEBUG 4 + +#define PRINTK_HEADER XPRAM_NAME + +#if XPRAM_DEBUG > 0 +#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER "debug:" x ) +#define PRINT_INFO(x...) printk ( KERN_INFO PRINTK_HEADER "info:" x ) +#define PRINT_WARN(x...) printk ( KERN_WARNING PRINTK_HEADER "warning:" x ) +#define PRINT_ERR(x...) printk ( KERN_ERR PRINTK_HEADER "error:" x ) +#define PRINT_FATAL(x...) panic ( PRINTK_HEADER "panic:"x ) +#else +#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER "debug:" x ) +#define PRINT_INFO(x...) printk ( KERN_DEBUG PRINTK_HEADER "info:" x ) +#define PRINT_WARN(x...) printk ( KERN_DEBUG PRINTK_HEADER "warning:" x ) +#define PRINT_ERR(x...) printk ( KERN_DEBUG PRINTK_HEADER "error:" x ) +#define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER "panic:" x ) +#endif + +#define MAJOR_NR xpram_major /* force definitions on in blk.h */ +int xpram_major; /* must be declared before including blk.h */ + + +#define DEVICE_NR(device) MINOR(device) /* xpram has no partition bits */ +#define DEVICE_NAME "xpram" /* name for messaging */ +#define DEVICE_INTR xpram_intrptr /* pointer to the bottom half */ +#define DEVICE_NO_RANDOM /* no entropy to contribute */ + + +#define DEVICE_OFF(d) /* do-nothing */ + +#define DEVICE_REQUEST *xpram_dummy_device_request /* dummy function variable + * to prevent warnings + */ + +#include + +#include "xpram.h" /* local definitions */ + +/* + * Non-prefixed symbols are static. They are meant to be assigned at + * load time. Prefixed symbols are not static, so they can be used in + * debugging. They are hidden anyways by register_symtab() unless + * XPRAM_DEBUG is defined. + */ + +static int major = XPRAM_MAJOR; +static int devs = XPRAM_DEVS; +static int rahead = XPRAM_RAHEAD; +static int sizes[XPRAM_MAX_DEVS] = { 0, }; +static int blksize = XPRAM_BLKSIZE; +static int hardsect = XPRAM_HARDSECT; + +int xpram_devs, xpram_rahead; +int xpram_blksize, xpram_hardsect; +int xpram_mem_avail = 0; +int xpram_sizes[XPRAM_MAX_DEVS]; + + +MODULE_PARM(devs,"i"); +MODULE_PARM(sizes,"1-" __MODULE_STRING(XPRAM_MAX_DEVS) "i"); + +MODULE_PARM_DESC(devs, "number of devices (\"partitions\"), " \ + "the default is " __MODULE_STRING(XPRAM_DEVS) "\n"); +MODULE_PARM_DESC(sizes, "list of device (partition) sizes " \ + "the defaults are 0s \n" \ + "All devices with size 0 equally partition the " + "remaining space on the expanded strorage not " + "claimed by explicit sizes\n"); + + + +/* The following items are obtained through kmalloc() in init_module() */ + +Xpram_Dev *xpram_devices = NULL; +int *xpram_blksizes = NULL; +int *xpram_hardsects = NULL; +int *xpram_offsets = NULL; /* partition offsets */ + +#define MIN(x,y) ((x) < (y) ? (x) : (y)) +#define MAX(x,y) ((x) > (y) ? (x) : (y)) + +/* + * compute nearest multiple of 4 , argument must be non-negative + * the macros used depends on XPRAM_KB_IN_PG = 4 + */ + +#define NEXT4(x) ((x & 0x3) ? (x+4-(x &0x3)) : (x)) /* increment if needed */ +#define LAST4(x) ((x & 0x3) ? (x-4+(x & 0x3)) : (x)) /* decrement if needed */ + +#if 0 /* this is probably not faster than the previous code */ +#define NEXT4(x) ((((x-1)>>2)>>2)+4) /* increment if needed */ +#define LAST4(x) (((x+3)>>2)<<2) /* decrement if needed */ +#endif + +/* integer formats */ +#define XPRAM_INVALF -1 /* invalid */ +#define XPRAM_HEXF 0 /* hexadecimal */ +#define XPRAM_DECF 1 /* decimal */ + +/* + * parsing operations (needed for kernel parameter parsing) + */ + +/* ------------------------------------------------------------------------- + * sets the string pointer after the next comma + * + * argument: strptr pointer to string + * side effect: strptr points to endof string or to position of the next + * comma + * ------------------------------------------------------------------------*/ +static void +xpram_scan_to_next_comma (char **strptr) +{ + while ( ((**strptr) != ',') && (**strptr) ) + (*strptr)++; +} + +/* ------------------------------------------------------------------------- + * interpret character as hex-digit + * + * argument: c charcter + * result: c interpreted as hex-digit + * note: can be used to read digits for any base <= 16 + * ------------------------------------------------------------------------*/ +static int +xpram_get_hexdigit (char c) +{ + if ((c >= '0') && (c <= '9')) + return c - '0'; + if ((c >= 'a') && (c <= 'f')) + return c + 10 - 'a'; + if ((c >= 'A') && (c <= 'F')) + return c + 10 - 'A'; + return -1; +} + +/*-------------------------------------------------------------------------- + * Check format of unsigned integer + * + * Argument: strptr pointer to string + * result: -1 if strptr does not start with a digit + * (does not start an integer) + * 0 if strptr starts a positive hex-integer with "0x" + * 1 if strptr start a positive decimal integer + * + * side effect: if strptr start a positive hex-integer then strptr is + * set to the character after the "0x" + *-------------------------------------------------------------------------*/ +static int +xpram_int_format(char **strptr) +{ + if ( !isdigit(**strptr) ) + return XPRAM_INVALF; + if ( (**strptr == '0') + && ( (*((*strptr)+1) == 'x') || (*((*strptr) +1) == 'X') ) + && isdigit(*((*strptr)+3)) ) { + *strptr=(*strptr)+2; + return XPRAM_HEXF; + } else return XPRAM_DECF; +} + +/*-------------------------------------------------------------------------- + * Read non-negative decimal integer + * + * Argument: strptr pointer to string starting with a non-negative integer + * in decimal format + * result: the value of theinitial integer pointed to by strptr + * + * side effect: strptr is set to the first character following the integer + *-------------------------------------------------------------------------*/ + +static int +xpram_read_decint (char ** strptr) +{ + int res=0; + while ( isdigit(**strptr) ) { + res = (res*10) + xpram_get_hexdigit(**strptr); + (*strptr)++; + } + return res; +} + +/*-------------------------------------------------------------------------- + * Read non-negative hex-integer + * + * Argument: strptr pointer to string starting with a non-negative integer + * in hexformat (without "0x" prefix) + * result: the value of the initial integer pointed to by strptr + * + * side effect: strptr is set to the first character following the integer + *-------------------------------------------------------------------------*/ + +static int +xpram_read_hexint (char ** strptr) +{ + int res=0; + while ( isxdigit(**strptr) ) { + res = (res<<4) + xpram_get_hexdigit(**strptr); + (*strptr)++; + } + return res; +} +/*-------------------------------------------------------------------------- + * Read non-negative integer + * + * Argument: strptr pointer to string starting with a non-negative integer + (either in decimal- or in hex-format + * result: the value of the initial integer pointed to by strptr + * in case of a parsing error the result is -EINVAL + * + * side effect: strptr is set to the first character following the integer + *-------------------------------------------------------------------------*/ + +static int +xpram_read_int (char ** strptr) +{ + switch ( xpram_int_format(strptr) ) { + case XPRAM_INVALF: return -EINVAL; + case XPRAM_HEXF: return xpram_read_hexint(strptr); + case XPRAM_DECF: return xpram_read_decint(strptr); + default: return -EINVAL; + } +} + +/*-------------------------------------------------------------------------- + * Read size + * + * Argument: strptr pointer to string starting with a non-negative integer + * followed optionally by a size modifier: + * k or K for kilo (default), + * m or M for mega + * g or G for giga + * result: the value of the initial integer pointed to by strptr + * multiplied by the modifier value devided by 1024 + * in case of a parsing error the result is -EINVAL + * + * side effect: strptr is set to the first character following the size + *-------------------------------------------------------------------------*/ + +static int +xpram_read_size (char ** strptr) +{ + int res; + + res=xpram_read_int(strptr); + if ( res < 0 )return res; + switch ( **strptr ) { + case 'g': + case 'G': res=res*1024; + case 'm': + case 'M': res=res*1024; + case 'k' : + case 'K' : (* strptr)++; + } + + return res; +} + + +/*-------------------------------------------------------------------------- + * Read tail of comma separated size list ",i1,i2,...,in" + * + * Arguments:strptr pointer to string. It is assumed that the string has + * the format (",")* + * maxl integer describing the maximal number of elements in the + list pointed to by strptr, max must be > 0. + * ilist array of dimension >= maxl of integers to be modified + * + * result: -EINVAL if the list is longer than maxl + * 0 otherwise + * + * side effects: for j=1,...,n ilist[ij] is set to the value of ij if it is + * a valid non-negative integer and to -EINVAL otherwise + * if no comma is found where it is expected an entry in + * ilist is set to -EINVAL + *-------------------------------------------------------------------------*/ +static int +xpram_read_size_list_tail (char ** strptr, int maxl, int * ilist) +{ + int i=0; + char *str = *strptr; + int res=0; + + while ( (*str == ',') && (i < maxl) ) { + str++; + ilist[i] = xpram_read_size(&str); + if ( ilist[i] == -EINVAL ) { + xpram_scan_to_next_comma(&str); + res = -EINVAL; + } + i++; + } + return res; +#if 0 /* be lenient about trailing stuff */ + if ( *str != 0 && *str != ' ' ) { + ilist[MAX(i-1,0)] = -EINVAL; + return -EINVAL; + } else return 0; +#endif +} + + +/* + * expanded memory operations + */ + + +/*--------------------------------------------------------------------*/ +/* Copy expanded memory page (4kB) into main memory */ +/* Arguments */ +/* page_addr: address of target page */ +/* xpage_index: index of expandeded memory page */ +/* Return value */ +/* 0: if operation succeeds */ +/* non-0: otherwise */ +/*--------------------------------------------------------------------*/ +long xpram_page_in (unsigned long page_addr, unsigned long xpage_index) +{ + long cc=0; + unsigned long real_page_addr = __pa(page_addr); + __asm__ __volatile__ ( + " lr 1,%1 \n" /* r1 = real_page_addr */ + " lr 2,%2 \n" /* r2 = xpage_index */ + " .long 0xb22e0012 \n" /* pgin r1,r2 */ + /* copy page from expanded memory */ + "0: ipm %0 \n" /* save status (cc & program mask */ + " srl %0,28(0) \n" /* cc into least significant bits */ + "1: \n" /* we are done */ + ".section .fixup,\"ax\"\n" /* start of fix up section */ + "2: lhi %0,2 \n" /* return unused condition code 2 */ + " bras 1,3f \n" /* safe label 1: in r1 and goto 3 */ + " .long 1b \n" /* literal containing label 1 */ + "3: l 1,0(1) \n" /* load label 1 address into r1 */ + " br 1 \n" /* goto label 1 (across sections) */ + ".previous \n" /* back in text section */ + ".section __ex_table,\"a\"\n" /* start __extable */ + " .align 4 \n" + " .long 0b,2b \n" /* failure point 0, fixup code 2 */ + ".previous \n" + : "=d" (cc) : "d" (real_page_addr), "d" (xpage_index) : "cc", "1", "2" + ); + switch (cc) { + case 0: return 0; + case 1: return -EIO; + case 2: return -ENXIO; + case 3: return -ENXIO; + default: return -EIO; /* should not happen */ + }; +} + +/*--------------------------------------------------------------------*/ +/* Copy a 4kB page of main memory to an expanded memory page */ +/* Arguments */ +/* page_addr: address of source page */ +/* xpage_index: index of expandeded memory page */ +/* Return value */ +/* 0: if operation succeeds */ +/* non-0: otherwise */ +/*--------------------------------------------------------------------*/ +long xpram_page_out (unsigned long page_addr, unsigned long xpage_index) +{ + long cc=0; + unsigned long real_page_addr = __pa(page_addr); + __asm__ __volatile__ ( + " lr 1,%1 \n" /* r1 = mem_page */ + " lr 2,%2 \n" /* r2 = rpi */ + " .long 0xb22f0012 \n" /* pgout r1,r2 */ + /* copy page from expanded memory */ + "0: ipm %0 \n" /* save status (cc & program mask */ + " srl %0,28(0) \n" /* cc into least significant bits */ + "1: \n" /* we are done */ + ".section .fixup,\"ax\"\n" /* start of fix up section */ + "2: lhi %0,2 \n" /* return unused condition code 2 */ + " bras 1,3f \n" /* safe label 1: in r1 and goto 3 */ + " .long 1b \n" /* literal containing label 1 */ + "3: l 1,0(1) \n" /* load label 1 address into r1 */ + " br 1 \n" /* goto label 1 (across sections) */ + ".previous \n" /* back in text section */ + ".section __ex_table,\"a\"\n" /* start __extable */ + " .align 4 \n" + " .long 0b,2b \n" /* failure point 0, fixup code 2 */ + ".previous \n" + : "=d" (cc) : "d" (real_page_addr), "d" (xpage_index) : "cc", "1", "2" + ); + switch (cc) { + case 0: return 0; + case 1: return -EIO; + case 2: { PRINT_ERR("expanded storage lost!\n"); return -ENXIO; } + case 3: return -ENXIO; + default: return -EIO; /* should not happen */ + } +} + +/*--------------------------------------------------------------------*/ +/* Measure expanded memory */ +/* Return value */ +/* size of expanded memory in kB (must be a multipe of 4) */ +/*--------------------------------------------------------------------*/ +int xpram_size(void) +{ + long cc=0; + unsigned long base=0; + unsigned long po, pi, rpi; /* page index order, page index */ + + unsigned long mem_page = __get_free_page(GFP_KERNEL); + + /* for po=0,1,2,... try to move in page number base+(2^po)-1 */ + pi=1; + for (po=0; po <= 32; po++) { /* pi = 2^po */ + cc=xpram_page_in(mem_page,base+pi-1); + if ( cc ) break; + pi <<= 1; + } + if ( cc && (po < 31 ) ) { + pi >>=1; + base += pi; + pi >>=1; + for ( ; pi > 0; pi >>= 1) { + rpi = pi - 1; + cc=xpram_page_in(mem_page,base+rpi); + if ( !cc ) base += pi; + } + } + + free_page (mem_page); + + if ( cc && (po < 31) ) + return (XPRAM_KB_IN_PG * base); + else /* return maximal value possible */ + return INT_MAX; +} + +/* + * Open and close + */ + +int xpram_open (struct inode *inode, struct file *filp) +{ + Xpram_Dev *dev; /* device information */ + int num = MINOR(inode->i_rdev); + + + if (num >= xpram_devs) return -ENODEV; + dev = xpram_devices + num; + + PRINT_DEBUG("calling xpram_open for device %d (size %dkB, usage: %d)\n", num,dev->size,atomic_read(&(dev->usage))); + + atomic_inc(&(dev->usage)); + MOD_INC_USE_COUNT; + return 0; /* success */ +} + +int xpram_release (struct inode *inode, struct file *filp) +{ + Xpram_Dev *dev = xpram_devices + MINOR(inode->i_rdev); + + PRINT_DEBUG("calling xpram_release for device %d (size %dkB, usage: %d)\n",MINOR(inode->i_rdev) ,dev->size,atomic_read(&(dev->usage))); + + /* + * If the device is closed for the last time, start a timer + * to release RAM in half a minute. The function and argument + * for the timer have been setup in init_module() + */ + if (!atomic_dec_return(&(dev->usage))) { + /* but flush it right now */ + fsync_dev(inode->i_rdev); + invalidate_buffers(inode->i_rdev); + } + MOD_DEC_USE_COUNT; + return(0); +} + + +/* + * The ioctl() implementation + */ + +int xpram_ioctl (struct inode *inode, struct file *filp, + unsigned int cmd, unsigned long arg) +{ + int err, size; + struct hd_geometry *geo = (struct hd_geometry *)arg; + + PRINT_DEBUG("ioctl 0x%x 0x%lx\n", cmd, arg); + switch(cmd) { + + case BLKGETSIZE: /* 0x1260 */ + /* Return the device size, expressed in sectors */ + if (!arg) return -EINVAL; /* NULL pointer: not valid */ + err= 0; /* verify_area_20(VERIFY_WRITE, (long *) arg, sizeof(long)); + * if (err) return err; + */ + put_user ( 1024* xpram_sizes[MINOR(inode->i_rdev)] + / XPRAM_SOFTSECT, + (long *) arg); + return 0; + + case BLKFLSBUF: /* flush, 0x1261 */ + fsync_dev(inode->i_rdev); + if ( suser() )invalidate_buffers(inode->i_rdev); + return 0; + + case BLKRAGET: /* return the readahead value, 0x1263 */ + if (!arg) return -EINVAL; + err = 0; /* verify_area_20(VERIFY_WRITE, (long *) arg, sizeof(long)); + * if (err) return err; + */ + put_user(read_ahead[MAJOR(inode->i_rdev)], (long *)arg); + + return 0; + + case BLKRASET: /* set the readahead value, 0x1262 */ + if (!suser()) return -EACCES; + if (arg > 0xff) return -EINVAL; /* limit it */ + read_ahead[MAJOR(inode->i_rdev)] = arg; + atomic_eieio(); + return 0; + + case BLKRRPART: /* re-read partition table: can't do it, 0x1259 */ + return -EINVAL; + + RO_IOCTLS(inode->i_rdev, arg); /* the default RO operations + * BLKROSET + * BLKROGET + */ + + case HDIO_GETGEO: + /* + * get geometry: we have to fake one... trim the size to a + * multiple of 64 (32k): tell we have 16 sectors, 4 heads, + * whatever cylinders. Tell also that data starts at sector. 4. + */ + size = xpram_mem_avail * 1024 / XPRAM_SOFTSECT; + /* size = xpram_mem_avail * 1024 / xpram_hardsect; */ + size &= ~0x3f; /* multiple of 64 */ + if (geo==NULL) return -EINVAL; + /* + * err=verify_area_20(VERIFY_WRITE, geo, sizeof(*geo)); + * if (err) return err; + */ + + put_user(size >> 6, &geo->cylinders); + put_user( 4, &geo->heads); + put_user( 16, &geo->sectors); + put_user( 4, &geo->start); + + return 0; + } + + return -EINVAL; /* unknown command */ +} + +/* + * The file operations + */ + +struct file_operations xpram_fops = { + NULL, /* lseek: default */ + block_read, + block_write, + NULL, /* xpram_readdir */ + NULL, /* xpram_select */ + xpram_ioctl, + NULL, /* xpram_mmap */ + xpram_open, + NULL, /* flush */ + xpram_release, + block_fsync, + NULL, /* xpram_fasync */ + NULL, + NULL +}; + +/* + * Block-driver specific functions + */ + +void xpram_request(void) +{ + Xpram_Dev *device; + /* u8 *ptr; */ + /* int size; */ + unsigned long page_no; /* expanded memory page number */ + unsigned long sects_to_copy; /* number of sectors to be copied */ + char * buffer; /* local pointer into buffer cache */ + int dev_no; /* device number of request */ + int fault; /* faulty access to expanded memory */ + + while(1) { + INIT_REQUEST; + + fault=0; + dev_no = DEVICE_NR(CURRENT_DEV); + /* Check if the minor number is in range */ + if ( dev_no > xpram_devs ) { + static int count = 0; + if (count++ < 5) /* print the message at most five times */ + PRINT_WARN(" request for unknown device\n"); + end_request(0); + continue; + } + + /* pointer to device structure, from the global array */ + device = xpram_devices + dev_no; + sects_to_copy = CURRENT->current_nr_sectors; + /* does request exceed size of device ? */ + if ( XPRAM_SEC2KB(sects_to_copy) > xpram_sizes[dev_no] ) { + PRINT_WARN(" request past end of device\n"); + end_request(0); + continue; + } + + /* Does request start at page boundery? -- paranoia */ +#if 0 + PRINT_DEBUG(" req %lx, sect %lx, to copy %lx, buf addr %lx\n", (unsigned long) CURRENT, CURRENT->sector, sects_to_copy, (unsigned long) CURRENT->buffer); +#endif + buffer = CURRENT->buffer; +#if XPRAM_SEC_IN_PG != 1 + /* Does request start at an expanded storage page boundery? */ + if ( CURRENT->sector & (XPRAM_SEC_IN_PG - 1) ) { + PRINT_WARN(" request does not start at an expanded storage page boundery\n"); + PRINT_WARN(" referenced sector: %ld\n",CURRENT->sector); + end_request(0); + continue; + } + /* Does request refere to partial expanded storage pages? */ + if ( sects_to_copy & (XPRAM_SEC_IN_PG - 1) ) { + PRINT_WARN(" request referes to a partial expanded storage page\n"); + end_request(0); + continue; + } +#endif /* XPRAM_SEC_IN_PG != 1 */ + /* Is request buffer aligned with kernel pages? */ + if ( ((unsigned long)buffer) & (XPRAM_PGSIZE-1) ) { + PRINT_WARN(" request buffer is not aligned with kernel pages\n"); + end_request(0); + continue; + } + + /* which page of expanded storage is affected first? */ + page_no = (xpram_offsets[dev_no] >> XPRAM_KB_IN_PG_ORDER) + + (CURRENT->sector >> XPRAM_SEC_IN_PG_ORDER); + +#if 0 + PRINT_DEBUG("request: %d ( dev %d, copy %d sectors, at page %d ) \n", CURRENT->cmd,dev_no,sects_to_copy,page_no); +#endif + + switch(CURRENT->cmd) { + case READ: + do { + if ( (fault=xpram_page_in((unsigned long)buffer,page_no)) ) { + PRINT_WARN("xpram(dev %d): page in failed for page %ld.\n",dev_no,page_no); + break; + } + sects_to_copy -= XPRAM_SEC_IN_PG; + buffer += XPRAM_PGSIZE; + page_no++; + } while ( sects_to_copy > 0 ); + break; + case WRITE: + do { + if ( (fault=xpram_page_out((unsigned long)buffer,page_no)) + ) { + PRINT_WARN("xpram(dev %d): page out failed for page %ld.\n",dev_no,page_no); + break; + } + sects_to_copy -= XPRAM_SEC_IN_PG; + buffer += XPRAM_PGSIZE; + page_no++; + } while ( sects_to_copy > 0 ); + break; + default: + /* can't happen */ + end_request(0); + continue; + } + if ( fault ) end_request(0); + else end_request(1); /* success */ + } +} + +/* + * Kernel interfaces + */ + +/* + * Parses the kernel parameters given in the kernel parameter line. + * The expected format is + * [","]* + * where + * devices is a positive integer that initializes xpram_devs + * each size is a non-negative integer possibly followed by a + * magnitude (k,K,m,M,g,G), the list of sizes initialises + * xpram_sizes + * + * Arguments + * str: substring of kernel parameter line that contains xprams + * kernel parameters. + * ints: not used + * + * Side effects + * the global variabls devs is set to the value of + * and sizes[i] is set to the i-th + * partition size (if provided). A parsing error of a value + * results in this value being set to -EINVAL. + */ +void xpram_setup (char *str, int *ints) +{ + devs = xpram_read_int(&str); + if ( devs != -EINVAL ) + if ( xpram_read_size_list_tail(&str,devs,sizes) < 0 ) + PRINT_ERR("error while reading xpram parameters.\n"); +} + +/* + * initialize xpram device driver + * + * Result: 0 ok + * negative number: negative error code + */ + +int xpram_init(void) +{ + int result, i; + int mem_usable; /* net size of expanded memory */ + int mem_needed=0; /* size of expanded memory needed to fullfill + * requirements of non-zero parameters in sizes + */ + + int mem_auto_no=0; /* number of (implicit) zero parameters in zises */ + int mem_auto; /* automatically determined device size */ + + /* + * Copy the (static) cfg variables to public prefixed ones to allow + * snoozing with a debugger. + */ + + xpram_rahead = rahead; + xpram_blksize = blksize; + xpram_hardsect = hardsect; + + PRINT_INFO("initializing: %s\n",""); + /* check arguments */ + xpram_major = major; + if ( (devs <= 0) || (devs > XPRAM_MAX_DEVS) ) { + PRINT_ERR("invalid number %d of devices\n",devs); + PRINT_ERR("Giving up xpram\n"); + return -EINVAL; + } + xpram_devs = devs; + for (i=0; i < xpram_devs; i++) { + if ( sizes[i] < 0 ) { + PRINT_ERR("Invalid partition size %d kB\n",xpram_sizes[i]); + PRINT_ERR("Giving up xpram\n"); + return -EINVAL; + } else { + xpram_sizes[i] = NEXT4(sizes[i]); /* page align */ + if ( sizes[i] ) mem_needed += xpram_sizes[i]; + else mem_auto_no++; + } + } + + PRINT_DEBUG(" major %d \n", xpram_major); + PRINT_INFO(" number of devices (partitions): %d \n", xpram_devs); + for (i=0; i < xpram_devs; i++) { + if ( sizes[i] ) + PRINT_INFO(" size of partition %d: %d kB\n", i, xpram_sizes[i]); + else + PRINT_INFO(" size of partition %d to be set automatically\n",i); + } + PRINT_DEBUG(" memory needed (for sized partitions): %d kB\n", mem_needed); + PRINT_DEBUG(" partitions to be sized automaticallys: %d\n", mem_auto_no); + +#if 0 + /* Hardsect can't be changed :( */ + /* I try it any way. Yet I must distinguish + * between hardsects (to be changed to 4096) + * and soft sectors, hard-coded for buffer + * sizes within the requests + */ + if (hardsect != 512) { + PRINT_ERR("Can't change hardsect size\n"); + hardsect = xpram_hardsect = 512; + } +#endif + PRINT_INFO(" hardsector size: %dB \n",xpram_hardsect); + + /* + * Register your major, and accept a dynamic number + */ + result = register_blkdev(xpram_major, "xpram", &xpram_fops); + if (result < 0) { + PRINT_ERR("Can't get major %d\n",xpram_major); + PRINT_ERR("Giving up xpram\n"); + return result; + } + if (xpram_major == 0) xpram_major = result; /* dynamic */ + major = xpram_major; /* Use `major' later on to save typing */ + + result = -ENOMEM; /* for the possible errors */ + + /* + * measure expanded memory + */ + + xpram_mem_avail = xpram_size(); + if (!xpram_mem_avail) { + PRINT_ERR("No or not enough expanded memory available\n"); + PRINT_ERR("Giving up xpram\n"); + result = -ENODEV; + goto fail_malloc; + } + PRINT_INFO(" %d kB expanded memory found.\n",xpram_mem_avail ); + + /* + * Assign the other needed values: request, rahead, size, blksize, + * hardsect. All the minor devices feature the same value. + * Note that `xpram' defines all of them to allow testing non-default + * values. A real device could well avoid setting values in global + * arrays if it uses the default values. + */ + + blk_dev[major].request_fn = xpram_request; + read_ahead[major] = xpram_rahead; + + /* we want to have XPRAM_UNUSED blocks security buffer between devices */ + mem_usable=xpram_mem_avail-(XPRAM_UNUSED*(xpram_devs-1)); + if ( mem_needed > mem_usable ) { + PRINT_ERR("Not enough expanded memory available\n"); + PRINT_ERR("Giving up xpram\n"); + goto fail_malloc; + } + + /* + * partitioning: + * xpram_sizes[i] != 0; partition i has size xpram_sizes[i] kB + * else: ; all partitions i with xpram_sizesxpram_size[i] + * partition equally the remaining space + */ + + if ( mem_auto_no ) { + mem_auto=LAST4((mem_usable-mem_needed)/mem_auto_no); + PRINT_INFO(" automatically determined partition size: %d kB\n", mem_auto); + for (i=0; i < xpram_devs; i++) + if (xpram_sizes[i] == 0) xpram_sizes[i] = mem_auto; + } + blk_size[major]=xpram_sizes; + + xpram_offsets = kmalloc(xpram_devs * sizeof(int), GFP_KERNEL); + if (!xpram_offsets) + goto fail_malloc; + xpram_offsets[0] = 0; + for (i=1; i < xpram_devs; i++) + xpram_offsets[i] = xpram_offsets[i-1] + xpram_sizes[i-1] + XPRAM_UNUSED; + +#if 0 + for (i=0; i < xpram_devs; i++) + PRINT_DEBUG(" device(%d) offset = %d kB, size = %d kB\n",i, xpram_offsets[i], xpram_sizes[i]); +#endif + + xpram_blksizes = kmalloc(xpram_devs * sizeof(int), GFP_KERNEL); + if (!xpram_blksizes) + goto fail_malloc_blksizes; + for (i=0; i < xpram_devs; i++) /* all the same blocksize */ + xpram_blksizes[i] = xpram_blksize; + blksize_size[major]=xpram_blksizes; + + xpram_hardsects = kmalloc(xpram_devs * sizeof(int), GFP_KERNEL); + if (!xpram_hardsects) + goto fail_malloc_hardsects; + for (i=0; i < xpram_devs; i++) /* all the same hardsect */ + xpram_hardsects[i] = xpram_hardsect; + hardsect_size[major]=xpram_hardsects; + + /* + * allocate the devices -- we can't have them static, as the number + * can be specified at load time + */ + + xpram_devices = kmalloc(xpram_devs * sizeof (Xpram_Dev), GFP_KERNEL); + if (!xpram_devices) + goto fail_malloc_devices; + memset(xpram_devices, 0, xpram_devs * sizeof (Xpram_Dev)); + for (i=0; i < xpram_devs; i++) { + /* data and usage remain zeroed */ + xpram_devices[i].size = xpram_sizes[i]; /* size in kB not in bytes */ + atomic_set(&(xpram_devices[i].usage),0); + } + + return 0; /* succeed */ + + fail_malloc_blksizes: + kfree (xpram_offsets); + fail_malloc_hardsects: + kfree (xpram_blksizes); + blksize_size[major] = NULL; + fail_malloc_devices: + kfree(xpram_hardsects); + hardsect_size[major] = NULL; + fail_malloc: + read_ahead[major] = 0; + blk_dev[major].request_fn = NULL; + unregister_chrdev(major, "xpram"); + return result; +} + +/* + * Finally, the module stuff + */ + +int init_module(void) +{ + int rc = 0; + + PRINT_INFO ("trying to load module\n"); + rc = xpram_init (); + if (rc == 0) { + PRINT_INFO ("Module loaded successfully\n"); + } else { + PRINT_WARN ("Module load returned rc=%d\n", rc); + } + return rc; +} + +void cleanup_module(void) +{ + int i; + + /* first of all, flush it all and reset all the data structures */ + + + for (i=0; i +#include +#include + +/* version dependencies have been confined to a separate file */ + +/* + * Macros to help debugging + */ + +#define XPRAM_NAME "xpram" /* name of device/module */ +#define XPRAM_DEVS 1 /* one partition */ +#define XPRAM_RAHEAD 8 /* no real read ahead */ +#define XPRAM_PGSIZE 4096 /* page size of (expanded) mememory pages + * according to S/390 architecture + */ +#define XPRAM_BLKSIZE XPRAM_PGSIZE /* must be equalt to page size ! */ +#define XPRAM_HARDSECT XPRAM_PGSIZE /* FIXME -- we have to deal with both + * this hard sect size and in some cases + * hard coded 512 bytes which I call + * soft sects: + */ +#define XPRAM_SOFTSECT 512 +#define XPRAM_MAX_DEVS 32 /* maximal number of devices (partitions) */ +#define XPRAM_MAX_DEVS1 33 /* maximal number of devices (partitions) +1 */ + +/* The following macros depend on the sizes above */ + +#define XPRAM_KB_IN_PG 4 /* 4 kBs per page */ +#define XPRAM_KB_IN_PG_ORDER 2 /* 2^? kBs per page */ + +/* Eventhough XPRAM_HARDSECT is set to 4k some data structures use hard + * coded 512 byte sa sector size + */ +#define XPRAM_SEC2KB(x) ((x >> 1) + (x & 1)) /* modifier used to compute size + in kB from number of sectors */ +#define XPRAM_SEC_IN_PG 8 /* 8 sectors per page */ +#define XPRAM_SEC_IN_PG_ORDER 3 /* 2^? sectors per page */ + +#define XPRAM_UNUSED 40 /* unused space between devices, + * in kB, i.e. + * must be a multiple of 4 + */ +/* + * The xpram device is removable: if it is left closed for more than + * half a minute, it is removed. Thus use a usage count and a + * kernel timer + */ + +typedef struct Xpram_Dev { + int size; /* size in KB not in Byte - RB - */ + atomic_t usage; + u8 *data; +} Xpram_Dev; + +void xpram_setup (char *, int *); +int xpram_init(void); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/char/con3215.c linux.16p3/drivers/s390/char/con3215.c --- linux.vanilla/drivers/s390/char/con3215.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/char/con3215.c Mon May 15 16:34:41 2000 @@ -342,6 +342,7 @@ tty->ldisc.write_wakeup) (tty->ldisc.write_wakeup)(tty); wake_up_interruptible(&tty->write_wait); + wake_up_interruptible(&tty->poll_wait); } } @@ -445,22 +446,29 @@ if (count >= TTY_FLIPBUF_SIZE - tty->flip.count) count = TTY_FLIPBUF_SIZE - tty->flip.count - 1; EBCASC(raw->inbuf, count); - if (count == 2 && - strncmp(raw->inbuf, "^c", 2) == 0) { + if (count == 2 && ( + /* hat is 0xb0 in codepage 037 (US etc.) and thus */ + /* converted to 0x5e in ascii ('^') */ + strncmp(raw->inbuf, "^c", 2) == 0 || + /* hat is 0xb0 in several other codepages (German,*/ + /* UK, ...) and thus converted to ascii octal 252 */ + strncmp(raw->inbuf, "\252c", 2) == 0) ) { /* emulate a control C = break */ tty->flip.count++; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; *tty->flip.char_buf_ptr++ = INTR_CHAR(tty); tty_flip_buffer_push(raw->tty); - } else if (count == 2 && - strncmp(raw->inbuf, "^d", 2) == 0) { + } else if (count == 2 && ( + strncmp(raw->inbuf, "^d", 2) == 0 || + strncmp(raw->inbuf, "\252d", 2) == 0) ) { /* emulate a control D = end of file */ tty->flip.count++; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; *tty->flip.char_buf_ptr++ = EOF_CHAR(tty); tty_flip_buffer_push(raw->tty); - } else if (count == 2 && - strncmp(raw->inbuf, "^z", 2) == 0) { + } else if (count == 2 && ( + strncmp(raw->inbuf, "^z", 2) == 0 || + strncmp(raw->inbuf, "\252z", 2) == 0) ) { /* emulate a control Z = suspend */ tty->flip.count++; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; @@ -470,7 +478,8 @@ memcpy(tty->flip.char_buf_ptr, raw->inbuf, count); if (count < 2 || - strncmp(raw->inbuf+count-2, "^n", 2)) { + (strncmp(raw->inbuf+count-2, "^n", 2) || + strncmp(raw->inbuf+count-2, "\252n", 2)) ) { /* don't add the auto \n */ tty->flip.char_buf_ptr[count] = '\n'; memset(tty->flip.flag_buf_ptr, @@ -660,6 +669,7 @@ return -1; raw->flags |= RAW3215_ACTIVE; s390irq_spin_lock_irqsave(raw->irq, flags); + set_cons_dev(raw->irq); raw3215_try_io(raw); s390irq_spin_unlock_irqrestore(raw->irq, flags); @@ -934,6 +944,7 @@ raw = (raw3215_info *) tty->driver_data; raw3215_flush_buffer(raw); wake_up_interruptible(&tty->write_wait); + wake_up_interruptible(&tty->poll_wait); if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && tty->ldisc.write_wakeup) (tty->ldisc.write_wakeup)(tty); @@ -1029,8 +1040,6 @@ if (MACHINE_IS_VM) { cpcmd("TERM CONMODE 3215", NULL, 0); cpcmd("TERM AUTOCR OFF", NULL, 0); - cpcmd("TERM HOLD OFF", NULL, 0); - cpcmd("TERM MORE 5 5", NULL, 0); } kmem_start = (kmem_start + 7) & -8L; @@ -1061,9 +1070,6 @@ if (raw->irq != -1) { register_console(&con3215); - s390irq_spin_lock(raw->irq); - set_cons_dev(raw->irq); - s390irq_spin_unlock(raw->irq); } else { kmem_start = (long) raw; raw3215[0] = NULL; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/char/hwc_con.c linux.16p3/drivers/s390/char/hwc_con.c --- linux.vanilla/drivers/s390/char/hwc_con.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/char/hwc_con.c Mon May 15 16:34:41 2000 @@ -28,6 +28,7 @@ void hwc_console_write(struct console *, const char *, unsigned int); kdev_t hwc_console_device(struct console *); +void hwc_console_unblank (void); #define HWC_CON_PRINT_HEADER "hwc console driver: " @@ -39,7 +40,7 @@ NULL, hwc_console_device, NULL, - NULL, + hwc_console_unblank, NULL, CON_PRINTBUFFER, 0, @@ -70,6 +71,12 @@ return MKDEV(hwc_console_major, hwc_console_minor); } +void +hwc_console_unblank (void) +{ + hwc_unblank (); +} + #endif __initfunc(unsigned long hwc_console_init(unsigned long kmem_start)) @@ -84,12 +91,12 @@ if (hwc_init(&kmem_start) == 0) { + hwc_tty_init (); + #ifdef CONFIG_HWC_CONSOLE register_console(&hwc_console); #endif - - hwc_tty_init(); } else panic (HWC_CON_PRINT_HEADER "hwc initialisation failed !"); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/char/hwc_rw.c linux.16p3/drivers/s390/char/hwc_rw.c --- linux.vanilla/drivers/s390/char/hwc_rw.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/char/hwc_rw.c Mon May 15 16:34:41 2000 @@ -26,6 +26,7 @@ #include #include #include +#include #ifndef MIN #define MIN(a,b) ((a= hwc_data.kmem_start && page < hwc_data.kmem_end) { - memset((void *) page, 0, PAGE_SIZE); +/* memset((void *) page, 0, PAGE_SIZE); */ page_nr = (int) ((page - hwc_data.kmem_start) >> 12); clear_bit(page_nr, &hwc_data.kmem_pages); @@ -693,7 +704,7 @@ release_write_hwcb(); - hwc_data.flags &= ~FLUSH_HWCBS; + hwc_data.flags &= ~HWC_FLUSH; } static int @@ -701,17 +712,28 @@ { write_hwcb_t *hwcb; int retval; + +#ifdef DUMP_HWC_WRITE_ERROR unsigned char *param; param = ext_int_param(); - if (param != hwc_data.current_hwcb) + if (param != hwc_data.current_hwcb) { + internal_print ( + DELAYED_WRITE, + HWC_RW_PRINT_HEADER + "write_event_mask_2 : " + "HWCB address does not fit " + "(expected: 0x%x, got: 0x%x).\n", + hwc_data.current_hwcb, + param); return -EINVAL; + } +#endif hwcb = (write_hwcb_t *) OUT_HWCB; -#ifdef DUMP_HWC_WRITE_ERROR -#if 0 - if (((unsigned char *) hwcb) != param) +#ifdef DUMP_HWC_WRITE_LIST_ERROR + if (((unsigned char *) hwcb) != hwc_data.current_hwcb) { __asm__("LHI 1,0xe22\n\t" "LRA 2,0(0,%0)\n\t" "LRA 3,0(0,%1)\n\t" @@ -722,33 +744,13 @@ :"a"(OUT_HWCB), "a"(hwc_data.current_hwcb), "a"(BUF_HWCB), - "a"(param) + "a" (hwcb) :"1", "2", "3", "4", "5"); + } #endif - if (hwcb->response_code != 0x0020) -#if 0 - internal_print(DELAYED_WRITE, HWC_RW_PRINT_HEADER - "\n************************ error in write_event_data_2()\n" - "OUT_HWCB: 0x%x\n" - "BUF_HWCB: 0x%x\n" - "response_code: 0x%x\n" - "hwc_data.hwcb_count: %d\n" - "hwc_data.kmem_pages: 0x%x\n" - "hwc_data.ioctls.kmem_hwcb: %d\n" - "hwc_data.ioctls.max_hwcb: %d\n" - "hwc_data.kmem_start: 0x%x\n" - "hwc_data.kmem_end: 0x%x\n" - "*****************************************************\n", - OUT_HWCB, - BUF_HWCB, - hwcb->response_code, - hwc_data.hwcb_count, - hwc_data.kmem_pages, - hwc_data.ioctls.kmem_hwcb, - hwc_data.ioctls.max_hwcb, - hwc_data.kmem_start, - hwc_data.kmem_end); -#endif + +#ifdef DUMP_HWC_WRITE_ERROR + if (hwcb->response_code != 0x0020) { __asm__("LHI 1,0xe21\n\t" "LRA 2,0(0,%0)\n\t" "LRA 3,0(0,%1)\n\t" @@ -761,19 +763,30 @@ "a"(BUF_HWCB), "a"(&(hwc_data.hwcb_count)) :"1", "2", "3", "4", "5"); + } #endif if (hwcb->response_code == 0x0020) { retval = OUT_HWCB_CHAR; release_write_hwcb(); - } else + } else { + internal_print ( + DELAYED_WRITE, + HWC_RW_PRINT_HEADER + "write_event_data_2 : " + "failed operation " + "(response code: 0x%x " + "HWCB address: 0x%x).\n", + hwcb->response_code, + hwcb); retval = -EIO; + } hwc_data.current_servc = 0; hwc_data.current_hwcb = NULL; - if (hwc_data.flags & FLUSH_HWCBS) + if (hwc_data.flags & HWC_FLUSH) flush_hwcbs(); return retval; @@ -860,7 +873,7 @@ static int do_hwc_write ( int from_user, - const unsigned char *msg, + unsigned char *msg, unsigned int count, unsigned char code, unsigned char write_time) @@ -891,7 +904,7 @@ else orig_ch = msg[i_msg]; if (code == CODE_EBCDIC) - ch = _ebcasc[orig_ch]; + ch = (MACHINE_IS_VM ? _ebcasc[orig_ch] : _ebcasc_500[orig_ch]); else ch = orig_ch; @@ -980,7 +993,10 @@ hwc_data.obuf[hwc_data.obuf_start + obuf_cursor++] = (code == CODE_ASCII) ? - _ascebc[orig_ch]:orig_ch; + (MACHINE_IS_VM ? + _ascebc[orig_ch] : + _ascebc_500[orig_ch]) : + orig_ch; } if (obuf_cursor > obuf_count) obuf_count = obuf_cursor; @@ -1042,7 +1058,8 @@ spin_lock_irqsave(&hwc_data.lock, flags); - retval = do_hwc_write(from_user, msg, count, hwc_data.ioctls.code, + retval = do_hwc_write (from_user, (unsigned char *) msg, + count, hwc_data.ioctls.code, IMMEDIATE_WRITE); spin_unlock_irqrestore(&hwc_data.lock, flags); @@ -1123,7 +1140,7 @@ if (hwc_data.current_servc != HWC_CMDW_WRITEDATA) flush_hwcbs(); else - hwc_data.flags |= FLUSH_HWCBS; + hwc_data.flags |= HWC_FLUSH; } if (flag & IN_WRITE_BUF) { hwc_data.obuf_cursor = 0; @@ -1302,10 +1319,15 @@ if (hwc_data.ioctls.echo) do_hwc_write(0, start, count, CODE_EBCDIC, IMMEDIATE_WRITE); - if (hwc_data.ioctls.code == CODE_ASCII) + if (hwc_data.ioctls.code == CODE_ASCII) { + if (MACHINE_IS_VM) EBCASC(start, count); - - store_hwc_input(start, count); + else + EBCASC_500 (start, count); + } + if (hwc_data.calls != NULL) + if (hwc_data.calls->move_input != NULL) + (hwc_data.calls->move_input) (start, count); return count; } @@ -1550,6 +1572,13 @@ case 0x60F0 : case 0x62F0 : + internal_print ( + IMMEDIATE_WRITE, + HWC_RW_PRINT_HEADER + "unconditional read: " + "got interrupt and tried to read input, " + "but nothing found (response code=0x%x).\n", + hwcb->response_code); return 0; case 0x0100 : @@ -1623,13 +1652,11 @@ unsigned int condition_code; int retval; - memcpy(hwc_data.page, &init_hwcb_template, sizeof(init_hwcb_t)); - condition_code = service_call(HWC_CMDW_WRITEMASK, hwc_data.page); #ifdef DUMP_HWC_INIT_ERROR - if (condition_code != HWC_COMMAND_INITIATED) + if (condition_code == HWC_NOT_OPERATIONAL) __asm__("LHI 1,0xe10\n\t" "L 2,0(0,%0)\n\t" "LRA 3,0(0,%1)\n\t" @@ -1667,12 +1694,18 @@ if (hwcb->hwc_receive_mask & ET_PMsgCmd_Mask) hwc_data.write_prio = 1; - if (hwcb->hwc_send_mask & ET_OpCmd_Mask) + if (hwcb->hwc_send_mask & ET_OpCmd_Mask) { + internal_print (DELAYED_WRITE, + HWC_RW_PRINT_HEADER + "capable of receipt of commands\n"); hwc_data.read_nonprio = 1; - - if (hwcb->hwc_send_mask & ET_PMsgCmd_Mask) + } + if (hwcb->hwc_send_mask & ET_PMsgCmd_Mask) { + internal_print (DELAYED_WRITE, + HWC_RW_PRINT_HEADER + "capable of receipt of priority commands\n"); hwc_data.read_nonprio = 1; - + } if ((hwcb->response_code != 0x0020) || (!hwc_data.write_nonprio) || ((!hwc_data.read_nonprio) && (!hwc_data.read_prio))) @@ -1685,7 +1718,7 @@ :"a"(hwcb), "a"(&(hwcb->response_code)) :"1", "2", "3"); #else - retval = -EIO + retval = -EIO; #endif hwc_data.current_servc = 0; @@ -1771,9 +1804,56 @@ } int +do_hwc_init (void) +{ + int retval; + + memcpy (hwc_data.page, &init_hwcb_template, sizeof (init_hwcb_t)); + + do { + + retval = write_event_mask_1 (); + + if (retval == -EBUSY) { + + hwc_data.flags |= HWC_INIT; + + asm volatile ("STCTL 0,0,%0":"=m" (cr0)); + cr0_save = cr0; + cr0 |= 0x00000200; + cr0 &= 0xFFFFF3AC; + asm volatile ("LCTL 0,0,%0"::"m" (cr0):"memory"); + + asm volatile ("STOSM %0,0x01" + :"=m" (psw_mask)::"memory"); + + while (!(hwc_data.flags & HWC_INTERRUPT)) + barrier (); + + asm volatile ("STNSM %0,0xFE" + :"=m" (psw_mask)::"memory"); + + asm volatile ("LCTL 0,0,%0" + ::"m" (cr0_save):"memory"); + + hwc_data.flags &= ~HWC_INIT; + } + } while (retval == -EBUSY); + + if (retval == -EIO) { + hwc_data.flags |= HWC_BROKEN; + printk (HWC_RW_PRINT_HEADER "HWC not operational\n"); + } + return retval; +} + +void do_hwc_interrupt (struct pt_regs *regs, __u16 code); + +int hwc_init (unsigned long *kmem_start) { int retval; + #ifdef BUFFER_STRESS_TEST init_hwcb_t *hwcb; @@ -1781,17 +1861,11 @@ #endif -#ifdef CONFIG_3215 - if (MACHINE_IS_VM) - return kmem_start; -#endif + if (register_external_interrupt (0x2401, do_hwc_interrupt) != 0) + panic ("Couldn't request external interrupts 0x2401"); spin_lock_init(&hwc_data.lock); - retval = write_event_mask_1(); - if (retval < 0) - return retval; - #ifdef USE_VM_DETECTION if (MACHINE_IS_VM) { @@ -1813,6 +1887,8 @@ *kmem_start += hwc_data.ioctls.kmem_hwcb * PAGE_SIZE; hwc_data.kmem_end = *kmem_start - 1; + retval = do_hwc_init (); + ctl_set_bit(0, 9); #ifdef BUFFER_STRESS_TEST @@ -1834,13 +1910,52 @@ #endif - return retval; + return /*retval */ 0; +} + +signed int +hwc_register_calls (hwc_high_level_calls_t * calls) +{ + if (calls == NULL) + return -EINVAL; + + if (hwc_data.calls != NULL) + return -EBUSY; + + hwc_data.calls = calls; + return 0; +} + +signed int +hwc_unregister_calls (hwc_high_level_calls_t * calls) +{ + if (hwc_data.calls == NULL) + return -EINVAL; + + if (calls != hwc_data.calls) + return -EINVAL; + + hwc_data.calls = NULL; + return 0; } void -do_hwc_interrupt (void) +do_hwc_interrupt (struct pt_regs *regs, __u16 code) { + if (hwc_data.flags & HWC_INIT) { + + hwc_data.flags |= HWC_INTERRUPT; + } else if (hwc_data.flags & HWC_BROKEN) { + + if (!do_hwc_init ()) { + hwc_data.flags &= ~HWC_BROKEN; + internal_print (DELAYED_WRITE, + HWC_RW_PRINT_HEADER + "delayed HWC setup after" + " temporary breakdown\n"); + } + } else { spin_lock(&hwc_data.lock); if (!hwc_data.current_servc) { @@ -1869,10 +1984,34 @@ write_event_data_1(); } + if (hwc_data.calls != NULL) + if (hwc_data.calls->wake_up != NULL) + (hwc_data.calls->wake_up) (); + spin_unlock (&hwc_data.lock); + } +} - wake_up_hwc_tty(); +void +hwc_unblank (void) +{ + spin_lock (&hwc_data.lock); spin_unlock(&hwc_data.lock); + + asm volatile ("STCTL 0,0,%0":"=m" (cr0)); + cr0_save = cr0; + cr0 |= 0x00000200; + cr0 &= 0xFFFFF3AC; + asm volatile ("LCTL 0,0,%0"::"m" (cr0):"memory"); + + asm volatile ("STOSM %0,0x01":"=m" (psw_mask)::"memory"); + + while (ALL_HWCB_CHAR) + barrier (); + + asm volatile ("STNSM %0,0xFE":"=m" (psw_mask)::"memory"); + + asm volatile ("LCTL 0,0,%0"::"m" (cr0_save):"memory"); } int diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/char/hwc_rw.h linux.16p3/drivers/s390/char/hwc_rw.h --- linux.vanilla/drivers/s390/char/hwc_rw.h Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/char/hwc_rw.h Mon May 15 16:34:41 2000 @@ -12,31 +12,12 @@ #include -#ifndef __HWC_RW_C__ - -extern int hwc_init(unsigned long *); - -extern int hwc_write(int from_user, const unsigned char *, unsigned int); - -extern unsigned int hwc_chars_in_buffer(unsigned char); - -extern unsigned int hwc_write_room(unsigned char); - -extern void hwc_flush_buffer(unsigned char); - -extern signed int hwc_ioctl(unsigned int, unsigned long); - -extern void do_hwc_interrupt(void); - -extern int hwc_printk(const char *, ...); - -#else - -extern void store_hwc_input(unsigned char*, unsigned int); +typedef struct { -extern void wake_up_hwc_tty(void); + void (*move_input) (unsigned char *, unsigned int); -#endif + void (*wake_up) (void); +} hwc_high_level_calls_t; #define IN_HWCB 1 #define IN_WRITE_BUF 2 @@ -109,5 +90,31 @@ #define CODE_ASCII 0x0 #define CODE_EBCDIC 0x1 + +#ifndef __HWC_RW_C__ + +extern int hwc_init (unsigned long *); + +extern int hwc_write (int from_user, const unsigned char *, unsigned int); + +extern unsigned int hwc_chars_in_buffer (unsigned char); + +extern unsigned int hwc_write_room (unsigned char); + +extern void hwc_flush_buffer (unsigned char); + +extern void hwc_unblank (void); + +extern signed int hwc_ioctl (unsigned int, unsigned long); + +extern void do_hwc_interrupt (void); + +extern int hwc_printk (const char *,...); + +extern signed int hwc_register_calls (hwc_high_level_calls_t *); + +extern signed int hwc_unregister_calls (hwc_high_level_calls_t *); + +#endif #endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/char/hwc_tty.c linux.16p3/drivers/s390/char/hwc_tty.c --- linux.vanilla/drivers/s390/char/hwc_tty.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/char/hwc_tty.c Mon May 15 16:34:41 2000 @@ -19,6 +19,7 @@ #include #include "hwc_rw.h" +#include "hwc_tty.h" #define HWC_TTY_PRINT_HEADER "hwc tty driver: " @@ -33,9 +34,14 @@ unsigned short int buf_count; spinlock_t lock; + + hwc_high_level_calls_t calls; + + hwc_tty_ioctl_t ioctl; } hwc_tty_data_struct; -static hwc_tty_data_struct hwc_tty_data; +static hwc_tty_data_struct hwc_tty_data = +{ /* NULL/0 */ }; static struct tty_driver hwc_tty_driver; static struct tty_struct * hwc_tty_table[1]; static struct termios * hwc_tty_termios[1]; @@ -44,6 +50,9 @@ extern struct termios tty_std_termios; +void hwc_tty_wake_up (void); +void hwc_tty_input (unsigned char *, unsigned int); + static int hwc_tty_open (struct tty_struct *tty, struct file *filp) @@ -57,17 +66,14 @@ hwc_tty_data.tty = tty; tty->low_latency = 0; + hwc_tty_data.calls.wake_up = hwc_tty_wake_up; + hwc_tty_data.calls.move_input = hwc_tty_input; + hwc_register_calls (&(hwc_tty_data.calls)); + return 0; } -void -wake_up_hwc_tty (void) -{ - if ((hwc_tty_data.tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - hwc_tty_data.tty->ldisc.write_wakeup) - (hwc_tty_data.tty->ldisc.write_wakeup)(hwc_tty_data.tty); - wake_up_interruptible(&hwc_tty_data.tty->write_wait); -} +#if 0 static void hwc_tty_close (struct tty_struct *tty, @@ -79,7 +85,10 @@ return; } hwc_tty_data.tty = NULL; + + hwc_unregister_calls (&(hwc_tty_data.calls)); } +#endif static int hwc_tty_write_room (struct tty_struct *tty) @@ -145,7 +154,7 @@ static void hwc_tty_flush_buffer (struct tty_struct *tty) { - wake_up_hwc_tty(); + hwc_tty_wake_up (); } static int @@ -155,36 +164,119 @@ unsigned int cmd, unsigned long arg) { + unsigned long count; + if (tty->flags & (1 << TTY_IO_ERROR)) return -EIO; + switch (cmd) { + case TIOCHWCTTYSINTRC: + count = strlen_user ((const char *) arg); + if (count > HWC_TTY_MAX_CNTL_SIZE) + return -EINVAL; + strncpy_from_user (hwc_tty_data.ioctl.intr_char, + (const char *) arg, count); + + hwc_tty_data.ioctl.intr_char_size = count - 1; + return count; + + case TIOCHWCTTYGINTRC: + return copy_to_user ((void *) arg, + (const void *) hwc_tty_data.ioctl.intr_char, + (long) hwc_tty_data.ioctl.intr_char_size); + + default: return hwc_ioctl(cmd, arg); } +} + +void +hwc_tty_wake_up (void) +{ + if (hwc_tty_data.tty == NULL) + return; + if ((hwc_tty_data.tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && + hwc_tty_data.tty->ldisc.write_wakeup) + (hwc_tty_data.tty->ldisc.write_wakeup) (hwc_tty_data.tty); + wake_up_interruptible (&hwc_tty_data.tty->write_wait); + wake_up_interruptible (&hwc_tty_data.tty->poll_wait); +} void -store_hwc_input (unsigned char *buf, unsigned int count) +hwc_tty_input (unsigned char *buf, unsigned int count) { struct tty_struct *tty = hwc_tty_data.tty; +#if 0 + + if (tty != NULL) { + + if (count == 2 && ( + + strncmp (buf, "^c", 2) == 0 || + + strncmp (buf, "\0252c", 2) == 0)) { + tty->flip.count++; + *tty->flip.flag_buf_ptr++ = TTY_NORMAL; + *tty->flip.char_buf_ptr++ = INTR_CHAR (tty); + } else if (count == 2 && ( + strncmp (buf, "^d", 2) == 0 || + strncmp (buf, "\0252d", 2) == 0)) { + tty->flip.count++; + *tty->flip.flag_buf_ptr++ = TTY_NORMAL; + *tty->flip.char_buf_ptr++ = EOF_CHAR (tty); + } else if (count == 2 && ( + strncmp (buf, "^z", 2) == 0 || + strncmp (buf, "\0252z", 2) == 0)) { + tty->flip.count++; + *tty->flip.flag_buf_ptr++ = TTY_NORMAL; + *tty->flip.char_buf_ptr++ = SUSP_CHAR (tty); + } else { + + memcpy (tty->flip.char_buf_ptr, buf, count); + if (count < 2 || ( + strncmp (buf + count - 2, "^n", 2) || + strncmp (buf + count - 2, "\0252n", 2))) { + tty->flip.char_buf_ptr[count] = '\n'; + count++; + } else + count -= 2; + memset (tty->flip.flag_buf_ptr, TTY_NORMAL, count); + tty->flip.char_buf_ptr += count; + tty->flip.flag_buf_ptr += count; + tty->flip.count += count; + } + tty_flip_buffer_push (tty); + hwc_tty_wake_up (); + } +#endif + if (tty != NULL) { - if (count == 2 && strncmp(buf, "^c", 2) == 0) { + if (count == hwc_tty_data.ioctl.intr_char_size && + strncmp (buf, hwc_tty_data.ioctl.intr_char, + hwc_tty_data.ioctl.intr_char_size) == 0) { tty->flip.count++; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; *tty->flip.char_buf_ptr++ = INTR_CHAR(tty); - } else if (count == 2 && strncmp(buf, "^d", 2) == 0) { + } else if (count == 2 && ( + strncmp (buf, "^d", 2) == 0 || + strncmp (buf, "\0252d", 2) == 0)) { tty->flip.count++; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; *tty->flip.char_buf_ptr++ = EOF_CHAR(tty); - } else if (count == 2 && strncmp(buf, "^z", 2) == 0) { + } else if (count == 2 && ( + strncmp (buf, "^z", 2) == 0 || + strncmp (buf, "\0252z", 2) == 0)) { tty->flip.count++; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; *tty->flip.char_buf_ptr++ = SUSP_CHAR(tty); } else { memcpy(tty->flip.char_buf_ptr, buf, count); - if (count < 2 || - strncmp(buf + count - 2, "^n", 2)) { + if (count < 2 || ( + strncmp (buf + count - 2, "^n", 2) || + strncmp (buf + count - 2, "\0252n", 2))) { tty->flip.char_buf_ptr[count] = '\n'; count++; } else @@ -195,7 +287,7 @@ tty->flip.count += count; } tty_flip_buffer_push(tty); - wake_up_hwc_tty(); + hwc_tty_wake_up (); } } @@ -203,6 +295,7 @@ hwc_tty_init (void) { memset (&hwc_tty_driver, 0, sizeof(struct tty_driver)); + memset (&hwc_tty_data, 0, sizeof (hwc_tty_data_struct)); hwc_tty_driver.magic = TTY_DRIVER_MAGIC; hwc_tty_driver.driver_name = "tty_hwc"; hwc_tty_driver.name = "ttyS"; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/char/hwc_tty.h linux.16p3/drivers/s390/char/hwc_tty.h --- linux.vanilla/drivers/s390/char/hwc_tty.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/s390/char/hwc_tty.h Mon May 15 16:34:41 2000 @@ -0,0 +1,30 @@ +/* + * drivers/s390/char/hwc_tty.h + * interface to the HWC-terminal driver + * + * S390 version + * Copyright (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Martin Peschke + */ + +#ifndef __HWC_TTY_H__ +#define __HWC_TTY_H__ + +#include + +#define HWC_TTY_MAX_CNTL_SIZE 20 + +typedef struct { + unsigned char intr_char[HWC_TTY_MAX_CNTL_SIZE]; + unsigned char intr_char_size; +} hwc_tty_ioctl_t; + +static hwc_tty_ioctl_t _ioctl; + +#define HWC_TTY_IOCTL_LETTER 'B' + +#define TIOCHWCTTYSINTRC _IOW(HWC_TTY_IOCTL_LETTER, 40, _ioctl.intr_char) + +#define TIOCHWCTTYGINTRC _IOR(HWC_TTY_IOCTL_LETTER, 41, _ioctl.intr_char) + +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/ebcdic.c linux.16p3/drivers/s390/ebcdic.c --- linux.vanilla/drivers/s390/ebcdic.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/ebcdic.c Thu Jan 1 01:00:00 1970 @@ -1,246 +0,0 @@ -/* - * arch/s390/kernel/ebcdic.c - * ECBDIC -> ASCII, ASCII -> ECBDIC conversion tables. - * - * S390 version - * Copyright (C) 1998 IBM Corporation - * Author(s): Martin Schwidefsky - */ - -#include - -/* - * ASCII -> EBCDIC - */ -__u8 _ascebc[256] = -{ - /*00 NL SH SX EX ET NQ AK BL */ - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, - /*08 BS HT LF VT FF CR SO SI */ - 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - /*10 DL D1 D2 D3 D4 NK SN EB */ - 0x10, 0x11, 0x12, 0x13, 0x3C, 0x15, 0x32, 0x26, - /*18 CN EM SB EC FS GS RS US */ - 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, - /*20 SP ! " # $ % & ' */ - 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, - /*28 ( ) * + , - . / */ - 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, - /*30 0 1 2 3 4 5 6 7 */ - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - /*38 8 9 : ; < = > ? */ - 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, - /*40 @ A B C D E F G */ - 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - /*48 H I J K L M N O */ - 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, - /*50 P Q R S T U V W */ - 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, - /*58 X Y Z [ \ ] ^ _ */ - 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D, - /*60 ` a b c d e f g */ - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - /*68 h i j k l m n o */ - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - /*70 p q r s t u v w */ - 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, - /*78 x y z { | } ~ DL */ - 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF -}; - -/* - * EBCDIC -> ASCII - */ -__u8 _ebcasc[256] = -{ - /* 0x00 NUL SOH STX ETX *SEL HT *RNL DEL */ - 0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F, - /* 0x08 -GE -SPS -RPT VT FF CR SO SI */ - 0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - /* 0x10 DLE DC1 DC2 DC3 -RES -NL BS -POC - -ENP ->LF */ - 0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07, - /* 0x18 CAN EM -UBS -CU1 -IFS -IGS -IRS -ITB - -IUS */ - 0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - /* 0x20 -DS -SOS FS -WUS -BYP LF ETB ESC - -INP */ - 0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B, - /* 0x28 -SA -SFE -SM -CSP -MFA ENQ ACK BEL - -SW */ - 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07, - /* 0x30 ---- ---- SYN -IR -PP -TRN -NBS EOT */ - 0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04, - /* 0x38 -SBS -IT -RFF -CU3 DC4 NAK ---- SUB */ - 0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A, - /* 0x40 SP RSP ä ---- */ - 0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86, - /* 0x48 . < ( + | */ - 0x87, 0xA4, 0x9B, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, - /* 0x50 & ---- */ - 0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07, - /* 0x58 ß ! $ * ) ; */ - 0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA, - /* 0x60 - / ---- Ä ---- ---- ---- */ - 0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F, - /* 0x68 ---- , % _ > ? */ - 0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, - /* 0x70 ---- ---- ---- ---- ---- ---- ---- */ - 0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - /* 0x78 * ` : # @ ' = " */ - 0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, - /* 0x80 * a b c d e f g */ - 0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - /* 0x88 h i ---- ---- ---- */ - 0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1, - /* 0x90 ° j k l m n o p */ - 0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, - /* 0x98 q r ---- ---- */ - 0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07, - /* 0xA0 ~ s t u v w x */ - 0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - /* 0xA8 y z ---- ---- ---- ---- */ - 0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07, - /* 0xB0 ^ ---- § ---- */ - 0x5E, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC, - /* 0xB8 ---- [ ] ---- ---- ---- ---- */ - 0xAB, 0x07, 0x5B, 0x5D, 0x07, 0x07, 0x07, 0x07, - /* 0xC0 { A B C D E F G */ - 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - /* 0xC8 H I ---- ö ---- */ - 0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07, - /* 0xD0 } J K L M N O P */ - 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, - /* 0xD8 Q R ---- ü */ - 0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98, - /* 0xE0 \ S T U V W X */ - 0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - /* 0xE8 Y Z ---- Ö ---- ---- ---- */ - 0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07, - /* 0xF0 0 1 2 3 4 5 6 7 */ - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - /* 0xF8 8 9 ---- ---- Ü ---- ---- ---- */ - 0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07 -}; - -/* - * EBCDIC (capitals) -> ASCII (small case) - */ -__u8 _ebcasc_reduce_case[256] = -{ - /* 0x00 NUL SOH STX ETX *SEL HT *RNL DEL */ - 0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F, - - /* 0x08 -GE -SPS -RPT VT FF CR SO SI */ - 0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - - /* 0x10 DLE DC1 DC2 DC3 -RES -NL BS -POC - -ENP ->LF */ - 0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07, - - /* 0x18 CAN EM -UBS -CU1 -IFS -IGS -IRS -ITB - -IUS */ - 0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - - /* 0x20 -DS -SOS FS -WUS -BYP LF ETB ESC - -INP */ - 0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B, - - /* 0x28 -SA -SFE -SM -CSP -MFA ENQ ACK BEL - -SW */ - 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07, - - /* 0x30 ---- ---- SYN -IR -PP -TRN -NBS EOT */ - 0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04, - - /* 0x38 -SBS -IT -RFF -CU3 DC4 NAK ---- SUB */ - 0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A, - - /* 0x40 SP RSP ä ---- */ - 0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86, - - /* 0x48 . < ( + | */ - 0x87, 0xA4, 0x9B, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, - - /* 0x50 & ---- */ - 0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07, - - /* 0x58 ß ! $ * ) ; */ - 0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA, - - /* 0x60 - / ---- Ä ---- ---- ---- */ - 0x2D, 0x2F, 0x07, 0x84, 0x07, 0x07, 0x07, 0x8F, - - /* 0x68 ---- , % _ > ? */ - 0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, - - /* 0x70 ---- ---- ---- ---- ---- ---- ---- */ - 0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - - /* 0x78 * ` : # @ ' = " */ - 0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, - - /* 0x80 * a b c d e f g */ - 0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - - /* 0x88 h i ---- ---- ---- */ - 0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1, - - /* 0x90 ° j k l m n o p */ - 0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, - - /* 0x98 q r ---- ---- */ - 0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07, - - /* 0xA0 ~ s t u v w x */ - 0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - - /* 0xA8 y z ---- ---- ---- ---- */ - 0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07, - - /* 0xB0 ^ ---- § ---- */ - 0x5E, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC, - - /* 0xB8 ---- [ ] ---- ---- ---- ---- */ - 0xAB, 0x07, 0x5B, 0x5D, 0x07, 0x07, 0x07, 0x07, - - /* 0xC0 { A B C D E F G */ - 0x7B, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - - /* 0xC8 H I ---- ö ---- */ - 0x68, 0x69, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07, - - /* 0xD0 } J K L M N O P */ - 0x7D, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, - - /* 0xD8 Q R ---- ü */ - 0x71, 0x72, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98, - - /* 0xE0 \ S T U V W X */ - 0x5C, 0xF6, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - - /* 0xE8 Y Z ---- Ö ---- ---- ---- */ - 0x79, 0x7A, 0xFD, 0x07, 0x94, 0x07, 0x07, 0x07, - - /* 0xF0 0 1 2 3 4 5 6 7 */ - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - - /* 0xF8 8 9 ---- ---- Ü ---- ---- ---- */ - 0x38, 0x39, 0x07, 0x07, 0x81, 0x07, 0x07, 0x07 -}; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/misc/Makefile linux.16p3/drivers/s390/misc/Makefile --- linux.vanilla/drivers/s390/misc/Makefile Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/misc/Makefile Mon May 15 16:34:41 2000 @@ -6,3 +6,4 @@ M_OBJS := include $(TOPDIR)/Rules.make + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/net/ctc.c linux.16p3/drivers/s390/net/ctc.c --- linux.vanilla/drivers/s390/net/ctc.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/net/ctc.c Mon May 15 16:34:41 2000 @@ -3,9 +3,12 @@ * CTC / ESCON network driver * * S390 version - * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Dieter Wellerdiek (wel@de.ibm.com) * + * 2.3 Updates Martin Schwidefsky (schwidefsky@de.ibm.com) + * Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) + * * * Description of the Kernel Parameter * Normally the CTC driver selects the channels in order (automatic channel @@ -40,7 +43,8 @@ * - Possibility to switch the automatic selection off * - Minor bug fixes */ - +#include +#include #include #include #include @@ -161,6 +165,15 @@ struct block *block; }; +#if LINUX_VERSION_CODE>=0x020300 +typedef struct net_device net_device; +#else +typedef struct device net_device; +typedef struct wait_queue* wait_queue_head_t; +#define DECLARE_WAITQUEUE(waitqname,waitqtask) struct wait_queue waitqname = {waitqtask, NULL } +#define init_waitqueue_head(nothing) +#endif + struct channel { unsigned int devno; @@ -172,8 +185,8 @@ struct buffer *free_anchor; struct buffer *proc_anchor; devstat_t *devstat; - struct device *dev; /* backward pointer to the network device */ - struct wait_queue *wait; + net_device *dev; /* backward pointer to the network device */ + wait_queue_head_t wait; struct tq_struct tq; struct timer_list timer; unsigned long flag_a; /* atomic flags */ @@ -186,7 +199,10 @@ struct ctc_priv { - struct enet_statistics stats; + struct net_device_stats stats; +#if LINUX_VERSION_CODE>=0x02032D + int tbusy; +#endif struct channel channel[2]; __u16 protocol; }; @@ -210,6 +226,99 @@ struct packet data; }; +#if LINUX_VERSION_CODE>=0x02032D +#define ctc_protect_busy(dev) \ +s390irq_spin_lock(((struct ctc_priv *)dev->priv)->channel[WRITE].irq) +#define ctc_unprotect_busy(dev) \ +s390irq_spin_unlock(((struct ctc_priv *)dev->priv)->channel[WRITE].irq) + +#define ctc_protect_busy_irqsave(dev,flags) \ +s390irq_spin_lock_irqsave(((struct ctc_priv *)dev->priv)->channel[WRITE].irq,flags) +#define ctc_unprotect_busy_irqrestore(dev,flags) \ +s390irq_spin_unlock_irqrestore(((struct ctc_priv *)dev->priv)->channel[WRITE].irq,flags) + +static __inline__ void ctc_set_busy(net_device *dev) +{ + ((struct ctc_priv *)dev->priv)->tbusy=1; + netif_stop_queue(dev); +} + +static __inline__ void ctc_clear_busy(net_device *dev) +{ + ((struct ctc_priv *)dev->priv)->tbusy=0; + netif_start_queue(dev); +} + +static __inline__ int ctc_check_busy(net_device *dev) +{ + eieio(); + return(((struct ctc_priv *)dev->priv)->tbusy); +} + + +static __inline__ void ctc_setbit_busy(int nr,net_device *dev) +{ + set_bit(nr,&(((struct ctc_priv *)dev->priv)->tbusy)); + netif_stop_queue(dev); +} + +static __inline__ void ctc_clearbit_busy(int nr,net_device *dev) +{ + clear_bit(nr,&(((struct ctc_priv *)dev->priv)->tbusy)); + if(((struct ctc_priv *)dev->priv)->tbusy==0) + netif_start_queue(dev); +} + +static __inline__ int ctc_test_and_setbit_busy(int nr,net_device *dev) +{ + netif_stop_queue(dev); + return(test_and_set_bit(nr,&((struct ctc_priv *)dev->priv)->tbusy)); +} +#else + +#define ctc_protect_busy(dev) +#define ctc_unprotect_busy(dev) +#define ctc_protect_busy_irqsave(dev,flags) +#define ctc_unprotect_busy_irqrestore(dev,flags) + +static __inline__ void ctc_set_busy(net_device *dev) +{ + dev->tbusy=1; + eieio(); +} + +static __inline__ void ctc_clear_busy(net_device *dev) +{ + dev->tbusy=0; + eieio(); +} + +static __inline__ int ctc_check_busy(net_device *dev) +{ + eieio(); + return(dev->tbusy); +} + + +static __inline__ void ctc_setbit_busy(int nr,net_device *dev) +{ + set_bit(nr,(void *)&dev->tbusy); +} + +static __inline__ void ctc_clearbit_busy(int nr,net_device *dev) +{ + clear_bit(nr,(void *)&dev->tbusy); +} + +static __inline__ int ctc_test_and_setbit_busy(int nr,net_device *dev) +{ + return(test_and_set_bit(nr,(void *)&dev->tbusy)); +} +#endif + + + + /* Interrupt handler */ static void ctc_irq_handler(int irq, void *initparm, struct pt_regs *regs); @@ -219,16 +328,15 @@ /* Functions for the DEV methods */ -void ctc_setup(char *dev_name, int *ints); -int ctc_probe(struct device *dev); +int ctc_probe(net_device *dev); -static int ctc_open(struct device *dev); +static int ctc_open(net_device *dev); static void ctc_timer (struct channel *ctc); -static int ctc_release(struct device *dev); -static int ctc_tx(struct sk_buff *skb, struct device *dev); -static int ctc_change_mtu(struct device *dev, int new_mtu); -struct net_device_stats* ctc_stats(struct device *dev); +static int ctc_release(net_device *dev); +static int ctc_tx(struct sk_buff *skb, net_device *dev); +static int ctc_change_mtu(net_device *dev, int new_mtu); +struct net_device_stats* ctc_stats(net_device *dev); /* @@ -573,17 +681,28 @@ * 0xnnnn is the cu number write * ctcx can be ctc0 to ctc7 or escon0 to escon7 */ -void ctc_setup(char *dev_name, int *ints) +#if LINUX_VERSION_CODE>=0x020300 +static int __init ctc_setup(char *dev_name) +#else +__initfunc(void ctc_setup(char *dev_name,int *ints)) +#endif { struct adapterlist tmp; - +#if LINUX_VERSION_CODE>=0x020300 + #define CTC_MAX_PARMS 4 + int ints[CTC_MAX_PARMS+1]; + get_options(dev_name,CTC_MAX_PARMS,ints); + #define ctc_setup_return return(1) +#else + #define ctc_setup_return return +#endif ctc_tab_init(); ctc_no_auto = 1; if (!strcmp(dev_name,"noauto")) { printk(KERN_INFO "ctc: automatic channel selection deactivated\n"); - return; + ctc_setup_return; } tmp.devno[WRITE] = -ENODEV; @@ -605,30 +724,32 @@ break; } else { printk(KERN_WARNING "%s: wrong Channel protocol type passed\n", dev_name); - return; + ctc_setup_return; } break; default: printk(KERN_WARNING "ctc: wrong number of parameter passed\n"); - return; + ctc_setup_return; } ctc_adapter[extract_channel_media(dev_name)][extract_channel_id(dev_name)] = tmp; #ifdef DEBUG printk(DEBUG "%s: protocol=%x read=%04x write=%04x\n", dev_name, tmp.protocol, tmp.devno[READ], tmp.devno[WRITE]); #endif - return; + ctc_setup_return; } - +#if LINUX_VERSION_CODE>=0x020300 +__setup("ctc=", ctc_setup); +#endif /* * ctc_probe * this function is called for each channel network device, * which is defined in the /init/main.c */ -int ctc_probe(struct device *dev) +int ctc_probe(net_device *dev) { int rc; int c; @@ -729,7 +850,7 @@ * */ -static void inline ccw_check_return_code (struct device *dev, int return_code) +static void inline ccw_check_return_code (net_device *dev, int return_code) { if (return_code != 0) { switch (return_code) { @@ -750,7 +871,7 @@ } -static void inline ccw_check_unit_check (struct device *dev, char sense) +static void inline ccw_check_unit_check (net_device *dev, char sense) { #ifdef DEBUG printk(KERN_INFO "%s: Unit Check with sense code: %02x\n", @@ -786,7 +907,7 @@ __u8 flags = 0x00; struct channel *ctc = NULL; struct ctc_priv *privptr = NULL; - struct device *dev = NULL; + net_device *dev = NULL; ccw1_t ccw_set_x_mode[2] = {{CCW_CMD_SET_EXTENDED, CCW_FLAG_SLI | CCW_FLAG_CC, 0, NULL}, {CCW_CMD_NOOP, CCW_FLAG_SLI, 0, NULL}}; @@ -804,7 +925,7 @@ } ctc = (struct channel *) (devstat->intparm); - dev = (struct device *) ctc->dev; + dev = (net_device *) ctc->dev; privptr = dev->priv; #ifdef DEBUG @@ -925,7 +1046,11 @@ (devstat->ii.sense.data[0] & 0x40) == 0x40 || devstat->ii.sense.data[0] == 0 ) { privptr->stats.rx_errors++; - set_bit(TB_RETRY, (void *)&dev->tbusy); + /* Need protection here cos we are in the read irq */ + /* handler the tbusy is for the write subchannel */ + ctc_protect_busy(dev); + ctc_setbit_busy(TB_RETRY,dev); + ctc_unprotect_busy(dev); init_timer(&ctc->timer); ctc->timer.function = (void *)ctc_read_retry; ctc->timer.data = (__u32)ctc; @@ -938,9 +1063,9 @@ if(!devstat->flag & DEVSTAT_FINAL_STATUS) return; - - clear_bit(TB_RETRY, (void *)&dev->tbusy); - + ctc_protect_busy(dev); + ctc_clearbit_busy(TB_RETRY,dev); + ctc_unprotect_busy(dev); ctc_buffer_swap(&ctc->free_anchor, &ctc->proc_anchor); if (ctc->free_anchor != NULL) { @@ -999,8 +1124,7 @@ ctc->proc_anchor->block->length = 0; ctc_buffer_swap(&ctc->proc_anchor, &ctc->free_anchor); - clear_bit(TB_NOBUFFER, (void *)&dev->tbusy); - + ctc_clearbit_busy(TB_NOBUFFER,dev); if (ctc->proc_anchor != NULL) { #ifdef DEBUG printk(KERN_DEBUG "%s: IRQ early swap buffer\n",dev->name); @@ -1017,9 +1141,10 @@ } if (ctc->free_anchor->block->length != 0) { - if (test_and_set_bit(TB_TX, (void *)&dev->tbusy) == 0) { /* set transmission to busy */ + if (ctc_test_and_setbit_busy(TB_TX,dev) == 0) { + /* set transmission to busy */ ctc_buffer_swap(&ctc->free_anchor, &ctc->proc_anchor); - clear_bit(TB_TX, (void *)&dev->tbusy); + ctc_clearbit_busy(TB_TX,dev); #ifdef DEBUG printk(KERN_DEBUG "%s: last buffer move in IRQ\n",dev->name); #endif @@ -1053,12 +1178,12 @@ __u8 flags = 0x00; __u32 saveflags; - struct device *dev; + net_device *dev; struct ctc_priv *privptr; struct packet *lp; struct sk_buff *skb; - dev = (struct device *) ctc->dev; + dev = (net_device *) ctc->dev; privptr = (struct ctc_priv *) dev->priv; #ifdef DEBUG @@ -1113,9 +1238,9 @@ __u32 parm; __u8 flags = 0x00; __u32 saveflags; - struct device *dev; + net_device *dev; - dev = (struct device *) ctc->dev; + dev = (net_device *) ctc->dev; #ifdef DEBUG printk(KERN_DEBUG "%s: read retry - state-%02x\n" ,dev->name, ctc->state); @@ -1137,9 +1262,9 @@ __u32 parm; __u8 flags = 0x00; __u32 saveflags; - struct device *dev; + net_device *dev; - dev = (struct device *) ctc->dev; + dev = (net_device *) ctc->dev; #ifdef DEBUG printk(KERN_DEBUG "%s: write retry - state-%02x\n" ,dev->name, ctc->state); @@ -1161,7 +1286,7 @@ * ctc_open * */ -static int ctc_open(struct device *dev) +static int ctc_open(net_device *dev) { int rc; int i; @@ -1170,12 +1295,11 @@ __u32 saveflags; __u32 parm; struct ctc_priv *privptr; - struct wait_queue wait = { current, NULL }; + DECLARE_WAITQUEUE(wait, current); struct timer_list timer; - dev->tbusy = 1; - dev->start = 0; + ctc_set_busy(dev); privptr = (struct ctc_priv *) (dev->priv); @@ -1188,6 +1312,7 @@ if (rc != 0) return -ENOMEM; } + init_waitqueue_head(&privptr->channel[i].wait); privptr->channel[i].tq.next = NULL; privptr->channel[i].tq.sync = 0; privptr->channel[i].tq.routine = (void *)(void *)ctc_irq_bh; @@ -1264,8 +1389,7 @@ } printk(KERN_INFO "%s: connected with remote side\n",dev->name); - dev->start = 1; - dev->tbusy = 0; + ctc_clear_busy(dev); return 0; } @@ -1273,9 +1397,9 @@ static void ctc_timer (struct channel *ctc) { #ifdef DEBUG - struct device *dev; + net_device *dev; - dev = (struct device *) ctc->dev; + dev = (net_device *) ctc->dev; printk(KERN_DEBUG "%s: timer return\n" ,dev->name); #endif ctc->flag |= CTC_TIMER; @@ -1287,7 +1411,7 @@ * ctc_release * */ -static int ctc_release(struct device *dev) +static int ctc_release(net_device *dev) { int rc; int i; @@ -1296,13 +1420,13 @@ __u32 saveflags; __u32 parm; struct ctc_priv *privptr; - struct wait_queue wait = { current, NULL }; + DECLARE_WAITQUEUE(wait, current); privptr = (struct ctc_priv *) dev->priv; - dev->start = 0; - set_bit(TB_STOP, (void *)&dev->tbusy); - + ctc_protect_busy_irqsave(dev,saveflags); + ctc_setbit_busy(TB_STOP,dev); + ctc_unprotect_busy_irqrestore(dev,flags); for (i = 0; i < 2; i++) { s390irq_spin_lock_irqsave(privptr->channel[i].irq, saveflags); privptr->channel[i].state = CTC_STOP; @@ -1339,15 +1463,16 @@ * * */ -static int ctc_tx(struct sk_buff *skb, struct device *dev) +static int ctc_tx(struct sk_buff *skb, net_device *dev) { - int rc; + int rc=0,rc2; __u32 parm; __u8 flags = 0x00; __u32 saveflags; struct ctc_priv *privptr; struct packet *lp; + privptr = (struct ctc_priv *) (dev->priv); if (skb == NULL) { @@ -1356,25 +1481,27 @@ return -EIO; } - if (dev->tbusy != 0) { - return -EBUSY; + s390irq_spin_lock_irqsave(privptr->channel[WRITE].irq, saveflags); + if (ctc_check_busy(dev)) { + rc=-EBUSY; + goto Done; } - if (test_and_set_bit(TB_TX, (void *)&dev->tbusy) != 0) { /* set transmission to busy */ - return -EBUSY; + if (ctc_test_and_setbit_busy(TB_TX,dev)) { /* set transmission to busy */ + rc=-EBUSY; + goto Done; } if (65535 - privptr->channel[WRITE].free_anchor->block->length - PACKET_HEADER_LENGTH <= skb->len + PACKET_HEADER_LENGTH + 2) { #ifdef DEBUG printk(KERN_DEBUG "%s: early swap\n", dev->name); #endif - s390irq_spin_lock_irqsave(privptr->channel[WRITE].irq, saveflags); + ctc_buffer_swap(&privptr->channel[WRITE].free_anchor, &privptr->channel[WRITE].proc_anchor); - s390irq_spin_unlock_irqrestore(privptr->channel[WRITE].irq, saveflags); if (privptr->channel[WRITE].free_anchor == NULL){ - set_bit(TB_NOBUFFER, (void *)&dev->tbusy); - clear_bit(TB_TX, (void *)&dev->tbusy); - return -EBUSY; + ctc_setbit_busy(TB_NOBUFFER,dev); + rc=-EBUSY; + goto Done2; } } @@ -1396,23 +1523,22 @@ privptr->channel[WRITE].free_anchor->packets++; if (test_and_set_bit(0, (void *)&privptr->channel[WRITE].IO_active) == 0) { - s390irq_spin_lock_irqsave(privptr->channel[WRITE].irq, saveflags); ctc_buffer_swap(&privptr->channel[WRITE].free_anchor,&privptr->channel[WRITE].proc_anchor); privptr->channel[WRITE].ccw[1].count = privptr->channel[WRITE].proc_anchor->block->length; privptr->channel[WRITE].ccw[1].cda = (char *)virt_to_phys(privptr->channel[WRITE].proc_anchor->block); parm = (__u32) &privptr->channel[WRITE]; - rc = do_IO (privptr->channel[WRITE].irq, &privptr->channel[WRITE].ccw[0], parm, 0xff, flags ); - if (rc != 0) - ccw_check_return_code(dev, rc); + rc2 = do_IO (privptr->channel[WRITE].irq, &privptr->channel[WRITE].ccw[0], parm, 0xff, flags ); + if (rc2 != 0) + ccw_check_return_code(dev, rc2); dev->trans_start = jiffies; - s390irq_spin_unlock_irqrestore(privptr->channel[WRITE].irq, saveflags); } - if (privptr->channel[WRITE].free_anchor == NULL) - set_bit(TB_NOBUFFER, (void *)&dev->tbusy); - - clear_bit(TB_TX, (void *)&dev->tbusy); - return 0; + ctc_setbit_busy(TB_NOBUFFER,dev); +Done2: + ctc_clearbit_busy(TB_TX,dev); +Done: + s390irq_spin_unlock_irqrestore(privptr->channel[WRITE].irq, saveflags); + return(rc); } @@ -1423,7 +1549,7 @@ * 576 to 65527 for OS/390 * */ -static int ctc_change_mtu(struct device *dev, int new_mtu) +static int ctc_change_mtu(net_device *dev, int new_mtu) { if ((new_mtu < 576) || (new_mtu > 65528)) return -EINVAL; @@ -1436,7 +1562,7 @@ * ctc_stats * */ -struct net_device_stats *ctc_stats(struct device *dev) +struct net_device_stats *ctc_stats(net_device *dev) { struct ctc_priv *privptr; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/s390/net/iucv.c linux.16p3/drivers/s390/net/iucv.c --- linux.vanilla/drivers/s390/net/iucv.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/s390/net/iucv.c Mon May 15 16:34:41 2000 @@ -3,9 +3,14 @@ * Network driver for VM using iucv * * S390 version - * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Stefan Hegewald * Hartmut Penner + * + * 2.3 Updates Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) + * Martin Schwidefsky (schwidefsky@de.ibm.com) + * + */ #ifndef __KERNEL__ @@ -19,8 +24,8 @@ #include /* error codes */ #include /* size_t */ #include /* mark_bh */ -#include /* struct device, and other headers */ -#include /* struct device, and other headers */ +#include /* struct net_device, and other headers */ +#include /* struct net_device, and other headers */ #include #include #include /* struct iphdr */ @@ -31,9 +36,13 @@ #include #include #include +#include #include "iucv.h" + + + #define DEBUG123 #define MAX_DEVICES 10 @@ -47,7 +56,13 @@ static int iucv_pathid[MAX_DEVICES] = {0}; static unsigned char iucv_ext_int_buffer[40] __attribute__((aligned (8))) ={0}; static unsigned char glob_command_buffer[40] __attribute__((aligned (8))); -struct device iucv_devs[]; + +#if LINUX_VERSION_CODE>=0x20300 +typedef struct net_device net_device; +#else +typedef struct device net_device; +#endif +net_device iucv_devs[]; /* This structure is private to each device. It is used to pass */ @@ -73,6 +88,50 @@ short len; }; + + +static __inline__ int netif_is_busy(net_device *dev) +{ +#if LINUX_VERSION_CODE<0x02032D + return(dev->tbusy); +#else + return(test_bit(LINK_STATE_XOFF,&dev->flags)); +#endif +} + + + +#if LINUX_VERSION_CODE<0x02032D +#define netif_enter_interrupt(dev) dev->interrupt=1 +#define netif_exit_interrupt(dev) dev->interrupt=0 +#define netif_start(dev) dev->start=1 +#define netif_stop(dev) dev->start=0 + +static __inline__ void netif_stop_queue(net_device *dev) +{ + dev->tbusy=1; +} + +static __inline__ void netif_start_queue(net_device *dev) +{ + dev->tbusy=0; +} + +static __inline__ void netif_wake_queue(net_device *dev) +{ + dev->tbusy=0; + mark_bh(NET_BH); +} + +#else +#define netif_enter_interrupt(dev) +#define netif_exit_interrupt(dev) +#define netif_start(dev) +#define netif_stop(dev) +#endif + + + /* * Following the iucv primitives */ @@ -292,7 +351,7 @@ /*--------------------------*/ /* Get device from pathid */ /*--------------------------*/ -struct device * get_device_from_pathid(int pathid) +net_device * get_device_from_pathid(int pathid) { int i; for (i=0;i<=MAX_DEVICES;i++) @@ -309,10 +368,10 @@ /*--------------------------*/ /* Get device from userid */ /*--------------------------*/ -struct device * get_device_from_userid(char * userid) +net_device * get_device_from_userid(char * userid) { int i; - struct device * dev; + net_device * dev; struct iucv_priv *privptr; for (i=0;i<=MAX_DEVICES;i++) { @@ -329,7 +388,7 @@ /*--------------------------*/ /* Open iucv Device Driver */ /*--------------------------*/ -int iucv_open(struct device *dev) +int iucv_open(net_device *dev) { int rc; unsigned short iucv_used_pathid; @@ -344,8 +403,8 @@ privptr = (struct iucv_priv *)(dev->priv); if(privptr->pathid != -1) { - dev->start = 1; - dev->tbusy = 0; + netif_start(dev); + netif_start_queue(dev); return 0; } if ((rc = iucv_connect(privptr->command_buffer, @@ -365,8 +424,8 @@ printk( "iucv: iucv_connect ended with rc: %X\n",rc); printk( "iucv[%d] pathid %X \n",(int)(dev-iucv_devs),privptr->pathid); #endif - dev->start = 1; - dev->tbusy = 0; + netif_start(dev); + netif_start_queue(dev); return 0; } @@ -375,7 +434,7 @@ /*-----------------------------------------------------------------------*/ /* Receive a packet: retrieve, encapsulate and pass over to upper levels */ /*-----------------------------------------------------------------------*/ -void iucv_rx(struct device *dev, int len, unsigned char *buf) +void iucv_rx(net_device *dev, int len, unsigned char *buf) { struct sk_buff *skb; @@ -421,13 +480,13 @@ /*----------------------------*/ /* handle interrupts */ /*----------------------------*/ -void do_iucv_interrupt(void) +void do_iucv_interrupt(struct pt_regs *regs, __u16 code) { int rc; struct in_device *indev; struct in_ifaddr *inaddr; unsigned long len=0; - struct device *dev=0; + net_device *dev=0; struct iucv_priv *privptr; INTERRUPT_T * extern_int_buffer; unsigned short iucv_data_len=0; @@ -437,7 +496,7 @@ /* get own buffer: */ extern_int_buffer = (INTERRUPT_T*) iucv_ext_int_buffer; - dev->interrupt = 1; /* lock ! */ + netif_enter_interrupt(dev); /* lock ! */ #ifdef DEBUG printk( "iucv: do_iucv_interrupt %x received; pathid: %02X\n", @@ -539,8 +598,7 @@ dev = get_device_from_pathid(extern_int_buffer->ippathid); privptr = (struct iucv_priv *)(dev->priv); privptr->stats.tx_packets++; - mark_bh(NET_BH); - dev->tbusy = 0; /* transmission is no longer busy*/ + netif_wake_queue(dev); /* transmission is no longer busy*/ break; @@ -602,7 +660,7 @@ iucv_data_len= *((unsigned short*)rcvptr); } while (iucv_data_len != 0); - dev->tbusy = 0; /* transmission is no longer busy*/ + netif_start_queue(dev); /* transmission is no longer busy*/ break; default: @@ -610,7 +668,7 @@ break; } /* end switch */ - dev->interrupt = 0; /* release lock*/ + netif_exit_interrupt(dev); /* release lock*/ #ifdef DEBUG printk( "iucv: leaving do_iucv_interrupt.\n"); @@ -623,7 +681,7 @@ /*-------------------------------------------*/ /* Transmit a packet (low level interface) */ /*-------------------------------------------*/ -int iucv_hw_tx(char *send_buf, int len,struct device *dev) +int iucv_hw_tx(char *send_buf, int len,net_device *dev) { /* This function deals with hw details. */ /* This interface strips off the ethernet header details. */ @@ -689,7 +747,7 @@ /*------------------------------------------*/ /* Transmit a packet (called by the kernel) */ /*------------------------------------------*/ -int iucv_tx(struct sk_buff *skb, struct device *dev) +int iucv_tx(struct sk_buff *skb, net_device *dev) { int retval=0; @@ -714,14 +772,14 @@ printk( "iucv: enter iucv_tx, using %s\n",dev->name); #endif - if (dev->tbusy) /* shouldn't happen*/ + if (netif_is_busy(dev)) /* shouldn't happen */ { privptr->stats.tx_errors++; dev_kfree_skb(skb); printk("iucv: %s: transmit access conflict ! leaving iucv_tx.\n", dev->name); } - dev->tbusy = 1; /* transmission is busy*/ + netif_stop_queue(dev); /* transmission is busy*/ dev->trans_start = jiffies; /* save the timestamp*/ /* actual deliver of data is device-specific, and not shown here */ @@ -744,14 +802,14 @@ /*---------------*/ /* iucv_release */ /*---------------*/ -int iucv_release(struct device *dev) +int iucv_release(net_device *dev) { int rc =0; struct iucv_priv *privptr; privptr = (struct iucv_priv *) (dev->priv); - dev->start = 0; - dev->tbusy = 1; /* can't transmit any more*/ + netif_stop(dev); + netif_stop_queue(dev); /* can't transmit any more*/ rc = iucv_sever(privptr->command_buffer); if (rc!=0) { @@ -772,7 +830,7 @@ /*-----------------------------------------------*/ /* Configuration changes (passed on by ifconfig) */ /*-----------------------------------------------*/ -int iucv_config(struct device *dev, struct ifmap *map) +int iucv_config(net_device *dev, struct ifmap *map) { if (dev->flags & IFF_UP) /* can't act on a running interface*/ return -EBUSY; @@ -789,7 +847,7 @@ /*----------------*/ /* Ioctl commands */ /*----------------*/ -int iucv_ioctl(struct device *dev, struct ifreq *rq, int cmd) +int iucv_ioctl(net_device *dev, struct ifreq *rq, int cmd) { #ifdef DEBUG printk( "iucv: device %s; iucv_ioctl\n",dev->name); @@ -800,7 +858,7 @@ /*---------------------------------*/ /* Return statistics to the caller */ /*---------------------------------*/ -struct net_device_stats *iucv_stats(struct device *dev) +struct net_device_stats *iucv_stats(net_device *dev) { struct iucv_priv *priv = (struct iucv_priv *)dev->priv; #ifdef DEBUG @@ -815,7 +873,7 @@ * IUCV can handle MTU sizes from 576 to approx. 32000 */ -static int iucv_change_mtu(struct device *dev, int new_mtu) +static int iucv_change_mtu(net_device *dev, int new_mtu) { #ifdef DEBUG printk( "iucv: device %s; iucv_change_mtu\n",dev->name); @@ -833,7 +891,7 @@ /* The init function (sometimes called probe).*/ /* It is invoked by register_netdev() */ /*--------------------------------------------*/ -int iucv_init(struct device *dev) +int iucv_init(net_device *dev) { int rc; struct iucv_priv *privptr; @@ -842,6 +900,10 @@ printk( "iucv: iucv_init, device: %s\n",dev->name); #endif + /* request the 0x4000 external interrupt */ + if (register_external_interrupt(0x4000, do_iucv_interrupt) != 0) + panic("Couldn't request external interrupts 0x4000"); + dev->open = iucv_open; dev->stop = iucv_release; dev->set_config = iucv_config; @@ -926,12 +988,15 @@ * * string passed: iucv=userid1,...,useridn */ - -__initfunc(int iucv_setup(char* str, int *ints)) +#if LINUX_VERSION_CODE>=0x020300 +static int __init iucv_setup(char *str) +#else +__initfunc(void iucv_setup(char *str,int *ints)) +#endif { int result=0, i=0,j=0, k=0, device_present=0; char *s = str; - struct device * dev ={0}; + net_device * dev ={0}; #ifdef DEBUG printk( "iucv: start registering device(s)... \n"); @@ -1006,18 +1071,24 @@ #ifdef DEBUG printk( "iucv: end register devices, %d devices present\n",device_present); #endif - return device_present ? 0 : -ENODEV; + /* return device_present ? 0 : -ENODEV; */ +#if LINUX_VERSION_CODE>=0x020300 + return 1; +#else + return; +#endif } - - +#if LINUX_VERSION_CODE>=0x020300 +__setup("iucv=", iucv_setup); +#endif /*-------------*/ /* The devices */ /*-------------*/ char iucv_names[MAX_DEVICES*8]; /* MAX_DEVICES eight-byte buffers */ -struct device iucv_devs[MAX_DEVICES] = { +net_device iucv_devs[MAX_DEVICES] = { { iucv_names, /* name -- set at load time */ 0, 0, 0, 0, /* shmem addresses */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sbus/char/sab82532.c linux.16p3/drivers/sbus/char/sab82532.c --- linux.vanilla/drivers/sbus/char/sab82532.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/sbus/char/sab82532.c Wed Apr 19 13:54:46 2000 @@ -2065,7 +2065,7 @@ done: if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sbus/char/su.c linux.16p3/drivers/sbus/char/su.c --- linux.vanilla/drivers/sbus/char/su.c Fri Apr 21 12:46:24 2000 +++ linux.16p3/drivers/sbus/char/su.c Wed Apr 19 13:54:46 2000 @@ -2207,7 +2207,7 @@ done: if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/ChangeLog.ips linux.16p3/drivers/scsi/ChangeLog.ips --- linux.vanilla/drivers/scsi/ChangeLog.ips Fri Apr 21 12:46:28 2000 +++ linux.16p3/drivers/scsi/ChangeLog.ips Mon May 15 12:06:47 2000 @@ -1,25 +1,53 @@ -Change Log -~~~~~~~~~~ +IBM ServeRAID driver Change Log +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 4.00.06 - Fix timeout with initial FFDC command + + 4.00.05 - Remove wish_block from init routine + - Use linux/spinlock.h instead of asm/spinlock.h for kernels + 2.3.18 and later + - Sync with other changes from the 2.3 kernels - 1.00.00 - Initial Public Release - - Functionally equivalent to 0.99.05 + 4.00.04 - Rename structures/constants to be prefixed with IPS_ + + 4.00.03 - Add alternative passthru interface + - Add ability to flash ServeRAID BIOS + + 4.00.02 - Fix problem with PT DCDB with no buffer + + 4.00.01 - Add support for First Failure Data Capture + + 4.00.00 - Add support for ServeRAID 4 + + 3.60.02 - Make DCDB direction based on lookup table. + - Only allow one DCDB command to a SCSI ID at a time. + + 3.60.01 - Remove bogus error check in passthru routine. + + 3.60.00 - Bump max commands to 128 for use with ServeRAID + firmware 3.60. + - Change version to 3.60 to coincide with ServeRAID release + numbering. + + 1.00.00 - Initial Public Release + - Functionally equivalent to 0.99.05 0.99.05 - Fix an oops on certain passthru commands - 0.99.04 - Fix race condition in the passthru mechanism + 0.99.04 - Fix race condition in the passthru mechanism -- this required the interface to the utilities to change - - Fix error recovery code + - Fix error recovery code - 0.99.03 - Make interrupt routine handle all completed request on the - adapter not just the first one - - Make sure passthru commands get woken up if we run out of - SCBs - - Send all of the commands on the queue at once rather than - one at a time since the card will support it. + 0.99.03 - Make interrupt routine handle all completed request on the + adapter not just the first one + - Make sure passthru commands get woken up if we run out of + SCBs + - Send all of the commands on the queue at once rather than + one at a time since the card will support it. - 0.99.02 - Added some additional debug statements to print out + 0.99.02 - Added some additional debug statements to print out errors if an error occurs while trying to read/write to a logical drive (IPS_DEBUG). - Fixed read/write errors when the adapter is using an + - Fixed read/write errors when the adapter is using an 8K stripe size. + diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/aha152x.c linux.16p3/drivers/scsi/aha152x.c --- linux.vanilla/drivers/scsi/aha152x.c Fri Apr 21 12:46:27 2000 +++ linux.16p3/drivers/scsi/aha152x.c Mon May 1 01:05:46 2000 @@ -572,8 +572,11 @@ "Adaptec AHA-1520 BIOS", 0x102e, 21 }, /* Adaptec 152x */ { - "Adaptec AHA-1520B", 0x0b, 19 + "Adaptec AHA-1520B", 0x0b, 17 }, /* Adaptec 152x rev B */ + { + "Adaptec AHA-1520B", 0x26, 17 + }, /* Iomega Jaz Jet ISA (AIC6370Q) */ { "Adaptec ASW-B626 BIOS", 0x1029, 21 }, /* on-board controller */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/ide-scsi.c linux.16p3/drivers/scsi/ide-scsi.c --- linux.vanilla/drivers/scsi/ide-scsi.c Fri Apr 21 12:46:28 2000 +++ linux.16p3/drivers/scsi/ide-scsi.c Sun Apr 30 23:42:32 2000 @@ -364,7 +364,7 @@ pc->actually_transferred += temp; pc->current_position += temp; idescsi_discard_data (drive,bcount - temp); - ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc)); + ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), NULL); return ide_started; } #if IDESCSI_DEBUG_LOG @@ -388,7 +388,7 @@ pc->actually_transferred+=bcount; /* Update the current position */ pc->current_position+=bcount; - ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc)); /* And set the interrupt handler again */ + ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), NULL); /* And set the interrupt handler again */ return ide_started; } @@ -408,7 +408,7 @@ printk (KERN_ERR "ide-scsi: (IO,CoD) != (0,1) while issuing a packet command\n"); return ide_do_reset (drive); } - ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc)); /* Set the interrupt routine */ + ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), NULL); /* Set the interrupt routine */ atapi_output_bytes (drive, scsi->pc->c, 12); /* Send the actual packet */ return ide_started; } @@ -442,7 +442,7 @@ (void) (HWIF(drive)->dmaproc(ide_dma_begin, drive)); } if (test_bit (IDESCSI_DRQ_INTERRUPT, &scsi->flags)) { - ide_set_handler (drive, &idescsi_transfer_pc, get_timeout(pc)); + ide_set_handler (drive, &idescsi_transfer_pc, get_timeout(pc), NULL); OUT_BYTE (WIN_PACKETCMD, IDE_COMMAND_REG); /* Issue the packet command */ return ide_started; } else { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/ini9100u.c linux.16p3/drivers/scsi/ini9100u.c --- linux.vanilla/drivers/scsi/ini9100u.c Fri Apr 21 12:46:28 2000 +++ linux.16p3/drivers/scsi/ini9100u.c Mon May 15 12:29:09 2000 @@ -576,28 +576,28 @@ switch (i) { #if LINUX_VERSION_CODE >= CVT_LINUX_VERSION(1,3,0) case 0: - ok = request_irq(pHCB->HCS_Intr, i91u_intr0, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr0, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 1: - ok = request_irq(pHCB->HCS_Intr, i91u_intr1, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr1, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 2: - ok = request_irq(pHCB->HCS_Intr, i91u_intr2, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr2, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 3: - ok = request_irq(pHCB->HCS_Intr, i91u_intr3, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr3, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 4: - ok = request_irq(pHCB->HCS_Intr, i91u_intr4, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr4, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 5: - ok = request_irq(pHCB->HCS_Intr, i91u_intr5, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr5, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 6: - ok = request_irq(pHCB->HCS_Intr, i91u_intr6, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr6, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; case 7: - ok = request_irq(pHCB->HCS_Intr, i91u_intr7, SA_INTERRUPT | SA_SHIRQ, "i91u", NULL); + ok = request_irq(pHCB->HCS_Intr, i91u_intr7, SA_INTERRUPT | SA_SHIRQ, "i91u", hreg); break; default: i91u_panic("i91u: Too many host adapters\n"); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/ips.c linux.16p3/drivers/scsi/ips.c --- linux.vanilla/drivers/scsi/ips.c Fri Apr 21 12:46:28 2000 +++ linux.16p3/drivers/scsi/ips.c Mon May 15 12:06:47 2000 @@ -66,6 +66,17 @@ /* 3.60.01 - Remove bogus error check in passthru routine */ /* 3.60.02 - Make DCDB direction based on lookup table */ /* - Only allow one DCDB command to a SCSI ID at a time */ +/* 4.00.00 - Add support for ServeRAID 4 */ +/* 4.00.01 - Add support for First Failure Data Capture */ +/* 4.00.02 - Fix problem with PT DCDB with no buffer */ +/* 4.00.03 - Add alternative passthru interface */ +/* - Add ability to flash ServeRAID BIOS */ +/* 4.00.04 - Rename structures/constants to be prefixed with IPS_ */ +/* 4.00.05 - Remove wish_block from init routine */ +/* - Use linux/spinlock.h instead of asm/spinlock.h for kernels */ +/* 2.3.18 and later */ +/* - Sync with other changes from the 2.3 kernels */ +/* 4.00.06 - Fix timeout with initial FFDC command */ /* */ /*****************************************************************************/ @@ -109,17 +120,23 @@ #include "ips.h" #include -#include #include + +#if LINUX_VERSION_CODE >= LinuxVersionCode(2,3,18) +#include +#else #include +#endif + #include /* * DRIVER_VER */ -#define IPS_VERSION_HIGH "3.60" /* MUST be 4 chars */ -#define IPS_VERSION_LOW ".02 " /* MUST be 4 chars */ +#define IPS_VERSION_HIGH "4.00" /* MUST be 4 chars */ +#define IPS_VERSION_LOW ".06 " /* MUST be 4 chars */ +#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27) struct proc_dir_entry proc_scsi_ips = { #if !defined(PROC_SCSI_IPS) 0, /* Use dynamic inode allocation */ @@ -128,10 +145,8 @@ #endif 3, "ips", S_IFDIR | S_IRUGO | S_IXUGO, 2 -}; - -#if LINUX_VERSION_CODE < LinuxVersionCode(2,1,93) - #include +} +; #endif #if !defined(__i386__) @@ -147,7 +162,7 @@ #endif #if IPS_DEBUG >= 12 - #define DBG(s) printk(KERN_NOTICE s "\n"); MDELAY(2*ONE_SEC) + #define DBG(s) printk(KERN_NOTICE s "\n"); MDELAY(2*IPS_ONE_SEC) #elif IPS_DEBUG >= 11 #define DBG(s) printk(KERN_NOTICE s "\n") #else @@ -164,7 +179,7 @@ static int ips_cmd_timeout = 60; static int ips_reset_timeout = 60 * 5; -#define MAX_ADAPTER_NAME 6 +#define MAX_ADAPTER_NAME 7 static char ips_adapter_name[][30] = { "ServeRAID", @@ -172,64 +187,65 @@ "ServeRAID on motherboard", "ServeRAID on motherboard", "ServeRAID 3H", - "ServeRAID 3L" + "ServeRAID 3L", + "ServeRAID 4H" }; /* * Direction table */ static char ips_command_direction[] = { -IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, -IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_UNK, -IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_IN, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, -IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_OUT, -IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_OUT, -IPS_DATA_NONE, IPS_DATA_UNK, IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_IN, -IPS_DATA_UNK, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_NONE, IPS_DATA_UNK, -IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, -IPS_DATA_OUT, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_NONE, IPS_DATA_NONE, -IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, -IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_OUT, -IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_NONE, -IPS_DATA_UNK, IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_UNK, -IPS_DATA_NONE, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_OUT, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_UNK, IPS_DATA_IN, IPS_DATA_NONE, -IPS_DATA_OUT, IPS_DATA_UNK, IPS_DATA_NONE, IPS_DATA_UNK, IPS_DATA_OUT, -IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_NONE, -IPS_DATA_UNK, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_IN, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_OUT, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, -IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK +IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, +IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_UNK, +IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_IN, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, +IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_OUT, +IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_OUT, +IPS_DATA_NONE, IPS_DATA_UNK, IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_IN, +IPS_DATA_UNK, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_NONE, IPS_DATA_UNK, +IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, +IPS_DATA_OUT, IPS_DATA_NONE, IPS_DATA_IN, IPS_DATA_NONE, IPS_DATA_NONE, +IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, +IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_OUT, +IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_IN, IPS_DATA_NONE, +IPS_DATA_UNK, IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_UNK, +IPS_DATA_NONE, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_OUT, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_IN, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_NONE, IPS_DATA_NONE, IPS_DATA_UNK, IPS_DATA_IN, IPS_DATA_NONE, +IPS_DATA_OUT, IPS_DATA_UNK, IPS_DATA_NONE, IPS_DATA_UNK, IPS_DATA_OUT, +IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_OUT, IPS_DATA_NONE, +IPS_DATA_UNK, IPS_DATA_IN, IPS_DATA_OUT, IPS_DATA_IN, IPS_DATA_IN, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_OUT, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, +IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK, IPS_DATA_UNK }; /* @@ -247,8 +263,8 @@ void do_ipsintr(int, void *, struct pt_regs *); static int ips_hainit(ips_ha_t *); static int ips_map_status(ips_scb_t *, ips_stat_t *); -static int ips_send(ips_ha_t *, ips_scb_t *, scb_callback); -static int ips_send_wait(ips_ha_t *, ips_scb_t *, int); +static int ips_send(ips_ha_t *, ips_scb_t *, ips_scb_callback); +static int ips_send_wait(ips_ha_t *, ips_scb_t *, int, int); static int ips_send_cmd(ips_ha_t *, ips_scb_t *); static int ips_chkstatus(ips_ha_t *); static int ips_online(ips_ha_t *, ips_scb_t *); @@ -262,14 +278,14 @@ static int ips_issue(ips_ha_t *, ips_scb_t *); static int ips_isintr(ips_ha_t *); static int ips_wait(ips_ha_t *, int, int); -static int ips_write_driver_status(ips_ha_t *); -static int ips_read_adapter_status(ips_ha_t *); -static int ips_read_subsystem_parameters(ips_ha_t *); -static int ips_read_config(ips_ha_t *); -static int ips_clear_adapter(ips_ha_t *); -static int ips_readwrite_page5(ips_ha_t *, int); +static int ips_write_driver_status(ips_ha_t *, int); +static int ips_read_adapter_status(ips_ha_t *, int); +static int ips_read_subsystem_parameters(ips_ha_t *, int); +static int ips_read_config(ips_ha_t *, int); +static int ips_clear_adapter(ips_ha_t *, int); +static int ips_readwrite_page5(ips_ha_t *, int, int); static void ips_intr(ips_ha_t *); -static void ips_next(ips_ha_t *); +static void ips_next(ips_ha_t *, int); static void ipsintr_blocking(ips_ha_t *, struct ips_scb *); static void ipsintr_done(ips_ha_t *, struct ips_scb *); static void ips_done(ips_ha_t *, ips_scb_t *); @@ -277,6 +293,9 @@ static void ips_init_scb(ips_ha_t *, ips_scb_t *); static void ips_freescb(ips_ha_t *, ips_scb_t *); static void ips_statinit(ips_ha_t *); +static void ips_fix_ffdc_time(ips_ha_t *, ips_scb_t *, time_t); +static void ips_ffdc_reset(ips_ha_t *, int); +static void ips_ffdc_time(ips_ha_t *, int); static ips_scb_t * ips_getscb(ips_ha_t *); static inline void ips_putq_scb_head(ips_scb_queue_t *, ips_scb_t *); static inline void ips_putq_scb_tail(ips_scb_queue_t *, ips_scb_t *); @@ -286,17 +305,26 @@ static inline void ips_putq_wait_tail(ips_wait_queue_t *, Scsi_Cmnd *); static inline Scsi_Cmnd * ips_removeq_wait_head(ips_wait_queue_t *); static inline Scsi_Cmnd * ips_removeq_wait(ips_wait_queue_t *, Scsi_Cmnd *); +static inline void ips_putq_copp_head(ips_copp_queue_t *, ips_copp_wait_item_t *); +static inline void ips_putq_copp_tail(ips_copp_queue_t *, ips_copp_wait_item_t *); +static inline ips_copp_wait_item_t * ips_removeq_copp(ips_copp_queue_t *, ips_copp_wait_item_t *); +static inline ips_copp_wait_item_t * ips_removeq_copp_head(ips_copp_queue_t *); +static int ips_erase_bios(ips_ha_t *); +static int ips_program_bios(ips_ha_t *, char *, int); +static int ips_verify_bios(ips_ha_t *, char *, int); #ifndef NO_IPS_CMDLINE static int ips_is_passthru(Scsi_Cmnd *); static int ips_make_passthru(ips_ha_t *, Scsi_Cmnd *, ips_scb_t *); static int ips_usrcmd(ips_ha_t *, ips_passthru_t *, ips_scb_t *); +static int ips_newusrcmd(ips_ha_t *, ips_passthru_t *, ips_scb_t *); +static void ips_cleanup_passthru(ips_ha_t *, ips_scb_t *); #endif int ips_proc_info(char *, char **, off_t, int, int, int); static int ips_host_info(ips_ha_t *, char *, off_t, int); -static void copy_mem_info(INFOSTR *, char *, int); -static int copy_info(INFOSTR *, char *, ...); +static void copy_mem_info(IPS_INFOSTR *, char *, int); +static int copy_info(IPS_INFOSTR *, char *, ...); /*--------------------------------------------------------------------------*/ /* Exported Functions */ @@ -310,6 +338,8 @@ /* */ /* Detect and initialize the driver */ /* */ +/* NOTE: this routine is called under the io_request_lock spinlock */ +/* */ /****************************************************************************/ int ips_detect(Scsi_Host_Template *SHT) { @@ -317,6 +347,7 @@ ips_ha_t *ha; u32 io_addr; u16 planer; + u8 revision_id; u8 bus; u8 func; u8 irq; @@ -326,7 +357,11 @@ DBG("ips_detect"); SHT->proc_info = ips_proc_info; +#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,27) SHT->proc_dir = &proc_scsi_ips; +#else + SHT->proc_name = "ips"; +#endif #if defined(CONFIG_PCI) @@ -345,7 +380,6 @@ irq = dev->irq; bus = dev->bus->number; func = dev->devfn; - io_addr = dev->base_address[0]; /* get planer status */ if (pci_read_config_word(dev, 0x04, &planer)) { @@ -356,9 +390,21 @@ } /* check I/O address */ +#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,13) + io_addr = dev->base_address[0]; + if ((io_addr & PCI_BASE_ADDRESS_SPACE) != PCI_BASE_ADDRESS_SPACE_IO) continue; + /* get the BASE IO Address */ + io_addr &= PCI_BASE_ADDRESS_IO_MASK; +#else + io_addr = dev->resource[0].start; + + if ((dev->resource[0].flags & PCI_BASE_ADDRESS_SPACE) != PCI_BASE_ADDRESS_SPACE_IO) + continue; +#endif + /* check to see if an onboard planer controller is disabled */ if (!(planer & 0x000C)) { @@ -370,14 +416,19 @@ continue; } - /* get the BASE IO Address */ - io_addr &= PCI_BASE_ADDRESS_IO_MASK; - #ifdef IPS_PCI_PROBE_DEBUG printk(KERN_NOTICE "(%s%d) detect bus %d, func %x, irq %d, io %x\n", ips_name, index, bus, func, irq, io_addr); #endif + /* get the revision ID */ + if (pci_read_config_byte(dev, 0x08, &revision_id)) { + printk(KERN_WARNING "(%s%d) can't get revision id.\n", + ips_name, index); + + continue; + } + /* found a controller */ sh = scsi_register(SHT, sizeof(ips_ha_t)); @@ -388,19 +439,23 @@ continue; } - ha = HA(sh); + ha = IPS_HA(sh); memset(ha, 0, sizeof(ips_ha_t)); /* Initialize spin lock */ spin_lock_init(&ha->scb_lock); spin_lock_init(&ha->copp_lock); + spin_lock_init(&ha->ips_lock); + spin_lock_init(&ha->copp_waitlist.lock); + spin_lock_init(&ha->scb_waitlist.lock); + spin_lock_init(&ha->scb_activelist.lock); ips_sh[ips_num_controllers] = sh; ips_ha[ips_num_controllers] = ha; ips_num_controllers++; ha->active = 1; - ha->enq = kmalloc(sizeof(ENQCMD), GFP_KERNEL|GFP_DMA); + ha->enq = kmalloc(sizeof(IPS_ENQ), GFP_KERNEL|GFP_DMA); if (!ha->enq) { printk(KERN_WARNING "(%s%d) Unable to allocate host inquiry structure - skipping contoller\n", @@ -411,7 +466,7 @@ continue; } - ha->adapt = kmalloc(sizeof(ADAPTER_AREA), GFP_KERNEL|GFP_DMA); + ha->adapt = kmalloc(sizeof(IPS_ADAPTER), GFP_KERNEL|GFP_DMA); if (!ha->adapt) { printk(KERN_WARNING "(%s%d) Unable to allocate host adapt structure - skipping controller\n", @@ -422,7 +477,7 @@ continue; } - ha->conf = kmalloc(sizeof(CONFCMD), GFP_KERNEL|GFP_DMA); + ha->conf = kmalloc(sizeof(IPS_CONF), GFP_KERNEL|GFP_DMA); if (!ha->conf) { printk(KERN_WARNING "(%s%d) Unable to allocate host conf structure - skipping controller\n", @@ -433,7 +488,7 @@ continue; } - ha->nvram = kmalloc(sizeof(NVRAM_PAGE5), GFP_KERNEL|GFP_DMA); + ha->nvram = kmalloc(sizeof(IPS_NVRAM_P5), GFP_KERNEL|GFP_DMA); if (!ha->nvram) { printk(KERN_WARNING "(%s%d) Unable to allocate host nvram structure - skipping controller\n", @@ -444,7 +499,7 @@ continue; } - ha->subsys = kmalloc(sizeof(SUBSYS_PARAM), GFP_KERNEL|GFP_DMA); + ha->subsys = kmalloc(sizeof(IPS_SUBSYS), GFP_KERNEL|GFP_DMA); if (!ha->subsys) { printk(KERN_WARNING "(%s%d) Unable to allocate host subsystem structure - skipping controller\n", @@ -455,7 +510,7 @@ continue; } - ha->dummy = kmalloc(sizeof(BASIC_IO_CMD), GFP_KERNEL|GFP_DMA); + ha->dummy = kmalloc(sizeof(IPS_IO_CMD), GFP_KERNEL|GFP_DMA); if (!ha->dummy) { printk(KERN_WARNING "(%s%d) Unable to allocate host dummy structure - skipping controller\n", @@ -466,6 +521,17 @@ continue; } + ha->ioctl_data = kmalloc(IPS_IOCTL_SIZE, GFP_KERNEL|GFP_DMA); + ha->ioctl_datasize = IPS_IOCTL_SIZE; + if (!ha->ioctl_data) { + printk(KERN_WARNING "(%s%d) Unable to allocate ioctl data - skipping controller\n", + ips_name, index); + + ha->active = 0; + + continue; + } + /* Store away needed values for later use */ sh->io_port = io_addr; sh->n_io_port = 255; @@ -477,12 +543,12 @@ sh->cmd_per_lun = sh->hostt->cmd_per_lun; sh->unchecked_isa_dma = sh->hostt->unchecked_isa_dma; sh->use_clustering = sh->hostt->use_clustering; - sh->wish_block = FALSE; /* Store info in HA structure */ ha->io_addr = io_addr; ha->irq = irq; ha->host_num = index; + ha->revision_id = revision_id; /* install the interrupt handler */ if (request_irq(irq, do_ipsintr, SA_SHIRQ, ips_name, ha)) { @@ -509,7 +575,7 @@ } memset(ha->scbs, 0, sizeof(ips_scb_t)); - ha->scbs->sg_list = (SG_LIST *) kmalloc(sizeof(SG_LIST) * MAX_SG_ELEMENTS, GFP_KERNEL|GFP_DMA); + ha->scbs->sg_list = (IPS_SG_LIST *) kmalloc(sizeof(IPS_SG_LIST) * IPS_MAX_SG, GFP_KERNEL|GFP_DMA); if (!ha->scbs->sg_list) { /* couldn't allocate a temp SCB S/G list */ printk(KERN_WARNING "(%s%d) unable to allocate CCBs - skipping contoller\n", @@ -587,7 +653,7 @@ panic("(%s) release, invalid Scsi_Host pointer.\n", ips_name); - ha = HA(sh); + ha = IPS_HA(sh); if (!ha) return (FALSE); @@ -598,11 +664,11 @@ ips_init_scb(ha, scb); scb->timeout = ips_cmd_timeout; - scb->cdb[0] = FLUSH_CACHE; + scb->cdb[0] = IPS_CMD_FLUSH; - scb->cmd.flush_cache.op_code = FLUSH_CACHE; + scb->cmd.flush_cache.op_code = IPS_CMD_FLUSH; scb->cmd.flush_cache.command_id = IPS_COMMAND_ID(ha, scb); - scb->cmd.flush_cache.state = NORM_STATE; + scb->cmd.flush_cache.state = IPS_NORM_STATE; scb->cmd.flush_cache.reserved = 0; scb->cmd.flush_cache.reserved2 = 0; scb->cmd.flush_cache.reserved3 = 0; @@ -611,7 +677,7 @@ printk("(%s%d) Flushing Cache.\n", ips_name, ha->host_num); /* send command */ - if (ips_send_wait(ha, scb, ips_cmd_timeout) == IPS_FAILURE) + if (ips_send_wait(ha, scb, ips_cmd_timeout, IPS_INTR_ON) == IPS_FAILURE) printk("(%s%d) Incomplete Flush.\n", ips_name, ha->host_num); printk("(%s%d) Flushing Complete.\n", ips_name, ha->host_num); @@ -643,6 +709,7 @@ int ips_eh_abort(Scsi_Cmnd *SC) { ips_ha_t *ha; + ips_copp_wait_item_t *item; DBG("ips_eh_abort"); @@ -669,9 +736,23 @@ if (test_and_set_bit(IPS_IN_ABORT, &ha->flags)) return (FAILED); + /* See if the command is on the copp queue */ + IPS_QUEUE_LOCK(&ha->copp_waitlist); + item = ha->copp_waitlist.head; + while ((item) && (item->scsi_cmd != SC)) + item = item->next; + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); + + if (item) { + /* Found it */ + ips_removeq_copp(&ha->copp_waitlist, item); + clear_bit(IPS_IN_ABORT, &ha->flags); + + return (SUCCESS); + } + /* See if the command is on the wait queue */ - if (ips_removeq_wait(&ha->scb_waitlist, SC) || - ips_removeq_wait(&ha->copp_waitlist, SC)) { + if (ips_removeq_wait(&ha->scb_waitlist, SC)) { /* command not sent yet */ clear_bit(IPS_IN_ABORT, &ha->flags); @@ -696,6 +777,7 @@ int ips_abort(Scsi_Cmnd *SC) { ips_ha_t *ha; + ips_copp_wait_item_t *item; DBG("ips_abort"); @@ -722,9 +804,23 @@ if (test_and_set_bit(IPS_IN_ABORT, &ha->flags)) return (SCSI_ABORT_SNOOZE); + /* See if the command is on the copp queue */ + IPS_QUEUE_LOCK(&ha->copp_waitlist); + item = ha->copp_waitlist.head; + while ((item) && (item->scsi_cmd != SC)) + item = item->next; + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); + + if (item) { + /* Found it */ + ips_removeq_copp(&ha->copp_waitlist, item); + clear_bit(IPS_IN_ABORT, &ha->flags); + + return (SCSI_ABORT_PENDING); + } + /* See if the command is on the wait queue */ - if (ips_removeq_wait(&ha->scb_waitlist, SC) || - ips_removeq_wait(&ha->copp_waitlist, SC)) { + if (ips_removeq_wait(&ha->scb_waitlist, SC)) { /* command not sent yet */ clear_bit(IPS_IN_ABORT, &ha->flags); @@ -745,11 +841,15 @@ /* */ /* Reset the controller (with new eh error code) */ /* */ +/* NOTE: this routine is called under the io_request_lock spinlock */ +/* */ /****************************************************************************/ int ips_eh_reset(Scsi_Cmnd *SC) { - ips_ha_t *ha; - ips_scb_t *scb; + u32 cpu_flags; + ips_ha_t *ha; + ips_scb_t *scb; + ips_copp_wait_item_t *item; DBG("ips_eh_reset"); @@ -783,11 +883,25 @@ if (test_and_set_bit(IPS_IN_RESET, &ha->flags)) return (FAILED); - /* See if the command is on the waiting queue */ - if (ips_removeq_wait(&ha->scb_waitlist, SC) || - ips_removeq_wait(&ha->copp_waitlist, SC)) { + /* See if the command is on the copp queue */ + IPS_QUEUE_LOCK(&ha->copp_waitlist); + item = ha->copp_waitlist.head; + while ((item) && (item->scsi_cmd != SC)) + item = item->next; + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); + + if (item) { + /* Found it */ + ips_removeq_copp(&ha->copp_waitlist, item); + clear_bit(IPS_IN_RESET, &ha->flags); + + return (SUCCESS); + } + + /* See if the command is on the wait queue */ + if (ips_removeq_wait(&ha->scb_waitlist, SC)) { /* command not sent yet */ - clear_bit(IPS_IN_ABORT, &ha->flags); + clear_bit(IPS_IN_RESET, &ha->flags); return (SUCCESS); } @@ -802,25 +916,39 @@ return (FAILED); } - if (!ips_clear_adapter(ha)) { + if (!ips_clear_adapter(ha, IPS_INTR_IORL)) { clear_bit(IPS_IN_RESET, &ha->flags); return (FAILED); } + /* FFDC */ + if (ha->subsys->param[3] & 0x300000) { + struct timeval tv; + + do_gettimeofday(&tv); + IPS_HA_LOCK(cpu_flags); + ha->last_ffdc = tv.tv_sec; + ha->reset_count++; + IPS_HA_UNLOCK(cpu_flags); + ips_ffdc_reset(ha, IPS_INTR_IORL); + } + /* Now fail all of the active commands */ #if IPS_DEBUG >= 1 printk(KERN_WARNING "(%s%d) Failing active commands\n", ips_name, ha->host_num); #endif while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { - scb->scsi_cmd->result = DID_RESET << 16; + scb->scsi_cmd->result = (DID_RESET << 16) | (SUGGEST_RETRY << 24); scb->scsi_cmd->scsi_done(scb->scsi_cmd); ips_freescb(ha, scb); } /* Reset the number of active IOCTLs */ + IPS_HA_LOCK(cpu_flags); ha->num_ioctl = 0; + IPS_HA_UNLOCK(cpu_flags); clear_bit(IPS_IN_RESET, &ha->flags); @@ -832,7 +960,7 @@ * handler wants to do this and since * interrupts are turned off here.... */ - ips_next(ha); + ips_next(ha, IPS_INTR_IORL); } return (SUCCESS); @@ -849,11 +977,15 @@ /* */ /* Reset the controller */ /* */ +/* NOTE: this routine is called under the io_request_lock spinlock */ +/* */ /****************************************************************************/ int ips_reset(Scsi_Cmnd *SC, unsigned int flags) { - ips_ha_t *ha; - ips_scb_t *scb; + u32 cpu_flags; + ips_ha_t *ha; + ips_scb_t *scb; + ips_copp_wait_item_t *item; DBG("ips_reset"); @@ -887,11 +1019,25 @@ if (test_and_set_bit(IPS_IN_RESET, &ha->flags)) return (SCSI_RESET_SNOOZE); - /* See if the command is on the waiting queue */ - if (ips_removeq_wait(&ha->scb_waitlist, SC) || - ips_removeq_wait(&ha->copp_waitlist, SC)) { + /* See if the command is on the copp queue */ + IPS_QUEUE_LOCK(&ha->copp_waitlist); + item = ha->copp_waitlist.head; + while ((item) && (item->scsi_cmd != SC)) + item = item->next; + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); + + if (item) { + /* Found it */ + ips_removeq_copp(&ha->copp_waitlist, item); + clear_bit(IPS_IN_RESET, &ha->flags); + + return (SCSI_RESET_SNOOZE); + } + + /* See if the command is on the wait queue */ + if (ips_removeq_wait(&ha->scb_waitlist, SC)) { /* command not sent yet */ - clear_bit(IPS_IN_ABORT, &ha->flags); + clear_bit(IPS_IN_RESET, &ha->flags); return (SCSI_RESET_SNOOZE); } @@ -903,25 +1049,39 @@ return (SCSI_RESET_ERROR); } - if (!ips_clear_adapter(ha)) { + if (!ips_clear_adapter(ha, IPS_INTR_IORL)) { clear_bit(IPS_IN_RESET, &ha->flags); return (SCSI_RESET_ERROR); } + /* FFDC */ + if (ha->subsys->param[3] & 0x300000) { + struct timeval tv; + + do_gettimeofday(&tv); + IPS_HA_LOCK(cpu_flags); + ha->last_ffdc = tv.tv_sec; + ha->reset_count++; + IPS_HA_UNLOCK(cpu_flags); + ips_ffdc_reset(ha, IPS_INTR_IORL); + } + /* Now fail all of the active commands */ #if IPS_DEBUG >= 1 printk(KERN_WARNING "(%s%d) Failing active commands\n", ips_name, ha->host_num); #endif while ((scb = ips_removeq_scb_head(&ha->scb_activelist))) { - scb->scsi_cmd->result = DID_RESET << 16; + scb->scsi_cmd->result = (DID_RESET << 16) | (SUGGEST_RETRY << 24); scb->scsi_cmd->scsi_done(scb->scsi_cmd); ips_freescb(ha, scb); } /* Reset the number of active IOCTLs */ + IPS_HA_LOCK(cpu_flags); ha->num_ioctl = 0; + IPS_HA_UNLOCK(cpu_flags); clear_bit(IPS_IN_RESET, &ha->flags); @@ -933,7 +1093,7 @@ * handler wants to do this and since * interrupts are turned off here.... */ - ips_next(ha); + ips_next(ha, IPS_INTR_IORL); } return (SCSI_RESET_SUCCESS); @@ -950,10 +1110,19 @@ /* */ /* Send a command to the controller */ /* */ +/* NOTE: */ +/* Linux obtains io_request_lock before calling this function */ +/* */ /****************************************************************************/ int ips_queue(Scsi_Cmnd *SC, void (*done) (Scsi_Cmnd *)) { ips_ha_t *ha; + u32 cpu_flags; +#if LINUX_VERSION_CODE < LinuxVersionCode(2,3,1) + struct semaphore sem = MUTEX_LOCKED; +#else + DECLARE_MUTEX_LOCKED(sem); +#endif DBG("ips_queue"); @@ -967,19 +1136,27 @@ #ifndef NO_IPS_CMDLINE if (ips_is_passthru(SC)) { + IPS_QUEUE_LOCK(&ha->copp_waitlist); if (ha->copp_waitlist.count == IPS_MAX_IOCTL_QUEUE) { + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); SC->result = DID_BUS_BUSY << 16; done(SC); return (0); + } else { + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); } } else { #endif + IPS_QUEUE_LOCK(&ha->scb_waitlist); if (ha->scb_waitlist.count == IPS_MAX_QUEUE) { + IPS_QUEUE_UNLOCK(&ha->scb_waitlist); SC->result = DID_BUS_BUSY << 16; done(SC); return (0); + } else { + IPS_QUEUE_UNLOCK(&ha->scb_waitlist); } #ifndef NO_IPS_CMDLINE @@ -996,21 +1173,82 @@ SC->target, SC->lun); #if IPS_DEBUG >= 11 - MDELAY(2*ONE_SEC); + MDELAY(2*IPS_ONE_SEC); #endif #endif #ifndef NO_IPS_CMDLINE - if (ips_is_passthru(SC)) - ips_putq_wait_tail(&ha->copp_waitlist, SC); + if (ips_is_passthru(SC)) { + ips_copp_wait_item_t *scratch; + + /* allocate space for the scribble */ + scratch = kmalloc(sizeof(ips_copp_wait_item_t), GFP_KERNEL); + + if (!scratch) { + SC->result = DID_ERROR << 16; + done(SC); + + return (0); + } + + scratch->scsi_cmd = SC; + scratch->sem = &sem; + scratch->next = NULL; + + ips_putq_copp_tail(&ha->copp_waitlist, scratch); + } else #endif ips_putq_wait_tail(&ha->scb_waitlist, SC); + IPS_HA_LOCK(cpu_flags); if ((!test_bit(IPS_IN_INTR, &ha->flags)) && (!test_bit(IPS_IN_ABORT, &ha->flags)) && - (!test_bit(IPS_IN_RESET, &ha->flags))) - ips_next(ha); + (!test_bit(IPS_IN_RESET, &ha->flags))) { + IPS_HA_UNLOCK(cpu_flags); + ips_next(ha, IPS_INTR_IORL); + } else { + IPS_HA_UNLOCK(cpu_flags); + } + + /* + * If this request was a new style IOCTL wait + * for it to finish. + * + * NOTE: we relinquished the lock above so this should + * not cause contention problems + */ + if (ips_is_passthru(SC) && SC->cmnd[0] == IPS_IOCTL_NEW_COMMAND) { + char *user_area; + char *kern_area; + u32 datasize; + + /* free io_request_lock */ + spin_unlock_irq(&io_request_lock); + + /* wait for the command to finish */ + down(&sem); + + /* reobtain the lock */ + spin_lock_irq(&io_request_lock); + + /* command finished -- copy back */ + user_area = *((char **) &SC->cmnd[4]); + kern_area = ha->ioctl_data; + datasize = *((u32 *) &SC->cmnd[8]); + + if (copy_to_user(user_area, kern_area, datasize) > 0) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) passthru failed - unable to copy out user data\n", + ips_name, ha->host_num); +#endif + + SC->result = DID_ERROR << 16; + SC->scsi_done(SC); + } else { + SC->scsi_done(SC); + } + } return (0); } @@ -1042,17 +1280,17 @@ if (!ha->active) return (0); - if (!ips_read_adapter_status(ha)) + if (!ips_read_adapter_status(ha, IPS_INTR_ON)) /* ?!?! Enquiry command failed */ return (0); if ((disk->capacity > 0x400000) && ((ha->enq->ucMiscFlag & 0x8) == 0)) { - heads = NORM_MODE_HEADS; - sectors = NORM_MODE_SECTORS; + heads = IPS_NORM_HEADS; + sectors = IPS_NORM_SECTORS; } else { - heads = COMP_MODE_HEADS; - sectors = COMP_MODE_SECTORS; + heads = IPS_COMP_HEADS; + sectors = IPS_COMP_SECTORS; } cylinders = disk->capacity / (heads * sectors); @@ -1081,7 +1319,7 @@ void do_ipsintr(int irq, void *dev_id, struct pt_regs *regs) { ips_ha_t *ha; - unsigned int cpu_flags; + u32 cpu_flags; DBG("do_ipsintr"); @@ -1114,6 +1352,9 @@ clear_bit(IPS_IN_INTR, &ha->flags); spin_unlock_irqrestore(&io_request_lock, cpu_flags); + + /* start the next command */ + ips_next(ha, IPS_INTR_ON); } /****************************************************************************/ @@ -1132,6 +1373,7 @@ ips_stat_t *sp; ips_scb_t *scb; int status; + u32 cpu_flags; DBG("ips_intr"); @@ -1141,6 +1383,7 @@ if (!ha->active) return; + IPS_HA_LOCK(cpu_flags); while (ips_isintr(ha)) { sp = &ha->sp; @@ -1157,10 +1400,12 @@ * use the callback function to finish things up * NOTE: interrupts are OFF for this */ + IPS_HA_UNLOCK(cpu_flags); (*scb->callback) (ha, scb); + IPS_HA_LOCK(cpu_flags); } - clear_bit(IPS_IN_INTR, &ha->flags); + IPS_HA_UNLOCK(cpu_flags); } /****************************************************************************/ @@ -1180,7 +1425,7 @@ DBG("ips_info"); - ha = HA(SH); + ha = IPS_HA(SH); if (!ha) return (NULL); @@ -1268,10 +1513,10 @@ if (!SC) return (0); - if ((SC->channel == 0) && + if (((SC->cmnd[0] == IPS_IOCTL_COMMAND) || (SC->cmnd[0] == IPS_IOCTL_NEW_COMMAND)) && + (SC->channel == 0) && (SC->target == IPS_ADAPTER_ID) && (SC->lun == 0) && - (SC->cmnd[0] == 0x0d) && (SC->request_bufflen) && (!SC->use_sg) && (((char *) SC->request_buffer)[0] == 'C') && @@ -1286,7 +1531,7 @@ /****************************************************************************/ /* */ -/* Routine Name: ips_is_passthru */ +/* Routine Name: ips_make_passthru */ /* */ /* Routine Description: */ /* */ @@ -1333,17 +1578,23 @@ } pt = (ips_passthru_t *) SC->request_buffer; - scb->scsi_cmd = SC; - - if (SC->request_bufflen < (sizeof(ips_passthru_t) + pt->CmdBSize)) { - /* wrong size */ -#if IPS_DEBUG_PT >= 1 - printk(KERN_NOTICE "(%s%d) Passthru structure wrong size\n", - ips_name, ha->host_num); -#endif - return (IPS_FAILURE); - } + /* + * Some notes about the passthru interface used + * + * IF the scsi op_code == 0x0d then we assume + * that the data came along with/goes with the + * packet we received from the sg driver. In this + * case the CmdBSize field of the pt structure is + * used for the size of the buffer. + * + * IF the scsi op_code == 0x81 then we assume that + * we will need our own buffer and we will copy the + * data to/from the user buffer passed in the scsi + * command. The data address resides at offset 4 + * in the scsi command. The length of the data resides + * at offset 8 in the scsi command. + */ switch (pt->CoppCmd) { case IPS_NUMCTRLS: @@ -1352,19 +1603,128 @@ SC->result = DID_OK << 16; return (IPS_SUCCESS_IMM); + case IPS_CTRLINFO: memcpy(SC->request_buffer + sizeof(ips_passthru_t), ha, sizeof(ips_ha_t)); SC->result = DID_OK << 16; return (IPS_SUCCESS_IMM); - case COPPUSRCMD: - if (ips_usrcmd(ha, pt, scb)) - return (IPS_SUCCESS); - else - return (IPS_FAILURE); + + case IPS_COPPUSRCMD: + case IPS_COPPIOCCMD: + if (SC->cmnd[0] == IPS_IOCTL_COMMAND) { + if (SC->request_bufflen < (sizeof(ips_passthru_t) + pt->CmdBSize)) { + /* wrong size */ + #if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) Passthru structure wrong size\n", + ips_name, ha->host_num); + #endif + + return (IPS_FAILURE); + } + + if (ips_usrcmd(ha, pt, scb)) + return (IPS_SUCCESS); + else + return (IPS_FAILURE); + } else if (SC->cmnd[0] == IPS_IOCTL_NEW_COMMAND) { + if (SC->request_bufflen < (sizeof(ips_passthru_t))) { + /* wrong size */ + #if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) Passthru structure wrong size\n", + ips_name, ha->host_num); + #endif + + return (IPS_FAILURE); + } + + if (ips_newusrcmd(ha, pt, scb)) + return (IPS_SUCCESS); + else + return (IPS_FAILURE); + } + break; - } + + case IPS_FLASHBIOS: + /* we must use the new interface */ + if (SC->cmnd[0] != IPS_IOCTL_NEW_COMMAND) + return (IPS_FAILURE); + + /* don't flash the BIOS on future cards */ + if (ha->revision_id > IPS_REVID_TROMBONE64) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) flash bios failed - unsupported controller\n", + ips_name, ha->host_num); +#endif + return (IPS_FAILURE); + } + + /* copy in the size/buffer ptr from the scsi command */ + memcpy(&pt->CmdBuffer, &SC->cmnd[4], 4); + memcpy(&pt->CmdBSize, &SC->cmnd[8], 4); + + /* must have a buffer */ + if ((!pt->CmdBSize) || (!pt->CmdBuffer)) + return (IPS_FAILURE); + + /* make sure buffer is big enough */ + if (pt->CmdBSize > ha->ioctl_datasize) { + void *bigger_struct; + + /* try to allocate a bigger struct */ + bigger_struct = kmalloc(pt->CmdBSize, GFP_KERNEL|GFP_DMA); + if (bigger_struct) { + /* free the old memory */ + kfree(ha->ioctl_data); + + /* use the new memory */ + ha->ioctl_data = bigger_struct; + ha->ioctl_datasize = pt->CmdBSize; + } else + return (IPS_FAILURE); + } + + /* copy in the buffer */ + if (copy_from_user(ha->ioctl_data, pt->CmdBuffer, pt->CmdBSize) > 0) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) flash bios failed - unable to copy user buffer\n", + ips_name, ha->host_num); +#endif + + return (IPS_FAILURE); + } + + if (ips_erase_bios(ha)) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) flash bios failed - unable to erase flash\n", + ips_name, ha->host_num); +#endif + + return (IPS_FAILURE); + } + + if (ips_program_bios(ha, ha->ioctl_data, pt->CmdBSize)) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) flash bios failed - unable to program flash\n", + ips_name, ha->host_num); +#endif + + return (IPS_FAILURE); + } + + if (ips_verify_bios(ha, ha->ioctl_data, pt->CmdBSize)) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) flash bios failed - unable to verify flash\n", + ips_name, ha->host_num); +#endif + + return (IPS_FAILURE); + } + + return (IPS_SUCCESS_IMM); + } /* end switch */ return (IPS_FAILURE); } @@ -1380,7 +1740,7 @@ /****************************************************************************/ static int ips_usrcmd(ips_ha_t *ha, ips_passthru_t *pt, ips_scb_t *scb) { - SG_LIST *sg_list; + IPS_SG_LIST *sg_list; DBG("ips_usrcmd"); @@ -1391,15 +1751,15 @@ sg_list = scb->sg_list; /* copy in the CP */ - memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof(IOCTL_INFO)); - memcpy(&scb->dcdb, &pt->CoppCP.dcdb, sizeof(DCDB_TABLE)); + memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof(IPS_IOCTL_CMD)); + memcpy(&scb->dcdb, &pt->CoppCP.dcdb, sizeof(IPS_DCDB_TABLE)); /* FIX stuff that might be wrong */ scb->sg_list = sg_list; scb->scb_busaddr = VIRT_TO_BUS(scb); - scb->bus = 0; - scb->target_id = 0; - scb->lun = 0; + scb->bus = scb->scsi_cmd->channel; + scb->target_id = scb->scsi_cmd->target; + scb->lun = scb->scsi_cmd->lun; scb->sg_len = 0; scb->data_len = 0; scb->flags = 0; @@ -1409,9 +1769,9 @@ scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); /* we don't support DCDB/READ/WRITE Scatter Gather */ - if ((scb->cmd.basic_io.op_code == READ_SCATTER_GATHER) || - (scb->cmd.basic_io.op_code == WRITE_SCATTER_GATHER) || - (scb->cmd.basic_io.op_code == DIRECT_CDB_SCATTER_GATHER)) + if ((scb->cmd.basic_io.op_code == IPS_CMD_READ_SG) || + (scb->cmd.basic_io.op_code == IPS_CMD_WRITE_SG) || + (scb->cmd.basic_io.op_code == IPS_CMD_DCDB_SG)) return (0); if (pt->CmdBSize) { @@ -1420,13 +1780,129 @@ scb->data_busaddr = 0L; } + if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) + scb->cmd.dcdb.dcdb_address = VIRT_TO_BUS(&scb->dcdb); + if (pt->CmdBSize) { - if (scb->cmd.dcdb.op_code == DIRECT_CDB) { - scb->cmd.dcdb.dcdb_address = VIRT_TO_BUS(&scb->dcdb); + if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) scb->dcdb.buffer_pointer = scb->data_busaddr; - } else { + else scb->cmd.basic_io.sg_addr = scb->data_busaddr; + } + + /* set timeouts */ + if (pt->TimeOut) { + scb->timeout = pt->TimeOut; + + if (pt->TimeOut <= 10) + scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; + else if (pt->TimeOut <= 60) + scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; + else + scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; + } + + /* assume success */ + scb->scsi_cmd->result = DID_OK << 16; + + /* success */ + return (1); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_newusrcmd */ +/* */ +/* Routine Description: */ +/* */ +/* Process a user command and make it ready to send */ +/* */ +/****************************************************************************/ +static int +ips_newusrcmd(ips_ha_t *ha, ips_passthru_t *pt, ips_scb_t *scb) { + IPS_SG_LIST *sg_list; + char *user_area; + char *kern_area; + u32 datasize; + + DBG("ips_usrcmd"); + + if ((!scb) || (!pt) || (!ha)) + return (0); + + /* Save the S/G list pointer so it doesn't get clobbered */ + sg_list = scb->sg_list; + + /* copy in the CP */ + memcpy(&scb->cmd, &pt->CoppCP.cmd, sizeof(IPS_IOCTL_CMD)); + memcpy(&scb->dcdb, &pt->CoppCP.dcdb, sizeof(IPS_DCDB_TABLE)); + + /* FIX stuff that might be wrong */ + scb->sg_list = sg_list; + scb->scb_busaddr = VIRT_TO_BUS(scb); + scb->bus = scb->scsi_cmd->channel; + scb->target_id = scb->scsi_cmd->target; + scb->lun = scb->scsi_cmd->lun; + scb->sg_len = 0; + scb->data_len = 0; + scb->flags = 0; + scb->op_code = 0; + scb->callback = ipsintr_done; + scb->timeout = ips_cmd_timeout; + scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); + + /* we don't support DCDB/READ/WRITE Scatter Gather */ + if ((scb->cmd.basic_io.op_code == IPS_CMD_READ_SG) || + (scb->cmd.basic_io.op_code == IPS_CMD_WRITE_SG) || + (scb->cmd.basic_io.op_code == IPS_CMD_DCDB_SG)) + return (0); + + if (pt->CmdBSize) { + if (pt->CmdBSize > ha->ioctl_datasize) { + void *bigger_struct; + + /* try to allocate a bigger struct */ + bigger_struct = kmalloc(pt->CmdBSize, GFP_KERNEL|GFP_DMA); + if (bigger_struct) { + /* free the old memory */ + kfree(ha->ioctl_data); + + /* use the new memory */ + ha->ioctl_data = bigger_struct; + ha->ioctl_datasize = pt->CmdBSize; + } else + return (0); + } + + scb->data_busaddr = VIRT_TO_BUS(ha->ioctl_data); + + /* Attempt to copy in the data */ + user_area = *((char **) &scb->scsi_cmd->cmnd[4]); + kern_area = ha->ioctl_data; + datasize = *((u32 *) &scb->scsi_cmd->cmnd[8]); + + if (copy_from_user(kern_area, user_area, datasize) > 0) { +#if IPS_DEBUG_PT >= 1 + printk(KERN_NOTICE "(%s%d) passthru failed - unable to copy in user data\n", + ips_name, ha->host_num); +#endif + + return (0); + } + + } else { + scb->data_busaddr = 0L; + } + + if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) + scb->cmd.dcdb.dcdb_address = VIRT_TO_BUS(&scb->dcdb); + + if (pt->CmdBSize) { + if (scb->cmd.dcdb.op_code == IPS_CMD_DCDB) + scb->dcdb.buffer_pointer = scb->data_busaddr; + else + scb->cmd.basic_io.sg_addr = scb->data_busaddr; } /* set timeouts */ @@ -1434,15 +1910,15 @@ scb->timeout = pt->TimeOut; if (pt->TimeOut <= 10) - scb->dcdb.cmd_attribute |= TIMEOUT_10; + scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; else if (pt->TimeOut <= 60) - scb->dcdb.cmd_attribute |= TIMEOUT_60; + scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; else - scb->dcdb.cmd_attribute |= TIMEOUT_20M; + scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; } - /* assume error */ - scb->scsi_cmd->result = DID_ERROR << 16; + /* assume success */ + scb->scsi_cmd->result = DID_OK << 16; /* success */ return (1); @@ -1458,7 +1934,7 @@ /* */ /****************************************************************************/ static void -ips_cleanup_passthru(ips_scb_t *scb) { +ips_cleanup_passthru(ips_ha_t *ha, ips_scb_t *scb) { ips_passthru_t *pt; DBG("ips_cleanup_passthru"); @@ -1474,10 +1950,15 @@ pt = (ips_passthru_t *) scb->scsi_cmd->request_buffer; /* Copy data back to the user */ - pt->BasicStatus = scb->basic_status; - pt->ExtendedStatus = scb->extended_status; - - scb->scsi_cmd->result = DID_OK << 16; + if (scb->scsi_cmd->cmnd[0] == IPS_IOCTL_COMMAND) { + /* Copy data back to the user */ + pt->BasicStatus = scb->basic_status; + pt->ExtendedStatus = scb->extended_status; + } else { + pt->BasicStatus = scb->basic_status; + pt->ExtendedStatus = scb->extended_status; + up(scb->sem); + } } #endif @@ -1493,7 +1974,7 @@ /****************************************************************************/ static int ips_host_info(ips_ha_t *ha, char *ptr, off_t offset, int len) { - INFOSTR info; + IPS_INFOSTR info; DBG("ips_host_info"); @@ -1504,7 +1985,7 @@ copy_info(&info, "\nIBM ServeRAID General Information:\n\n"); - if ((ha->nvram->signature == NVRAM_PAGE5_SIGNATURE) && + if ((ha->nvram->signature == IPS_NVRAM_P5_SIG) && (ha->nvram->adapter_type != 0)) copy_info(&info, "\tController Type : %s\n", ips_adapter_name[ha->ad_type-1]); else @@ -1513,7 +1994,7 @@ copy_info(&info, "\tIO port address : 0x%lx\n", ha->io_addr); copy_info(&info, "\tIRQ number : %d\n", ha->irq); - if (ha->nvram->signature == NVRAM_PAGE5_SIGNATURE) + if (ha->nvram->signature == IPS_NVRAM_P5_SIG) copy_info(&info, "\tBIOS Version : %c%c%c%c%c%c%c%c\n", ha->nvram->bios_high[0], ha->nvram->bios_high[1], ha->nvram->bios_high[2], ha->nvram->bios_high[3], @@ -1559,11 +2040,11 @@ /* */ /* Routine Description: */ /* */ -/* Copy data into an INFOSTR structure */ +/* Copy data into an IPS_INFOSTR structure */ /* */ /****************************************************************************/ static void -copy_mem_info(INFOSTR *info, char *data, int len) { +copy_mem_info(IPS_INFOSTR *info, char *data, int len) { DBG("copy_mem_info"); if (info->pos + len > info->length) @@ -1595,7 +2076,7 @@ /* */ /****************************************************************************/ static int -copy_info(INFOSTR *info, char *fmt, ...) { +copy_info(IPS_INFOSTR *info, char *fmt, ...) { va_list args; char buf[81]; int len; @@ -1634,11 +2115,15 @@ /* initialize status queue */ ips_statinit(ha); + ha->reset_count = 1; + /* Setup HBA ID's */ - if (!ips_read_config(ha)) { + if (!ips_read_config(ha, IPS_INTR_IORL)) { #ifndef NO_IPS_RESET + ha->reset_count++; + /* Try to reset the controller and try again */ if (!ips_reset_adapter(ha)) { printk(KERN_WARNING "(%s%d) unable to reset controller.\n", @@ -1647,7 +2132,7 @@ return (0); } - if (!ips_clear_adapter(ha)) { + if (!ips_clear_adapter(ha, IPS_INTR_IORL)) { printk(KERN_WARNING "(%s%d) unable to initialize controller.\n", ips_name, ha->host_num); @@ -1656,7 +2141,7 @@ #endif - if (!ips_read_config(ha)) { + if (!ips_read_config(ha, IPS_INTR_IORL)) { printk(KERN_WARNING "(%s%d) unable to read config from controller.\n", ips_name, ha->host_num); @@ -1665,31 +2150,40 @@ } /* end if */ /* write driver version */ - if (!ips_write_driver_status(ha)) { + if (!ips_write_driver_status(ha, IPS_INTR_IORL)) { printk(KERN_WARNING "(%s%d) unable to write driver info to controller.\n", ips_name, ha->host_num); return (0); } - if (!ips_read_adapter_status(ha)) { + if (!ips_read_adapter_status(ha, IPS_INTR_IORL)) { printk(KERN_WARNING "(%s%d) unable to read controller status.\n", ips_name, ha->host_num); return (0); } - if (!ips_read_subsystem_parameters(ha)) { + if (!ips_read_subsystem_parameters(ha, IPS_INTR_IORL)) { printk(KERN_WARNING "(%s%d) unable to read subsystem parameters.\n", ips_name, ha->host_num); return (0); } + /* FFDC */ + if (ha->subsys->param[3] & 0x300000) { + struct timeval tv; + + do_gettimeofday(&tv); + ha->last_ffdc = tv.tv_sec; + ips_ffdc_reset(ha, IPS_INTR_IORL); + } + /* set limits on SID, LUN, BUS */ - ha->ntargets = MAX_TARGETS + 1; + ha->ntargets = IPS_MAX_TARGETS + 1; ha->nlun = 1; - ha->nbus = (ha->enq->ucMaxPhysicalDevices / MAX_TARGETS); + ha->nbus = (ha->enq->ucMaxPhysicalDevices / IPS_MAX_TARGETS); switch (ha->conf->logical_drive[0].ucStripeSize) { case 4: @@ -1754,21 +2248,55 @@ /* */ /* Take the next command off the queue and send it to the controller */ /* */ -/* ASSUMED to be called from within a lock */ -/* */ /****************************************************************************/ static void -ips_next(ips_ha_t *ha) { - ips_scb_t *scb; - Scsi_Cmnd *SC; - Scsi_Cmnd *p; - int ret; +ips_next(ips_ha_t *ha, int intr) { + ips_scb_t *scb; + Scsi_Cmnd *SC; + Scsi_Cmnd *p; + ips_copp_wait_item_t *item; + int ret; + int intr_status; + u32 cpu_flags; + u32 cpu_flags2; DBG("ips_next"); if (!ha) return ; + /* + * Block access to the queue function so + * this command won't time out + */ + if (intr == IPS_INTR_ON) { + spin_lock_irqsave(&io_request_lock, cpu_flags2); + intr_status = IPS_INTR_IORL; + } else { + intr_status = intr; + + /* Quiet the compiler */ + cpu_flags2 = 0; + } + + if (ha->subsys->param[3] & 0x300000) { + struct timeval tv; + + do_gettimeofday(&tv); + + IPS_HA_LOCK(cpu_flags); + if (tv.tv_sec - ha->last_ffdc > IPS_SECS_8HOURS) { + ha->last_ffdc = tv.tv_sec; + IPS_HA_UNLOCK(cpu_flags); + ips_ffdc_time(ha, intr_status); + } else { + IPS_HA_UNLOCK(cpu_flags); + } + } + + if (intr == IPS_INTR_ON) + spin_unlock_irqrestore(&io_request_lock, cpu_flags2); + #ifndef NO_IPS_CMDLINE /* * Send passthru commands @@ -1777,32 +2305,50 @@ * since we limit the number that can be active * on the card at any one time */ + IPS_HA_LOCK(cpu_flags); + IPS_QUEUE_LOCK(&ha->copp_waitlist); while ((ha->num_ioctl < IPS_MAX_IOCTL) && (ha->copp_waitlist.head) && (scb = ips_getscb(ha))) { - SC = ips_removeq_wait_head(&ha->copp_waitlist); - ret = ips_make_passthru(ha, SC, scb); + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); + IPS_HA_UNLOCK(cpu_flags); + item = ips_removeq_copp_head(&ha->copp_waitlist); + scb->scsi_cmd = item->scsi_cmd; + scb->sem = item->sem; + kfree(item); + + ret = ips_make_passthru(ha, scb->scsi_cmd, scb); switch (ret) { case IPS_FAILURE: if (scb->scsi_cmd) { + /* raise the semaphore */ + if (scb->scsi_cmd->cmnd[0] == IPS_IOCTL_NEW_COMMAND) + up(scb->sem); + scb->scsi_cmd->result = DID_ERROR << 16; - scb->scsi_cmd->scsi_done(scb->scsi_cmd); } ips_freescb(ha, scb); break; case IPS_SUCCESS_IMM: - if (scb->scsi_cmd) - scb->scsi_cmd->scsi_done(scb->scsi_cmd); + if (scb->scsi_cmd) { + /* raise the semaphore */ + if (scb->scsi_cmd->cmnd[0] == IPS_IOCTL_NEW_COMMAND) + up(scb->sem); + } + ips_freescb(ha, scb); break; default: break; } /* end case */ - if (ret != IPS_SUCCESS) + if (ret != IPS_SUCCESS) { + IPS_HA_LOCK(cpu_flags); + IPS_QUEUE_LOCK(&ha->copp_waitlist); continue; + } ret = ips_send_cmd(ha, scb); @@ -1814,27 +2360,43 @@ switch(ret) { case IPS_FAILURE: if (scb->scsi_cmd) { + /* raise the semaphore */ + if (scb->scsi_cmd->cmnd[0] == IPS_IOCTL_NEW_COMMAND) + up(scb->sem); + scb->scsi_cmd->result = DID_ERROR << 16; - scb->scsi_cmd->scsi_done(scb->scsi_cmd); } ips_freescb(ha, scb); break; case IPS_SUCCESS_IMM: - if (scb->scsi_cmd) - scb->scsi_cmd->scsi_done(scb->scsi_cmd); + if (scb->scsi_cmd) { + /* raise the semaphore */ + if (scb->scsi_cmd->cmnd[0] == IPS_IOCTL_NEW_COMMAND) + up(scb->sem); + } + ips_freescb(ha, scb); break; default: break; } /* end case */ + + IPS_HA_LOCK(cpu_flags); + IPS_QUEUE_LOCK(&ha->copp_waitlist); } + + IPS_QUEUE_UNLOCK(&ha->copp_waitlist); + IPS_HA_UNLOCK(cpu_flags); #endif /* * Send "Normal" I/O commands */ + IPS_HA_LOCK(cpu_flags); + IPS_QUEUE_LOCK(&ha->scb_waitlist); p = ha->scb_waitlist.head; + IPS_QUEUE_UNLOCK(&ha->scb_waitlist); while ((p) && (scb = ips_getscb(ha))) { if ((p->channel > 0) && (ha->dcdb_active[p->channel-1] & (1 << p->target))) { ips_freescb(ha, scb); @@ -1842,6 +2404,8 @@ continue; } + IPS_HA_UNLOCK(cpu_flags); + SC = ips_removeq_wait(&ha->scb_waitlist, p); SC->result = DID_OK; @@ -1922,7 +2486,7 @@ scb->dcdb.transfer_length = 0; if (scb->data_len >= IPS_MAX_XFER) { - scb->dcdb.cmd_attribute |= TRANSFER_64K; + scb->dcdb.cmd_attribute |= IPS_TRANSFER64K; scb->dcdb.transfer_length = 0; } @@ -1957,7 +2521,11 @@ } /* end case */ p = (Scsi_Cmnd *) p->host_scribble; + + IPS_HA_LOCK(cpu_flags); } /* end while */ + + IPS_HA_UNLOCK(cpu_flags); } /****************************************************************************/ @@ -1978,6 +2546,8 @@ if (!item) return ; + IPS_QUEUE_LOCK(queue); + item->q_next = queue->head; queue->head = item; @@ -1985,6 +2555,8 @@ queue->tail = item; queue->count++; + + IPS_QUEUE_UNLOCK(queue); } /****************************************************************************/ @@ -2005,6 +2577,8 @@ if (!item) return ; + IPS_QUEUE_LOCK(queue); + item->q_next = NULL; if (queue->tail) @@ -2016,6 +2590,8 @@ queue->head = item; queue->count++; + + IPS_QUEUE_UNLOCK(queue); } /****************************************************************************/ @@ -2035,10 +2611,15 @@ DBG("ips_removeq_scb_head"); + IPS_QUEUE_LOCK(queue); + item = queue->head; - if (!item) + if (!item) { + IPS_QUEUE_UNLOCK(queue); + return (NULL); + } queue->head = item->q_next; item->q_next = NULL; @@ -2048,6 +2629,8 @@ queue->count--; + IPS_QUEUE_UNLOCK(queue); + return (item); } @@ -2062,42 +2645,210 @@ /* ASSUMED to be called from within a lock */ /* */ /****************************************************************************/ -static inline ips_scb_t * -ips_removeq_scb(ips_scb_queue_t *queue, ips_scb_t *item) { - ips_scb_t *p; +static inline ips_scb_t * +ips_removeq_scb(ips_scb_queue_t *queue, ips_scb_t *item) { + ips_scb_t *p; + + DBG("ips_removeq_scb"); + + if (!item) + return (NULL); + + IPS_QUEUE_LOCK(queue); + + if (item == queue->head) { + IPS_QUEUE_UNLOCK(queue); + + return (ips_removeq_scb_head(queue)); + } + + p = queue->head; + + while ((p) && (item != p->q_next)) + p = p->q_next; + + if (p) { + /* found a match */ + p->q_next = item->q_next; + + if (!item->q_next) + queue->tail = p; + + item->q_next = NULL; + queue->count--; + + IPS_QUEUE_UNLOCK(queue); + + return (item); + } + + IPS_QUEUE_UNLOCK(queue); + + return (NULL); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_putq_wait_head */ +/* */ +/* Routine Description: */ +/* */ +/* Add an item to the head of the queue */ +/* */ +/* ASSUMED to be called from within a lock */ +/* */ +/****************************************************************************/ +static inline void +ips_putq_wait_head(ips_wait_queue_t *queue, Scsi_Cmnd *item) { + DBG("ips_putq_wait_head"); + + if (!item) + return ; + + IPS_QUEUE_LOCK(queue); + + item->host_scribble = (char *) queue->head; + queue->head = item; + + if (!queue->tail) + queue->tail = item; + + queue->count++; + + IPS_QUEUE_UNLOCK(queue); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_putq_wait_tail */ +/* */ +/* Routine Description: */ +/* */ +/* Add an item to the tail of the queue */ +/* */ +/* ASSUMED to be called from within a lock */ +/* */ +/****************************************************************************/ +static inline void +ips_putq_wait_tail(ips_wait_queue_t *queue, Scsi_Cmnd *item) { + DBG("ips_putq_wait_tail"); + + if (!item) + return ; + + IPS_QUEUE_LOCK(queue); + + item->host_scribble = NULL; + + if (queue->tail) + queue->tail->host_scribble = (char *)item; + + queue->tail = item; + + if (!queue->head) + queue->head = item; + + queue->count++; + + IPS_QUEUE_UNLOCK(queue); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_removeq_wait_head */ +/* */ +/* Routine Description: */ +/* */ +/* Remove the head of the queue */ +/* */ +/* ASSUMED to be called from within a lock */ +/* */ +/****************************************************************************/ +static inline Scsi_Cmnd * +ips_removeq_wait_head(ips_wait_queue_t *queue) { + Scsi_Cmnd *item; + + DBG("ips_removeq_wait_head"); + + IPS_QUEUE_LOCK(queue); + + item = queue->head; + + if (!item) { + IPS_QUEUE_UNLOCK(queue); + + return (NULL); + } + + queue->head = (Scsi_Cmnd *) item->host_scribble; + item->host_scribble = NULL; + + if (queue->tail == item) + queue->tail = NULL; + + queue->count--; + + IPS_QUEUE_UNLOCK(queue); + + return (item); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_removeq_wait */ +/* */ +/* Routine Description: */ +/* */ +/* Remove an item from a queue */ +/* */ +/* ASSUMED to be called from within a lock */ +/* */ +/****************************************************************************/ +static inline Scsi_Cmnd * +ips_removeq_wait(ips_wait_queue_t *queue, Scsi_Cmnd *item) { + Scsi_Cmnd *p; - DBG("ips_removeq_scb"); + DBG("ips_removeq_wait"); if (!item) return (NULL); - if (item == queue->head) - return (ips_removeq_scb_head(queue)); + IPS_QUEUE_LOCK(queue); + + if (item == queue->head) { + IPS_QUEUE_UNLOCK(queue); + + return (ips_removeq_wait_head(queue)); + } p = queue->head; - while ((p) && (item != p->q_next)) - p = p->q_next; + while ((p) && (item != (Scsi_Cmnd *) p->host_scribble)) + p = (Scsi_Cmnd *) p->host_scribble; if (p) { /* found a match */ - p->q_next = item->q_next; + p->host_scribble = item->host_scribble; - if (!item->q_next) + if (!item->host_scribble) queue->tail = p; - item->q_next = NULL; + item->host_scribble = NULL; queue->count--; + IPS_QUEUE_UNLOCK(queue); + return (item); } + IPS_QUEUE_UNLOCK(queue); + return (NULL); } /****************************************************************************/ /* */ -/* Routine Name: ips_putq_wait_head */ +/* Routine Name: ips_putq_copp_head */ /* */ /* Routine Description: */ /* */ @@ -2107,24 +2858,28 @@ /* */ /****************************************************************************/ static inline void -ips_putq_wait_head(ips_wait_queue_t *queue, Scsi_Cmnd *item) { - DBG("ips_putq_wait_head"); +ips_putq_copp_head(ips_copp_queue_t *queue, ips_copp_wait_item_t *item) { + DBG("ips_putq_copp_head"); if (!item) return ; - item->host_scribble = (char *) queue->head; + IPS_QUEUE_LOCK(queue); + + item->next = queue->head; queue->head = item; if (!queue->tail) queue->tail = item; queue->count++; + + IPS_QUEUE_UNLOCK(queue); } /****************************************************************************/ /* */ -/* Routine Name: ips_putq_wait_tail */ +/* Routine Name: ips_putq_copp_tail */ /* */ /* Routine Description: */ /* */ @@ -2134,16 +2889,18 @@ /* */ /****************************************************************************/ static inline void -ips_putq_wait_tail(ips_wait_queue_t *queue, Scsi_Cmnd *item) { - DBG("ips_putq_wait_tail"); +ips_putq_copp_tail(ips_copp_queue_t *queue, ips_copp_wait_item_t *item) { + DBG("ips_putq_copp_tail"); if (!item) return ; - item->host_scribble = NULL; + IPS_QUEUE_LOCK(queue); + + item->next = NULL; if (queue->tail) - queue->tail->host_scribble = (char *)item; + queue->tail->next = item; queue->tail = item; @@ -2151,11 +2908,13 @@ queue->head = item; queue->count++; + + IPS_QUEUE_UNLOCK(queue); } /****************************************************************************/ /* */ -/* Routine Name: ips_removeq_wait_head */ +/* Routine Name: ips_removeq_copp_head */ /* */ /* Routine Description: */ /* */ @@ -2164,31 +2923,38 @@ /* ASSUMED to be called from within a lock */ /* */ /****************************************************************************/ -static inline Scsi_Cmnd * -ips_removeq_wait_head(ips_wait_queue_t *queue) { - Scsi_Cmnd *item; +static inline ips_copp_wait_item_t * +ips_removeq_copp_head(ips_copp_queue_t *queue) { + ips_copp_wait_item_t *item; - DBG("ips_removeq_wait_head"); + DBG("ips_removeq_copp_head"); + + IPS_QUEUE_LOCK(queue); item = queue->head; - if (!item) + if (!item) { + IPS_QUEUE_UNLOCK(queue); + return (NULL); + } - queue->head = (Scsi_Cmnd *) item->host_scribble; - item->host_scribble = NULL; + queue->head = item->next; + item->next = NULL; if (queue->tail == item) queue->tail = NULL; queue->count--; + IPS_QUEUE_UNLOCK(queue); + return (item); } /****************************************************************************/ /* */ -/* Routine Name: ips_removeq_wait */ +/* Routine Name: ips_removeq_copp */ /* */ /* Routine Description: */ /* */ @@ -2197,36 +2963,45 @@ /* ASSUMED to be called from within a lock */ /* */ /****************************************************************************/ -static inline Scsi_Cmnd * -ips_removeq_wait(ips_wait_queue_t *queue, Scsi_Cmnd *item) { - Scsi_Cmnd *p; +static inline ips_copp_wait_item_t * +ips_removeq_copp(ips_copp_queue_t *queue, ips_copp_wait_item_t *item) { + ips_copp_wait_item_t *p; - DBG("ips_removeq_wait"); + DBG("ips_removeq_copp"); if (!item) return (NULL); - if (item == queue->head) - return (ips_removeq_wait_head(queue)); + IPS_QUEUE_LOCK(queue); + + if (item == queue->head) { + IPS_QUEUE_UNLOCK(queue); + + return (ips_removeq_copp_head(queue)); + } p = queue->head; - while ((p) && (item != (Scsi_Cmnd *) p->host_scribble)) - p = (Scsi_Cmnd *) p->host_scribble; + while ((p) && (item != p->next)) + p = p->next; if (p) { /* found a match */ - p->host_scribble = item->host_scribble; + p->next = item->next; - if (!item->host_scribble) + if (!item->next) queue->tail = p; - item->host_scribble = NULL; + item->next = NULL; queue->count--; + IPS_QUEUE_UNLOCK(queue); + return (item); } + IPS_QUEUE_UNLOCK(queue); + return (NULL); } @@ -2287,6 +3062,7 @@ static void ips_done(ips_ha_t *ha, ips_scb_t *scb) { int ret; + u32 cpu_flags; DBG("ips_done"); @@ -2295,8 +3071,10 @@ #ifndef NO_IPS_CMDLINE if ((scb->scsi_cmd) && (ips_is_passthru(scb->scsi_cmd))) { - ips_cleanup_passthru(scb); + ips_cleanup_passthru(ha, scb); + IPS_HA_LOCK(cpu_flags); ha->num_ioctl--; + IPS_HA_UNLOCK(cpu_flags); } else { #endif /* @@ -2365,7 +3143,7 @@ scb->dcdb.transfer_length = 0; if (scb->data_len >= IPS_MAX_XFER) { - scb->dcdb.cmd_attribute |= TRANSFER_64K; + scb->dcdb.cmd_attribute |= IPS_TRANSFER64K; scb->dcdb.transfer_length = 0; } @@ -2398,15 +3176,17 @@ } /* end if passthru */ #endif - if (scb->bus) + if (scb->bus) { + IPS_HA_LOCK(cpu_flags); ha->dcdb_active[scb->bus-1] &= ~(1 << scb->target_id); + IPS_HA_UNLOCK(cpu_flags); + } /* call back to SCSI layer */ - scb->scsi_cmd->scsi_done(scb->scsi_cmd); - ips_freescb(ha, scb); + if (scb->scsi_cmd && scb->scsi_cmd->cmnd[0] != IPS_IOCTL_NEW_COMMAND) + scb->scsi_cmd->scsi_done(scb->scsi_cmd); - /* do the next command */ - ips_next(ha); + ips_freescb(ha, scb); } /****************************************************************************/ @@ -2445,19 +3225,19 @@ /* default driver error */ errcode = DID_ERROR; - switch (scb->basic_status & GSC_STATUS_MASK) { - case CMD_TIMEOUT: + switch (scb->basic_status & IPS_GSC_STATUS_MASK) { + case IPS_CMD_TIMEOUT: errcode = DID_TIME_OUT; break; - case INVAL_OPCO: - case INVAL_CMD_BLK: - case INVAL_PARM_BLK: - case LOG_DRV_ERROR: - case CMD_CMPLT_WERROR: + case IPS_INVAL_OPCO: + case IPS_INVAL_CMD_BLK: + case IPS_INVAL_PARM_BLK: + case IPS_LD_ERROR: + case IPS_CMD_CMPLT_WERROR: break; - case PHYS_DRV_ERROR: + case IPS_PHYS_DRV_ERROR: /* * For physical drive errors that * are not on a logical drive should @@ -2468,14 +3248,14 @@ errcode = DID_OK; switch (scb->extended_status) { - case SELECTION_TIMEOUT: + case IPS_ERR_SEL_TO: if (scb->bus) { scb->scsi_cmd->result |= DID_TIME_OUT << 16; return (0); } break; - case DATA_OVER_UNDER_RUN: + case IPS_ERR_OU_RUN: if ((scb->bus) && (scb->dcdb.transfer_length < scb->data_len)) { if ((scb->scsi_cmd->cmnd[0] == INQUIRY) && ((((char *) scb->scsi_cmd->buffer)[0] & 0x1f) == TYPE_DISK)) { @@ -2494,7 +3274,7 @@ } break; - case EXT_RECOVERY: + case IPS_ERR_RECOVERY: /* don't fail recovered errors */ if (scb->bus) { scb->scsi_cmd->result |= DID_OK << 16; @@ -2503,12 +3283,12 @@ } break; - case EXT_HOST_RESET: - case EXT_DEVICE_RESET: + case IPS_ERR_HOST_RESET: + case IPS_ERR_DEV_RESET: errcode = DID_RESET; break; - case EXT_CHECK_CONDITION: + case IPS_ERR_CKCOND: break; } /* end switch */ } /* end switch */ @@ -2528,7 +3308,7 @@ /* */ /****************************************************************************/ static int -ips_send(ips_ha_t *ha, ips_scb_t *scb, scb_callback callback) { +ips_send(ips_ha_t *ha, ips_scb_t *scb, ips_scb_callback callback) { int ret; DBG("ips_send"); @@ -2550,7 +3330,7 @@ /* */ /****************************************************************************/ static int -ips_send_wait(ips_ha_t *ha, ips_scb_t *scb, int timeout) { +ips_send_wait(ips_ha_t *ha, ips_scb_t *scb, int timeout, int intr) { int ret; DBG("ips_send_wait"); @@ -2563,7 +3343,7 @@ if ((ret == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM)) return (ret); - ret = ips_wait(ha, timeout, IPS_INTR_OFF); + ret = ips_wait(ha, timeout, intr); return (ret); } @@ -2629,9 +3409,9 @@ scb->scsi_cmd->result = DID_OK << 16; if (scb->scsi_cmd->cmnd[0] == INQUIRY) { - INQUIRYDATA inq; + IPS_INQ_DATA inq; - memset(&inq, 0, sizeof(INQUIRYDATA)); + memset(&inq, 0, sizeof(IPS_INQ_DATA)); inq.DeviceType = TYPE_PROCESSOR; inq.DeviceTypeQualifier = 0; @@ -2647,7 +3427,7 @@ scb->scsi_cmd->result = DID_OK << 16; } } else { - scb->cmd.logical_info.op_code = GET_LOGICAL_DRIVE_INFO; + scb->cmd.logical_info.op_code = IPS_CMD_GET_LD_INFO; scb->cmd.logical_info.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.logical_info.buffer_addr = VIRT_TO_BUS(&ha->adapt->logical_drive_info); scb->cmd.logical_info.reserved = 0; @@ -2666,10 +3446,10 @@ case WRITE_6: if (!scb->sg_len) { scb->cmd.basic_io.op_code = - (scb->scsi_cmd->cmnd[0] == READ_6) ? IPS_READ : IPS_WRITE; + (scb->scsi_cmd->cmnd[0] == READ_6) ? IPS_CMD_READ : IPS_CMD_WRITE; } else { scb->cmd.basic_io.op_code = - (scb->scsi_cmd->cmnd[0] == READ_6) ? READ_SCATTER_GATHER : WRITE_SCATTER_GATHER; + (scb->scsi_cmd->cmnd[0] == READ_6) ? IPS_CMD_READ_SG : IPS_CMD_WRITE_SG; } scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); @@ -2697,10 +3477,10 @@ case WRITE_10: if (!scb->sg_len) { scb->cmd.basic_io.op_code = - (scb->scsi_cmd->cmnd[0] == READ_10) ? IPS_READ : IPS_WRITE; + (scb->scsi_cmd->cmnd[0] == READ_10) ? IPS_CMD_READ : IPS_CMD_WRITE; } else { scb->cmd.basic_io.op_code = - (scb->scsi_cmd->cmnd[0] == READ_10) ? READ_SCATTER_GATHER : WRITE_SCATTER_GATHER; + (scb->scsi_cmd->cmnd[0] == READ_10) ? IPS_CMD_READ_SG : IPS_CMD_WRITE_SG; } scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); @@ -2738,14 +3518,14 @@ break; case MODE_SENSE: - scb->cmd.basic_io.op_code = ENQUIRY; + scb->cmd.basic_io.op_code = IPS_CMD_ENQUIRY; scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.basic_io.sg_addr = VIRT_TO_BUS(ha->enq); ret = IPS_SUCCESS; break; case READ_CAPACITY: - scb->cmd.logical_info.op_code = GET_LOGICAL_DRIVE_INFO; + scb->cmd.logical_info.op_code = IPS_CMD_GET_LD_INFO; scb->cmd.logical_info.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.logical_info.buffer_addr = VIRT_TO_BUS(&ha->adapt->logical_drive_info); scb->cmd.logical_info.reserved = 0; @@ -2777,9 +3557,9 @@ /* setup DCDB */ if (scb->bus > 0) { if (!scb->sg_len) - scb->cmd.dcdb.op_code = DIRECT_CDB; + scb->cmd.dcdb.op_code = IPS_CMD_DCDB; else - scb->cmd.dcdb.op_code = DIRECT_CDB_SCATTER_GATHER; + scb->cmd.dcdb.op_code = IPS_CMD_DCDB_SG; ha->dcdb_active[scb->bus-1] |= (1 << scb->target_id); scb->cmd.dcdb.command_id = IPS_COMMAND_ID(ha, scb); @@ -2789,19 +3569,19 @@ scb->cmd.dcdb.reserved3 = 0; scb->dcdb.device_address = ((scb->bus - 1) << 4) | scb->target_id; - scb->dcdb.cmd_attribute |= DISCONNECT_ALLOWED; + scb->dcdb.cmd_attribute |= IPS_DISCONNECT_ALLOWED; if (scb->timeout) { if (scb->timeout <= 10) - scb->dcdb.cmd_attribute |= TIMEOUT_10; + scb->dcdb.cmd_attribute |= IPS_TIMEOUT10; else if (scb->timeout <= 60) - scb->dcdb.cmd_attribute |= TIMEOUT_60; + scb->dcdb.cmd_attribute |= IPS_TIMEOUT60; else - scb->dcdb.cmd_attribute |= TIMEOUT_20M; + scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; } - if (!(scb->dcdb.cmd_attribute & TIMEOUT_20M)) - scb->dcdb.cmd_attribute |= TIMEOUT_20M; + if (!(scb->dcdb.cmd_attribute & IPS_TIMEOUT20M)) + scb->dcdb.cmd_attribute |= IPS_TIMEOUT20M; scb->dcdb.sense_length = sizeof(scb->scsi_cmd->sense_buffer); scb->dcdb.buffer_pointer = scb->data_busaddr; @@ -2836,7 +3616,7 @@ command_id = ips_statupd(ha); - if (command_id > (MAX_CMDS-1)) { + if (command_id > (IPS_MAX_CMDS-1)) { printk(KERN_NOTICE "(%s%d) invalid command id received: %d\n", ips_name, ha->host_num, command_id); @@ -2846,7 +3626,7 @@ scb = &ha->scbs[command_id]; sp->scb_addr = (u32) scb; sp->residue_len = 0; - scb->basic_status = basic_status = ha->adapt->p_status_tail->basic_status & BASIC_STATUS_MASK; + scb->basic_status = basic_status = ha->adapt->p_status_tail->basic_status & IPS_BASIC_STATUS_MASK; scb->extended_status = ext_status = ha->adapt->p_status_tail->extended_status; /* Remove the item from the active queue */ @@ -2865,12 +3645,12 @@ errcode = DID_OK; ret = 0; - if (((basic_status & GSC_STATUS_MASK) == SSUCCESS) || - ((basic_status & GSC_STATUS_MASK) == RECOVERED_ERROR)) { + if (((basic_status & IPS_GSC_STATUS_MASK) == IPS_CMD_SUCCESS) || + ((basic_status & IPS_GSC_STATUS_MASK) == IPS_CMD_RECOVERED_ERROR)) { if (scb->bus == 0) { #if IPS_DEBUG >= 1 - if ((basic_status & GSC_STATUS_MASK) == RECOVERED_ERROR) { + if ((basic_status & IPS_GSC_STATUS_MASK) == IPS_CMD_RECOVERED_ERROR) { printk(KERN_NOTICE "(%s%d) Recovered Logical Drive Error OpCode: %x, BSB: %x, ESB: %x\n", ips_name, ha->host_num, scb->cmd.basic_io.op_code, basic_status, ext_status); @@ -2994,20 +3774,20 @@ ips_online(ips_ha_t *ha, ips_scb_t *scb) { DBG("ips_online"); - if (scb->target_id >= MAX_LOGICAL_DRIVES) + if (scb->target_id >= IPS_MAX_LD) return (0); - if ((scb->basic_status & GSC_STATUS_MASK) > 1) { + if ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1) { memset(&ha->adapt->logical_drive_info, 0, sizeof(ha->adapt->logical_drive_info)); return (0); } if (scb->target_id < ha->adapt->logical_drive_info.no_of_log_drive && - ha->adapt->logical_drive_info.drive_info[scb->target_id].state != OFF_LINE && - ha->adapt->logical_drive_info.drive_info[scb->target_id].state != FREE && - ha->adapt->logical_drive_info.drive_info[scb->target_id].state != CRS && - ha->adapt->logical_drive_info.drive_info[scb->target_id].state != SYS) + ha->adapt->logical_drive_info.drive_info[scb->target_id].state != IPS_LD_OFFLINE && + ha->adapt->logical_drive_info.drive_info[scb->target_id].state != IPS_LD_FREE && + ha->adapt->logical_drive_info.drive_info[scb->target_id].state != IPS_LD_CRS && + ha->adapt->logical_drive_info.drive_info[scb->target_id].state != IPS_LD_SYS) return (1); else return (0); @@ -3024,11 +3804,11 @@ /****************************************************************************/ static int ips_inquiry(ips_ha_t *ha, ips_scb_t *scb) { - INQUIRYDATA inq; + IPS_INQ_DATA inq; DBG("ips_inquiry"); - memset(&inq, 0, sizeof(INQUIRYDATA)); + memset(&inq, 0, sizeof(IPS_INQ_DATA)); inq.DeviceType = TYPE_DISK; inq.DeviceTypeQualifier = 0; @@ -3055,14 +3835,14 @@ /****************************************************************************/ static int ips_rdcap(ips_ha_t *ha, ips_scb_t *scb) { - CAPACITY_T *cap; + IPS_CAPACITY *cap; DBG("ips_rdcap"); if (scb->scsi_cmd->bufflen < 8) return (0); - cap = (CAPACITY_T *) scb->scsi_cmd->request_buffer; + cap = (IPS_CAPACITY *) scb->scsi_cmd->request_buffer; cap->lba = htonl(ha->adapt->logical_drive_info.drive_info[scb->target_id].sector_count - 1); cap->len = htonl((u32) IPS_BLKSIZE); @@ -3090,11 +3870,11 @@ if (ha->enq->ulDriveSize[scb->target_id] > 0x400000 && (ha->enq->ucMiscFlag & 0x8) == 0) { - heads = NORM_MODE_HEADS; - sectors = NORM_MODE_SECTORS; + heads = IPS_NORM_HEADS; + sectors = IPS_NORM_SECTORS; } else { - heads = COMP_MODE_HEADS; - sectors = COMP_MODE_SECTORS; + heads = IPS_COMP_HEADS; + sectors = IPS_COMP_SECTORS; } cylinders = ha->enq->ulDriveSize[scb->target_id] / (heads * sectors); @@ -3107,7 +3887,7 @@ case 0x03: /* page 3 */ mdata.pdata.pg3.pg_pc = 0x3; mdata.pdata.pg3.pg_res1 = 0; - mdata.pdata.pg3.pg_len = sizeof(DADF_T); + mdata.pdata.pg3.pg_len = sizeof(IPS_DADF); mdata.plh.plh_len = 3 + mdata.plh.plh_bdl + mdata.pdata.pg3.pg_len; mdata.pdata.pg3.pg_trk_z = 0; mdata.pdata.pg3.pg_asec_z = 0; @@ -3129,7 +3909,7 @@ case 0x4: mdata.pdata.pg4.pg_pc = 0x4; mdata.pdata.pg4.pg_res1 = 0; - mdata.pdata.pg4.pg_len = sizeof(RDDG_T); + mdata.pdata.pg4.pg_len = sizeof(IPS_RDDG); mdata.plh.plh_len = 3 + mdata.plh.plh_bdl + mdata.pdata.pg4.pg_len; mdata.pdata.pg4.pg_cylu = (cylinders >> 8) & 0xffff; mdata.pdata.pg4.pg_cyll = cylinders & 0xff; @@ -3223,6 +4003,12 @@ ha->dummy = NULL; } + if (ha->ioctl_data) { + kfree(ha->ioctl_data); + ha->ioctl_data = NULL; + ha->ioctl_datasize = 0; + } + if (ha->scbs) { for (i = 0; i < ha->max_cmds; i++) { if (ha->scbs[i].sg_list) @@ -3260,7 +4046,7 @@ scb_p = &ha->scbs[i]; /* allocate S/G list */ - scb_p->sg_list = (SG_LIST *) kmalloc(sizeof(SG_LIST) * MAX_SG_ELEMENTS, GFP_KERNEL|GFP_DMA); + scb_p->sg_list = (IPS_SG_LIST *) kmalloc(sizeof(IPS_SG_LIST) * IPS_MAX_SG, GFP_KERNEL|GFP_DMA); if (! scb_p->sg_list) return (0); @@ -3287,7 +4073,7 @@ /****************************************************************************/ static void ips_init_scb(ips_ha_t *ha, ips_scb_t *scb) { - SG_LIST *sg_list; + IPS_SG_LIST *sg_list; DBG("ips_init_scb"); @@ -3298,19 +4084,19 @@ /* zero fill */ memset(scb, 0, sizeof(ips_scb_t)); - memset(ha->dummy, 0, sizeof(BASIC_IO_CMD)); + memset(ha->dummy, 0, sizeof(IPS_IO_CMD)); /* Initialize dummy command bucket */ ha->dummy->op_code = 0xFF; ha->dummy->ccsar = VIRT_TO_BUS(ha->dummy); - ha->dummy->command_id = MAX_CMDS; + ha->dummy->command_id = IPS_MAX_CMDS; /* set bus address of scb */ scb->scb_busaddr = VIRT_TO_BUS(scb); scb->sg_list = sg_list; /* Neptune Fix */ - scb->cmd.basic_io.cccr = ILE; + scb->cmd.basic_io.cccr = IPS_BIT_ILE; scb->cmd.basic_io.ccsar = VIRT_TO_BUS(ha->dummy); } @@ -3328,13 +4114,13 @@ static ips_scb_t * ips_getscb(ips_ha_t *ha) { ips_scb_t *scb; - unsigned int cpu_flags; + u32 cpu_flags; DBG("ips_getscb"); - spin_lock_irqsave(&ha->scb_lock, cpu_flags); + IPS_SCB_LOCK(cpu_flags); if ((scb = ha->scb_freelist) == NULL) { - spin_unlock_irqrestore(&ha->scb_lock, cpu_flags); + IPS_SCB_UNLOCK(cpu_flags); return (NULL); } @@ -3342,7 +4128,7 @@ ha->scb_freelist = scb->q_next; scb->q_next = NULL; - spin_unlock_irqrestore(&ha->scb_lock, cpu_flags); + IPS_SCB_UNLOCK(cpu_flags); ips_init_scb(ha, scb); @@ -3362,16 +4148,16 @@ /****************************************************************************/ static void ips_freescb(ips_ha_t *ha, ips_scb_t *scb) { - unsigned int cpu_flags; + u32 cpu_flags; DBG("ips_freescb"); /* check to make sure this is not our "special" scb */ if (IPS_COMMAND_ID(ha, scb) < (ha->max_cmds - 1)) { - spin_lock_irqsave(&ha->scb_lock, cpu_flags); + IPS_SCB_LOCK(cpu_flags); scb->q_next = ha->scb_freelist; ha->scb_freelist = scb; - spin_unlock_irqrestore(&ha->scb_lock, cpu_flags); + IPS_SCB_UNLOCK(cpu_flags); } } @@ -3388,10 +4174,11 @@ ips_reset_adapter(ips_ha_t *ha) { u8 Isr; u8 Cbsp; - u8 PostByte[MAX_POST_BYTES]; - u8 ConfigByte[MAX_CONFIG_BYTES]; + u8 PostByte[IPS_MAX_POST_BYTES]; + u8 ConfigByte[IPS_MAX_CONFIG_BYTES]; int i, j; int reset_counter; + u32 cpu_flags; DBG("ips_reset_adapter"); @@ -3400,108 +4187,125 @@ ha->io_addr, ha->irq); #endif + IPS_HA_LOCK(cpu_flags); + reset_counter = 0; while (reset_counter < 2) { reset_counter++; - outb(RST, ha->io_addr + SCPR); - MDELAY(ONE_SEC); - outb(0, ha->io_addr + SCPR); - MDELAY(ONE_SEC); + outb(IPS_BIT_RST, ha->io_addr + IPS_REG_SCPR); + MDELAY(IPS_ONE_SEC); + outb(0, ha->io_addr + IPS_REG_SCPR); + MDELAY(IPS_ONE_SEC); - for (i = 0; i < MAX_POST_BYTES; i++) { + for (i = 0; i < IPS_MAX_POST_BYTES; i++) { for (j = 0; j < 45; j++) { - Isr = inb(ha->io_addr + HISR); - if (Isr & GHI) + Isr = inb(ha->io_addr + IPS_REG_HISR); + if (Isr & IPS_BIT_GHI) break; - MDELAY(ONE_SEC); + MDELAY(IPS_ONE_SEC); } if (j >= 45) { /* error occured */ if (reset_counter < 2) continue; - else + else { /* reset failed */ + IPS_HA_UNLOCK(cpu_flags); + return (0); + } } - PostByte[i] = inb(ha->io_addr + ISPR); - outb(Isr, ha->io_addr + HISR); + PostByte[i] = inb(ha->io_addr + IPS_REG_ISPR); + outb(Isr, ha->io_addr + IPS_REG_HISR); } - if (PostByte[0] < GOOD_POST_BASIC_STATUS) { + if (PostByte[0] < IPS_GOOD_POST_STATUS) { printk("(%s%d) reset controller fails (post status %x %x).\n", ips_name, ha->host_num, PostByte[0], PostByte[1]); + IPS_HA_UNLOCK(cpu_flags); + return (0); } - for (i = 0; i < MAX_CONFIG_BYTES; i++) { + for (i = 0; i < IPS_MAX_CONFIG_BYTES; i++) { for (j = 0; j < 240; j++) { - Isr = inb(ha->io_addr + HISR); - if (Isr & GHI) + Isr = inb(ha->io_addr + IPS_REG_HISR); + if (Isr & IPS_BIT_GHI) break; - MDELAY(ONE_SEC); /* 100 msec */ + MDELAY(IPS_ONE_SEC); /* 100 msec */ } if (j >= 240) { /* error occured */ if (reset_counter < 2) continue; - else + else { /* reset failed */ + IPS_HA_UNLOCK(cpu_flags); + return (0); + } } - ConfigByte[i] = inb(ha->io_addr + ISPR); - outb(Isr, ha->io_addr + HISR); + ConfigByte[i] = inb(ha->io_addr + IPS_REG_ISPR); + outb(Isr, ha->io_addr + IPS_REG_HISR); } if (ConfigByte[0] == 0 && ConfigByte[1] == 2) { printk("(%s%d) reset controller fails (status %x %x).\n", ips_name, ha->host_num, ConfigByte[0], ConfigByte[1]); + IPS_HA_UNLOCK(cpu_flags); + return (0); } for (i = 0; i < 240; i++) { - Cbsp = inb(ha->io_addr + CBSP); + Cbsp = inb(ha->io_addr + IPS_REG_CBSP); - if ((Cbsp & OP) == 0) + if ((Cbsp & IPS_BIT_OP) == 0) break; - MDELAY(ONE_SEC); + MDELAY(IPS_ONE_SEC); } if (i >= 240) { /* error occured */ if (reset_counter < 2) continue; - else + else { /* reset failed */ + IPS_HA_UNLOCK(cpu_flags); + return (0); + } } /* setup CCCR */ - outw(0x1010, ha->io_addr + CCCR); + outw(0x1010, ha->io_addr + IPS_REG_CCCR); /* Enable busmastering */ - outb(EBM, ha->io_addr + SCPR); + outb(IPS_BIT_EBM, ha->io_addr + IPS_REG_SCPR); /* setup status queues */ ips_statinit(ha); /* Enable interrupts */ - outb(EI, ha->io_addr + HISR); + outb(IPS_BIT_EI, ha->io_addr + IPS_REG_HISR); /* if we get here then everything went OK */ break; } + IPS_HA_UNLOCK(cpu_flags); + return (1); } @@ -3521,14 +4325,14 @@ DBG("ips_statinit"); ha->adapt->p_status_start = ha->adapt->status; - ha->adapt->p_status_end = ha->adapt->status + MAX_CMDS; + ha->adapt->p_status_end = ha->adapt->status + IPS_MAX_CMDS; ha->adapt->p_status_tail = ha->adapt->status; phys_status_start = VIRT_TO_BUS(ha->adapt->status); - outl(phys_status_start, ha->io_addr + SQSR); - outl(phys_status_start + STATUS_Q_SIZE, ha->io_addr + SQER); - outl(phys_status_start + STATUS_SIZE, ha->io_addr + SQHR); - outl(phys_status_start, ha->io_addr + SQTR); + outl(phys_status_start, ha->io_addr + IPS_REG_SQSR); + outl(phys_status_start + IPS_STATUS_Q_SIZE, ha->io_addr + IPS_REG_SQER); + outl(phys_status_start + IPS_STATUS_SIZE, ha->io_addr + IPS_REG_SQHR); + outl(phys_status_start, ha->io_addr + IPS_REG_SQTR); ha->adapt->hw_status_start = phys_status_start; ha->adapt->hw_status_tail = phys_status_start; @@ -3551,13 +4355,13 @@ if (ha->adapt->p_status_tail != ha->adapt->p_status_end) { ha->adapt->p_status_tail++; - ha->adapt->hw_status_tail += sizeof(STATUS); + ha->adapt->hw_status_tail += sizeof(IPS_STATUS); } else { ha->adapt->p_status_tail = ha->adapt->p_status_start; ha->adapt->hw_status_tail = ha->adapt->hw_status_start; } - outl(ha->adapt->hw_status_tail, ha->io_addr + SQTR); + outl(ha->adapt->hw_status_tail, ha->io_addr + IPS_REG_SQTR); command_id = ha->adapt->p_status_tail->command_id; @@ -3579,6 +4383,7 @@ ips_issue(ips_ha_t *ha, ips_scb_t *scb) { u32 TimeOut; u16 val; + u32 cpu_flags; DBG("ips_issue"); @@ -3596,17 +4401,19 @@ ips_name, scb->cmd.basic_io.command_id); #if IPS_DEBUG >= 11 - MDELAY(ONE_SEC); + MDELAY(IPS_ONE_SEC); #endif #endif + IPS_HA_LOCK(cpu_flags); + TimeOut = 0; - while ((val = inw(ha->io_addr + CCCR)) & SEMAPHORE) { + while ((val = inw(ha->io_addr + IPS_REG_CCCR)) & IPS_BIT_SEM) { UDELAY(1000); - if (++TimeOut >= SEMAPHORE_TIMEOUT) { - if (!(val & START_STOP_BIT)) + if (++TimeOut >= IPS_SEM_TIMEOUT) { + if (!(val & IPS_BIT_START_STOP)) break; printk(KERN_WARNING "(%s%d) ips_issue val [0x%x].\n", @@ -3614,12 +4421,16 @@ printk(KERN_WARNING "(%s%d) ips_issue semaphore chk timeout.\n", ips_name, ha->host_num); + IPS_HA_UNLOCK(cpu_flags); + return (IPS_FAILURE); } /* end if */ } /* end while */ - outl(scb->scb_busaddr, ha->io_addr + CCSAR); - outw(START_COMMAND, ha->io_addr + CCCR); + outl(scb->scb_busaddr, ha->io_addr + IPS_REG_CCSAR); + outw(IPS_BIT_START_CMD, ha->io_addr + IPS_REG_CCCR); + + IPS_HA_UNLOCK(cpu_flags); return (IPS_SUCCESS); } @@ -3639,18 +4450,18 @@ DBG("ips_isintr"); - Isr = inb(ha->io_addr + HISR); + Isr = inb(ha->io_addr + IPS_REG_HISR); if (Isr == 0xFF) /* ?!?! Nothing really there */ return (0); - if (Isr & SCE) + if (Isr & IPS_BIT_SCE) return (1); - else if (Isr & (SQO | GHI)) { + else if (Isr & (IPS_BIT_SQO | IPS_BIT_GHI)) { /* status queue overflow or GHI */ /* just clear the interrupt */ - outb(Isr, ha->io_addr + HISR); + outb(Isr, ha->io_addr + IPS_REG_HISR); } return (0); @@ -3668,15 +4479,23 @@ static int ips_wait(ips_ha_t *ha, int time, int intr) { int ret; + u8 done; DBG("ips_wait"); ret = IPS_FAILURE; + done = FALSE; - time *= ONE_SEC; /* convert seconds to milliseconds */ + time *= IPS_ONE_SEC; /* convert seconds to milliseconds */ - while (time > 0) { - if (intr == IPS_INTR_OFF) { + while ((time > 0) && (!done)) { + if (intr == IPS_INTR_ON) { + if (ha->waitflag == FALSE) { + ret = IPS_SUCCESS; + done = TRUE; + break; + } + } else if (intr == IPS_INTR_IORL) { if (ha->waitflag == FALSE) { /* * controller generated an interupt to @@ -3684,28 +4503,50 @@ * and ips_intr() has serviced the interrupt. */ ret = IPS_SUCCESS; + done = TRUE; break; } /* - * NOTE: Interrupts are disabled here - * On an SMP system interrupts will only - * be disabled on one processor. - * So, ultimately we still need to set the - * "I'm in the interrupt handler flag" + * NOTE: we already have the io_request_lock so + * even if we get an interrupt it won't get serviced + * until after we finish. */ + while (test_and_set_bit(IPS_IN_INTR, &ha->flags)) UDELAY(1000); ips_intr(ha); clear_bit(IPS_IN_INTR, &ha->flags); - - } else { + } else if (intr == IPS_INTR_HAL) { if (ha->waitflag == FALSE) { + /* + * controller generated an interupt to + * acknowledge completion of the command + * and ips_intr() has serviced the interrupt. + */ ret = IPS_SUCCESS; + done = TRUE; break; } + + /* + * NOTE: since we were not called with the iorequest lock + * we must obtain it before we can call the interrupt handler. + * We were called under the HA lock so we can assume that interrupts + * are masked. + */ + spin_lock(&io_request_lock); + + while (test_and_set_bit(IPS_IN_INTR, &ha->flags)) + UDELAY(1000); + + ips_intr(ha); + + clear_bit(IPS_IN_INTR, &ha->flags); + + spin_unlock(&io_request_lock); } UDELAY(1000); /* 1 milisecond */ @@ -3725,10 +4566,10 @@ /* */ /****************************************************************************/ static int -ips_write_driver_status(ips_ha_t *ha) { +ips_write_driver_status(ips_ha_t *ha, int intr) { DBG("ips_write_driver_status"); - if (!ips_readwrite_page5(ha, FALSE)) { + if (!ips_readwrite_page5(ha, FALSE, intr)) { printk(KERN_WARNING "(%s%d) unable to read NVRAM page 5.\n", ips_name, ha->host_num); @@ -3737,7 +4578,7 @@ /* check to make sure the page has a valid */ /* signature */ - if (ha->nvram->signature != NVRAM_PAGE5_SIGNATURE) { + if (ha->nvram->signature != IPS_NVRAM_P5_SIG) { #if IPS_DEBUG >= 1 printk("(%s%d) NVRAM page 5 has an invalid signature: %X.\n", ips_name, ha->host_num, ha->nvram->signature); @@ -3758,12 +4599,12 @@ ha->ad_type = ha->nvram->adapter_type; /* change values (as needed) */ - ha->nvram->operating_system = OS_LINUX; + ha->nvram->operating_system = IPS_OS_LINUX; strncpy((char *) ha->nvram->driver_high, IPS_VERSION_HIGH, 4); strncpy((char *) ha->nvram->driver_low, IPS_VERSION_LOW, 4); /* now update the page */ - if (!ips_readwrite_page5(ha, TRUE)) { + if (!ips_readwrite_page5(ha, TRUE, intr)) { printk(KERN_WARNING "(%s%d) unable to write NVRAM page 5.\n", ips_name, ha->host_num); @@ -3783,7 +4624,7 @@ /* */ /****************************************************************************/ static int -ips_read_adapter_status(ips_ha_t *ha) { +ips_read_adapter_status(ips_ha_t *ha, int intr) { ips_scb_t *scb; int ret; @@ -3794,9 +4635,9 @@ ips_init_scb(ha, scb); scb->timeout = ips_cmd_timeout; - scb->cdb[0] = ENQUIRY; + scb->cdb[0] = IPS_CMD_ENQUIRY; - scb->cmd.basic_io.op_code = ENQUIRY; + scb->cmd.basic_io.op_code = IPS_CMD_ENQUIRY; scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.basic_io.sg_count = 0; scb->cmd.basic_io.sg_addr = VIRT_TO_BUS(ha->enq); @@ -3806,7 +4647,7 @@ scb->cmd.basic_io.reserved = 0; /* send command */ - ret = ips_send_wait(ha, scb, ips_cmd_timeout); + ret = ips_send_wait(ha, scb, ips_cmd_timeout, intr); if ((ret == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM)) return (0); @@ -3823,7 +4664,7 @@ /* */ /****************************************************************************/ static int -ips_read_subsystem_parameters(ips_ha_t *ha) { +ips_read_subsystem_parameters(ips_ha_t *ha, int intr) { ips_scb_t *scb; int ret; @@ -3834,9 +4675,9 @@ ips_init_scb(ha, scb); scb->timeout = ips_cmd_timeout; - scb->cdb[0] = GET_SUBSYS_PARAM; + scb->cdb[0] = IPS_CMD_GET_SUBSYS; - scb->cmd.basic_io.op_code = GET_SUBSYS_PARAM; + scb->cmd.basic_io.op_code = IPS_CMD_GET_SUBSYS; scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.basic_io.sg_count = 0; scb->cmd.basic_io.sg_addr = VIRT_TO_BUS(ha->subsys); @@ -3846,7 +4687,7 @@ scb->cmd.basic_io.reserved = 0; /* send command */ - ret = ips_send_wait(ha, scb, ips_cmd_timeout); + ret = ips_send_wait(ha, scb, ips_cmd_timeout, intr); if ((ret == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM)) return (0); @@ -3863,7 +4704,7 @@ /* */ /****************************************************************************/ static int -ips_read_config(ips_ha_t *ha) { +ips_read_config(ips_ha_t *ha, int intr) { ips_scb_t *scb; int i; int ret; @@ -3880,18 +4721,18 @@ ips_init_scb(ha, scb); scb->timeout = ips_cmd_timeout; - scb->cdb[0] = READ_NVRAM_CONFIGURATION; + scb->cdb[0] = IPS_CMD_READ_CONF; - scb->cmd.basic_io.op_code = READ_NVRAM_CONFIGURATION; + scb->cmd.basic_io.op_code = IPS_CMD_READ_CONF; scb->cmd.basic_io.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.basic_io.sg_addr = VIRT_TO_BUS(ha->conf); /* send command */ - if (((ret = ips_send_wait(ha, scb, ips_cmd_timeout)) == IPS_FAILURE) || + if (((ret = ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM) || - ((scb->basic_status & GSC_STATUS_MASK) > 1)) { + ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { - memset(ha->conf, 0, sizeof(CONFCMD)); + memset(ha->conf, 0, sizeof(IPS_CONF)); /* reset initiator IDs */ ha->conf->init_id[0] = IPS_ADAPTER_ID; @@ -3910,11 +4751,11 @@ /* */ /* Routine Description: */ /* */ -/* Read the configuration on the adapter */ +/* Read nvram page 5 from the adapter */ /* */ /****************************************************************************/ static int -ips_readwrite_page5(ips_ha_t *ha, int write) { +ips_readwrite_page5(ips_ha_t *ha, int write, int intr) { ips_scb_t *scb; int ret; @@ -3925,9 +4766,9 @@ ips_init_scb(ha, scb); scb->timeout = ips_cmd_timeout; - scb->cdb[0] = RW_NVRAM_PAGE; + scb->cdb[0] = IPS_CMD_RW_NVRAM_PAGE; - scb->cmd.nvram.op_code = RW_NVRAM_PAGE; + scb->cmd.nvram.op_code = IPS_CMD_RW_NVRAM_PAGE; scb->cmd.nvram.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.nvram.page = 5; scb->cmd.nvram.write = write; @@ -3936,11 +4777,11 @@ scb->cmd.nvram.reserved2 = 0; /* issue the command */ - if (((ret = ips_send_wait(ha, scb, ips_cmd_timeout)) == IPS_FAILURE) || + if (((ret = ips_send_wait(ha, scb, ips_cmd_timeout, intr)) == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM) || - ((scb->basic_status & GSC_STATUS_MASK) > 1)) { + ((scb->basic_status & IPS_GSC_STATUS_MASK) > 1)) { - memset(ha->nvram, 0, sizeof(NVRAM_PAGE5)); + memset(ha->nvram, 0, sizeof(IPS_NVRAM_P5)); return (0); } @@ -3958,7 +4799,7 @@ /* */ /****************************************************************************/ static int -ips_clear_adapter(ips_ha_t *ha) { +ips_clear_adapter(ips_ha_t *ha, int intr) { ips_scb_t *scb; int ret; @@ -3969,41 +4810,413 @@ ips_init_scb(ha, scb); scb->timeout = ips_reset_timeout; - scb->cdb[0] = CONFIG_SYNC; + scb->cdb[0] = IPS_CMD_CONFIG_SYNC; - scb->cmd.config_sync.op_code = CONFIG_SYNC; + scb->cmd.config_sync.op_code = IPS_CMD_CONFIG_SYNC; scb->cmd.config_sync.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.config_sync.channel = 0; - scb->cmd.config_sync.source_target = POCL; + scb->cmd.config_sync.source_target = IPS_POCL; scb->cmd.config_sync.reserved = 0; scb->cmd.config_sync.reserved2 = 0; scb->cmd.config_sync.reserved3 = 0; /* issue command */ - ret = ips_send_wait(ha, scb, ips_reset_timeout); + ret = ips_send_wait(ha, scb, ips_reset_timeout, intr); if ((ret == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM)) return (0); /* send unlock stripe command */ ips_init_scb(ha, scb); - scb->cdb[0] = GET_ERASE_ERROR_TABLE; + scb->cdb[0] = IPS_CMD_ERROR_TABLE; scb->timeout = ips_reset_timeout; - scb->cmd.unlock_stripe.op_code = GET_ERASE_ERROR_TABLE; + scb->cmd.unlock_stripe.op_code = IPS_CMD_ERROR_TABLE; scb->cmd.unlock_stripe.command_id = IPS_COMMAND_ID(ha, scb); scb->cmd.unlock_stripe.log_drv = 0; - scb->cmd.unlock_stripe.control = CSL; + scb->cmd.unlock_stripe.control = IPS_CSL; scb->cmd.unlock_stripe.reserved = 0; scb->cmd.unlock_stripe.reserved2 = 0; scb->cmd.unlock_stripe.reserved3 = 0; /* issue command */ - ret = ips_send_wait(ha, scb, ips_reset_timeout); + ret = ips_send_wait(ha, scb, ips_reset_timeout, intr); if ((ret == IPS_FAILURE) || (ret == IPS_SUCCESS_IMM)) return (0); return (1); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_ffdc_reset */ +/* */ +/* Routine Description: */ +/* */ +/* FFDC: write reset info */ +/* */ +/****************************************************************************/ +static void +ips_ffdc_reset(ips_ha_t *ha, int intr) { + ips_scb_t *scb; + + DBG("ips_ffdc_reset"); + + scb = &ha->scbs[ha->max_cmds-1]; + + ips_init_scb(ha, scb); + + scb->timeout = ips_cmd_timeout; + scb->cdb[0] = IPS_CMD_FFDC; + scb->cmd.ffdc.op_code = IPS_CMD_FFDC; + scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb); + scb->cmd.ffdc.reset_count = ha->reset_count; + scb->cmd.ffdc.reset_type = 0x80; + + /* convert time to what the card wants */ + ips_fix_ffdc_time(ha, scb, ha->last_ffdc); + + /* issue command */ + ips_send_wait(ha, scb, ips_cmd_timeout, intr); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_ffdc_time */ +/* */ +/* Routine Description: */ +/* */ +/* FFDC: write time info */ +/* */ +/****************************************************************************/ +static void +ips_ffdc_time(ips_ha_t *ha, int intr) { + ips_scb_t *scb; + + DBG("ips_ffdc_time"); + +#if IPS_DEBUG >= 1 + printk(KERN_NOTICE "(%s%d) Sending time update.\n", + ips_name, ha->host_num); +#endif + + scb = &ha->scbs[ha->max_cmds-1]; + + ips_init_scb(ha, scb); + + scb->timeout = ips_cmd_timeout; + scb->cdb[0] = IPS_CMD_FFDC; + scb->cmd.ffdc.op_code = IPS_CMD_FFDC; + scb->cmd.ffdc.command_id = IPS_COMMAND_ID(ha, scb); + scb->cmd.ffdc.reset_count = 0; + scb->cmd.ffdc.reset_type = 0x80; + + /* convert time to what the card wants */ + ips_fix_ffdc_time(ha, scb, ha->last_ffdc); + + /* issue command */ + ips_send_wait(ha, scb, ips_cmd_timeout, intr); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_fix_ffdc_time */ +/* */ +/* Routine Description: */ +/* Adjust time_t to what the card wants */ +/* */ +/****************************************************************************/ +static void +ips_fix_ffdc_time(ips_ha_t *ha, ips_scb_t *scb, time_t current_time) { + long days; + long rem; + int i; + int year; + int yleap; + int year_lengths[2] = { IPS_DAYS_NORMAL_YEAR, IPS_DAYS_LEAP_YEAR }; + int month_lengths[12][2] = { {31, 31}, + {28, 29}, + {31, 31}, + {30, 30}, + {31, 31}, + {30, 30}, + {31, 31}, + {31, 31}, + {30, 30}, + {31, 31}, + {30, 30}, + {31, 31} }; + + days = current_time / IPS_SECS_DAY; + rem = current_time % IPS_SECS_DAY; + + scb->cmd.ffdc.hour = (rem / IPS_SECS_HOUR); + rem = rem % IPS_SECS_HOUR; + scb->cmd.ffdc.minute = (rem / IPS_SECS_MIN); + scb->cmd.ffdc.second = (rem % IPS_SECS_MIN); + + year = IPS_EPOCH_YEAR; + while (days < 0 || days >= year_lengths[yleap = IPS_IS_LEAP_YEAR(year)]) { + int newy; + + newy = year + (days / IPS_DAYS_NORMAL_YEAR); + if (days < 0) + --newy; + days -= (newy - year) * IPS_DAYS_NORMAL_YEAR + + IPS_NUM_LEAP_YEARS_THROUGH(newy - 1) - + IPS_NUM_LEAP_YEARS_THROUGH(year - 1); + year = newy; + } + + scb->cmd.ffdc.yearH = year / 100; + scb->cmd.ffdc.yearL = year % 100; + + for (i = 0; days >= month_lengths[i][yleap]; ++i) + days -= month_lengths[i][yleap]; + + scb->cmd.ffdc.month = i + 1; + scb->cmd.ffdc.day = days + 1; +} + +/**************************************************************************** + * BIOS Flash Routines * + ****************************************************************************/ + +/****************************************************************************/ +/* */ +/* Routine Name: ips_erase_bios */ +/* */ +/* Routine Description: */ +/* Erase the BIOS on the adapter */ +/* */ +/****************************************************************************/ +static int +ips_erase_bios(ips_ha_t *ha) { + int timeout; + u8 status; + + /* Clear the status register */ + outl(0, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + outb(0x50, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + /* Erase Setup */ + outb(0x20, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + /* Erase Confirm */ + outb(0xD0, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + /* Erase Status */ + outb(0x70, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + timeout = 80000; /* 80 seconds */ + + while (timeout > 0) { + if (ha->revision_id == IPS_REVID_TROMBONE64) { + outl(0, ha->io_addr + IPS_REG_FLAP); + UDELAY(5); /* 5 us */ + } + + status = inb(ha->io_addr + IPS_REG_FLDP); + + if (status & 0x80) + break; + + MDELAY(1); + timeout--; + } + + /* check for timeout */ + if (timeout <= 0) { + /* timeout */ + + /* try to suspend the erase */ + outb(0xB0, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + /* wait for 10 seconds */ + timeout = 10000; + while (timeout > 0) { + if (ha->revision_id == IPS_REVID_TROMBONE64) { + outl(0, ha->io_addr + IPS_REG_FLAP); + UDELAY(5); /* 5 us */ + } + + status = inb(ha->io_addr + IPS_REG_FLDP); + + if (status & 0xC0) + break; + + MDELAY(1); + timeout--; + } + + return (1); + } + + /* check for valid VPP */ + if (status & 0x08) + /* VPP failure */ + return (1); + + /* check for succesful flash */ + if (status & 0x30) + /* sequence error */ + return (1); + + /* Otherwise, we were successful */ + /* clear status */ + outb(0x50, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + /* enable reads */ + outb(0xFF, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + return (0); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_program_bios */ +/* */ +/* Routine Description: */ +/* Program the BIOS on the adapter */ +/* */ +/****************************************************************************/ +static int +ips_program_bios(ips_ha_t *ha, char *buffer, int buffersize) { + int i; + int timeout; + u8 status; + + for (i = 0; i < buffersize; i++) { + /* write a byte */ + outl(i, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + outb(0x40, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + outb(buffer[i], ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + /* wait up to one second */ + timeout = 1000; + while (timeout > 0) { + if (ha->revision_id == IPS_REVID_TROMBONE64) { + outl(0, ha->io_addr + IPS_REG_FLAP); + UDELAY(5); /* 5 us */ + } + + status = inb(ha->io_addr + IPS_REG_FLDP); + + if (status & 0x80) + break; + + MDELAY(1); + timeout--; + } + + if (timeout == 0) { + /* timeout error */ + outl(0, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + outb(0xFF, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + return (1); + } + + /* check the status */ + if (status & 0x18) { + /* programming error */ + outl(0, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + outb(0xFF, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + return (1); + } + } /* end for */ + + /* Enable reading */ + outl(0, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + outb(0xFF, ha->io_addr + IPS_REG_FLDP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + return (0); +} + +/****************************************************************************/ +/* */ +/* Routine Name: ips_verify_bios */ +/* */ +/* Routine Description: */ +/* Verify the BIOS on the adapter */ +/* */ +/****************************************************************************/ +static int +ips_verify_bios(ips_ha_t *ha, char *buffer, int buffersize) { + u8 checksum; + int i; + + /* test 1st byte */ + outl(0, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + if (inb(ha->io_addr + IPS_REG_FLDP) != 0x55) + return (1); + + outl(1, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + if (inb(ha->io_addr + IPS_REG_FLDP) != 0xAA) + return (1); + + checksum = 0xff; + for (i = 2; i < buffersize; i++) { + + outl(i, ha->io_addr + IPS_REG_FLAP); + if (ha->revision_id == IPS_REVID_TROMBONE64) + UDELAY(5); /* 5 us */ + + checksum = (u8) checksum + inb(ha->io_addr + IPS_REG_FLDP); + } + + if (checksum != 0) + /* failure */ + return (1); + else + /* success */ + return (0); } #if defined (MODULE) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/ips.h linux.16p3/drivers/scsi/ips.h --- linux.vanilla/drivers/scsi/ips.h Fri Apr 21 23:20:05 2000 +++ linux.16p3/drivers/scsi/ips.h Mon May 15 18:38:20 2000 @@ -66,213 +66,279 @@ * Some handy macros */ #ifndef LinuxVersionCode - #define LinuxVersionCode(x,y,z) (((x)<<16)+((y)<<8)+(z)) + #define LinuxVersionCode(x,y,z) (((x)<<16)+((y)<<8)+(z)) #endif - #define HA(x) ((ips_ha_t *) x->hostdata) + #define IPS_HA(x) ((ips_ha_t *) x->hostdata) #define IPS_COMMAND_ID(ha, scb) (int) (scb - ha->scbs) - #define VIRT_TO_BUS(x) (unsigned int)virt_to_bus((void *) x) - - #define UDELAY udelay - #define MDELAY mdelay - - #define verify_area_20(t,a,sz) (0) /* success */ - #define PUT_USER put_user - #define __PUT_USER __put_user - #define PUT_USER_RET put_user_ret - #define GET_USER get_user - #define __GET_USER __get_user - #define GET_USER_RET get_user_ret - -/* - * Adapter address map equates - */ - #define HISR 0x08 /* Host Interrupt Status Reg */ - #define CCSAR 0x10 /* Cmd Channel System Addr Reg */ - #define CCCR 0x14 /* Cmd Channel Control Reg */ - #define SQHR 0x20 /* Status Q Head Reg */ - #define SQTR 0x24 /* Status Q Tail Reg */ - #define SQER 0x28 /* Status Q End Reg */ - #define SQSR 0x2C /* Status Q Start Reg */ - #define SCPR 0x05 /* Subsystem control port reg */ - #define ISPR 0x06 /* interrupt status port reg */ - #define CBSP 0x07 /* CBSP register */ + + #ifndef VIRT_TO_BUS + #define VIRT_TO_BUS(x) (unsigned int)virt_to_bus((void *) x) + #endif -/* - * Adapter register bit equates - */ - #define GHI 0x04 /* HISR General Host Interrupt */ - #define SQO 0x02 /* HISR Status Q Overflow */ - #define SCE 0x01 /* HISR Status Channel Enqueue */ - #define SEMAPHORE 0x08 /* CCCR Semaphore Bit */ - #define ILE 0x10 /* CCCR ILE Bit */ - #define START_COMMAND 0x101A /* CCCR Start Command Channel */ - #define START_STOP_BIT 0x0002 /* CCCR Start/Stop Bit */ - #define RST 0x80 /* SCPR Reset Bit */ - #define EBM 0x02 /* SCPR Enable Bus Master */ - #define EI 0x80 /* HISR Enable Interrupts */ - #define OP 0x01 /* OP bit in CBSP */ + #ifndef UDELAY + #define UDELAY udelay + #endif + + #ifndef MDELAY + #define MDELAY mdelay + #endif -/* - * Adapter Command ID Equates - */ - #define GET_LOGICAL_DRIVE_INFO 0x19 - #define GET_SUBSYS_PARAM 0x40 - #define READ_NVRAM_CONFIGURATION 0x38 - #define RW_NVRAM_PAGE 0xBC - #define IPS_READ 0x02 - #define IPS_WRITE 0x03 - #define ENQUIRY 0x05 - #define FLUSH_CACHE 0x0A - #define NORM_STATE 0x00 - #define READ_SCATTER_GATHER 0x82 - #define WRITE_SCATTER_GATHER 0x83 - #define DIRECT_CDB 0x04 - #define DIRECT_CDB_SCATTER_GATHER 0x84 - #define CONFIG_SYNC 0x58 - #define POCL 0x30 - #define GET_ERASE_ERROR_TABLE 0x17 - #define RESET_CHANNEL 0x1A - #define CSL 0xFF - #define ADAPT_RESET 0xFF + #ifndef verify_area_20 + #define verify_area_20(t,a,sz) (0) /* success */ + #endif + + #ifndef PUT_USER + #define PUT_USER put_user + #endif + + #ifndef __PUT_USER + #define __PUT_USER __put_user + #endif + + #ifndef PUT_USER_RET + #define PUT_USER_RET put_user_ret + #endif + + #ifndef GET_USER + #define GET_USER get_user + #endif + + #ifndef __GET_USER + #define __GET_USER __get_user + #endif + + #ifndef GET_USER_RET + #define GET_USER_RET get_user_ret + #endif -/* - * Adapter Equates - */ + /* + * Lock macros + */ + #define IPS_SCB_LOCK(cpu_flags) spin_lock_irqsave(&ha->scb_lock, cpu_flags) + #define IPS_SCB_UNLOCK(cpu_flags) spin_unlock_irqrestore(&ha->scb_lock, cpu_flags) + #define IPS_QUEUE_LOCK(queue) spin_lock_irqsave(&(queue)->lock, (queue)->cpu_flags) + #define IPS_QUEUE_UNLOCK(queue) spin_unlock_irqrestore(&(queue)->lock, (queue)->cpu_flags) + #define IPS_HA_LOCK(cpu_flags) spin_lock_irqsave(&ha->ips_lock, cpu_flags) + #define IPS_HA_UNLOCK(cpu_flags) spin_unlock_irqrestore(&ha->ips_lock, cpu_flags) + + /* + * Adapter address map equates + */ + #define IPS_REG_HISR 0x08 /* Host Interrupt Status Reg */ + #define IPS_REG_CCSAR 0x10 /* Cmd Channel System Addr Reg */ + #define IPS_REG_CCCR 0x14 /* Cmd Channel Control Reg */ + #define IPS_REG_SQHR 0x20 /* Status Q Head Reg */ + #define IPS_REG_SQTR 0x24 /* Status Q Tail Reg */ + #define IPS_REG_SQER 0x28 /* Status Q End Reg */ + #define IPS_REG_SQSR 0x2C /* Status Q Start Reg */ + #define IPS_REG_SCPR 0x05 /* Subsystem control port reg */ + #define IPS_REG_ISPR 0x06 /* interrupt status port reg */ + #define IPS_REG_CBSP 0x07 /* CBSP register */ + #define IPS_REG_FLAP 0x18 /* Flash address port */ + #define IPS_REG_FLDP 0x1C /* Flash data port */ + + /* + * Adapter register bit equates + */ + #define IPS_BIT_GHI 0x04 /* HISR General Host Interrupt */ + #define IPS_BIT_SQO 0x02 /* HISR Status Q Overflow */ + #define IPS_BIT_SCE 0x01 /* HISR Status Channel Enqueue */ + #define IPS_BIT_SEM 0x08 /* CCCR Semaphore Bit */ + #define IPS_BIT_ILE 0x10 /* CCCR ILE Bit */ + #define IPS_BIT_START_CMD 0x101A /* CCCR Start Command Channel */ + #define IPS_BIT_START_STOP 0x0002 /* CCCR Start/Stop Bit */ + #define IPS_BIT_RST 0x80 /* SCPR Reset Bit */ + #define IPS_BIT_EBM 0x02 /* SCPR Enable Bus Master */ + #define IPS_BIT_EI 0x80 /* HISR Enable Interrupts */ + #define IPS_BIT_OP 0x01 /* OP bit in CBSP */ + + /* + * Adapter Command ID Equates + */ + #define IPS_CMD_GET_LD_INFO 0x19 + #define IPS_CMD_GET_SUBSYS 0x40 + #define IPS_CMD_READ_CONF 0x38 + #define IPS_CMD_RW_NVRAM_PAGE 0xBC + #define IPS_CMD_READ 0x02 + #define IPS_CMD_WRITE 0x03 + #define IPS_CMD_FFDC 0xD7 + #define IPS_CMD_ENQUIRY 0x05 + #define IPS_CMD_FLUSH 0x0A + #define IPS_CMD_READ_SG 0x82 + #define IPS_CMD_WRITE_SG 0x83 + #define IPS_CMD_DCDB 0x04 + #define IPS_CMD_DCDB_SG 0x84 + #define IPS_CMD_CONFIG_SYNC 0x58 + #define IPS_CMD_ERROR_TABLE 0x17 + + /* + * Adapter Equates + */ + #define IPS_CSL 0xFF + #define IPS_POCL 0x30 + #define IPS_NORM_STATE 0x00 #define IPS_MAX_ADAPTERS 16 #define IPS_MAX_IOCTL 1 #define IPS_MAX_IOCTL_QUEUE 8 #define IPS_MAX_QUEUE 128 #define IPS_BLKSIZE 512 - #define MAX_SG_ELEMENTS 17 - #define MAX_LOGICAL_DRIVES 8 - #define MAX_CHANNELS 3 - #define MAX_TARGETS 15 - #define MAX_CHUNKS 16 - #define MAX_CMDS 128 + #define IPS_MAX_SG 17 + #define IPS_MAX_LD 8 + #define IPS_MAX_CHANNELS 4 + #define IPS_MAX_TARGETS 15 + #define IPS_MAX_CHUNKS 16 + #define IPS_MAX_CMDS 128 #define IPS_MAX_XFER 0x10000 - #define COMP_MODE_HEADS 128 - #define COMP_MODE_SECTORS 32 - #define NORM_MODE_HEADS 254 - #define NORM_MODE_SECTORS 63 - #define NVRAM_PAGE5_SIGNATURE 0xFFDDBB99 - #define MAX_POST_BYTES 0x02 - #define MAX_CONFIG_BYTES 0x02 - #define GOOD_POST_BASIC_STATUS 0x80 - #define SEMAPHORE_TIMEOUT 2000 - #define IPS_INTR_OFF 0 - #define IPS_INTR_ON 1 + #define IPS_NVRAM_P5_SIG 0xFFDDBB99 + #define IPS_MAX_POST_BYTES 0x02 + #define IPS_MAX_CONFIG_BYTES 0x02 + #define IPS_GOOD_POST_STATUS 0x80 + #define IPS_SEM_TIMEOUT 2000 + #define IPS_IOCTL_COMMAND 0x0D + #define IPS_IOCTL_NEW_COMMAND 0x81 + #define IPS_INTR_ON 0 + #define IPS_INTR_IORL 1 + #define IPS_INTR_HAL 2 #define IPS_ADAPTER_ID 0xF #define IPS_VENDORID 0x1014 #define IPS_DEVICEID 0x002E - #define TIMEOUT_10 0x10 - #define TIMEOUT_60 0x20 - #define TIMEOUT_20M 0x30 - #define STATUS_SIZE 4 - #define STATUS_Q_SIZE (MAX_CMDS+1) * STATUS_SIZE - #define ONE_MSEC 1 - #define ONE_SEC 1000 - -/* - * Adapter Basic Status Codes - */ - #define BASIC_STATUS_MASK 0xFF - #define GSC_STATUS_MASK 0x0F - #define SSUCCESS 0x00 - #define RECOVERED_ERROR 0x01 - #define IPS_CHECK_CONDITION 0x02 - #define INVAL_OPCO 0x03 - #define INVAL_CMD_BLK 0x04 - #define INVAL_PARM_BLK 0x05 + #define IPS_IOCTL_SIZE 8192 + #define IPS_STATUS_SIZE 4 + #define IPS_STATUS_Q_SIZE (IPS_MAX_CMDS+1) * IPS_STATUS_SIZE + #define IPS_ONE_MSEC 1 + #define IPS_ONE_SEC 1000 + + /* + * Geometry Settings + */ + #define IPS_COMP_HEADS 128 + #define IPS_COMP_SECTORS 32 + #define IPS_NORM_HEADS 254 + #define IPS_NORM_SECTORS 63 + + /* + * Adapter Basic Status Codes + */ + #define IPS_BASIC_STATUS_MASK 0xFF + #define IPS_GSC_STATUS_MASK 0x0F + #define IPS_CMD_SUCCESS 0x00 + #define IPS_CMD_RECOVERED_ERROR 0x01 + #define IPS_INVAL_OPCO 0x03 + #define IPS_INVAL_CMD_BLK 0x04 + #define IPS_INVAL_PARM_BLK 0x05 #define IPS_BUSY 0x08 - #define ADAPT_HARDWARE_ERROR 0x09 - #define ADAPT_FIRMWARE_ERROR 0x0A - #define CMD_CMPLT_WERROR 0x0C - #define LOG_DRV_ERROR 0x0D - #define CMD_TIMEOUT 0x0E - #define PHYS_DRV_ERROR 0x0F - -/* - * Adapter Extended Status Equates - */ - #define SELECTION_TIMEOUT 0xF0 - #define DATA_OVER_UNDER_RUN 0xF2 - #define EXT_HOST_RESET 0xF7 - #define EXT_DEVICE_RESET 0xF8 - #define EXT_RECOVERY 0xFC - #define EXT_CHECK_CONDITION 0xFF - -/* - * Operating System Defines - */ - #define OS_WINDOWS_NT 0x01 - #define OS_NETWARE 0x02 - #define OS_OPENSERVER 0x03 - #define OS_UNIXWARE 0x04 - #define OS_SOLARIS 0x05 - #define OS_OS2 0x06 - #define OS_LINUX 0x07 - #define OS_FREEBSD 0x08 - -/* - * Adapter Command/Status Packet Definitions - */ + #define IPS_CMD_CMPLT_WERROR 0x0C + #define IPS_LD_ERROR 0x0D + #define IPS_CMD_TIMEOUT 0x0E + #define IPS_PHYS_DRV_ERROR 0x0F + + /* + * Adapter Extended Status Equates + */ + #define IPS_ERR_SEL_TO 0xF0 + #define IPS_ERR_OU_RUN 0xF2 + #define IPS_ERR_HOST_RESET 0xF7 + #define IPS_ERR_DEV_RESET 0xF8 + #define IPS_ERR_RECOVERY 0xFC + #define IPS_ERR_CKCOND 0xFF + + /* + * Operating System Defines + */ + #define IPS_OS_WINDOWS_NT 0x01 + #define IPS_OS_NETWARE 0x02 + #define IPS_OS_OPENSERVER 0x03 + #define IPS_OS_UNIXWARE 0x04 + #define IPS_OS_SOLARIS 0x05 + #define IPS_OS_OS2 0x06 + #define IPS_OS_LINUX 0x07 + #define IPS_OS_FREEBSD 0x08 + + /* + * Adapter Revision ID's + */ + #define IPS_REVID_SERVERAID 0x02 + #define IPS_REVID_NAVAJO 0x03 + #define IPS_REVID_SERVERAID2 0x04 + #define IPS_REVID_CLARINETP1 0x05 + #define IPS_REVID_CLARINETP2 0x07 + #define IPS_REVID_CLARINETP3 0x0D + #define IPS_REVID_TROMBONE32 0x0F + #define IPS_REVID_TROMBONE64 0x10 + + /* + * Adapter Command/Status Packet Definitions + */ #define IPS_SUCCESS 0x01 /* Successfully completed */ #define IPS_SUCCESS_IMM 0x02 /* Success - Immediately */ #define IPS_FAILURE 0x04 /* Completed with Error */ -/* - * Logical Drive Equates - */ - #define OFF_LINE 0x02 - #define OKAY 0x03 - #define FREE 0x00 - #define SYS 0x06 - #define CRS 0x24 - -/* - * DCDB Table Equates - */ -#ifndef HOSTS_C - #define NO_DISCONNECT 0x00 - #define DISCONNECT_ALLOWED 0x80 - #define NO_AUTO_REQUEST_SENSE 0x40 + /* + * Logical Drive Equates + */ + #define IPS_LD_OFFLINE 0x02 + #define IPS_LD_OKAY 0x03 + #define IPS_LD_FREE 0x00 + #define IPS_LD_SYS 0x06 + #define IPS_LD_CRS 0x24 + + /* + * DCDB Table Equates + */ + #define IPS_NO_DISCONNECT 0x00 + #define IPS_DISCONNECT_ALLOWED 0x80 + #define IPS_NO_AUTO_REQSEN 0x40 #define IPS_DATA_NONE 0x00 #define IPS_DATA_UNK 0x00 #define IPS_DATA_IN 0x01 #define IPS_DATA_OUT 0x02 - #define TRANSFER_64K 0x08 - #define NOTIMEOUT 0x00 - #define TIMEOUT10 0x10 - #define TIMEOUT60 0x20 - #define TIMEOUT20M 0x30 -/* - * Host adapter Flags (bit numbers) - */ + #define IPS_TRANSFER64K 0x08 + #define IPS_NOTIMEOUT 0x00 + #define IPS_TIMEOUT10 0x10 + #define IPS_TIMEOUT60 0x20 + #define IPS_TIMEOUT20M 0x30 + + /* + * Host adapter Flags (bit numbers) + */ #define IPS_IN_INTR 0 #define IPS_IN_ABORT 1 #define IPS_IN_RESET 2 -/* - * SCB Flags - */ - #define SCB_ACTIVE 0x00001 - #define SCB_WAITING 0x00002 -#endif /* HOSTS_C */ -/* - * Passthru stuff - */ - #define COPPUSRCMD (('C'<<8) | 65) + /* + * SCB Flags + */ + #define IPS_SCB_ACTIVE 0x00001 + #define IPS_SCB_WAITING 0x00002 + + /* + * Passthru stuff + */ + #define IPS_COPPUSRCMD (('C'<<8) | 65) + #define IPS_COPPIOCCMD (('C'<<8) | 66) #define IPS_NUMCTRLS (('C'<<8) | 68) #define IPS_CTRLINFO (('C'<<8) | 69) + #define IPS_FLASHBIOS (('C'<<8) | 70) -/* - * Scsi_Host Template - */ + /* time oriented stuff */ + #define IPS_IS_LEAP_YEAR(y) (((y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))) ? 1 : 0) + #define IPS_NUM_LEAP_YEARS_THROUGH(y) ((y) / 4 - (y) / 100 + (y) / 400) + + #define IPS_SECS_MIN 60 + #define IPS_SECS_HOUR 3600 + #define IPS_SECS_8HOURS 28800 + #define IPS_SECS_DAY 86400 + #define IPS_DAYS_NORMAL_YEAR 365 + #define IPS_DAYS_LEAP_YEAR 366 + #define IPS_EPOCH_YEAR 1970 + + /* + * Scsi_Host Template + */ #define IPS { \ next : NULL, \ module : NULL, \ - proc_dir : NULL, \ proc_info : NULL, \ name : NULL, \ detect : ips_detect, \ @@ -291,7 +357,7 @@ bios_param : ips_biosparam, \ can_queue : 0, \ this_id: -1, \ - sg_tablesize : MAX_SG_ELEMENTS, \ + sg_tablesize : IPS_MAX_SG, \ cmd_per_lun: 16, \ present : 0, \ unchecked_isa_dma : 0, \ @@ -313,7 +379,7 @@ u16 reserved; u32 ccsar; u32 cccr; -} BASIC_IO_CMD, *PBASIC_IO_CMD; +} IPS_IO_CMD, *PIPS_IO_CMD; typedef struct { u8 op_code; @@ -324,7 +390,7 @@ u32 reserved3; u32 ccsar; u32 cccr; -} LOGICAL_INFO, *PLOGICAL_INFO; +} IPS_LD_CMD, *PIPS_LD_CMD; typedef struct { u8 op_code; @@ -334,7 +400,7 @@ u32 reserved3; u32 buffer_addr; u32 reserved4; -} IOCTL_INFO, *PIOCTL_INFO; +} IPS_IOCTL_CMD, *PIPS_IOCTL_CMD; typedef struct { u8 op_code; @@ -345,7 +411,7 @@ u32 reserved3; u32 ccsar; u32 cccr; -} DCDB_CMD, *PDCDB_CMD; +} IPS_DCDB_CMD, *PIPS_DCDB_CMD; typedef struct { u8 op_code; @@ -357,7 +423,7 @@ u32 reserved3; u32 ccsar; u32 cccr; -} CONFIG_SYNC_CMD, *PCONFIG_SYNC_CMD; +} IPS_CS_CMD, *PIPS_CS_CMD; typedef struct { u8 op_code; @@ -369,7 +435,7 @@ u32 reserved3; u32 ccsar; u32 cccr; -} UNLOCK_STRIPE_CMD, *PUNLOCK_STRIPE_CMD; +} IPS_US_CMD, *PIPS_US_CMD; typedef struct { u8 op_code; @@ -381,7 +447,7 @@ u32 reserved4; u32 ccsar; u32 cccr; -} FLUSH_CACHE_CMD, *PFLUSH_CACHE_CMD; +} IPS_FC_CMD, *PIPS_FC_CMD; typedef struct { u8 op_code; @@ -393,7 +459,7 @@ u32 reserved3; u32 ccsar; u32 cccr; -} STATUS_CMD, *PSTATUS_CMD; +} IPS_STATUS_CMD, *PIPS_STATUS_CMD; typedef struct { u8 op_code; @@ -405,19 +471,36 @@ u32 reserved2; u32 ccsar; u32 cccr; -} NVRAM_CMD, *PNVRAM_CMD; +} IPS_NVRAM_CMD, *PIPS_NVRAM_CMD; + +typedef struct { + u8 op_code; + u8 command_id; + u8 reset_count; + u8 reset_type; + u8 second; + u8 minute; + u8 hour; + u8 day; + u8 reserved1[4]; + u8 month; + u8 yearH; + u8 yearL; + u8 reserved2; +} IPS_FFDC_CMD, *PIPS_FFDC_CMD; typedef union { - BASIC_IO_CMD basic_io; - LOGICAL_INFO logical_info; - IOCTL_INFO ioctl_info; - DCDB_CMD dcdb; - CONFIG_SYNC_CMD config_sync; - UNLOCK_STRIPE_CMD unlock_stripe; - FLUSH_CACHE_CMD flush_cache; - STATUS_CMD status; - NVRAM_CMD nvram; -} HOST_COMMAND, *PHOST_COMMAND; + IPS_IO_CMD basic_io; + IPS_LD_CMD logical_info; + IPS_IOCTL_CMD ioctl_info; + IPS_DCDB_CMD dcdb; + IPS_CS_CMD config_sync; + IPS_US_CMD unlock_stripe; + IPS_FC_CMD flush_cache; + IPS_STATUS_CMD status; + IPS_NVRAM_CMD nvram; + IPS_FFDC_CMD ffdc; +} IPS_HOST_COMMAND, *PIPS_HOST_COMMAND; typedef struct { u8 logical_id; @@ -425,25 +508,13 @@ u8 raid_level; u8 state; u32 sector_count; -} DRIVE_INFO, *PDRIVE_INFO; +} IPS_DRIVE_INFO, *PIPS_DRIVE_INFO; typedef struct { - u8 no_of_log_drive; - u8 reserved[3]; - DRIVE_INFO drive_info[MAX_LOGICAL_DRIVES]; -} LOGICAL_DRIVE_INFO, *PLOGICAL_DRIVE_INFO; - -typedef struct { - u8 ha_num; - u8 bus_num; - u8 id; - u8 device_type; - u32 data_len; - u32 data_ptr; - u8 scsi_cdb[12]; - u32 data_counter; - u32 block_size; -} NON_DISK_DEVICE_INFO, *PNON_DISK_DEVICE_INFO; + u8 no_of_log_drive; + u8 reserved[3]; + IPS_DRIVE_INFO drive_info[IPS_MAX_LD]; +} IPS_LD_INFO, *PIPS_LD_INFO; typedef struct { u8 device_address; @@ -458,24 +529,24 @@ u8 sense_info[64]; u8 scsi_status; u8 reserved2[3]; -} DCDB_TABLE, *PDCDB_TABLE; +} IPS_DCDB_TABLE, *PIPS_DCDB_TABLE; typedef struct { volatile u8 reserved; volatile u8 command_id; volatile u8 basic_status; volatile u8 extended_status; -} STATUS, *PSTATUS; +} IPS_STATUS, *PIPS_STATUS; typedef struct { - STATUS status[MAX_CMDS + 1]; - volatile PSTATUS p_status_start; - volatile PSTATUS p_status_end; - volatile PSTATUS p_status_tail; + IPS_STATUS status[IPS_MAX_CMDS + 1]; + volatile PIPS_STATUS p_status_start; + volatile PIPS_STATUS p_status_end; + volatile PIPS_STATUS p_status_tail; volatile u32 hw_status_start; volatile u32 hw_status_tail; - LOGICAL_DRIVE_INFO logical_drive_info; -} ADAPTER_AREA, *PADAPTER_AREA; + IPS_LD_INFO logical_drive_info; +} IPS_ADAPTER, *PIPS_ADAPTER; typedef struct { u8 ucLogDriveCount; @@ -488,7 +559,7 @@ u8 ucNVramDevChgCnt; u8 CodeBlkVersion[8]; u8 BootBlkVersion[8]; - u32 ulDriveSize[MAX_LOGICAL_DRIVES]; + u32 ulDriveSize[IPS_MAX_LD]; u8 ucConcurrentCmdCount; u8 ucMaxPhysicalDevices; u16 usFlashRepgmCount; @@ -499,8 +570,8 @@ u16 usConfigUpdateCount; u8 ucBlkFlag; u8 reserved; - u16 usAddrDeadDisk[MAX_CHANNELS * MAX_TARGETS]; -} ENQCMD, *PENQCMD; + u16 usAddrDeadDisk[IPS_MAX_CHANNELS * IPS_MAX_TARGETS]; +} IPS_ENQ, *PIPS_ENQ; typedef struct { u8 ucInitiator; @@ -509,7 +580,7 @@ u8 ucState; u32 ulBlockCount; u8 ucDeviceId[28]; -} DEVSTATE, *PDEVSTATE; +} IPS_DEVSTATE, *PIPS_DEVSTATE; typedef struct { u8 ucChn; @@ -517,7 +588,7 @@ u16 ucReserved; u32 ulStartSect; u32 ulNoOfSects; -} CHUNK, *PCHUNK; +} IPS_CHUNK, *PIPS_CHUNK; typedef struct { u16 ucUserField; @@ -528,8 +599,8 @@ u8 ucParams; u8 ucReserved; u32 ulLogDrvSize; - CHUNK chunk[MAX_CHUNKS]; -} LOGICAL_DRIVE, *PLOGICAL_DRIVE; + IPS_CHUNK chunk[IPS_MAX_CHUNKS]; +} IPS_LD, *PIPS_LD; typedef struct { u8 board_disc[8]; @@ -539,7 +610,7 @@ u8 ucCompression; u8 ucNvramType; u32 ulNvramSize; -} HARDWARE_DISC, *PHARDWARE_DISC; +} IPS_HARDWARE, *PIPS_HARDWARE; typedef struct { u8 ucLogDriveCount; @@ -563,12 +634,12 @@ u16 user_field; u8 ucRebuildRate; u8 ucReserve; - HARDWARE_DISC hardware_disc; - LOGICAL_DRIVE logical_drive[MAX_LOGICAL_DRIVES]; - DEVSTATE dev[MAX_CHANNELS][MAX_TARGETS+1]; + IPS_HARDWARE hardware_disc; + IPS_LD logical_drive[IPS_MAX_LD]; + IPS_DEVSTATE dev[IPS_MAX_CHANNELS][IPS_MAX_TARGETS+1]; u8 reserved[512]; -} CONFCMD, *PCONFCMD; +} IPS_CONF, *PIPS_CONF; typedef struct { u32 signature; @@ -583,17 +654,15 @@ u8 driver_high[4]; u8 driver_low[4]; u8 reserved4[100]; -} NVRAM_PAGE5, *PNVRAM_PAGE5; +} IPS_NVRAM_P5, *PIPS_NVRAM_P5; -typedef struct _SUBSYS_PARAM { +typedef struct _IPS_SUBSYS { u32 param[128]; -} SUBSYS_PARAM, *PSUBSYS_PARAM; +} IPS_SUBSYS, *PIPS_SUBSYS; /* * Inquiry Data Format */ -#ifndef HOSTS_C - typedef struct { u8 DeviceType:5; u8 DeviceTypeQualifier:3; @@ -616,16 +685,15 @@ u8 ProductRevisionLevel[4]; u8 VendorSpecific[20]; u8 Reserved3[40]; -} INQUIRYDATA, *PINQUIRYDATA; +} IPS_INQ_DATA, *PIPS_INQ_DATA; -#endif /* * Read Capacity Data Format */ typedef struct { u32 lba; u32 len; -} CAPACITY_T; +} IPS_CAPACITY; /* * Sense Data Format @@ -649,7 +717,7 @@ u32 pg_rmb:1; /* Removeable */ u32 pg_hsec:1; /* Hard sector formatting */ u32 pg_ssec:1; /* Soft sector formatting */ -} DADF_T; +} IPS_DADF; typedef struct { u8 pg_pc:6; /* Page Code */ @@ -665,9 +733,9 @@ u32 pg_landu:16; /* Landing zone cylinder (upper) */ u32 pg_landl:8; /* Landing zone cylinder (lower) */ u32 pg_res2:24; /* Reserved */ -} RDDG_T; +} IPS_RDDG; -struct blk_desc { +struct ips_blk_desc { u8 bd_dencode; u8 bd_nblks1; u8 bd_nblks2; @@ -684,15 +752,15 @@ u8 plh_res:7; /* Reserved */ u8 plh_wp:1; /* Write protect */ u8 plh_bdl; /* Block descriptor length */ -} SENSE_PLH_T; +} ips_sense_plh_t; typedef struct { - SENSE_PLH_T plh; - struct blk_desc blk_desc; + ips_sense_plh_t plh; + struct ips_blk_desc blk_desc; union { - DADF_T pg3; - RDDG_T pg4; + IPS_DADF pg3; + IPS_RDDG pg4; } pdata; } ips_mdata_t; @@ -702,14 +770,14 @@ typedef struct ips_sglist { u32 address; u32 length; -} SG_LIST, *PSG_LIST; +} IPS_SG_LIST, *PIPS_SG_LIST; -typedef struct _INFOSTR { +typedef struct _IPS_INFOSTR { char *buffer; int length; int offset; int pos; -} INFOSTR; +} IPS_INFOSTR; /* * Status Info @@ -725,7 +793,9 @@ typedef struct ips_scb_queue { struct ips_scb *head; struct ips_scb *tail; - unsigned int count; + u32 count; + u32 cpu_flags; + spinlock_t lock; } ips_scb_queue_t; /* @@ -734,12 +804,28 @@ typedef struct ips_wait_queue { Scsi_Cmnd *head; Scsi_Cmnd *tail; - unsigned int count; + u32 count; + u32 cpu_flags; + spinlock_t lock; } ips_wait_queue_t; +typedef struct ips_copp_wait_item { + Scsi_Cmnd *scsi_cmd; + struct semaphore *sem; + struct ips_copp_wait_item *next; +} ips_copp_wait_item_t; + +typedef struct ips_copp_queue { + struct ips_copp_wait_item *head; + struct ips_copp_wait_item *tail; + u32 count; + u32 cpu_flags; + spinlock_t lock; +} ips_copp_queue_t; + typedef struct ips_ha { - u8 ha_id[MAX_CHANNELS+1]; - u32 dcdb_active[MAX_CHANNELS]; + u8 ha_id[IPS_MAX_CHANNELS+1]; + u32 dcdb_active[IPS_MAX_CHANNELS]; u32 io_addr; /* Base I/O address */ u8 irq; /* IRQ for adapter */ u8 ntargets; /* Number of targets */ @@ -754,35 +840,39 @@ struct ips_scb *scbs; /* Array of all CCBS */ struct ips_scb *scb_freelist; /* SCB free list */ ips_wait_queue_t scb_waitlist; /* Pending SCB list */ - ips_wait_queue_t copp_waitlist; /* Pending PT list */ + ips_copp_queue_t copp_waitlist; /* Pending PT list */ ips_scb_queue_t scb_activelist; /* Active SCB list */ - BASIC_IO_CMD *dummy; /* dummy command */ - ADAPTER_AREA *adapt; /* Adapter status area */ - ENQCMD *enq; /* Adapter Enquiry data */ - CONFCMD *conf; /* Adapter config data */ - NVRAM_PAGE5 *nvram; /* NVRAM page 5 data */ - SUBSYS_PARAM *subsys; /* Subsystem parameters */ + IPS_IO_CMD *dummy; /* dummy command */ + IPS_ADAPTER *adapt; /* Adapter status area */ + IPS_ENQ *enq; /* Adapter Enquiry data */ + IPS_CONF *conf; /* Adapter config data */ + IPS_NVRAM_P5 *nvram; /* NVRAM page 5 data */ + IPS_SUBSYS *subsys; /* Subsystem parameters */ + char *ioctl_data; /* IOCTL data area */ + u32 ioctl_datasize; /* IOCTL data size */ u32 cmd_in_progress; /* Current command in progress*/ u32 flags; /* HA flags */ u8 waitflag; /* are we waiting for cmd */ u8 active; - u32 reserved:16; /* reserved space */ - struct wait_queue *copp_queue; /* passthru sync queue */ + u16 reset_count; /* number of resets */ + u32 last_ffdc; /* last time we sent ffdc info*/ + u8 revision_id; /* Revision level */ #if LINUX_VERSION_CODE >= LinuxVersionCode(2,1,0) spinlock_t scb_lock; spinlock_t copp_lock; + spinlock_t ips_lock; #endif } ips_ha_t; -typedef void (*scb_callback) (ips_ha_t *, struct ips_scb *); +typedef void (*ips_scb_callback) (ips_ha_t *, struct ips_scb *); /* * SCB Format */ typedef struct ips_scb { - HOST_COMMAND cmd; - DCDB_TABLE dcdb; + IPS_HOST_COMMAND cmd; + IPS_DCDB_TABLE dcdb; u8 target_id; u8 bus; u8 lun; @@ -797,31 +887,53 @@ u32 sg_len; u32 flags; u32 op_code; - SG_LIST *sg_list; + IPS_SG_LIST *sg_list; Scsi_Cmnd *scsi_cmd; struct ips_scb *q_next; - scb_callback callback; + ips_scb_callback callback; + struct semaphore *sem; } ips_scb_t; +typedef struct ips_scb_pt { + IPS_HOST_COMMAND cmd; + IPS_DCDB_TABLE dcdb; + u8 target_id; + u8 bus; + u8 lun; + u8 cdb[12]; + u32 scb_busaddr; + u32 data_busaddr; + u32 timeout; + u8 basic_status; + u8 extended_status; + u16 breakup; + u32 data_len; + u32 sg_len; + u32 flags; + u32 op_code; + IPS_SG_LIST *sg_list; + Scsi_Cmnd *scsi_cmd; + struct ips_scb *q_next; + ips_scb_callback callback; +} ips_scb_pt_t; + /* * Passthru Command Format */ typedef struct { - u8 CoppID[4]; - u32 CoppCmd; - u32 PtBuffer; - u8 *CmdBuffer; - u32 CmdBSize; - ips_scb_t CoppCP; - u32 TimeOut; - u8 BasicStatus; - u8 ExtendedStatus; - u16 reserved; + u8 CoppID[4]; + u32 CoppCmd; + u32 PtBuffer; + u8 *CmdBuffer; + u32 CmdBSize; + ips_scb_pt_t CoppCP; + u32 TimeOut; + u8 BasicStatus; + u8 ExtendedStatus; + u16 reserved; } ips_passthru_t; #endif - - /* * Overrides for Emacs so that we almost follow Linus's tabbing style. diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/megaraid.c linux.16p3/drivers/scsi/megaraid.c --- linux.vanilla/drivers/scsi/megaraid.c Fri Apr 21 12:46:30 2000 +++ linux.16p3/drivers/scsi/megaraid.c Mon May 15 13:09:28 2000 @@ -1677,7 +1677,7 @@ "megaraid: to protect your data, please upgrade your firmware to version\n" "megaraid: 3.10 or later, available from the Dell Technical Support web\n" "megaraid: site at\n" -"http://support.dell.com/us/en/filelib/download/index.asp?fileid=2489\n"); +"http://support.dell.com/us/en/filelib/download/index.asp?fileid=2940\n"); megaraid_release (host); #ifdef MODULE continue; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/sd.c linux.16p3/drivers/scsi/sd.c --- linux.vanilla/drivers/scsi/sd.c Fri Apr 21 12:46:31 2000 +++ linux.16p3/drivers/scsi/sd.c Mon May 1 01:13:22 2000 @@ -999,7 +999,7 @@ if(block & 7) panic("sd.c:Bad block number requested"); if(this_count & 7) panic("sd.c:Bad block number requested"); block = block >> 3; - this_count = block >> 3; + this_count = this_count >> 3; } if (rscsi_disks[dev].sector_size == 2048){ @@ -1381,7 +1381,7 @@ } } - if( rscsi_disks[i].sector_size == 2048 ) + if( rscsi_disks[i].sector_size > 1024 ) { int m; @@ -1393,7 +1393,7 @@ */ for (m=i<<4; m<((i+1)<<4); m++) { - sd_blocksizes[m] = 2048; + sd_blocksizes[m] = rscsi_disks[i].sector_size; } } { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/sd_ioctl.c linux.16p3/drivers/scsi/sd_ioctl.c --- linux.vanilla/drivers/scsi/sd_ioctl.c Fri Apr 21 12:46:31 2000 +++ linux.16p3/drivers/scsi/sd_ioctl.c Mon May 15 18:01:41 2000 @@ -113,6 +113,10 @@ return put_user(blksize_size[MAJOR(dev)][MINOR(dev)&0x0F], (int *)arg); + case BLKELVGET: + case BLKELVSET: + return blkelv_ioctl(inode->i_rdev, cmd, arg); + RO_IOCTLS(dev, arg); default: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/seagate.c linux.16p3/drivers/scsi/seagate.c --- linux.vanilla/drivers/scsi/seagate.c Fri Apr 21 12:46:31 2000 +++ linux.16p3/drivers/scsi/seagate.c Mon May 15 12:25:38 2000 @@ -318,6 +318,8 @@ {"FUTURE DOMAIN CORP. (C) 1992 V8.00.004/02/92", 5, 44, FD}, {"IBM F1 BIOS V1.1004/30/92", 5, 25, FD}, {"FUTURE DOMAIN TMC-950", 5, 21, FD}, + /* Added for 2.2.16 by Matthias_Heidbrink@b.maus.de */ + {"IBM F1 V1.2009/22/93", 5, 25, FD}, }; #define NUM_SIGNATURES (sizeof(signatures) / sizeof(Signature)) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/sr.c linux.16p3/drivers/scsi/sr.c --- linux.vanilla/drivers/scsi/sr.c Fri Apr 21 12:46:32 2000 +++ linux.16p3/drivers/scsi/sr.c Sun Apr 30 23:42:32 2000 @@ -1,25 +1,28 @@ /* * sr.c Copyright (C) 1992 David Giller - * Copyright (C) 1993, 1994, 1995 Eric Youngdale + * Copyright (C) 1993, 1994, 1995 Eric Youngdale * * adapted from: - * sd.c Copyright (C) 1992 Drew Eckhardt - * Linux scsi disk driver by - * Drew Eckhardt + * sd.c Copyright (C) 1992 Drew Eckhardt + * Linux scsi disk driver by + * Drew Eckhardt * * Modified by Eric Youngdale ericy@cais.com to * add scatter-gather, multiple outstanding request, and other * enhancements. * - * Modified by Eric Youngdale eric@aib.com to support loadable - * low-level scsi drivers. + * Modified by Eric Youngdale eric@aib.com to support loadable + * low-level scsi drivers. * - * Modified by Thomas Quinot thomas@melchior.cuivre.fdn.fr to - * provide auto-eject. + * Modified by Thomas Quinot thomas@melchior.cuivre.fdn.fr to + * provide auto-eject. * * Modified by Gerd Knorr to support the * generic cdrom interface * + * Modified by Jens Axboe - Uniform sr_packet() + * interface, capabilities probe additions, ioctl cleanups, etc. + * */ #include @@ -34,19 +37,22 @@ #include #include #include +#include #define MAJOR_NR SCSI_CDROM_MAJOR #include #include "scsi.h" #include "hosts.h" #include "sr.h" -#include /* For the door lock/unlock commands */ +#include /* For the door lock/unlock commands */ #include "constants.h" -MODULE_PARM(xa_test,"i"); /* see sr_ioctl.c */ +#ifdef MODULE +MODULE_PARM(xa_test, "i"); /* see sr_ioctl.c */ +#endif -#define MAX_RETRIES 3 -#define SR_TIMEOUT (30 * HZ) +#define MAX_RETRIES 3 +#define SR_TIMEOUT (30 * HZ) static int sr_init(void); static void sr_finish(void); @@ -54,53 +60,60 @@ static int sr_detect(Scsi_Device *); static void sr_detach(Scsi_Device *); -struct Scsi_Device_Template sr_template = {NULL, "cdrom", "sr", NULL, TYPE_ROM, - SCSI_CDROM_MAJOR, 0, 0, 0, 1, - sr_detect, sr_init, - sr_finish, sr_attach, sr_detach}; +struct Scsi_Device_Template sr_template = { + NULL, "cdrom", "sr", NULL, TYPE_ROM, + SCSI_CDROM_MAJOR, 0, 0, 0, 1, + sr_detect, sr_init, + sr_finish, sr_attach, sr_detach +}; -Scsi_CD * scsi_CDs = NULL; -static int * sr_sizes = NULL; +Scsi_CD *scsi_CDs = NULL; +static int *sr_sizes = NULL; -static int * sr_blocksizes = NULL; +static int *sr_blocksizes = NULL; -static int sr_open(struct cdrom_device_info*, int); +static int sr_open(struct cdrom_device_info *, int); void get_sectorsize(int); void get_capabilities(int); -void requeue_sr_request (Scsi_Cmnd * SCpnt); -static int sr_media_change(struct cdrom_device_info*, int); +void requeue_sr_request(Scsi_Cmnd * SCpnt); +static int sr_media_change(struct cdrom_device_info *, int); +static int sr_packet(struct cdrom_device_info *, struct cdrom_generic_command *); static void sr_release(struct cdrom_device_info *cdi) { if (scsi_CDs[MINOR(cdi->dev)].sector_size > 2048) - sr_set_blocklength(MINOR(cdi->dev),2048); + sr_set_blocklength(MINOR(cdi->dev), 2048); sync_dev(cdi->dev); scsi_CDs[MINOR(cdi->dev)].device->access_count--; if (scsi_CDs[MINOR(cdi->dev)].device->host->hostt->module) __MOD_DEC_USE_COUNT(scsi_CDs[MINOR(cdi->dev)].device->host->hostt->module); - if(sr_template.module) - __MOD_DEC_USE_COUNT(sr_template.module); + if (sr_template.module) + __MOD_DEC_USE_COUNT(sr_template.module); } -static struct cdrom_device_ops sr_dops = { - sr_open, /* open */ - sr_release, /* release */ - sr_drive_status, /* drive status */ - sr_media_change, /* media changed */ - sr_tray_move, /* tray move */ - sr_lock_door, /* lock door */ - sr_select_speed, /* select speed */ - NULL, /* select disc */ - sr_get_last_session, /* get last session */ - sr_get_mcn, /* get universal product code */ - sr_reset, /* hard reset */ - sr_audio_ioctl, /* audio ioctl */ - sr_dev_ioctl, /* device-specific ioctl */ - CDC_CLOSE_TRAY | CDC_OPEN_TRAY| CDC_LOCK | CDC_SELECT_SPEED | - CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | CDC_PLAY_AUDIO | - CDC_RESET | CDC_IOCTLS | CDC_DRIVE_STATUS, - 0 +static struct cdrom_device_ops sr_dops = +{ + sr_open, /* open */ + sr_release, /* release */ + sr_drive_status, /* drive status */ + sr_media_change, /* media changed */ + sr_tray_move, /* tray move */ + sr_lock_door, /* lock door */ + sr_select_speed, /* select speed */ + NULL, /* select disc */ + sr_get_last_session, /* get last session */ + sr_get_mcn, /* get universal product code */ + sr_reset, /* hard reset */ + sr_audio_ioctl, /* audio ioctl */ + sr_dev_ioctl, /* device-specific ioctl */ + CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | + CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | + CDC_PLAY_AUDIO | CDC_RESET | CDC_IOCTLS | CDC_DRIVE_STATUS | + CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | + CDC_GENERIC_PACKET, + 0, + sr_packet }; /* @@ -113,48 +126,47 @@ * an inode for that to work, and we do not always have one. */ -int sr_media_change(struct cdrom_device_info *cdi, int slot){ +int sr_media_change(struct cdrom_device_info *cdi, int slot) +{ int retval; - if (CDSL_CURRENT != slot) { - /* no changer support */ - return -EINVAL; - } - + if (CDSL_CURRENT != slot) { + /* no changer support */ + return -EINVAL; + } retval = scsi_ioctl(scsi_CDs[MINOR(cdi->dev)].device, - SCSI_IOCTL_TEST_UNIT_READY, 0); + SCSI_IOCTL_TEST_UNIT_READY, 0); - if(retval) - { - /* Unable to test, unit probably not ready. This usually + if (retval) { + /* Unable to test, unit probably not ready. This usually * means there is no disc in the drive. Mark as changed, * and we will figure it out later once the drive is * available again. */ - scsi_CDs[MINOR(cdi->dev)].device->changed = 1; - return 1; /* This will force a flush, if called from - * check_disk_change */ + scsi_CDs[MINOR(cdi->dev)].device->changed = 1; + return 1; /* This will force a flush, if called from + * check_disk_change */ }; retval = scsi_CDs[MINOR(cdi->dev)].device->changed; - scsi_CDs[MINOR(cdi->dev)].device->changed = 0; - /* If the disk changed, the capacity will now be different, - * so we force a re-read of this information */ - if (retval) { + scsi_CDs[MINOR(cdi->dev)].device->changed = 0; + /* If the disk changed, the capacity will now be different, + * so we force a re-read of this information */ + if (retval) { /* check multisession offset etc */ - sr_cd_check(cdi); - - /* - * If the disk changed, the capacity will now be different, - * so we force a re-read of this information - * Force 2048 for the sector size so that filesystems won't - * be trying to use something that is too small if the disc - * has changed. - */ - scsi_CDs[MINOR(cdi->dev)].needs_sector_size = 1; + sr_cd_check(cdi); + + /* + * If the disk changed, the capacity will now be different, + * so we force a re-read of this information + * Force 2048 for the sector size so that filesystems won't + * be trying to use something that is too small if the disc + * has changed. + */ + scsi_CDs[MINOR(cdi->dev)].needs_sector_size = 1; - scsi_CDs[MINOR(cdi->dev)].sector_size = 2048; - } + scsi_CDs[MINOR(cdi->dev)].sector_size = 2048; + } return retval; } @@ -163,7 +175,7 @@ * end of a SCSI read / write, and will take on of several actions based on success or failure. */ -static void rw_intr (Scsi_Cmnd * SCpnt) +static void rw_intr(Scsi_Cmnd * SCpnt) { int result = SCpnt->result; int this_count = SCpnt->this_count; @@ -171,137 +183,130 @@ int block_sectors = 0; #ifdef DEBUG - printk("sr.c done: %x %x\n",result, SCpnt->request.bh->b_data); + printk("sr.c done: %x %x\n", result, SCpnt->request.bh->b_data); #endif - /* - Handle MEDIUM ERRORs or VOLUME OVERFLOWs that indicate partial success. - Since this is a relatively rare error condition, no care is taken to - avoid unnecessary additional work such as memcpy's that could be avoided. - */ + /* + Handle MEDIUM ERRORs or VOLUME OVERFLOWs that indicate partial success. + Since this is a relatively rare error condition, no care is taken to + avoid unnecessary additional work such as memcpy's that could be avoided. + */ - if (driver_byte(result) != 0 && /* An error occurred */ - SCpnt->sense_buffer[0] == 0xF0 && /* Sense data is valid */ + if (driver_byte(result) != 0 && /* An error occurred */ + SCpnt->sense_buffer[0] == 0xF0 && /* Sense data is valid */ (SCpnt->sense_buffer[2] == MEDIUM_ERROR || SCpnt->sense_buffer[2] == VOLUME_OVERFLOW || - SCpnt->sense_buffer[2] == ILLEGAL_REQUEST)) - { - long error_sector = (SCpnt->sense_buffer[3] << 24) | - (SCpnt->sense_buffer[4] << 16) | - (SCpnt->sense_buffer[5] << 8) | - SCpnt->sense_buffer[6]; - int device_nr = DEVICE_NR(SCpnt->request.rq_dev); - if (SCpnt->request.bh != NULL) - block_sectors = SCpnt->request.bh->b_size >> 9; - if (block_sectors < 4) block_sectors = 4; - if (scsi_CDs[device_nr].sector_size == 2048) - error_sector <<= 2; - error_sector &= ~ (block_sectors - 1); - good_sectors = error_sector - SCpnt->request.sector; - if (good_sectors < 0 || good_sectors >= this_count) - good_sectors = 0; - /* - The SCSI specification allows for the value returned by READ - CAPACITY to be up to 75 2K sectors past the last readable - block. Therefore, if we hit a medium error within the last - 75 2K sectors, we decrease the saved size value. - */ - if ((error_sector >> 1) < sr_sizes[device_nr] && - scsi_CDs[device_nr].capacity - error_sector < 4*75) - sr_sizes[device_nr] = error_sector >> 1; - } - - if (good_sectors > 0) - { /* Some sectors were read successfully. */ - if (SCpnt->use_sg == 0) { - if (SCpnt->buffer != SCpnt->request.buffer) - { - int offset; - offset = (SCpnt->request.sector % 4) << 9; - memcpy((char *)SCpnt->request.buffer, - (char *)SCpnt->buffer + offset, - good_sectors << 9); - /* Even though we are not using scatter-gather, we look - * ahead and see if there is a linked request for the - * other half of this buffer. If there is, then satisfy - * it. */ - if((offset == 0) && good_sectors == 2 && - SCpnt->request.nr_sectors > good_sectors && - SCpnt->request.bh && - SCpnt->request.bh->b_reqnext && - SCpnt->request.bh->b_reqnext->b_size == 1024) { - memcpy((char *)SCpnt->request.bh->b_reqnext->b_data, - (char *)SCpnt->buffer + 1024, - 1024); - good_sectors += 2; - }; + SCpnt->sense_buffer[2] == ILLEGAL_REQUEST)) { + long error_sector = (SCpnt->sense_buffer[3] << 24) | + (SCpnt->sense_buffer[4] << 16) | + (SCpnt->sense_buffer[5] << 8) | + SCpnt->sense_buffer[6]; + int device_nr = DEVICE_NR(SCpnt->request.rq_dev); + if (SCpnt->request.bh != NULL) + block_sectors = SCpnt->request.bh->b_size >> 9; + if (block_sectors < 4) + block_sectors = 4; + if (scsi_CDs[device_nr].sector_size == 2048) + error_sector <<= 2; + error_sector &= ~(block_sectors - 1); + good_sectors = error_sector - SCpnt->request.sector; + if (good_sectors < 0 || good_sectors >= this_count) + good_sectors = 0; + /* + The SCSI specification allows for the value returned by READ + CAPACITY to be up to 75 2K sectors past the last readable + block. Therefore, if we hit a medium error within the last + 75 2K sectors, we decrease the saved size value. + */ + if ((error_sector >> 1) < sr_sizes[device_nr] && + scsi_CDs[device_nr].capacity - error_sector < 4 * 75) + sr_sizes[device_nr] = error_sector >> 1; + } + if (good_sectors > 0) { /* Some sectors were read successfully. */ + if (SCpnt->use_sg == 0) { + if (SCpnt->buffer != SCpnt->request.buffer) { + int offset; + offset = (SCpnt->request.sector % 4) << 9; + memcpy((char *) SCpnt->request.buffer, + (char *) SCpnt->buffer + offset, + good_sectors << 9); + /* Even though we are not using scatter-gather, we look + * ahead and see if there is a linked request for the + * other half of this buffer. If there is, then satisfy + * it. */ + if ((offset == 0) && good_sectors == 2 && + SCpnt->request.nr_sectors > good_sectors && + SCpnt->request.bh && + SCpnt->request.bh->b_reqnext && + SCpnt->request.bh->b_reqnext->b_size == 1024) { + memcpy((char *) SCpnt->request.bh->b_reqnext->b_data, + (char *) SCpnt->buffer + 1024, + 1024); + good_sectors += 2; + }; - scsi_free(SCpnt->buffer, 2048); - } - } else { - struct scatterlist * sgpnt; - int i; - sgpnt = (struct scatterlist *) SCpnt->buffer; - for(i=0; iuse_sg; i++) { - if (sgpnt[i].alt_address) { - if (sgpnt[i].alt_address != sgpnt[i].address) { - memcpy(sgpnt[i].alt_address, sgpnt[i].address, sgpnt[i].length); - }; - scsi_free(sgpnt[i].address, sgpnt[i].length); + scsi_free(SCpnt->buffer, 2048); + } + } else { + struct scatterlist *sgpnt; + int i; + sgpnt = (struct scatterlist *) SCpnt->buffer; + for (i = 0; i < SCpnt->use_sg; i++) { + if (sgpnt[i].alt_address) { + if (sgpnt[i].alt_address != sgpnt[i].address) { + memcpy(sgpnt[i].alt_address, sgpnt[i].address, sgpnt[i].length); + }; + scsi_free(sgpnt[i].address, sgpnt[i].length); + }; + }; + scsi_free(SCpnt->buffer, SCpnt->sglist_len); /* Free list of scatter-gather pointers */ + if (SCpnt->request.sector % 4) + good_sectors -= 2; + /* See if there is a padding record at the end that needs to be removed */ + if (good_sectors > SCpnt->request.nr_sectors) + good_sectors -= 2; }; - }; - scsi_free(SCpnt->buffer, SCpnt->sglist_len); /* Free list of scatter-gather pointers */ - if(SCpnt->request.sector % 4) good_sectors -= 2; - /* See if there is a padding record at the end that needs to be removed */ - if(good_sectors > SCpnt->request.nr_sectors) - good_sectors -= 2; - }; #ifdef DEBUG - printk("(%x %x %x) ",SCpnt->request.bh, SCpnt->request.nr_sectors, + printk("(%x %x %x) ", SCpnt->request.bh, SCpnt->request.nr_sectors, good_sectors); #endif - if (SCpnt->request.nr_sectors > this_count) - { + if (SCpnt->request.nr_sectors > this_count) { SCpnt->request.errors = 0; if (!SCpnt->request.bh) - panic("sr.c: linked page request (%lx %x)", - SCpnt->request.sector, this_count); - } - - SCpnt = end_scsi_request(SCpnt, 1, good_sectors); /* All done */ - if (result == 0) - { - requeue_sr_request(SCpnt); - return; - } - } - - if (good_sectors == 0) { - /* We only come through here if no sectors were read successfully. */ - - /* Free up any indirection buffers we allocated for DMA purposes. */ - if (SCpnt->use_sg) { - struct scatterlist * sgpnt; - int i; - sgpnt = (struct scatterlist *) SCpnt->buffer; - for(i=0; iuse_sg; i++) { - if (sgpnt[i].alt_address) { - scsi_free(sgpnt[i].address, sgpnt[i].length); - } - } - scsi_free(SCpnt->buffer, SCpnt->sglist_len); /* Free list of scatter-gather pointers */ - } else { - if (SCpnt->buffer != SCpnt->request.buffer) - scsi_free(SCpnt->buffer, SCpnt->bufflen); + panic("sr.c: linked page request (%lx %x)", + SCpnt->request.sector, this_count); + } + SCpnt = end_scsi_request(SCpnt, 1, good_sectors); /* All done */ + if (result == 0) { + requeue_sr_request(SCpnt); + return; + } } + if (good_sectors == 0) { + /* We only come through here if no sectors were read successfully. */ - } + /* Free up any indirection buffers we allocated for DMA purposes. */ + if (SCpnt->use_sg) { + struct scatterlist *sgpnt; + int i; + sgpnt = (struct scatterlist *) SCpnt->buffer; + for (i = 0; i < SCpnt->use_sg; i++) { + if (sgpnt[i].alt_address) { + scsi_free(sgpnt[i].address, sgpnt[i].length); + } + } + scsi_free(SCpnt->buffer, SCpnt->sglist_len); /* Free list of scatter-gather pointers */ + } else { + if (SCpnt->buffer != SCpnt->request.buffer) + scsi_free(SCpnt->buffer, SCpnt->bufflen); + } + } if (driver_byte(result) != 0) { if ((SCpnt->sense_buffer[0] & 0x7f) == 0x70) { if ((SCpnt->sense_buffer[2] & 0xf) == UNIT_ATTENTION) { /* detected disc change. set a bit and quietly refuse - * further access. */ + * further access. */ scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->changed = 1; SCpnt = end_scsi_request(SCpnt, 0, this_count); @@ -309,10 +314,9 @@ return; } } - if (SCpnt->sense_buffer[2] == ILLEGAL_REQUEST) { printk("sr%d: CD-ROM error: ", - DEVICE_NR(SCpnt->request.rq_dev)); + DEVICE_NR(SCpnt->request.rq_dev)); print_sense("sr", SCpnt); printk("command was: "); print_command(SCpnt->cmnd); @@ -323,95 +327,87 @@ return; } else { SCpnt = end_scsi_request(SCpnt, 0, this_count); - requeue_sr_request(SCpnt); /* Do next request */ + requeue_sr_request(SCpnt); /* Do next request */ return; } } - if (SCpnt->sense_buffer[2] == NOT_READY) { printk(KERN_INFO "sr%d: CD-ROM not ready. Make sure you have a disc in the drive.\n", - DEVICE_NR(SCpnt->request.rq_dev)); + DEVICE_NR(SCpnt->request.rq_dev)); SCpnt = end_scsi_request(SCpnt, 0, this_count); - requeue_sr_request(SCpnt); /* Do next request */ + requeue_sr_request(SCpnt); /* Do next request */ return; } - if (SCpnt->sense_buffer[2] == MEDIUM_ERROR) { - printk("scsi%d: MEDIUM ERROR on " - "channel %d, id %d, lun %d, CDB: ", - SCpnt->host->host_no, (int) SCpnt->channel, - (int) SCpnt->target, (int) SCpnt->lun); - print_command(SCpnt->cmnd); - print_sense("sr", SCpnt); - SCpnt = end_scsi_request(SCpnt, 0, block_sectors); - requeue_sr_request(SCpnt); - return; + printk("scsi%d: MEDIUM ERROR on " + "channel %d, id %d, lun %d, CDB: ", + SCpnt->host->host_no, (int) SCpnt->channel, + (int) SCpnt->target, (int) SCpnt->lun); + print_command(SCpnt->cmnd); + print_sense("sr", SCpnt); + SCpnt = end_scsi_request(SCpnt, 0, block_sectors); + requeue_sr_request(SCpnt); + return; } - if (SCpnt->sense_buffer[2] == VOLUME_OVERFLOW) { - printk("scsi%d: VOLUME OVERFLOW on " - "channel %d, id %d, lun %d, CDB: ", - SCpnt->host->host_no, (int) SCpnt->channel, - (int) SCpnt->target, (int) SCpnt->lun); - print_command(SCpnt->cmnd); - print_sense("sr", SCpnt); - SCpnt = end_scsi_request(SCpnt, 0, block_sectors); - requeue_sr_request(SCpnt); - return; + printk("scsi%d: VOLUME OVERFLOW on " + "channel %d, id %d, lun %d, CDB: ", + SCpnt->host->host_no, (int) SCpnt->channel, + (int) SCpnt->target, (int) SCpnt->lun); + print_command(SCpnt->cmnd); + print_sense("sr", SCpnt); + SCpnt = end_scsi_request(SCpnt, 0, block_sectors); + requeue_sr_request(SCpnt); + return; } - } - + } /* We only get this far if we have an error we have not recognized */ - if(result) { - printk("SCSI CD error : host %d id %d lun %d return code = %03x\n", - scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->host->host_no, - scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->id, - scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->lun, - result); - - if (status_byte(result) == CHECK_CONDITION) - print_sense("sr", SCpnt); - - SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.current_nr_sectors); - requeue_sr_request(SCpnt); - } + if (result) { + printk("SCSI CD error : host %d id %d lun %d return code = %03x\n", + scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->host->host_no, + scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->id, + scsi_CDs[DEVICE_NR(SCpnt->request.rq_dev)].device->lun, + result); + + if (status_byte(result) == CHECK_CONDITION) + print_sense("sr", SCpnt); + + SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.current_nr_sectors); + requeue_sr_request(SCpnt); + } } static int sr_open(struct cdrom_device_info *cdi, int purpose) { - check_disk_change(cdi->dev); + check_disk_change(cdi->dev); - if( MINOR(cdi->dev) >= sr_template.dev_max - || !scsi_CDs[MINOR(cdi->dev)].device) - { - return -ENXIO; /* No such device */ - } - - /* - * If the device is in error recovery, wait until it is done. - * If the device is offline, then disallow any access to it. - */ - if( !scsi_block_when_processing_errors(scsi_CDs[MINOR(cdi->dev)].device) ) - { - return -ENXIO; - } - - scsi_CDs[MINOR(cdi->dev)].device->access_count++; - if (scsi_CDs[MINOR(cdi->dev)].device->host->hostt->module) - __MOD_INC_USE_COUNT(scsi_CDs[MINOR(cdi->dev)].device->host->hostt->module); - if(sr_template.module) - __MOD_INC_USE_COUNT(sr_template.module); - - /* If this device did not have media in the drive at boot time, then - * we would have been unable to get the sector size. Check to see if - * this is the case, and try again. - */ + if (MINOR(cdi->dev) >= sr_template.dev_max + || !scsi_CDs[MINOR(cdi->dev)].device) { + return -ENXIO; /* No such device */ + } + /* + * If the device is in error recovery, wait until it is done. + * If the device is offline, then disallow any access to it. + */ + if (!scsi_block_when_processing_errors(scsi_CDs[MINOR(cdi->dev)].device)) { + return -ENXIO; + } + scsi_CDs[MINOR(cdi->dev)].device->access_count++; + if (scsi_CDs[MINOR(cdi->dev)].device->host->hostt->module) + __MOD_INC_USE_COUNT(scsi_CDs[MINOR(cdi->dev)].device->host->hostt->module); + if (sr_template.module) + __MOD_INC_USE_COUNT(sr_template.module); + + /* If this device did not have media in the drive at boot time, then + * we would have been unable to get the sector size. Check to see if + * this is the case, and try again. + */ - if(scsi_CDs[MINOR(cdi->dev)].needs_sector_size) - get_sectorsize(MINOR(cdi->dev)); + if (scsi_CDs[MINOR(cdi->dev)].needs_sector_size) + get_sectorsize(MINOR(cdi->dev)); - return 0; + return 0; } /* @@ -420,111 +416,106 @@ * translate them to SCSI commands. */ -static void do_sr_request (void) +static void do_sr_request(void) { - Scsi_Cmnd * SCpnt = NULL; - struct request * req = NULL; - Scsi_Device * SDev; - int flag = 0; - - while (1==1){ - if (CURRENT != NULL && CURRENT->rq_status == RQ_INACTIVE) { - return; - }; + Scsi_Cmnd *SCpnt = NULL; + struct request *req = NULL; + Scsi_Device *SDev; + int flag = 0; - INIT_SCSI_REQUEST; + while (1 == 1) { + if (CURRENT != NULL && CURRENT->rq_status == RQ_INACTIVE) { + return; + }; - SDev = scsi_CDs[DEVICE_NR(CURRENT->rq_dev)].device; + INIT_SCSI_REQUEST; - /* - * If the host for this device is in error recovery mode, don't - * do anything at all here. When the host leaves error recovery - * mode, it will automatically restart things and start queueing - * commands again. - */ - if( SDev->host->in_recovery ) - { - return; - } + SDev = scsi_CDs[DEVICE_NR(CURRENT->rq_dev)].device; - /* - * I am not sure where the best place to do this is. We need - * to hook in a place where we are likely to come if in user - * space. - */ - if( SDev->was_reset ) - { - /* - * We need to relock the door, but we might - * be in an interrupt handler. Only do this - * from user space, since we do not want to - * sleep from an interrupt. - */ - if( SDev->removable && !in_interrupt() ) - { - spin_unlock_irq(&io_request_lock); /* FIXME!!!! */ - scsi_ioctl(SDev, SCSI_IOCTL_DOORLOCK, 0); - spin_lock_irq(&io_request_lock); /* FIXME!!!! */ - /* scsi_ioctl may allow CURRENT to change, so start over. */ - SDev->was_reset = 0; - continue; - } - SDev->was_reset = 0; - } - - /* we do lazy blocksize switching (when reading XA sectors, - * see CDROMREADMODE2 ioctl) */ - if (scsi_CDs[DEVICE_NR(CURRENT->rq_dev)].sector_size > 2048) { - if (!in_interrupt()) - sr_set_blocklength(DEVICE_NR(CURRENT->rq_dev),2048); + /* + * If the host for this device is in error recovery mode, don't + * do anything at all here. When the host leaves error recovery + * mode, it will automatically restart things and start queueing + * commands again. + */ + if (SDev->host->in_recovery) { + return; + } + /* + * I am not sure where the best place to do this is. We need + * to hook in a place where we are likely to come if in user + * space. + */ + if (SDev->was_reset) { + /* + * We need to relock the door, but we might + * be in an interrupt handler. Only do this + * from user space, since we do not want to + * sleep from an interrupt. + */ + if (SDev->removable && !in_interrupt()) { + spin_unlock_irq(&io_request_lock); /* FIXME!!!! */ + scsi_ioctl(SDev, SCSI_IOCTL_DOORLOCK, 0); + spin_lock_irq(&io_request_lock); /* FIXME!!!! */ + /* scsi_ioctl may allow CURRENT to change, so start over. */ + SDev->was_reset = 0; + continue; + } + SDev->was_reset = 0; + } + /* we do lazy blocksize switching (when reading XA sectors, + * see CDROMREADMODE2 ioctl) */ + if (scsi_CDs[DEVICE_NR(CURRENT->rq_dev)].sector_size > 2048) { + if (!in_interrupt()) + sr_set_blocklength(DEVICE_NR(CURRENT->rq_dev), 2048); #if 1 - else - printk("sr: can't switch blocksize: in interrupt\n"); + else + printk("sr: can't switch blocksize: in interrupt\n"); #endif - } - - if (flag++ == 0) - SCpnt = scsi_allocate_device(&CURRENT, - scsi_CDs[DEVICE_NR(CURRENT->rq_dev)].device, 0); - else SCpnt = NULL; - - /* This is a performance enhancement. We dig down into the request list and - * try to find a queueable request (i.e. device not busy, and host able to - * accept another command. If we find one, then we queue it. This can - * make a big difference on systems with more than one disk drive. We want - * to have the interrupts off when monkeying with the request list, because - * otherwise the kernel might try to slip in a request in between somewhere. */ - - if (!SCpnt && sr_template.nr_dev > 1){ - struct request *req1; - req1 = NULL; - req = CURRENT; - while(req){ - SCpnt = scsi_request_queueable(req, - scsi_CDs[DEVICE_NR(req->rq_dev)].device); - if(SCpnt) break; - req1 = req; - req = req->next; - } - if (SCpnt && req->rq_status == RQ_INACTIVE) { - if (req == CURRENT) - CURRENT = CURRENT->next; + } + if (flag++ == 0) + SCpnt = scsi_allocate_device(&CURRENT, + scsi_CDs[DEVICE_NR(CURRENT->rq_dev)].device, 0); else - req1->next = req->next; - } - } + SCpnt = NULL; - if (!SCpnt) - return; /* Could not find anything to do */ + /* This is a performance enhancement. We dig down into the request list and + * try to find a queueable request (i.e. device not busy, and host able to + * accept another command. If we find one, then we queue it. This can + * make a big difference on systems with more than one disk drive. We want + * to have the interrupts off when monkeying with the request list, because + * otherwise the kernel might try to slip in a request in between somewhere. */ + + if (!SCpnt && sr_template.nr_dev > 1) { + struct request *req1; + req1 = NULL; + req = CURRENT; + while (req) { + SCpnt = scsi_request_queueable(req, + scsi_CDs[DEVICE_NR(req->rq_dev)].device); + if (SCpnt) + break; + req1 = req; + req = req->next; + } + if (SCpnt && req->rq_status == RQ_INACTIVE) { + if (req == CURRENT) + CURRENT = CURRENT->next; + else + req1->next = req->next; + } + } + if (!SCpnt) + return; /* Could not find anything to do */ - wake_up(&wait_for_request); + wake_up(&wait_for_request); - /* Queue command */ - requeue_sr_request(SCpnt); - } /* While */ + /* Queue command */ + requeue_sr_request(SCpnt); + } /* While */ } -void requeue_sr_request (Scsi_Cmnd * SCpnt) +void requeue_sr_request(Scsi_Cmnd * SCpnt) { unsigned int dev, block, realcount; unsigned char cmd[10], *buffer, tries; @@ -532,244 +523,234 @@ tries = 2; - repeat: - if(!SCpnt || SCpnt->request.rq_status == RQ_INACTIVE) { +repeat: + if (!SCpnt || SCpnt->request.rq_status == RQ_INACTIVE) { do_sr_request(); return; } - - dev = MINOR(SCpnt->request.rq_dev); + dev = MINOR(SCpnt->request.rq_dev); block = SCpnt->request.sector; buffer = NULL; this_count = 0; if (dev >= sr_template.nr_dev) { - /* printk("CD-ROM request error: invalid device.\n"); */ + /* printk("CD-ROM request error: invalid device.\n"); */ SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); tries = 2; goto repeat; } - if (!scsi_CDs[dev].use) { - /* printk("CD-ROM request error: device marked not in use.\n"); */ + /* printk("CD-ROM request error: device marked not in use.\n"); */ + SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); + tries = 2; + goto repeat; + } + if (!scsi_CDs[dev].device->online) { SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); tries = 2; goto repeat; } - - if( !scsi_CDs[dev].device->online ) - { - SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); - tries = 2; - goto repeat; - } - if (scsi_CDs[dev].device->changed) { - /* - * quietly refuse to do anything to a changed disc - * until the changed bit has been reset - */ - /* printk("CD-ROM has been changed. Prohibiting further I/O.\n"); */ + /* + * quietly refuse to do anything to a changed disc + * until the changed bit has been reset + */ + /* printk("CD-ROM has been changed. Prohibiting further I/O.\n"); */ SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); tries = 2; goto repeat; } - - switch (SCpnt->request.cmd) - { - case WRITE: - SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); - goto repeat; - break; - case READ : - cmd[0] = READ_6; - break; - default : - panic ("Unknown sr command %d\n", SCpnt->request.cmd); - } + switch (SCpnt->request.cmd) { + case WRITE: + SCpnt = end_scsi_request(SCpnt, 0, SCpnt->request.nr_sectors); + goto repeat; + break; + case READ: + cmd[0] = READ_6; + break; + default: + panic("Unknown sr command %d\n", SCpnt->request.cmd); + } cmd[1] = (SCpnt->lun << 5) & 0xe0; - /* - * Now do the grungy work of figuring out which sectors we need, and - * where in memory we are going to put them. - * - * The variables we need are: - * - * this_count= number of 512 byte sectors being read - * block = starting cdrom sector to read. - * realcount = # of cdrom sectors to read - * - * The major difference between a scsi disk and a scsi cdrom - * is that we will always use scatter-gather if we can, because we can - * work around the fact that the buffer cache has a block size of 1024, - * and we have 2048 byte sectors. This code should work for buffers that - * are any multiple of 512 bytes long. - */ + /* + * Now do the grungy work of figuring out which sectors we need, and + * where in memory we are going to put them. + * + * The variables we need are: + * + * this_count= number of 512 byte sectors being read + * block = starting cdrom sector to read. + * realcount = # of cdrom sectors to read + * + * The major difference between a scsi disk and a scsi cdrom + * is that we will always use scatter-gather if we can, because we can + * work around the fact that the buffer cache has a block size of 1024, + * and we have 2048 byte sectors. This code should work for buffers that + * are any multiple of 512 bytes long. + */ SCpnt->use_sg = 0; if (SCpnt->host->sg_tablesize > 0 && (!scsi_need_isa_buffer || - scsi_dma_free_sectors >= 10)) { - struct buffer_head * bh; - struct scatterlist * sgpnt; - int count, this_count_max; - bh = SCpnt->request.bh; - this_count = 0; - count = 0; - this_count_max = (scsi_CDs[dev].ten ? 0xffff : 0xff) << 4; - /* Calculate how many links we can use. First see if we need - * a padding record at the start */ - this_count = SCpnt->request.sector % 4; - if(this_count) count++; - while(bh && count < SCpnt->host->sg_tablesize) { - if ((this_count + (bh->b_size >> 9)) > this_count_max) break; - this_count += (bh->b_size >> 9); - count++; - bh = bh->b_reqnext; - }; - /* Fix up in case of an odd record at the end */ - end_rec = 0; - if(this_count % 4) { - if (count < SCpnt->host->sg_tablesize) { - count++; - end_rec = (4 - (this_count % 4)) << 9; - this_count += 4 - (this_count % 4); - } else { - count--; - this_count -= (this_count % 4); - }; - }; - SCpnt->use_sg = count; /* Number of chains */ - /* scsi_malloc can only allocate in chunks of 512 bytes */ - count = (SCpnt->use_sg * sizeof(struct scatterlist) + 511) & ~511; - - SCpnt->sglist_len = count; - sgpnt = (struct scatterlist * ) scsi_malloc(count); - if (!sgpnt) { - printk("Warning - running *really* short on DMA buffers\n"); - SCpnt->use_sg = 0; /* No memory left - bail out */ - } else { - buffer = (unsigned char *) sgpnt; - count = 0; - bh = SCpnt->request.bh; - if(SCpnt->request.sector % 4) { - sgpnt[count].length = (SCpnt->request.sector % 4) << 9; - sgpnt[count].address = (char *) scsi_malloc(sgpnt[count].length); - if(!sgpnt[count].address) panic("SCSI DMA pool exhausted."); - sgpnt[count].alt_address = sgpnt[count].address; /* Flag to delete - if needed */ - count++; - }; - for(bh = SCpnt->request.bh; count < SCpnt->use_sg; - count++, bh = bh->b_reqnext) { - if (bh) { /* Need a placeholder at the end of the record? */ - sgpnt[count].address = bh->b_data; - sgpnt[count].length = bh->b_size; - sgpnt[count].alt_address = NULL; - } else { - sgpnt[count].address = (char *) scsi_malloc(end_rec); - if(!sgpnt[count].address) panic("SCSI DMA pool exhausted."); - sgpnt[count].length = end_rec; - sgpnt[count].alt_address = sgpnt[count].address; - if (count+1 != SCpnt->use_sg) panic("Bad sr request list"); - break; + scsi_dma_free_sectors >= 10)) { + struct buffer_head *bh; + struct scatterlist *sgpnt; + int count, this_count_max; + bh = SCpnt->request.bh; + this_count = 0; + count = 0; + this_count_max = (scsi_CDs[dev].ten ? 0xffff : 0xff) << 4; + /* Calculate how many links we can use. First see if we need + * a padding record at the start */ + this_count = SCpnt->request.sector % 4; + if (this_count) + count++; + while (bh && count < SCpnt->host->sg_tablesize) { + if ((this_count + (bh->b_size >> 9)) > this_count_max) + break; + this_count += (bh->b_size >> 9); + count++; + bh = bh->b_reqnext; }; - if (virt_to_phys(sgpnt[count].address) + sgpnt[count].length - 1 > - ISA_DMA_THRESHOLD && SCpnt->host->unchecked_isa_dma) { - sgpnt[count].alt_address = sgpnt[count].address; - /* We try to avoid exhausting the DMA pool, since it is easier - * to control usage here. In other places we might have a more - * pressing need, and we would be screwed if we ran out */ - if(scsi_dma_free_sectors < (sgpnt[count].length >> 9) + 5) { - sgpnt[count].address = NULL; - } else { - sgpnt[count].address = (char *) scsi_malloc(sgpnt[count].length); - }; - /* If we start running low on DMA buffers, we abort the scatter-gather - * operation, and free all of the memory we have allocated. We want to - * ensure that all scsi operations are able to do at least a non-scatter/gather - * operation */ - if(sgpnt[count].address == NULL){ /* Out of dma memory */ - printk("Warning: Running low on SCSI DMA buffers\n"); - /* Try switching back to a non scatter-gather operation. */ - while(--count >= 0){ - if(sgpnt[count].alt_address) - scsi_free(sgpnt[count].address, sgpnt[count].length); + /* Fix up in case of an odd record at the end */ + end_rec = 0; + if (this_count % 4) { + if (count < SCpnt->host->sg_tablesize) { + count++; + end_rec = (4 - (this_count % 4)) << 9; + this_count += 4 - (this_count % 4); + } else { + count--; + this_count -= (this_count % 4); }; - SCpnt->use_sg = 0; - scsi_free(buffer, SCpnt->sglist_len); - break; - }; /* if address == NULL */ - }; /* if need DMA fixup */ - }; /* for loop to fill list */ + }; + SCpnt->use_sg = count; /* Number of chains */ + /* scsi_malloc can only allocate in chunks of 512 bytes */ + count = (SCpnt->use_sg * sizeof(struct scatterlist) + 511) & ~511; + + SCpnt->sglist_len = count; + sgpnt = (struct scatterlist *) scsi_malloc(count); + if (!sgpnt) { + printk("Warning - running *really* short on DMA buffers\n"); + SCpnt->use_sg = 0; /* No memory left - bail out */ + } else { + buffer = (unsigned char *) sgpnt; + count = 0; + bh = SCpnt->request.bh; + if (SCpnt->request.sector % 4) { + sgpnt[count].length = (SCpnt->request.sector % 4) << 9; + sgpnt[count].address = (char *) scsi_malloc(sgpnt[count].length); + if (!sgpnt[count].address) + panic("SCSI DMA pool exhausted."); + sgpnt[count].alt_address = sgpnt[count].address; /* Flag to delete + if needed */ + count++; + }; + for (bh = SCpnt->request.bh; count < SCpnt->use_sg; + count++, bh = bh->b_reqnext) { + if (bh) { /* Need a placeholder at the end of the record? */ + sgpnt[count].address = bh->b_data; + sgpnt[count].length = bh->b_size; + sgpnt[count].alt_address = NULL; + } else { + sgpnt[count].address = (char *) scsi_malloc(end_rec); + if (!sgpnt[count].address) + panic("SCSI DMA pool exhausted."); + sgpnt[count].length = end_rec; + sgpnt[count].alt_address = sgpnt[count].address; + if (count + 1 != SCpnt->use_sg) + panic("Bad sr request list"); + break; + }; + if (virt_to_phys(sgpnt[count].address) + sgpnt[count].length - 1 > + ISA_DMA_THRESHOLD && SCpnt->host->unchecked_isa_dma) { + sgpnt[count].alt_address = sgpnt[count].address; + /* We try to avoid exhausting the DMA pool, since it is easier + * to control usage here. In other places we might have a more + * pressing need, and we would be screwed if we ran out */ + if (scsi_dma_free_sectors < (sgpnt[count].length >> 9) + 5) { + sgpnt[count].address = NULL; + } else { + sgpnt[count].address = (char *) scsi_malloc(sgpnt[count].length); + }; + /* If we start running low on DMA buffers, we abort the scatter-gather + * operation, and free all of the memory we have allocated. We want to + * ensure that all scsi operations are able to do at least a non-scatter/gather + * operation */ + if (sgpnt[count].address == NULL) { /* Out of dma memory */ + printk("Warning: Running low on SCSI DMA buffers\n"); + /* Try switching back to a non scatter-gather operation. */ + while (--count >= 0) { + if (sgpnt[count].alt_address) + scsi_free(sgpnt[count].address, sgpnt[count].length); + }; + SCpnt->use_sg = 0; + scsi_free(buffer, SCpnt->sglist_len); + break; + }; /* if address == NULL */ + }; /* if need DMA fixup */ + }; /* for loop to fill list */ #ifdef DEBUG - printk("SR: %d %d %d %d %d *** ",SCpnt->use_sg, SCpnt->request.sector, - this_count, - SCpnt->request.current_nr_sectors, - SCpnt->request.nr_sectors); - for(count=0; countuse_sg; count++) - printk("SGlist: %d %x %x %x\n", count, - sgpnt[count].address, - sgpnt[count].alt_address, - sgpnt[count].length); + printk("SR: %d %d %d %d %d *** ", SCpnt->use_sg, SCpnt->request.sector, + this_count, + SCpnt->request.current_nr_sectors, + SCpnt->request.nr_sectors); + for (count = 0; count < SCpnt->use_sg; count++) + printk("SGlist: %d %x %x %x\n", count, + sgpnt[count].address, + sgpnt[count].alt_address, + sgpnt[count].length); #endif - }; /* Able to allocate scatter-gather list */ + }; /* Able to allocate scatter-gather list */ }; - if (SCpnt->use_sg == 0){ - /* We cannot use scatter-gather. Do this the old fashion way */ - if (!SCpnt->request.bh) - this_count = SCpnt->request.nr_sectors; - else - this_count = (SCpnt->request.bh->b_size >> 9); + if (SCpnt->use_sg == 0) { + /* We cannot use scatter-gather. Do this the old fashion way */ + if (!SCpnt->request.bh) + this_count = SCpnt->request.nr_sectors; + else + this_count = (SCpnt->request.bh->b_size >> 9); - start = block % 4; - if (start) - { - this_count = ((this_count > 4 - start) ? - (4 - start) : (this_count)); - buffer = (unsigned char *) scsi_malloc(2048); - } - else if (this_count < 4) - { - buffer = (unsigned char *) scsi_malloc(2048); - } - else - { - this_count -= this_count % 4; - buffer = (unsigned char *) SCpnt->request.buffer; - if (virt_to_phys(buffer) + (this_count << 9) > ISA_DMA_THRESHOLD && - SCpnt->host->unchecked_isa_dma) - buffer = (unsigned char *) scsi_malloc(this_count << 9); - } + start = block % 4; + if (start) { + this_count = ((this_count > 4 - start) ? + (4 - start) : (this_count)); + buffer = (unsigned char *) scsi_malloc(2048); + } else if (this_count < 4) { + buffer = (unsigned char *) scsi_malloc(2048); + } else { + this_count -= this_count % 4; + buffer = (unsigned char *) SCpnt->request.buffer; + if (virt_to_phys(buffer) + (this_count << 9) > ISA_DMA_THRESHOLD && + SCpnt->host->unchecked_isa_dma) + buffer = (unsigned char *) scsi_malloc(this_count << 9); + } }; if (scsi_CDs[dev].sector_size == 2048) - block = block >> 2; /* These are the sectors that the cdrom uses */ + block = block >> 2; /* These are the sectors that the cdrom uses */ else - block = block & 0xfffffffc; + block = block & 0xfffffffc; realcount = (this_count + 3) / 4; - if (scsi_CDs[dev].sector_size == 512) realcount = realcount << 2; + if (scsi_CDs[dev].sector_size == 512) + realcount = realcount << 2; - /* - * Note: The scsi standard says that READ_6 is *optional*, while - * READ_10 is mandatory. Thus there is no point in using - * READ_6. - */ - if (scsi_CDs[dev].ten) - - { - if (realcount > 0xffff) - { + /* + * Note: The scsi standard says that READ_6 is *optional*, while + * READ_10 is mandatory. Thus there is no point in using + * READ_6. + */ + if (scsi_CDs[dev].ten) { + if (realcount > 0xffff) { realcount = 0xffff; this_count = realcount * (scsi_CDs[dev].sector_size >> 9); - } - - cmd[0] += READ_10 - READ_6 ; + } + cmd[0] += READ_10 - READ_6; cmd[2] = (unsigned char) (block >> 24) & 0xff; cmd[3] = (unsigned char) (block >> 16) & 0xff; cmd[4] = (unsigned char) (block >> 8) & 0xff; @@ -777,164 +758,174 @@ cmd[6] = cmd[9] = 0; cmd[7] = (unsigned char) (realcount >> 8) & 0xff; cmd[8] = (unsigned char) realcount & 0xff; - } - else - { - if (realcount > 0xff) - { - realcount = 0xff; - this_count = realcount * (scsi_CDs[dev].sector_size >> 9); + } else { + if (realcount > 0xff) { + realcount = 0xff; + this_count = realcount * (scsi_CDs[dev].sector_size >> 9); + } + cmd[1] |= (unsigned char) ((block >> 16) & 0x1f); + cmd[2] = (unsigned char) ((block >> 8) & 0xff); + cmd[3] = (unsigned char) block & 0xff; + cmd[4] = (unsigned char) realcount; + cmd[5] = 0; } - cmd[1] |= (unsigned char) ((block >> 16) & 0x1f); - cmd[2] = (unsigned char) ((block >> 8) & 0xff); - cmd[3] = (unsigned char) block & 0xff; - cmd[4] = (unsigned char) realcount; - cmd[5] = 0; - } - #ifdef DEBUG - { - int i; - printk("ReadCD: %d %d %d %d\n",block, realcount, buffer, this_count); - printk("Use sg: %d\n", SCpnt->use_sg); - printk("Dumping command: "); - for(i=0; i<12; i++) printk("%2.2x ", cmd[i]); - printk("\n"); - }; + { + int i; + printk("ReadCD: %d %d %d %d\n", block, realcount, buffer, this_count); + printk("Use sg: %d\n", SCpnt->use_sg); + printk("Dumping command: "); + for (i = 0; i < 12; i++) + printk("%2.2x ", cmd[i]); + printk("\n"); + }; #endif - /* Some dumb host adapters can speed transfers by knowing the - * minimum transfersize in advance. - * - * We shouldn't disconnect in the middle of a sector, but the cdrom - * sector size can be larger than the size of a buffer and the - * transfer may be split to the size of a buffer. So it's safe to - * assume that we can at least transfer the minimum of the buffer - * size (1024) and the sector size between each connect / disconnect. - */ + /* Some dumb host adapters can speed transfers by knowing the + * minimum transfersize in advance. + * + * We shouldn't disconnect in the middle of a sector, but the cdrom + * sector size can be larger than the size of a buffer and the + * transfer may be split to the size of a buffer. So it's safe to + * assume that we can at least transfer the minimum of the buffer + * size (1024) and the sector size between each connect / disconnect. + */ - SCpnt->transfersize = (scsi_CDs[dev].sector_size > 1024) ? - 1024 : scsi_CDs[dev].sector_size; + SCpnt->transfersize = (scsi_CDs[dev].sector_size > 1024) ? + 1024 : scsi_CDs[dev].sector_size; SCpnt->this_count = this_count; - scsi_do_cmd (SCpnt, (void *) cmd, buffer, - realcount * scsi_CDs[dev].sector_size, - rw_intr, SR_TIMEOUT, MAX_RETRIES); + scsi_do_cmd(SCpnt, (void *) cmd, buffer, + realcount * scsi_CDs[dev].sector_size, + rw_intr, SR_TIMEOUT, MAX_RETRIES); } -static int sr_detect(Scsi_Device * SDp){ +static int sr_detect(Scsi_Device * SDp) +{ - if(SDp->type != TYPE_ROM && SDp->type != TYPE_WORM) return 0; + if (SDp->type != TYPE_ROM && SDp->type != TYPE_WORM) + return 0; - printk("Detected scsi CD-ROM sr%d at scsi%d, channel %d, id %d, lun %d\n", - sr_template.dev_noticed++, - SDp->host->host_no, SDp->channel, SDp->id, SDp->lun); + printk("Detected scsi CD-ROM sr%d at scsi%d, channel %d, id %d, lun %d\n", + sr_template.dev_noticed++, + SDp->host->host_no, SDp->channel, SDp->id, SDp->lun); - return 1; + return 1; } -static int sr_attach(Scsi_Device * SDp){ - Scsi_CD * cpnt; - int i; - - if(SDp->type != TYPE_ROM && SDp->type != TYPE_WORM) return 1; - - if (sr_template.nr_dev >= sr_template.dev_max) - { - SDp->attached--; - return 1; - } +static int sr_attach(Scsi_Device * SDp) +{ + Scsi_CD *cpnt; + int i; - for(cpnt = scsi_CDs, i=0; idevice) break; + if (SDp->type != TYPE_ROM && SDp->type != TYPE_WORM) + return 1; - if(i >= sr_template.dev_max) panic ("scsi_devices corrupt (sr)"); + if (sr_template.nr_dev >= sr_template.dev_max) { + SDp->attached--; + return 1; + } + for (cpnt = scsi_CDs, i = 0; i < sr_template.dev_max; i++, cpnt++) + if (!cpnt->device) + break; + + if (i >= sr_template.dev_max) + panic("scsi_devices corrupt (sr)"); - SDp->scsi_request_fn = do_sr_request; - scsi_CDs[i].device = SDp; + SDp->scsi_request_fn = do_sr_request; + scsi_CDs[i].device = SDp; - sr_template.nr_dev++; - if(sr_template.nr_dev > sr_template.dev_max) - panic ("scsi_devices corrupt (sr)"); - return 0; + sr_template.nr_dev++; + if (sr_template.nr_dev > sr_template.dev_max) + panic("scsi_devices corrupt (sr)"); + return 0; } -static void sr_init_done (Scsi_Cmnd * SCpnt) +static void sr_init_done(Scsi_Cmnd * SCpnt) { - struct request * req; + struct request *req; - req = &SCpnt->request; - req->rq_status = RQ_SCSI_DONE; /* Busy, but indicate request done */ + req = &SCpnt->request; + req->rq_status = RQ_SCSI_DONE; /* Busy, but indicate request done */ - if (req->sem != NULL) { - up(req->sem); - } + if (req->sem != NULL) { + up(req->sem); + } } -void get_sectorsize(int i){ - unsigned char cmd[10]; - unsigned char *buffer; - int the_result, retries; - Scsi_Cmnd * SCpnt; - unsigned long flags; - - buffer = (unsigned char *) scsi_malloc(512); - SCpnt = scsi_allocate_device(NULL, scsi_CDs[i].device, 1); - - retries = 3; - do { - cmd[0] = READ_CAPACITY; - cmd[1] = (scsi_CDs[i].device->lun << 5) & 0xe0; - memset ((void *) &cmd[2], 0, 8); - SCpnt->request.rq_status = RQ_SCSI_BUSY; /* Mark as really busy */ - SCpnt->cmd_len = 0; +void get_sectorsize(int i) +{ + unsigned char cmd[10]; + unsigned char *buffer; + int the_result, retries; + Scsi_Cmnd *SCpnt; + unsigned long flags; + + spin_lock_irq(&io_request_lock); + buffer = (unsigned char *) scsi_malloc(512); + SCpnt = scsi_allocate_device(NULL, scsi_CDs[i].device, 1); + spin_unlock_irq(&io_request_lock); + + retries = 3; + do { + cmd[0] = READ_CAPACITY; + cmd[1] = (scsi_CDs[i].device->lun << 5) & 0xe0; + memset((void *) &cmd[2], 0, 8); + SCpnt->request.rq_status = RQ_SCSI_BUSY; /* Mark as really busy */ + SCpnt->cmd_len = 0; + + memset(buffer, 0, 8); + + /* Do the command and wait.. */ + { + struct semaphore sem = MUTEX_LOCKED; + SCpnt->request.sem = &sem; + spin_lock_irqsave(&io_request_lock, flags); + scsi_do_cmd (SCpnt, + (void *) cmd, (void *) buffer, + 512, sr_init_done, SR_TIMEOUT, + MAX_RETRIES); + spin_unlock_irqrestore(&io_request_lock, flags); + down(&sem); + } - memset(buffer, 0, 8); + the_result = SCpnt->result; + retries--; - /* Do the command and wait.. */ - { - struct semaphore sem = MUTEX_LOCKED; - SCpnt->request.sem = &sem; - spin_lock_irqsave(&io_request_lock, flags); - scsi_do_cmd (SCpnt, - (void *) cmd, (void *) buffer, - 512, sr_init_done, SR_TIMEOUT, - MAX_RETRIES); - spin_unlock_irqrestore(&io_request_lock, flags); - down(&sem); - } - - the_result = SCpnt->result; - retries--; - - } while(the_result && retries); - - - wake_up(&SCpnt->device->device_wait); - scsi_release_command(SCpnt); - SCpnt = NULL; - - if (the_result) { - scsi_CDs[i].capacity = 0x1fffff; - scsi_CDs[i].sector_size = 2048; /* A guess, just in case */ - scsi_CDs[i].needs_sector_size = 1; - } else { - scsi_CDs[i].capacity = 1 + ((buffer[0] << 24) | - (buffer[1] << 16) | - (buffer[2] << 8) | - buffer[3]); - scsi_CDs[i].sector_size = (buffer[4] << 24) | - (buffer[5] << 16) | (buffer[6] << 8) | buffer[7]; - switch (scsi_CDs[i].sector_size) { - /* - * HP 4020i CD-Recorder reports 2340 byte sectors - * Philips CD-Writers report 2352 byte sectors - * - * Use 2k sectors for them.. - */ - case 0: case 2340: case 2352: + } while (the_result && retries); + + + wake_up(&SCpnt->device->device_wait); + scsi_release_command(SCpnt); + SCpnt = NULL; + + if (the_result) { + scsi_CDs[i].capacity = 0x1fffff; + scsi_CDs[i].sector_size = 2048; /* A guess, just in case */ + scsi_CDs[i].needs_sector_size = 1; + } else { +#if 0 + if (cdrom_get_last_written(MKDEV(MAJOR_NR, i), + (long *) &scsi_CDs[i].capacity)) +#endif + scsi_CDs[i].capacity = 1 + ((buffer[0] << 24) | + (buffer[1] << 16) | + (buffer[2] << 8) | + buffer[3]); + scsi_CDs[i].sector_size = (buffer[4] << 24) | + (buffer[5] << 16) | (buffer[6] << 8) | buffer[7]; + switch (scsi_CDs[i].sector_size) { + /* + * HP 4020i CD-Recorder reports 2340 byte sectors + * Philips CD-Writers report 2352 byte sectors + * + * Use 2k sectors for them.. + */ + case 0: + case 2340: + case 2352: scsi_CDs[i].sector_size = 2048; /* fall through */ case 2048: @@ -943,229 +934,334 @@ case 512: break; default: - printk ("sr%d: unsupported sector size %d.\n", - i, scsi_CDs[i].sector_size); + printk("sr%d: unsupported sector size %d.\n", + i, scsi_CDs[i].sector_size); scsi_CDs[i].capacity = 0; scsi_CDs[i].needs_sector_size = 1; - } + } - /* - * Add this so that we have the ability to correctly gauge - * what the device is capable of. - */ - scsi_CDs[i].needs_sector_size = 0; - sr_sizes[i] = scsi_CDs[i].capacity >> (BLOCK_SIZE_BITS - 9); - }; - scsi_free(buffer, 512); + /* + * Add this so that we have the ability to correctly gauge + * what the device is capable of. + */ + scsi_CDs[i].needs_sector_size = 0; + sr_sizes[i] = scsi_CDs[i].capacity >> (BLOCK_SIZE_BITS - 9); + }; + scsi_free(buffer, 512); } -void get_capabilities(int i){ - unsigned char cmd[6]; - unsigned char *buffer; - int rc,n; - - static char *loadmech[] = { - "caddy", - "tray", - "pop-up", - "", - "changer", - "changer", - "", - "" - }; - - buffer = (unsigned char *) scsi_malloc(512); - cmd[0] = MODE_SENSE; - cmd[1] = (scsi_CDs[i].device->lun << 5) & 0xe0; - cmd[2] = 0x2a; - cmd[4] = 128; - cmd[3] = cmd[5] = 0; - rc = sr_do_ioctl(i, cmd, buffer, 128, 1); - - if (-EINVAL == rc) { - /* failed, drive has'nt this mode page */ - scsi_CDs[i].cdi.speed = 1; - /* disable speed select, drive probably can't do this either */ - scsi_CDs[i].cdi.mask |= CDC_SELECT_SPEED; - } else { - n = buffer[3]+4; - scsi_CDs[i].cdi.speed = ((buffer[n+8] << 8) + buffer[n+9])/176; - scsi_CDs[i].readcd_known = 1; - scsi_CDs[i].readcd_cdda = buffer[n+5] & 0x01; - /* print some capability bits */ - printk("sr%i: scsi3-mmc drive: %dx/%dx %s%s%s%s%s\n",i, - ((buffer[n+14] << 8) + buffer[n+15])/176, - scsi_CDs[i].cdi.speed, - buffer[n+3]&0x01 ? "writer " : "", /* CD Writer */ - buffer[n+2]&0x02 ? "cd/rw " : "", /* can read rewriteable */ - buffer[n+4]&0x20 ? "xa/form2 " : "", /* can read xa/from2 */ - buffer[n+5]&0x01 ? "cdda " : "", /* can read audio data */ - loadmech[buffer[n+6]>>5]); - if ((buffer[n+6] >> 5) == 0) +void get_capabilities(int i) +{ + unsigned char cmd[6]; + unsigned char *buffer; + int rc, n; + + static char *loadmech[] = + { + "caddy", + "tray", + "pop-up", + "", + "changer", + "cartridge changer", + "", + "" + }; + + spin_lock_irq(&io_request_lock); + buffer = (unsigned char *) scsi_malloc(512); + spin_unlock_irq(&io_request_lock); + cmd[0] = MODE_SENSE; + cmd[1] = (scsi_CDs[i].device->lun << 5) & 0xe0; + cmd[2] = 0x2a; + cmd[4] = 128; + cmd[3] = cmd[5] = 0; + rc = sr_do_ioctl(i, cmd, buffer, 128, 1); + + if (-EINVAL == rc) { + /* failed, drive has'nt this mode page */ + scsi_CDs[i].cdi.speed = 1; + /* disable speed select, drive probably can't do this either */ + scsi_CDs[i].cdi.mask |= CDC_SELECT_SPEED; + scsi_free(buffer, 512); + return; + } + n = buffer[3] + 4; + scsi_CDs[i].cdi.speed = ((buffer[n + 8] << 8) + buffer[n + 9]) / 176; + scsi_CDs[i].readcd_known = 1; + scsi_CDs[i].readcd_cdda = buffer[n + 5] & 0x01; + /* print some capability bits */ + printk("sr%i: scsi3-mmc drive: %dx/%dx %s%s%s%s%s\n", i, + ((buffer[n + 14] << 8) + buffer[n + 15]) / 176, + scsi_CDs[i].cdi.speed, + buffer[n + 3] & 0x01 ? "writer " : "", /* CD Writer */ + buffer[n + 2] & 0x02 ? "cd/rw " : "", /* can read rewriteable */ + buffer[n + 4] & 0x20 ? "xa/form2 " : "", /* can read xa/from2 */ + buffer[n + 5] & 0x01 ? "cdda " : "", /* can read audio data */ + loadmech[buffer[n + 6] >> 5]); + if ((buffer[n + 6] >> 5) == 0) /* caddy drives can't close tray... */ - scsi_CDs[i].cdi.mask |= CDC_CLOSE_TRAY; - } - scsi_free(buffer, 512); + scsi_CDs[i].cdi.mask |= CDC_CLOSE_TRAY; + if ((buffer[n + 2] & 0x8) == 0) + /* not a DVD drive */ + scsi_CDs[i].cdi.mask |= CDC_DVD; + if ((buffer[n + 3] & 0x20) == 0) + /* can't write DVD-RAM media */ + scsi_CDs[i].cdi.mask |= CDC_DVD_RAM; + if ((buffer[n + 3] & 0x10) == 0) + /* can't write DVD-R media */ + scsi_CDs[i].cdi.mask |= CDC_DVD_R; + if ((buffer[n + 3] & 0x2) == 0) + /* can't write CD-RW media */ + scsi_CDs[i].cdi.mask |= CDC_CD_RW; + if ((buffer[n + 3] & 0x1) == 0) + /* can't write CD-R media */ + scsi_CDs[i].cdi.mask |= CDC_CD_R; + if ((buffer[n+6] & 0x8) == 0) + /* can't eject */ + scsi_CDs[i].cdi.mask |= CDC_OPEN_TRAY; + + if ((buffer[n+6] >> 5) == mechtype_individual_changer || + (buffer[n+6] >> 5) == mechtype_cartridge_changer) + scsi_CDs[i].cdi.capacity = + cdrom_number_of_slots(&(scsi_CDs[i].cdi)); + if (scsi_CDs[i].cdi.capacity <= 1) + /* not a changer */ + scsi_CDs[i].cdi.mask |= CDC_SELECT_DISC; + /*else I don't think it can close its tray + scsi_CDs[i].cdi.mask |= CDC_CLOSE_TRAY; */ + + + scsi_free(buffer, 512); +} + +/* + * sr_packet() is the entry point for the generic commands generated + * by the Uniform CD-ROM layer. + */ +static int sr_packet(struct cdrom_device_info *cdi, struct cdrom_generic_command *cgc) +{ + Scsi_Cmnd *SCpnt; + Scsi_Device *device = scsi_CDs[MINOR(cdi->dev)].device; + unsigned char *buffer = cgc->buffer; + unsigned long flags; + int buflen; + int stat; + + /* get the device */ + SCpnt = scsi_allocate_device(NULL, device, 1); + if (SCpnt == NULL) + return -ENODEV; /* this just doesn't seem right /axboe */ + + /* use buffer for ISA DMA */ + buflen = (cgc->buflen + 511) & ~511; + if (cgc->buffer && SCpnt->host->unchecked_isa_dma && + (virt_to_phys(cgc->buffer) + cgc->buflen - 1 > ISA_DMA_THRESHOLD)) { + spin_lock_irq(&io_request_lock); + buffer = scsi_malloc(buflen); + spin_unlock_irq(&io_request_lock); + if (buffer == NULL) { + printk("sr: SCSI DMA pool exhausted."); + return -ENOMEM; + } + memcpy(buffer, cgc->buffer, cgc->buflen); + } + + /* set the LUN */ + cgc->cmd[1] |= device->lun << 5; + + /* do the locking and issue the command */ + SCpnt->request.rq_dev = cdi->dev; + /* scsi_do_cmd sets the command length */ + SCpnt->cmd_len = 0; + + { + struct semaphore sem = MUTEX_LOCKED; + SCpnt->request.sem = &sem; + spin_lock_irqsave(&io_request_lock, flags); + scsi_do_cmd(SCpnt, (void *)cgc->cmd, (void *) buffer, + cgc->buflen, sr_init_done, SR_TIMEOUT, + MAX_RETRIES); + spin_unlock_irqrestore(&io_request_lock, flags); + down(&sem); + } + + stat = SCpnt->result; + + /* release */ + SCpnt->request.rq_dev = MKDEV(0, 0); + scsi_release_command(SCpnt); + SCpnt = NULL; + + /* write DMA buffer back if used */ + if (buffer && (buffer != cgc->buffer)) { + memcpy(cgc->buffer, buffer, cgc->buflen); + scsi_free(buffer, buflen); + } + + return stat; } static int sr_registered = 0; static int sr_init() { - int i; + int i; - if(sr_template.dev_noticed == 0) return 0; + if (sr_template.dev_noticed == 0) + return 0; - if(!sr_registered) { - if (register_blkdev(MAJOR_NR,"sr",&cdrom_fops)) { - printk("Unable to get major %d for SCSI-CD\n",MAJOR_NR); - return 1; + if (!sr_registered) { + if (register_blkdev(MAJOR_NR, "sr", &cdrom_fops)) { + printk("Unable to get major %d for SCSI-CD\n", MAJOR_NR); + return 1; + } + sr_registered++; } - sr_registered++; - } + if (scsi_CDs) + return 0; + sr_template.dev_max = + sr_template.dev_noticed + SR_EXTRA_DEVS; + scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD), GFP_ATOMIC); + memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD)); + sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC); + memset(sr_sizes, 0, sr_template.dev_max * sizeof(int)); - if (scsi_CDs) return 0; - sr_template.dev_max = - sr_template.dev_noticed + SR_EXTRA_DEVS; - scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD), GFP_ATOMIC); - memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD)); + sr_blocksizes = (int *) scsi_init_malloc(sr_template.dev_max * + sizeof(int), GFP_ATOMIC); - sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC); - memset(sr_sizes, 0, sr_template.dev_max * sizeof(int)); - - sr_blocksizes = (int *) scsi_init_malloc(sr_template.dev_max * - sizeof(int), GFP_ATOMIC); - - /* - * These are good guesses for the time being. - */ - for(i=0;ichanged = 1; /* force recheck CD type */ + for (i = 0; i < sr_template.nr_dev; ++i) { + /* If we have already seen this, then skip it. Comes up + * with loadable modules. */ + if (scsi_CDs[i].capacity) + continue; + scsi_CDs[i].capacity = 0x1fffff; + scsi_CDs[i].sector_size = 2048; /* A guess, just in case */ + scsi_CDs[i].needs_sector_size = 1; + scsi_CDs[i].device->changed = 1; /* force recheck CD type */ #if 0 - /* seems better to leave this for later */ - get_sectorsize(i); - printk("Scd sectorsize = %d bytes.\n", scsi_CDs[i].sector_size); + /* seems better to leave this for later */ + get_sectorsize(i); + printk("Scd sectorsize = %d bytes.\n", scsi_CDs[i].sector_size); #endif - scsi_CDs[i].use = 1; - scsi_CDs[i].ten = 1; - scsi_CDs[i].remap = 1; - scsi_CDs[i].readcd_known = 0; - scsi_CDs[i].readcd_cdda = 0; - sr_sizes[i] = scsi_CDs[i].capacity >> (BLOCK_SIZE_BITS - 9); - - scsi_CDs[i].cdi.ops = &sr_dops; - scsi_CDs[i].cdi.handle = &scsi_CDs[i]; - scsi_CDs[i].cdi.dev = MKDEV(MAJOR_NR,i); - scsi_CDs[i].cdi.mask = 0; - scsi_CDs[i].cdi.capacity = 1; - get_capabilities(i); - sr_vendor_init(i); - - sprintf(name, "sr%d", i); - strcpy(scsi_CDs[i].cdi.name, name); - register_cdrom(&scsi_CDs[i].cdi); - } - - - /* If our host adapter is capable of scatter-gather, then we increase - * the read-ahead to 16 blocks (32 sectors). If not, we use - * a two block (4 sector) read ahead. */ - if(scsi_CDs[0].device && scsi_CDs[0].device->host->sg_tablesize) - read_ahead[MAJOR_NR] = 32; /* 32 sector read-ahead. Always removable. */ - else - read_ahead[MAJOR_NR] = 4; /* 4 sector read-ahead */ + scsi_CDs[i].use = 1; + scsi_CDs[i].ten = 1; + scsi_CDs[i].remap = 1; + scsi_CDs[i].readcd_known = 0; + scsi_CDs[i].readcd_cdda = 0; + sr_sizes[i] = scsi_CDs[i].capacity >> (BLOCK_SIZE_BITS - 9); + + scsi_CDs[i].cdi.ops = &sr_dops; + scsi_CDs[i].cdi.handle = &scsi_CDs[i]; + scsi_CDs[i].cdi.dev = MKDEV(MAJOR_NR, i); + scsi_CDs[i].cdi.mask = 0; + scsi_CDs[i].cdi.capacity = 1; + get_capabilities(i); + sr_vendor_init(i); + + sprintf(name, "sr%d", i); + strcpy(scsi_CDs[i].cdi.name, name); + register_cdrom(&scsi_CDs[i].cdi); + } - return; + + /* If our host adapter is capable of scatter-gather, then we increase + * the read-ahead to 16 blocks (32 sectors). If not, we use + * a two block (4 sector) read ahead. */ + if (scsi_CDs[0].device && scsi_CDs[0].device->host->sg_tablesize) + read_ahead[MAJOR_NR] = 32; /* 32 sector read-ahead. Always removable. */ + else + read_ahead[MAJOR_NR] = 4; /* 4 sector read-ahead */ + + return; } static void sr_detach(Scsi_Device * SDp) { - Scsi_CD * cpnt; - int i; + Scsi_CD *cpnt; + int i; - for(cpnt = scsi_CDs, i=0; idevice == SDp) { - kdev_t devi = MKDEV(MAJOR_NR, i); - struct super_block * sb = get_super(devi); - - /* - * Since the cdrom is read-only, no need to sync the device. - * We should be kind to our buffer cache, however. - */ - if (sb) invalidate_inodes(sb); - invalidate_buffers(devi); - - /* - * Reset things back to a sane state so that one can re-load a new - * driver (perhaps the same one). - */ - unregister_cdrom(&(cpnt->cdi)); - cpnt->device = NULL; - cpnt->capacity = 0; - SDp->attached--; - sr_template.nr_dev--; - sr_template.dev_noticed--; - sr_sizes[i] = 0; - return; - } - return; + for (cpnt = scsi_CDs, i = 0; i < sr_template.dev_max; i++, cpnt++) + if (cpnt->device == SDp) { + kdev_t devi = MKDEV(MAJOR_NR, i); + struct super_block *sb = get_super(devi); + + /* + * Since the cdrom is read-only, no need to sync the device. + * We should be kind to our buffer cache, however. + */ + if (sb) + invalidate_inodes(sb); + invalidate_buffers(devi); + + /* + * Reset things back to a sane state so that one can re-load a new + * driver (perhaps the same one). + */ + unregister_cdrom(&(cpnt->cdi)); + cpnt->device = NULL; + cpnt->capacity = 0; + SDp->attached--; + sr_template.nr_dev--; + sr_template.dev_noticed--; + sr_sizes[i] = 0; + return; + } + return; } #ifdef MODULE -int init_module(void) { - sr_template.module = &__this_module; - return scsi_register_module(MODULE_SCSI_DEV, &sr_template); +int init_module(void) +{ + sr_template.module = &__this_module; + return scsi_register_module(MODULE_SCSI_DEV, &sr_template); } -void cleanup_module( void) +void cleanup_module(void) { - scsi_unregister_module(MODULE_SCSI_DEV, &sr_template); - unregister_blkdev(MAJOR_NR, "sr"); - sr_registered--; - if(scsi_CDs != NULL) { - scsi_init_free((char *) scsi_CDs, - (sr_template.dev_noticed + SR_EXTRA_DEVS) - * sizeof(Scsi_CD)); - - scsi_init_free((char *) sr_sizes, sr_template.dev_max * sizeof(int)); - sr_sizes = NULL; - - scsi_init_free((char *) sr_blocksizes, sr_template.dev_max * sizeof(int)); - sr_blocksizes = NULL; - } - - blksize_size[MAJOR_NR] = NULL; - blk_dev[MAJOR_NR].request_fn = NULL; - blk_size[MAJOR_NR] = NULL; - read_ahead[MAJOR_NR] = 0; + scsi_unregister_module(MODULE_SCSI_DEV, &sr_template); + unregister_blkdev(MAJOR_NR, "sr"); + sr_registered--; + if (scsi_CDs != NULL) { + scsi_init_free((char *) scsi_CDs, + (sr_template.dev_noticed + SR_EXTRA_DEVS) + * sizeof(Scsi_CD)); + + scsi_init_free((char *) sr_sizes, sr_template.dev_max * sizeof(int)); + sr_sizes = NULL; - sr_template.dev_max = 0; + scsi_init_free((char *) sr_blocksizes, sr_template.dev_max * sizeof(int)); + sr_blocksizes = NULL; + } + blksize_size[MAJOR_NR] = NULL; + blk_dev[MAJOR_NR].request_fn = NULL; + blk_size[MAJOR_NR] = NULL; + read_ahead[MAJOR_NR] = 0; + + sr_template.dev_max = 0; } -#endif /* MODULE */ + +#endif /* MODULE */ /* * Overrides for Emacs so that we follow Linus's tabbing style. diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/sr_ioctl.c linux.16p3/drivers/scsi/sr_ioctl.c --- linux.vanilla/drivers/scsi/sr_ioctl.c Fri Apr 21 12:46:32 2000 +++ linux.16p3/drivers/scsi/sr_ioctl.c Mon May 15 12:14:52 2000 @@ -18,9 +18,6 @@ # define DEBUG #endif -/* for now we borrow the "operation not supported" from the network folks */ -#define EDRIVE_CANT_DO_THIS EOPNOTSUPP - /* The sr_is_xa() seems to trigger firmware bugs with some drives :-( * It is off by default and can be turned on with this module parameter */ static int xa_test = 0; @@ -38,6 +35,12 @@ req = &SCpnt->request; req->rq_status = RQ_SCSI_DONE; /* Busy, but indicate request done */ + + if (SCpnt->buffer && req->buffer && SCpnt->buffer != req->buffer) { + memcpy(req->buffer, SCpnt->buffer, SCpnt->bufflen); + scsi_free(SCpnt->buffer, (SCpnt->bufflen + 511) & ~511); + SCpnt->buffer = req->buffer; + } if (req->sem != NULL) { up(req->sem); @@ -54,12 +57,26 @@ Scsi_Device * SDev; int result, err = 0, retries = 0; unsigned long flags; + char * bounce_buffer; spin_lock_irqsave(&io_request_lock, flags); SDev = scsi_CDs[target].device; SCpnt = scsi_allocate_device(NULL, scsi_CDs[target].device, 1); spin_unlock_irqrestore(&io_request_lock, flags); + /* use ISA DMA buffer if necessary */ + SCpnt->request.buffer=buffer; + if (buffer && SCpnt->host->unchecked_isa_dma && + (virt_to_phys(buffer) + buflength - 1 > ISA_DMA_THRESHOLD)) { + bounce_buffer = (char *)scsi_malloc((buflength + 511) & ~511); + if (bounce_buffer == NULL) { + printk("SCSI DMA pool exhausted."); + return -ENOMEM; + } + memcpy(bounce_buffer, (char *)buffer, buflength); + buffer = bounce_buffer; + } + retry: if( !scsi_block_when_processing_errors(SDev) ) return -ENODEV; @@ -74,7 +91,7 @@ down(&sem); SCpnt->request.sem = NULL; } - + result = SCpnt->result; /* Minimal error checking. Ignore cases we know about, and report the rest. */ @@ -159,7 +176,7 @@ { u_char sr_cmd[10]; - sr_cmd[0] = TEST_UNIT_READY; + sr_cmd[0] = GPCMD_TEST_UNIT_READY; sr_cmd[1] = ((scsi_CDs[minor].device -> lun) << 5); sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0; return sr_do_ioctl(minor, sr_cmd, NULL, 255, 1); @@ -169,7 +186,7 @@ { u_char sr_cmd[10]; - sr_cmd[0] = START_STOP; + sr_cmd[0] = GPCMD_START_STOP_UNIT; sr_cmd[1] = ((scsi_CDs[MINOR(cdi->dev)].device -> lun) << 5); sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0; sr_cmd[4] = (pos == 0) ? 0x03 /* close */ : 0x02 /* eject */; @@ -239,10 +256,10 @@ int sr_get_mcn(struct cdrom_device_info *cdi,struct cdrom_mcn *mcn) { u_char sr_cmd[10]; - char * buffer; + char buffer[32]; int result; - sr_cmd[0] = SCMD_READ_SUBCHANNEL; + sr_cmd[0] = GPCMD_READ_SUBCHANNEL; sr_cmd[1] = ((scsi_CDs[MINOR(cdi->dev)].device->lun) << 5); sr_cmd[2] = 0x40; /* I do want the subchannel info */ sr_cmd[3] = 0x02; /* Give me medium catalog number info */ @@ -252,15 +269,11 @@ sr_cmd[8] = 24; sr_cmd[9] = 0; - if ((buffer = (unsigned char*) scsi_malloc(512)) == NULL) - return -ENOMEM; - result = sr_do_ioctl(MINOR(cdi->dev), sr_cmd, buffer, 24, 0); memcpy (mcn->medium_catalog_number, buffer + 9, 13); mcn->medium_catalog_number[13] = 0; - scsi_free(buffer, 512); return result; } @@ -280,7 +293,7 @@ speed *= 177; /* Nx to kbyte/s */ memset(sr_cmd,0,12); - sr_cmd[0] = 0xbb; /* SET CD SPEED */ + sr_cmd[0] = GPCMD_SET_SPEED; /* SET CD SPEED */ sr_cmd[1] = (scsi_CDs[MINOR(cdi->dev)].device->lun) << 5; sr_cmd[2] = (speed >> 8) & 0xff; /* MSB for speed (in kbytes/sec) */ sr_cmd[3] = speed & 0xff; /* LSB */ @@ -293,104 +306,22 @@ /* ----------------------------------------------------------------------- */ /* this is called by the generic cdrom driver. arg is a _kernel_ pointer, */ /* becauce the generic cdrom driver does the user access stuff for us. */ +/* only cdromreadtochdr and cdromreadtocentry are left - for use with the */ +/* sr_disk_status interface for the generic cdrom driver. */ int sr_audio_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, void* arg) { u_char sr_cmd[10]; - int result, target; - - target = MINOR(cdi->dev); + int result, target = MINOR(cdi->dev); + unsigned char buffer[32]; switch (cmd) { - /* Sun-compatible */ - case CDROMPAUSE: - - sr_cmd[0] = SCMD_PAUSE_RESUME; - sr_cmd[1] = scsi_CDs[target].device->lun << 5; - sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = 0; - sr_cmd[5] = sr_cmd[6] = sr_cmd[7] = 0; - sr_cmd[8] = 0; - sr_cmd[9] = 0; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - - case CDROMRESUME: - - sr_cmd[0] = SCMD_PAUSE_RESUME; - sr_cmd[1] = scsi_CDs[target].device->lun << 5; - sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = 0; - sr_cmd[5] = sr_cmd[6] = sr_cmd[7] = 0; - sr_cmd[8] = 1; - sr_cmd[9] = 0; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - - case CDROMPLAYMSF: - { - struct cdrom_msf* msf = (struct cdrom_msf*)arg; - - sr_cmd[0] = SCMD_PLAYAUDIO_MSF; - sr_cmd[1] = scsi_CDs[target].device->lun << 5; - sr_cmd[2] = 0; - sr_cmd[3] = msf->cdmsf_min0; - sr_cmd[4] = msf->cdmsf_sec0; - sr_cmd[5] = msf->cdmsf_frame0; - sr_cmd[6] = msf->cdmsf_min1; - sr_cmd[7] = msf->cdmsf_sec1; - sr_cmd[8] = msf->cdmsf_frame1; - sr_cmd[9] = 0; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - } - - case CDROMPLAYBLK: - { - struct cdrom_blk* blk = (struct cdrom_blk*)arg; - - sr_cmd[0] = SCMD_PLAYAUDIO10; - sr_cmd[1] = scsi_CDs[target].device->lun << 5; - sr_cmd[2] = blk->from >> 24; - sr_cmd[3] = blk->from >> 16; - sr_cmd[4] = blk->from >> 8; - sr_cmd[5] = blk->from; - sr_cmd[6] = 0; - sr_cmd[7] = blk->len >> 8; - sr_cmd[8] = blk->len; - sr_cmd[9] = 0; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - } - - case CDROMPLAYTRKIND: - { - struct cdrom_ti* ti = (struct cdrom_ti*)arg; - - sr_cmd[0] = SCMD_PLAYAUDIO_TI; - sr_cmd[1] = scsi_CDs[target].device->lun << 5; - sr_cmd[2] = 0; - sr_cmd[3] = 0; - sr_cmd[4] = ti->cdti_trk0; - sr_cmd[5] = ti->cdti_ind0; - sr_cmd[6] = 0; - sr_cmd[7] = ti->cdti_trk1; - sr_cmd[8] = ti->cdti_ind1; - sr_cmd[9] = 0; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - } - case CDROMREADTOCHDR: { struct cdrom_tochdr* tochdr = (struct cdrom_tochdr*)arg; - char * buffer; - sr_cmd[0] = SCMD_READ_TOC; + sr_cmd[0] = GPCMD_READ_TOC_PMA_ATIP; sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5); sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0; sr_cmd[6] = 0; @@ -398,24 +329,19 @@ sr_cmd[8] = 12; /* LSB of length */ sr_cmd[9] = 0; - if ((buffer = (unsigned char *) scsi_malloc(512)) == NULL) - return -ENOMEM; - result = sr_do_ioctl(target, sr_cmd, buffer, 12, 1); tochdr->cdth_trk0 = buffer[2]; tochdr->cdth_trk1 = buffer[3]; - scsi_free(buffer, 512); break; } case CDROMREADTOCENTRY: { struct cdrom_tocentry* tocentry = (struct cdrom_tocentry*)arg; - unsigned char * buffer; - sr_cmd[0] = SCMD_READ_TOC; + sr_cmd[0] = GPCMD_READ_TOC_PMA_ATIP; sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | (tocentry->cdte_format == CDROM_MSF ? 0x02 : 0); sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0; @@ -424,9 +350,6 @@ sr_cmd[8] = 12; /* LSB of length */ sr_cmd[9] = 0; - if ((buffer = (unsigned char *) scsi_malloc(512)) == NULL) - return -ENOMEM; - result = sr_do_ioctl (target, sr_cmd, buffer, 12, 0); tocentry->cdte_ctrl = buffer[5] & 0xf; @@ -440,160 +363,9 @@ tocentry->cdte_addr.lba = (((((buffer[8] << 8) + buffer[9]) << 8) + buffer[10]) << 8) + buffer[11]; - scsi_free(buffer, 512); break; } - - case CDROMSTOP: - sr_cmd[0] = START_STOP; - sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 1; - sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0; - sr_cmd[4] = 0; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - - case CDROMSTART: - sr_cmd[0] = START_STOP; - sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 1; - sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0; - sr_cmd[4] = 1; - - result = sr_do_ioctl(target, sr_cmd, NULL, 255, 0); - break; - - case CDROMVOLCTRL: - { - char * buffer, * mask; - struct cdrom_volctrl* volctrl = (struct cdrom_volctrl*)arg; - - /* First we get the current params so we can just twiddle the volume */ - - sr_cmd[0] = MODE_SENSE; - sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5; - sr_cmd[2] = 0xe; /* Want mode page 0xe, CDROM audio params */ - sr_cmd[3] = 0; - sr_cmd[4] = 28; - sr_cmd[5] = 0; - - if ((buffer = (unsigned char *) scsi_malloc(512)) == NULL) - return -ENOMEM; - - if ((result = sr_do_ioctl (target, sr_cmd, buffer, 28, 0))) { - printk ("Hosed while obtaining audio mode page\n"); - scsi_free(buffer, 512); - break; - } - - sr_cmd[0] = MODE_SENSE; - sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5; - sr_cmd[2] = 0x4e; /* Want the mask for mode page 0xe */ - sr_cmd[3] = 0; - sr_cmd[4] = 28; - sr_cmd[5] = 0; - - mask = (unsigned char *) scsi_malloc(512); - if(!mask) { - scsi_free(buffer, 512); - result = -ENOMEM; - break; - }; - - if ((result = sr_do_ioctl (target, sr_cmd, mask, 28, 0))) { - printk ("Hosed while obtaining mask for audio mode page\n"); - scsi_free(buffer, 512); - scsi_free(mask, 512); - break; - } - - /* Now mask and substitute our own volume and reuse the rest */ - buffer[0] = 0; /* Clear reserved field */ - - buffer[21] = volctrl->channel0 & mask[21]; - buffer[23] = volctrl->channel1 & mask[23]; - buffer[25] = volctrl->channel2 & mask[25]; - buffer[27] = volctrl->channel3 & mask[27]; - - sr_cmd[0] = MODE_SELECT; - sr_cmd[1] = ((scsi_CDs[target].device -> lun) << 5) | 0x10; /* Params are SCSI-2 */ - sr_cmd[2] = sr_cmd[3] = 0; - sr_cmd[4] = 28; - sr_cmd[5] = 0; - - result = sr_do_ioctl (target, sr_cmd, buffer, 28, 0); - scsi_free(buffer, 512); - scsi_free(mask, 512); - break; - } - - case CDROMVOLREAD: - { - char * buffer; - struct cdrom_volctrl* volctrl = (struct cdrom_volctrl*)arg; - - /* Get the current params */ - - sr_cmd[0] = MODE_SENSE; - sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5; - sr_cmd[2] = 0xe; /* Want mode page 0xe, CDROM audio params */ - sr_cmd[3] = 0; - sr_cmd[4] = 28; - sr_cmd[5] = 0; - - if ((buffer = (unsigned char *) scsi_malloc(512)) == NULL) - return -ENOMEM; - - if ((result = sr_do_ioctl (target, sr_cmd, buffer, 28, 0))) { - printk ("(CDROMVOLREAD) Hosed while obtaining audio mode page\n"); - scsi_free(buffer, 512); - break; - } - volctrl->channel0 = buffer[21]; - volctrl->channel1 = buffer[23]; - volctrl->channel2 = buffer[25]; - volctrl->channel3 = buffer[27]; - - scsi_free(buffer, 512); - break; - } - - case CDROMSUBCHNL: - { - struct cdrom_subchnl* subchnl = (struct cdrom_subchnl*)arg; - char * buffer; - - sr_cmd[0] = SCMD_READ_SUBCHANNEL; - sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 0x02; /* MSF format */ - sr_cmd[2] = 0x40; /* I do want the subchannel info */ - sr_cmd[3] = 0x01; /* Give me current position info */ - sr_cmd[4] = sr_cmd[5] = 0; - sr_cmd[6] = 0; - sr_cmd[7] = 0; - sr_cmd[8] = 16; - sr_cmd[9] = 0; - - if ((buffer = (unsigned char *) scsi_malloc(512)) == NULL) - return -ENOMEM; - - result = sr_do_ioctl(target, sr_cmd, buffer, 16, 0); - - subchnl->cdsc_audiostatus = buffer[1]; - subchnl->cdsc_format = CDROM_MSF; - subchnl->cdsc_ctrl = buffer[5] & 0xf; - subchnl->cdsc_trk = buffer[6]; - subchnl->cdsc_ind = buffer[7]; - - subchnl->cdsc_reladdr.msf.minute = buffer[13]; - subchnl->cdsc_reladdr.msf.second = buffer[14]; - subchnl->cdsc_reladdr.msf.frame = buffer[15]; - subchnl->cdsc_absaddr.msf.minute = buffer[9]; - subchnl->cdsc_absaddr.msf.second = buffer[10]; - subchnl->cdsc_absaddr.msf.frame = buffer[11]; - - scsi_free(buffer, 512); - break; - } default: return -EINVAL; } @@ -631,7 +403,7 @@ #endif memset(cmd,0,12); - cmd[0] = 0xbe /* READ_CD */; + cmd[0] = GPCMD_READ_CD; /* READ_CD */ cmd[1] = (scsi_CDs[minor].device->lun << 5) | ((format & 7) << 2); cmd[2] = (unsigned char)(lba >> 24) & 0xff; cmd[3] = (unsigned char)(lba >> 16) & 0xff; @@ -677,7 +449,7 @@ #endif memset(cmd,0,12); - cmd[0] = READ_10; + cmd[0] = GPCMD_READ_10; cmd[1] = (scsi_CDs[minor].device->lun << 5); cmd[2] = (unsigned char)(lba >> 24) & 0xff; cmd[3] = (unsigned char)(lba >> 16) & 0xff; @@ -723,123 +495,33 @@ int sr_dev_ioctl(struct cdrom_device_info *cdi, unsigned int cmd, unsigned long arg) { - int target, err; - - target = MINOR(cdi->dev); - - switch (cmd) { - case CDROMREADMODE1: - case CDROMREADMODE2: - case CDROMREADRAW: - { - unsigned char *raw; - struct cdrom_msf msf; - int lba, rc; - int blocksize = 2048; - - switch (cmd) { - case CDROMREADMODE2: blocksize = CD_FRAMESIZE_RAW0; break; /* 2336 */ - case CDROMREADRAW: blocksize = CD_FRAMESIZE_RAW; break; /* 2352 */ - } - - if (copy_from_user(&msf,(void*)arg,sizeof(msf))) - return -EFAULT; - - if ((raw = scsi_malloc(2048+512)) == NULL) - return -ENOMEM; - - lba = (((msf.cdmsf_min0 * CD_SECS) + msf.cdmsf_sec0) - * CD_FRAMES + msf.cdmsf_frame0) - CD_MSF_OFFSET; - if (lba < 0 || lba >= scsi_CDs[target].capacity) - { - scsi_free(raw, 2048+512); - return -EINVAL; - } - - rc = sr_read_sector(target, lba, blocksize, raw); - if (!rc) - if (copy_to_user((void*)arg, raw, blocksize)) - rc = -EFAULT; - - scsi_free(raw,2048+512); - return rc; - } - case CDROMREADAUDIO: - { - unsigned char *raw; - int lba, rc=0; - struct cdrom_read_audio ra; - - if (!scsi_CDs[target].readcd_known || !scsi_CDs[target].readcd_cdda) - return -EINVAL; /* -EDRIVE_DOES_NOT_SUPPORT_THIS ? */ - - if (copy_from_user(&ra,(void*)arg,sizeof(ra))) - return -EFAULT; - - if (ra.addr_format == CDROM_LBA) - lba = ra.addr.lba; - else - lba = (((ra.addr.msf.minute * CD_SECS) + ra.addr.msf.second) - * CD_FRAMES + ra.addr.msf.frame) - CD_MSF_OFFSET; - - if (lba < 0 || lba >= scsi_CDs[target].capacity) - return -EINVAL; - if ((raw = scsi_malloc(2048+512)) == NULL) - return -ENOMEM; - - while (ra.nframes > 0) { - rc = sr_read_cd(target, raw, lba, 1, CD_FRAMESIZE_RAW); - if (!rc) - if (copy_to_user(ra.buf, raw, CD_FRAMESIZE_RAW)) - rc = -EFAULT; - if (rc) - break; - - ra.buf += CD_FRAMESIZE_RAW; - ra.nframes -= 1; - lba++; - } - scsi_free(raw,2048+512); - return rc; - } - case BLKRAGET: - if (!arg) - return -EINVAL; - err = verify_area(VERIFY_WRITE, (long *) arg, sizeof(long)); - if (err) - return err; - put_user(read_ahead[MAJOR(cdi->dev)], (long *) arg); - return 0; - - case BLKRASET: - if(!capable(CAP_SYS_ADMIN)) - return -EACCES; - if(!(cdi->dev)) - return -EINVAL; - if(arg > 0xff) - return -EINVAL; - read_ahead[MAJOR(cdi->dev)] = arg; - return 0; - - case BLKSSZGET: - /* Block size of media */ - return put_user(blksize_size[MAJOR(cdi->dev)][MINOR(cdi->dev)], - (int *)arg); - - RO_IOCTLS(cdi->dev,arg); - - case BLKFLSBUF: - if(!capable(CAP_SYS_ADMIN)) - return -EACCES; - if(!(cdi->dev)) - return -EINVAL; - fsync_dev(cdi->dev); - invalidate_buffers(cdi->dev); - return 0; - - default: - return scsi_ioctl(scsi_CDs[target].device,cmd,(void *) arg); - } + switch (cmd) { + case BLKRAGET: + if (!arg) + return -EINVAL; + return put_user(read_ahead[MAJOR(cdi->dev)], (long *) arg); + case BLKRASET: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (!(cdi->dev)) + return -EINVAL; + if (arg > 0xff) + return -EINVAL; + read_ahead[MAJOR(cdi->dev)] = arg; + return 0; + case BLKSSZGET: + return put_user(blksize_size[MAJOR(cdi->dev)][MINOR(cdi->dev)], (int *) arg); + case BLKFLSBUF: + if (!capable(CAP_SYS_ADMIN)) + return -EACCES; + if (!(cdi->dev)) + return -EINVAL; + fsync_dev(cdi->dev); + invalidate_buffers(cdi->dev); + return 0; + default: + return scsi_ioctl(scsi_CDs[MINOR(cdi->dev)].device,cmd,(void *) arg); + } } /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/scsi/sr_vendor.c linux.16p3/drivers/scsi/sr_vendor.c --- linux.vanilla/drivers/scsi/sr_vendor.c Fri Apr 21 12:46:32 2000 +++ linux.16p3/drivers/scsi/sr_vendor.c Sun Apr 30 23:42:32 2000 @@ -60,8 +60,7 @@ #define VENDOR_ID (scsi_CDs[minor].vendor) -void -sr_vendor_init(int minor) +void sr_vendor_init(int minor) { #ifndef CONFIG_BLK_DEV_SR_VENDOR VENDOR_ID = VENDOR_SCSI3; @@ -104,8 +103,7 @@ /* small handy function for switching block length using MODE SELECT, * used by sr_read_sector() */ -int -sr_set_blocklength(int minor, int blocklength) +int sr_set_blocklength(int minor, int blocklength) { unsigned char *buffer; /* the buffer for the ioctl */ unsigned char cmd[12]; /* the scsi-command */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sound/Config.in linux.16p3/drivers/sound/Config.in --- linux.vanilla/drivers/sound/Config.in Fri Apr 21 12:46:33 2000 +++ linux.16p3/drivers/sound/Config.in Tue Apr 18 19:14:40 2000 @@ -35,6 +35,8 @@ dep_tristate 'ESS Solo1 (Experimental)' CONFIG_SOUND_ESSSOLO1 $CONFIG_SOUND fi +dep_tristate 'Intel ICH (810, 820, 440MX...)' CONFIG_SOUND_ICH $CONFIG_SOUND + dep_tristate 'S3 SonicVibes' CONFIG_SOUND_SONICVIBES $CONFIG_SOUND if [ "$CONFIG_VISWS" = "y" ]; then diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sound/Makefile linux.16p3/drivers/sound/Makefile --- linux.vanilla/drivers/sound/Makefile Fri Apr 21 12:46:35 2000 +++ linux.16p3/drivers/sound/Makefile Tue Apr 18 20:33:01 2000 @@ -25,7 +25,7 @@ export-objs := ad1848.o audio_syms.o midi_syms.o mpu401.o \ msnd.o opl3.o sb_card.o sequencer_syms.o \ sound_core.o sound_syms.o uart401.o ad1816.o \ - nm256_audio.o + nm256_audio.o ac97_codec.o @@ -83,6 +83,7 @@ obj-$(CONFIG_SOUND_ES1370) += es1370.o obj-$(CONFIG_SOUND_ES1371) += es1371.o obj-$(CONFIG_SOUND_ESSSOLO1) += esssolo1.o +obj-$(CONFIG_SOUND_ICH) += i810_audio.o ac97_codec.o obj-$(CONFIG_SOUND_MAESTRO) += maestro.o obj-$(CONFIG_SOUND_SONICVIBES) += sonicvibes.o diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sound/ac97_codec.c linux.16p3/drivers/sound/ac97_codec.c --- linux.vanilla/drivers/sound/ac97_codec.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/sound/ac97_codec.c Tue Apr 18 20:32:04 2000 @@ -0,0 +1,619 @@ +/* + * ac97_codec.c: Generic AC97 mixer/modem module + * + * Derived from ac97 mixer in maestro and trident driver. + * + * Copyright 2000 Silicon Integrated System Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * History + * v0.4 Mar 15 2000 Ollie Lho + * dual codec support verified with 4 channel output + * v0.3 Feb 22 2000 Ollie Lho + * bug fix for record mask setting + * v0.2 Feb 10 2000 Ollie Lho + * add ac97_read_proc for /proc/driver/{vendor}/ac97 + * v0.1 Jan 14 2000 Ollie Lho + * Isolated from trident.c to support multiple ac97 codec + */ +#include +#include +#include +#include +#include +#include +#include + +static int ac97_read_mixer(struct ac97_codec *codec, int oss_channel); +static void ac97_write_mixer(struct ac97_codec *codec, int oss_channel, + unsigned int left, unsigned int right); +static void ac97_set_mixer(struct ac97_codec *codec, unsigned int oss_mixer, unsigned int val ); +static int ac97_recmask_io(struct ac97_codec *codec, int rw, int mask); +static int ac97_mixer_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned long arg); + +static int ac97_init_mixer(struct ac97_codec *codec); + +static int sigmatel_init(struct ac97_codec *codec); + +#define arraysize(x) (sizeof(x)/sizeof((x)[0])) + +static struct { + unsigned int id; + char *name; + int (*init) (struct ac97_codec *codec); +} ac97_codec_ids[] = { + {0x414B4D00, "Asahi Kasei AK4540" , NULL}, + {0x41445340, "Analog Devices AD1881" , NULL}, + {0x43525900, "Cirrus Logic CS4297" , NULL}, + {0x43525903, "Cirrus Logic CS4297" , NULL}, + {0x43525913, "Cirrus Logic CS4297A" , NULL}, + {0x43525923, "Cirrus Logic CS4298" , NULL}, + {0x43525931, "Cirrus Logic CS4299" , NULL}, + {0x4e534331, "National Semiconductor LM4549" , NULL}, + {0x53494c22, "Silicon Laboratory Si3036" , NULL}, + {0x53494c23, "Silicon Laboratory Si3038" , NULL}, + {0x83847600, "SigmaTel STAC????" , NULL}, + {0x83847604, "SigmaTel STAC9701/3/4/5", NULL}, + {0x83847605, "SigmaTel STAC9704" , NULL}, + {0x83847608, "SigmaTel STAC9708" , NULL}, + {0x83847609, "SigmaTel STAC9721/23" , sigmatel_init}, + {0x54524108, "TriTech TR28028" , NULL}, + {0x574D4C00, "Wolfson WM9704" , NULL}, + {0x00000000, NULL, NULL} +}; + +static const char *ac97_stereo_enhancements[] = +{ + /* 0 */ "No 3D Stereo Enhancement", + /* 1 */ "Analog Devices Phat Stereo", + /* 2 */ "Creative Stereo Enhancement", + /* 3 */ "National Semi 3D Stereo Enhancement", + /* 4 */ "YAMAHA Ymersion", + /* 5 */ "BBE 3D Stereo Enhancement", + /* 6 */ "Crystal Semi 3D Stereo Enhancement", + /* 7 */ "Qsound QXpander", + /* 8 */ "Spatializer 3D Stereo Enhancement", + /* 9 */ "SRS 3D Stereo Enhancement", + /* 10 */ "Platform Tech 3D Stereo Enhancement", + /* 11 */ "AKM 3D Audio", + /* 12 */ "Aureal Stereo Enhancement", + /* 13 */ "Aztech 3D Enhancement", + /* 14 */ "Binaura 3D Audio Enhancement", + /* 15 */ "ESS Technology Stereo Enhancement", + /* 16 */ "Harman International VMAx", + /* 17 */ "Nvidea 3D Stereo Enhancement", + /* 18 */ "Philips Incredible Sound", + /* 19 */ "Texas Instruments 3D Stereo Enhancement", + /* 20 */ "VLSI Technology 3D Stereo Enhancement", + /* 21 */ "TriTech 3D Stereo Enhancement", + /* 22 */ "Realtek 3D Stereo Enhancement", + /* 23 */ "Samsung 3D Stereo Enhancement", + /* 24 */ "Wolfson Microelectronics 3D Enhancement", + /* 25 */ "Delta Integration 3D Enhancement", + /* 26 */ "SigmaTel 3D Enhancement", + /* 27 */ "Reserved 27", + /* 28 */ "Rockwell 3D Stereo Enhancement", + /* 29 */ "Reserved 29", + /* 30 */ "Reserved 30", + /* 31 */ "Reserved 31" +}; + +/* this table has default mixer values for all OSS mixers. */ +static struct mixer_defaults { + int mixer; + unsigned int value; +} mixer_defaults[SOUND_MIXER_NRDEVICES] = { + /* all values 0 -> 100 in bytes */ + {SOUND_MIXER_VOLUME, 0x3232}, + {SOUND_MIXER_BASS, 0x3232}, + {SOUND_MIXER_TREBLE, 0x3232}, + {SOUND_MIXER_PCM, 0x3232}, + {SOUND_MIXER_SPEAKER, 0x3232}, + {SOUND_MIXER_LINE, 0x3232}, + {SOUND_MIXER_MIC, 0x3232}, + {SOUND_MIXER_CD, 0x3232}, + {SOUND_MIXER_ALTPCM, 0x3232}, + {SOUND_MIXER_IGAIN, 0x3232}, + {SOUND_MIXER_LINE1, 0x3232}, + {SOUND_MIXER_PHONEIN, 0x3232}, + {SOUND_MIXER_PHONEOUT, 0x3232}, + {SOUND_MIXER_VIDEO, 0x3232}, + {-1,0} +}; + +/* table to scale scale from OSS mixer value to AC97 mixer register value */ +static struct ac97_mixer_hw { + unsigned char offset; + int scale; +} ac97_hw[SOUND_MIXER_NRDEVICES]= { + [SOUND_MIXER_VOLUME] = {AC97_MASTER_VOL_STEREO,63}, + [SOUND_MIXER_BASS] = {AC97_MASTER_TONE, 15}, + [SOUND_MIXER_TREBLE] = {AC97_MASTER_TONE, 15}, + [SOUND_MIXER_PCM] = {AC97_PCMOUT_VOL, 31}, + [SOUND_MIXER_SPEAKER] = {AC97_PCBEEP_VOL, 15}, + [SOUND_MIXER_LINE] = {AC97_LINEIN_VOL, 31}, + [SOUND_MIXER_MIC] = {AC97_MIC_VOL, 31}, + [SOUND_MIXER_CD] = {AC97_CD_VOL, 31}, + [SOUND_MIXER_ALTPCM] = {AC97_HEADPHONE_VOL, 63}, + [SOUND_MIXER_IGAIN] = {AC97_RECORD_GAIN, 31}, + [SOUND_MIXER_LINE1] = {AC97_AUX_VOL, 31}, + [SOUND_MIXER_PHONEIN] = {AC97_PHONE_VOL, 15}, + [SOUND_MIXER_PHONEOUT] = {AC97_MASTER_VOL_MONO, 63}, + [SOUND_MIXER_VIDEO] = {AC97_VIDEO_VOL, 31}, +}; + +/* the following tables allow us to go from OSS <-> ac97 quickly. */ +enum ac97_recsettings { + AC97_REC_MIC=0, + AC97_REC_CD, + AC97_REC_VIDEO, + AC97_REC_AUX, + AC97_REC_LINE, + AC97_REC_STEREO, /* combination of all enabled outputs.. */ + AC97_REC_MONO, /*.. or the mono equivalent */ + AC97_REC_PHONE +}; + +static unsigned int ac97_rm2oss[] = { + [AC97_REC_MIC] = SOUND_MIXER_MIC, + [AC97_REC_CD] = SOUND_MIXER_CD, + [AC97_REC_VIDEO] = SOUND_MIXER_VIDEO, + [AC97_REC_AUX] = SOUND_MIXER_LINE1, + [AC97_REC_LINE] = SOUND_MIXER_LINE, + [AC97_REC_STEREO]= SOUND_MIXER_IGAIN, + [AC97_REC_PHONE] = SOUND_MIXER_PHONEIN +}; + +/* indexed by bit position */ +static unsigned int ac97_oss_rm[] = { + [SOUND_MIXER_MIC] = AC97_REC_MIC, + [SOUND_MIXER_CD] = AC97_REC_CD, + [SOUND_MIXER_VIDEO] = AC97_REC_VIDEO, + [SOUND_MIXER_LINE1] = AC97_REC_AUX, + [SOUND_MIXER_LINE] = AC97_REC_LINE, + [SOUND_MIXER_IGAIN] = AC97_REC_STEREO, + [SOUND_MIXER_PHONEIN] = AC97_REC_PHONE +}; + +/* reads the given OSS mixer from the ac97 the caller must have insured that the ac97 knows + about that given mixer, and should be holding a spinlock for the card */ +static int ac97_read_mixer(struct ac97_codec *codec, int oss_channel) +{ + u16 val; + int ret = 0; + struct ac97_mixer_hw *mh = &ac97_hw[oss_channel]; + + val = codec->codec_read(codec , mh->offset); + + if (AC97_STEREO_MASK & (1 << oss_channel)) { + /* nice stereo mixers .. */ + int left,right; + + left = (val >> 8) & 0x7f; + right = val & 0x7f; + + if (oss_channel == SOUND_MIXER_IGAIN) { + right = (right * 100) / mh->scale; + left = (left * 100) / mh->scale; + } else { + right = 100 - ((right * 100) / mh->scale); + left = 100 - ((left * 100) / mh->scale); + } + ret = left | (right << 8); + } else if (oss_channel == SOUND_MIXER_SPEAKER) { + ret = 100 - ((((val & 0x1e)>>1) * 100) / mh->scale); + } else if (oss_channel == SOUND_MIXER_PHONEIN) { + ret = 100 - (((val & 0x1f) * 100) / mh->scale); + } else if (oss_channel == SOUND_MIXER_PHONEOUT) { + ret = 100 - (((val & 0x1f) * 100) / mh->scale); + } else if (oss_channel == SOUND_MIXER_MIC) { + ret = 100 - (((val & 0x1f) * 100) / mh->scale); + /* the low bit is optional in the tone sliders and masking + it lets us avoid the 0xf 'bypass'.. */ + } else if (oss_channel == SOUND_MIXER_BASS) { + ret = 100 - ((((val >> 8) & 0xe) * 100) / mh->scale); + } else if (oss_channel == SOUND_MIXER_TREBLE) { + ret = 100 - (((val & 0xe) * 100) / mh->scale); + } + +#ifdef DEBUG + printk("ac97_codec: read OSS mixer %2d (%s ac97 register 0x%02x), " + "0x%04x -> 0x%04x\n", + oss_channel, codec->id ? "Secondary" : "Primary", + mh->offset, val, ret); +#endif + + return ret; +} + +/* write the OSS encoded volume to the given OSS encoded mixer, again caller's job to + make sure all is well in arg land, call with spinlock held */ +static void ac97_write_mixer(struct ac97_codec *codec, int oss_channel, + unsigned int left, unsigned int right) +{ + u16 val = 0; + struct ac97_mixer_hw *mh = &ac97_hw[oss_channel]; + +#ifdef DEBUG + printk("ac97_codec: wrote OSS mixer %2d (%s ac97 register 0x%02x), " + "left vol:%2d, right vol:%2d:", + oss_channel, codec->id ? "Secondary" : "Primary", + mh->offset, left, right); +#endif + + if (AC97_STEREO_MASK & (1 << oss_channel)) { + /* stereo mixers */ + if (oss_channel == SOUND_MIXER_IGAIN) { + right = (right * mh->scale) / 100; + left = (left * mh->scale) / 100; + } else { + right = ((100 - right) * mh->scale) / 100; + left = ((100 - left) * mh->scale) / 100; + } + val = (left << 8) | right; + } else if (oss_channel == SOUND_MIXER_SPEAKER) { + val = (((100 - left) * mh->scale) / 100) << 1; + } else if (oss_channel == SOUND_MIXER_PHONEIN) { + val = (((100 - left) * mh->scale) / 100); + } else if (oss_channel == SOUND_MIXER_PHONEOUT) { + val = (((100 - left) * mh->scale) / 100); + } else if (oss_channel == SOUND_MIXER_MIC) { + val = codec->codec_read(codec , mh->offset) & ~0x801f; + val |= (((100 - left) * mh->scale) / 100); + /* the low bit is optional in the tone sliders and masking + it lets us avoid the 0xf 'bypass'.. */ + } else if (oss_channel == SOUND_MIXER_BASS) { + val = codec->codec_read(codec , mh->offset) & ~0x0f00; + val |= ((((100 - left) * mh->scale) / 100) << 8) & 0x0e00; + } else if (oss_channel == SOUND_MIXER_TREBLE) { + val = codec->codec_read(codec , mh->offset) & ~0x000f; + val |= (((100 - left) * mh->scale) / 100) & 0x000e; + } +#ifdef DEBUG + printk(" 0x%04x", val); +#endif + + codec->codec_write(codec, mh->offset, val); + +#ifdef DEBUG + val = codec->codec_read(codec, mh->offset); + printk(" -> 0x%04x\n", val); +#endif +} + +/* a thin wrapper for write_mixer */ +static void ac97_set_mixer(struct ac97_codec *codec, unsigned int oss_mixer, unsigned int val ) +{ + unsigned int left,right; + + /* cleanse input a little */ + right = ((val >> 8) & 0xff) ; + left = (val & 0xff) ; + + if (right > 100) right = 100; + if (left > 100) left = 100; + + codec->mixer_state[oss_mixer] = (right << 8) | left; + codec->write_mixer(codec, oss_mixer, left, right); +} + +/* read or write the recmask, the ac97 can really have left and right recording + inputs independantly set, but OSS doesn't seem to want us to express that to + the user. the caller guarantees that we have a supported bit set, and they + must be holding the card's spinlock */ +static int ac97_recmask_io(struct ac97_codec *codec, int rw, int mask) +{ + unsigned int val; + + if (rw) { + /* read it from the card */ + val = codec->codec_read(codec, AC97_RECORD_SELECT); +#ifdef DEBUG + printk("ac97_codec: ac97 recmask to set to 0x%04x\n", val); +#endif + return (1 << ac97_rm2oss[val & 0x07]); + } + + /* else, write the first set in the mask as the + output */ + val = ffs(mask); + val = ac97_oss_rm[val-1]; + val |= val << 8; /* set both channels */ + +#ifdef DEBUG + printk("ac97_codec: setting ac97 recmask to 0x%04x\n", val); +#endif + + codec->codec_write(codec, AC97_RECORD_SELECT, val); + + return 0; +}; + +static int ac97_mixer_ioctl(struct ac97_codec *codec, unsigned int cmd, unsigned long arg) +{ + int i, val = 0; + + if (cmd == SOUND_MIXER_INFO) { + mixer_info info; + strncpy(info.id, codec->name, sizeof(info.id)); + strncpy(info.name, codec->name, sizeof(info.name)); + info.modify_counter = codec->modcnt; + if (copy_to_user((void *)arg, &info, sizeof(info))) + return -EFAULT; + return 0; + } + if (cmd == SOUND_OLD_MIXER_INFO) { + _old_mixer_info info; + strncpy(info.id, codec->name, sizeof(info.id)); + strncpy(info.name, codec->name, sizeof(info.name)); + if (copy_to_user((void *)arg, &info, sizeof(info))) + return -EFAULT; + return 0; + } + + if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int)) + return -EINVAL; + + if (cmd == OSS_GETVERSION) + return put_user(SOUND_VERSION, (int *)arg); + + if (_IOC_DIR(cmd) == _IOC_READ) { + switch (_IOC_NR(cmd)) { + case SOUND_MIXER_RECSRC: /* give them the current record source */ + if (!codec->recmask_io) { + val = 0; + } else { + val = codec->recmask_io(codec, 1, 0); + } + break; + + case SOUND_MIXER_DEVMASK: /* give them the supported mixers */ + val = codec->supported_mixers; + break; + + case SOUND_MIXER_RECMASK: /* Arg contains a bit for each supported recording source */ + val = codec->record_sources; + break; + + case SOUND_MIXER_STEREODEVS: /* Mixer channels supporting stereo */ + val = codec->stereo_mixers; + break; + + case SOUND_MIXER_CAPS: + val = SOUND_CAP_EXCL_INPUT; + break; + + default: /* read a specific mixer */ + i = _IOC_NR(cmd); + + if (!supported_mixer(codec, i)) + return -EINVAL; + + /* do we ever want to touch the hardware? */ + /* val = codec->read_mixer(codec, i); */ + val = codec->mixer_state[i]; + break; + } + return put_user(val, (int *)arg); + } + + if (_IOC_DIR(cmd) == (_IOC_WRITE|_IOC_READ)) { + codec->modcnt++; + get_user_ret(val, (int *)arg, -EFAULT); + + switch (_IOC_NR(cmd)) { + case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */ + if (!codec->recmask_io) return -EINVAL; + if (!(val &= codec->record_sources)) return -EINVAL; + + codec->recmask_io(codec, 0, val); + + return 0; + default: /* write a specific mixer */ + i = _IOC_NR(cmd); + + if (!supported_mixer(codec, i)) + return -EINVAL; + + ac97_set_mixer(codec, i, val); + + return 0; + } + } + return -EINVAL; +} + +/* entry point for /proc/driver/controller_vendor/ac97/%d */ +int ac97_read_proc (char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + int len = 0, cap, extid, val, id1, id2; + struct ac97_codec *codec; + + if ((codec = data) == NULL) + return -ENODEV; + + id1 = codec->codec_read(codec, AC97_VENDOR_ID1); + id2 = codec->codec_read(codec, AC97_VENDOR_ID2); + len += sprintf (page+len, "Vendor name : %s\n", codec->name); + len += sprintf (page+len, "Vendor id : %04X %04X\n", id1, id2); + + extid = codec->codec_read(codec, AC97_EXTENDED_ID); + extid &= ~((1<<2)|(1<<4)|(1<<5)|(1<<10)|(1<<11)|(1<<12)|(1<<13)); + len += sprintf (page+len, "AC97 Version : %s\n", + extid ? "2.0 or later" : "1.0"); + + cap = codec->codec_read(codec, AC97_RESET); + len += sprintf (page+len, "Capabilities :%s%s%s%s%s%s\n", + cap & 0x0001 ? " -dedicated MIC PCM IN channel-" : "", + cap & 0x0002 ? " -reserved1-" : "", + cap & 0x0004 ? " -bass & treble-" : "", + cap & 0x0008 ? " -simulated stereo-" : "", + cap & 0x0010 ? " -headphone out-" : "", + cap & 0x0020 ? " -loudness-" : ""); + val = cap & 0x00c0; + len += sprintf (page+len, "DAC resolutions :%s%s%s\n", + " -16-bit-", + val & 0x0040 ? " -18-bit-" : "", + val & 0x0080 ? " -20-bit-" : ""); + val = cap & 0x0300; + len += sprintf (page+len, "ADC resolutions :%s%s%s\n", + " -16-bit-", + val & 0x0100 ? " -18-bit-" : "", + val & 0x0200 ? " -20-bit-" : ""); + len += sprintf (page+len, "3D enhancement : %s\n", + ac97_stereo_enhancements[(cap >> 10) & 0x1f]); + + val = codec->codec_read(codec, AC97_GENERAL_PURPOSE); + len += sprintf (page+len, "POP path : %s 3D\n" + "Sim. stereo : %s\n" + "3D enhancement : %s\n" + "Loudness : %s\n" + "Mono output : %s\n" + "MIC select : %s\n" + "ADC/DAC loopback : %s\n", + val & 0x8000 ? "post" : "pre", + val & 0x4000 ? "on" : "off", + val & 0x2000 ? "on" : "off", + val & 0x1000 ? "on" : "off", + val & 0x0200 ? "MIC" : "MIX", + val & 0x0100 ? "MIC2" : "MIC1", + val & 0x0080 ? "on" : "off"); + + cap = extid; + len += sprintf (page+len, "Ext Capabilities :%s%s%s%s%s%s%s\n", + cap & 0x0001 ? " -var rate PCM audio-" : "", + cap & 0x0002 ? " -2x PCM audio out-" : "", + cap & 0x0008 ? " -var rate MIC in-" : "", + cap & 0x0040 ? " -PCM center DAC-" : "", + cap & 0x0080 ? " -PCM surround DAC-" : "", + cap & 0x0100 ? " -PCM LFE DAC-" : "", + cap & 0x0200 ? " -slot/DAC mappings-" : ""); + + return len; +} + +int ac97_probe_codec(struct ac97_codec *codec) +{ + u16 id1, id2; + u16 audio, modem; + int i; + + /* probing AC97 codec, AC97 2.0 says that bit 15 of register 0x00 (reset) should + be read zero. Probing of AC97 in this way is not reliable, it is not even SAFE !! */ + codec->codec_write(codec, AC97_RESET, 0L); + if ((audio = codec->codec_read(codec, AC97_RESET)) & 0x8000) { + printk(KERN_ERR "ac97_codec: %s ac97 codec not present\n", + codec->id ? "Secondary" : "Primary"); + return 0; + } + + /* probe for Modem Codec */ + codec->codec_write(codec, AC97_EXTENDED_MODEM_ID, 0L); + modem = codec->codec_read(codec, AC97_EXTENDED_MODEM_ID); + + codec->name = NULL; + codec->codec_init = NULL; + + id1 = codec->codec_read(codec, AC97_VENDOR_ID1); + id2 = codec->codec_read(codec, AC97_VENDOR_ID2); + for (i = 0; i < arraysize(ac97_codec_ids); i++) { + if (ac97_codec_ids[i].id == ((id1 << 16) | id2)) { + codec->name = ac97_codec_ids[i].name; + codec->codec_init = ac97_codec_ids[i].init; + break; + } + } + if (codec->name == NULL) + codec->name = "Unknown"; + printk(KERN_INFO "ac97_codec: AC97 %s codec, vendor id1: 0x%04x, " + "id2: 0x%04x (%s)\n", audio ? "Audio" : (modem ? "Modem" : ""), + id1, id2, codec->name); + + return ac97_init_mixer(codec); +} + +static int ac97_init_mixer(struct ac97_codec *codec) +{ + u16 cap; + int i; + + cap = codec->codec_read(codec, AC97_RESET); + + /* mixer masks */ + codec->supported_mixers = AC97_SUPPORTED_MASK; + codec->stereo_mixers = AC97_STEREO_MASK; + codec->record_sources = AC97_RECORD_MASK; + if (!(cap & 0x04)) + codec->supported_mixers &= ~(SOUND_MASK_BASS|SOUND_MASK_TREBLE); + if (!(cap & 0x10)) + codec->supported_mixers &= ~SOUND_MASK_ALTPCM; + + /* generic OSS to AC97 wrapper */ + codec->read_mixer = ac97_read_mixer; + codec->write_mixer = ac97_write_mixer; + codec->recmask_io = ac97_recmask_io; + codec->mixer_ioctl = ac97_mixer_ioctl; + + /* initialize volume level */ + codec->codec_write(codec, AC97_MASTER_VOL_STEREO, 0L); + codec->codec_write(codec, AC97_PCMOUT_VOL, 0L); + + /* codec specific initialization for 4-6 channel output or secondary codec stuff */ + if (codec->id != 0 && codec->codec_init != NULL) { + codec->codec_init(codec); + } + + /* initilize mixer channel volumes */ + for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) { + struct mixer_defaults *md = &mixer_defaults[i]; + if (md->mixer == -1) + break; + if (!supported_mixer(codec, md->mixer)) + continue; + ac97_set_mixer(codec, md->mixer, md->value); + } + + return 1; +} + +static int ac97_init_modem(struct ac97_codec *codec) +{ + return 0; +} + +static int sigmatel_init(struct ac97_codec * codec) +{ + codec->codec_write(codec, AC97_SURROUND_MASTER, 0L); + + /* initialize SigmaTel STAC9721/23 as secondary codec, decoding AC link + sloc 3,4 = 0x01, slot 7,8 = 0x00, */ + codec->codec_write(codec, 0x74, 0x00); + + /* we don't have the crystal when we are on an AMR card, so use + BIT_CLK as our clock source. Write the magic word ABBA and read + back to enable register 0x78 */ + codec->codec_write(codec, 0x76, 0xabba); + codec->codec_read(codec, 0x76); + + /* sync all the clocks*/ + codec->codec_write(codec, 0x78, 0x3802); + + return 1; +} + +EXPORT_SYMBOL(ac97_read_proc); +EXPORT_SYMBOL(ac97_probe_codec); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sound/i810_audio.c linux.16p3/drivers/sound/i810_audio.c --- linux.vanilla/drivers/sound/i810_audio.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/drivers/sound/i810_audio.c Fri May 12 17:52:41 2000 @@ -0,0 +1,1859 @@ +/* + * Intel i810 and friends ICH driver for Linux + * Alan Cox + * + * Built from: + * Low level code: Zach Brown (original nonworking i810 OSS driver) + * Jaroslav Kysela (working ALSA driver) + * + * Framework: Thomas Sailer + * Extended by: Zach Brown + * and others.. + * + * Hardware Provided By: + * Analog Devices (A major AC97 codec maker) + * Intel Corp (you've probably heard of them already) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * Intel 810 theory of operation + * + * The chipset provides three DMA channels that talk to an AC97 + * CODEC (AC97 is a digital/analog mixer standard). At its simplest + * you get 48Khz audio with basic volume and mixer controls. At the + * best you get rate adaption in the codec. We set the card up so + * that we never take completion interrupts but instead keep the card + * chasing its tail around a ring buffer. This is needed for mmap + * mode audio and happens to work rather well for non-mmap modes too. + * + * The board has one output channel for PCM audio (supported) and + * a stereo line in and mono microphone input. Again these are normally + * locked to 48Khz only. Right now recording is not finished. + * + * There is no midi support, no synth support. Use timidity. To get + * esd working you need to use esd -r 48000 as it won't probe 48KHz + * by default. mpg123 can't handle 48Khz only audio so use xmms. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef PCI_DEVICE_ID_INTEL_82801 +#define PCI_DEVICE_ID_INTEL_82801 0x2415 +#endif +#ifndef PCI_DEVICE_ID_INTEL_82901 +#define PCI_DEVICE_ID_INTEL_82901 0x2425 +#endif +#ifndef PCI_DEVICE_ID_INTEL_440MX +#define PCI_DEVICE_ID_INTEL_440MX 0x7195 +#endif + +#define ADC_RUNNING 1 +#define DAC_RUNNING 2 + +#define I810_FMT_16BIT 1 /* These are fixed in fact */ +#define I810_FMT_STEREO 2 +#define I810_FMT_MASK 3 + +/* the 810's array of pointers to data buffers */ + +struct sg_item { +#define BUSADDR_MASK 0xFFFFFFFE + u32 busaddr; +#define CON_IOC 0x80000000 /* interrupt on completion */ +#define CON_BUFPAD 0x40000000 /* pad underrun with last sample, else 0 */ +#define CON_BUFLEN_MASK 0x0000ffff /* buffer length in samples */ + u32 control; +}; + +/* an instance of the i810 channel */ +#define SG_LEN 32 +struct i810_channel +{ + /* these sg guys should probably be allocated + seperately as nocache. Must be 8 byte aligned */ + struct sg_item sg[SG_LEN]; /* 32*8 */ + u32 offset; /* 4 */ + u32 port; /* 4 */ + u32 used; /* 4 */ + u32 num; /* 4 */ +}; + +/* + * we have 3 seperate dma engines. pcm in, pcm out, and mic. + * each dma engine has controlling registers. These goofy + * names are from the datasheet, but make it easy to write + * code while leafing through it. Right now we don't support + * the MIC input. + */ + +#define ENUM_ENGINE(PRE,DIG) \ +enum { \ + ##PRE##_BDBAR = 0x##DIG##0, /* Buffer Descriptor list Base Address */ \ + ##PRE##_CIV = 0x##DIG##4, /* Current Index Value */ \ + ##PRE##_LVI = 0x##DIG##5, /* Last Valid Index */ \ + ##PRE##_SR = 0x##DIG##6, /* Status Register */ \ + ##PRE##_PICB = 0x##DIG##8, /* Position In Current Buffer */ \ + ##PRE##_PIV = 0x##DIG##a, /* Prefetched Index Value */ \ + ##PRE##_CR = 0x##DIG##b /* Control Register */ \ +} + +ENUM_ENGINE(OFF,0); /* Offsets */ +ENUM_ENGINE(PI,0); /* PCM In */ +ENUM_ENGINE(PO,1); /* PCM Out */ +ENUM_ENGINE(MC,2); /* Mic In */ + +enum { + GLOB_CNT = 0x2c, /* Global Control */ + GLOB_STA = 0x30, /* Global Status */ + CAS = 0x34 /* Codec Write Semaphore Register */ +}; + +/* interrupts for a dma engine */ +#define DMA_INT_FIFO (1<<4) /* fifo under/over flow */ +#define DMA_INT_COMPLETE (1<<3) /* buffer read/write complete and ioc set */ +#define DMA_INT_LVI (1<<2) /* last valid done */ +#define DMA_INT_CELV (1<<1) /* last valid is current */ +#define DMA_INT_MASK (DMA_INT_FIFO|DMA_INT_COMPLETE|DMA_INT_LVI) + +/* interrupts for the whole chip */ +#define INT_SEC (1<<11) +#define INT_PRI (1<<10) +#define INT_MC (1<<7) +#define INT_PO (1<<6) +#define INT_PI (1<<5) +#define INT_MO (1<<2) +#define INT_NI (1<<1) +#define INT_GPI (1<<0) +#define INT_MASK (INT_SEC|INT_PRI|INT_MC|INT_PO|INT_PI|INT_MO|INT_NI|INT_GPI) + + +#define DRIVER_VERSION "0.02" + +/* magic numbers to protect our data structures */ +#define I810_CARD_MAGIC 0x5072696E /* "Prin" */ +#define I810_STATE_MAGIC 0x63657373 /* "cess" */ +#define NR_HW_CH 3 + +/* maxinum number of AC97 codecs connected, AC97 2.0 defined 4 */ +#define NR_AC97 2 + +/* minor number of /dev/dspW */ +#define SND_DEV_DSP8 1 + +/* minor number of /dev/dspW */ +#define SND_DEV_DSP16 1 + +static const unsigned sample_size[] = { 1, 2, 2, 4 }; +static const unsigned sample_shift[] = { 0, 1, 1, 2 }; + +enum { + ICH82801AA = 0, + ICH82901AB, + INTEL440MX +}; + +/* "software" or virtual channel, an instance of opened /dev/dsp */ +struct i810_state { + unsigned int magic; + struct i810_card *card; /* Card info */ + + /* single open lock mechanism, only used for recording */ + struct semaphore open_sem; + struct wait_queue *open_wait; + + /* file mode */ + mode_t open_mode; + + /* virtual channel number */ + int virt; + + struct dmabuf { + /* wave sample stuff */ + unsigned int rate; + unsigned char fmt, enable; + + /* hardware channel */ + struct i810_channel *channel; + + /* OSS buffer management stuff */ + void *rawbuf; + unsigned buforder; + unsigned numfrag; + unsigned fragshift; + + /* our buffer acts like a circular ring */ + unsigned hwptr; /* where dma last started, updated by update_ptr */ + unsigned swptr; /* where driver last clear/filled, updated by read/write */ + int count; /* bytes to be comsumed or been generated by dma machine */ + unsigned total_bytes; /* total bytes dmaed by hardware */ + + unsigned error; /* number of over/underruns */ + struct wait_queue *wait; /* put process on wait queue when no more space in buffer */ + + /* redundant, but makes calculations easier */ + unsigned fragsize; + unsigned dmasize; + unsigned fragsamples; + + /* OSS stuff */ + unsigned mapped:1; + unsigned ready:1; + unsigned endcleared:1; + unsigned update_flag; + unsigned ossfragshift; + int ossmaxfrags; + unsigned subdivision; + } dmabuf; +}; + + +struct i810_card { + struct i810_channel channel[3]; + unsigned int magic; + + /* We keep i810 cards in a linked list */ + struct i810_card *next; + + /* The i810 has a certain amount of cross channel interaction + so we use a single per card lock */ + spinlock_t lock; + + /* PCI device stuff */ + struct pci_dev * pci_dev; + u16 pci_id; + + /* soundcore stuff */ + int dev_audio; + + /* structures for abstraction of hardware facilities, codecs, banks and channels*/ + struct ac97_codec *ac97_codec[NR_AC97]; + struct i810_state *states[NR_HW_CH]; + + u16 ac97_features; + + /* hardware resources */ + unsigned long iobase; + unsigned long ac97base; + u32 irq; + + /* Function support */ + struct i810_channel *(*alloc_pcm_channel)(struct i810_card *); + struct i810_channel *(*alloc_rec_pcm_channel)(struct i810_card *); + void (*free_pcm_channel)(struct i810_card *, int chan); +}; + +static struct i810_card *devs = NULL; + +static int i810_open_mixdev(struct inode *inode, struct file *file); +static int i810_release_mixdev(struct inode *inode, struct file *file); +static int i810_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, + unsigned long arg); +static loff_t i810_llseek(struct file *file, loff_t offset, int origin); + +extern __inline__ unsigned ld2(unsigned int x) +{ + unsigned r = 0; + + if (x >= 0x10000) { + x >>= 16; + r += 16; + } + if (x >= 0x100) { + x >>= 8; + r += 8; + } + if (x >= 0x10) { + x >>= 4; + r += 4; + } + if (x >= 4) { + x >>= 2; + r += 2; + } + if (x >= 2) + r++; + return r; +} + +static u16 i810_ac97_get(struct ac97_codec *dev, u8 reg); +static void i810_ac97_set(struct ac97_codec *dev, u8 reg, u16 data); + +static struct i810_channel *i810_alloc_pcm_channel(struct i810_card *card) +{ + if(card->channel[1].used==1) + return NULL; + card->channel[1].used=1; + card->channel[1].offset = 0; + card->channel[1].port = 0x10; + card->channel[1].num=1; + return &card->channel[1]; +} + +static struct i810_channel *i810_alloc_rec_pcm_channel(struct i810_card *card) +{ + if(card->channel[0].used==1) + return NULL; + card->channel[0].used=1; + card->channel[0].offset = 0; + card->channel[0].port = 0x00; + card->channel[1].num=0; + return &card->channel[0]; +} + +static void i810_free_pcm_channel(struct i810_card *card, int channel) +{ + card->channel[channel].used=0; +} + +/* set playback sample rate */ +static unsigned int i810_set_dac_rate(struct i810_state * state, unsigned int rate) +{ + struct dmabuf *dmabuf = &state->dmabuf; + u16 dacp, rp; + struct ac97_codec *codec=state->card->ac97_codec[0]; + + if(!(state->card->ac97_features&0x0001)) + { + dmabuf->rate=48000; + return 48000; + } + + if (rate > 48000) + rate = 48000; + if (rate < 4000) + rate = 4000; + + /* Power down the DAC */ + dacp=i810_ac97_get(codec, AC97_POWER_CONTROL); + i810_ac97_set(codec, AC97_POWER_CONTROL, dacp|0x0200); + + /* Load the rate and read the effective rate */ + i810_ac97_set(codec, AC97_PCM_FRONT_DAC_RATE, rate); + rp=i810_ac97_get(codec, AC97_PCM_FRONT_DAC_RATE); + +// printk("DAC rate set to %d Returned %d\n", +// rate, (int)rp); + + rate=rp; + + /* Power it back up */ + i810_ac97_set(codec, AC97_POWER_CONTROL, dacp); + + dmabuf->rate = rate; +#ifdef DEBUG + printk("i810_audio: called i810_set_dac_rate : rate = %d\n", rate); +#endif + + return rate; +} + +/* set recording sample rate */ +static unsigned int i810_set_adc_rate(struct i810_state * state, unsigned int rate) +{ + struct dmabuf *dmabuf = &state->dmabuf; + u16 dacp, rp; + struct ac97_codec *codec=state->card->ac97_codec[0]; + + if(!(state->card->ac97_features&0x0001)) + { + dmabuf->rate = 48000; + return 48000; + } + + if (rate > 48000) + rate = 48000; + if (rate < 4000) + rate = 4000; + + /* Power down the ADC */ + dacp=i810_ac97_get(codec, AC97_POWER_CONTROL); + i810_ac97_set(codec, AC97_POWER_CONTROL, dacp|0x0100); + + /* Load the rate and read the effective rate */ + i810_ac97_set(codec, AC97_PCM_LR_ADC_RATE, rate); + rp=i810_ac97_get(codec, AC97_PCM_LR_ADC_RATE); + +// printk("ADC rate set to %d Returned %d\n", +// rate, (int)rp); + + rate=rp; + + /* Power it back up */ + i810_ac97_set(codec, AC97_POWER_CONTROL, dacp); + + dmabuf->rate = rate; +#ifdef DEBUG + printk("i810_audio: called i810_set_adc_rate : rate = %d\n", rate); +#endif + + return rate; + +} + +/* prepare channel attributes for playback */ +static void i810_play_setup(struct i810_state *state) +{ +// struct dmabuf *dmabuf = &state->dmabuf; +// struct i810_channel *channel = dmabuf->channel; + /* Fixed format. .. */ + //if (dmabuf->fmt & I810_FMT_16BIT) + //if (dmabuf->fmt & I810_FMT_STEREO) +} + +/* prepare channel attributes for recording */ +static void i810_rec_setup(struct i810_state *state) +{ +// u16 w; +// struct i810_card *card = state->card; +// struct dmabuf *dmabuf = &state->dmabuf; +// struct i810_channel *channel = dmabuf->channel; + + /* Enable AC-97 ADC (capture) */ +// if (dmabuf->fmt & I810_FMT_16BIT) { +// if (dmabuf->fmt & I810_FMT_STEREO) +} + + +/* get current playback/recording dma buffer pointer (byte offset from LBA), + called with spinlock held! */ + +extern __inline__ unsigned i810_get_dma_addr(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + u32 offset; + struct i810_channel *c = dmabuf->channel; + + if (!dmabuf->enable) + return 0; + offset = inb(state->card->iobase+c->port+OFF_CIV); +// offset++; + offset&=31; + /* Offset has to compensate for the fact we finished the segment + on the IRQ so we are at next_segment,0 */ +// printk("BANK%d ", offset); + offset *= (dmabuf->dmasize/SG_LEN); +// printk("DMASZ=%d", dmabuf->dmasize); +// offset += 1024-(2*inw(state->card->iobase+c->port+OFF_PICB)); +// printk("OFF%d ", offset); + return offset; +} + +static void resync_dma_ptrs(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + struct i810_channel *c = dmabuf->channel; + int offset; + + offset = inb(state->card->iobase+c->port+OFF_CIV); + offset *= (dmabuf->dmasize/SG_LEN); + + dmabuf->hwptr=dmabuf->swptr = offset; +} + +/* Stop recording (lock held) */ +extern __inline__ void __stop_adc(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + struct i810_card *card = state->card; + + dmabuf->enable &= ~ADC_RUNNING; + outb(0, card->iobase + PI_CR); +} + +static void stop_adc(struct i810_state *state) +{ + struct i810_card *card = state->card; + unsigned long flags; + + spin_lock_irqsave(&card->lock, flags); + __stop_adc(state); + spin_unlock_irqrestore(&card->lock, flags); +} + +static void start_adc(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + struct i810_card *card = state->card; + unsigned long flags; + + spin_lock_irqsave(&card->lock, flags); + if ((dmabuf->mapped || dmabuf->count < (signed)dmabuf->dmasize) && dmabuf->ready) { + dmabuf->enable |= ADC_RUNNING; + outb((1<<4) | 1<<2 | 1, card->iobase + PI_CR); + } + spin_unlock_irqrestore(&card->lock, flags); +} + +/* stop playback (lock held) */ +extern __inline__ void __stop_dac(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + struct i810_card *card = state->card; + + dmabuf->enable &= ~DAC_RUNNING; + outb(0, card->iobase + PO_CR); +} + +static void stop_dac(struct i810_state *state) +{ + struct i810_card *card = state->card; + unsigned long flags; + + spin_lock_irqsave(&card->lock, flags); + __stop_dac(state); + spin_unlock_irqrestore(&card->lock, flags); +} + +static void start_dac(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + struct i810_card *card = state->card; + unsigned long flags; + + spin_lock_irqsave(&card->lock, flags); + if ((dmabuf->mapped || dmabuf->count > 0) && dmabuf->ready) { + if(!(dmabuf->enable&DAC_RUNNING)) + { + dmabuf->enable |= DAC_RUNNING; + outb((1<<4) | 1<<2 | 1, card->iobase + PO_CR); + } + } + spin_unlock_irqrestore(&card->lock, flags); +} + +#define DMABUF_DEFAULTORDER (15-PAGE_SHIFT) +#define DMABUF_MINORDER 1 + +/* allocate DMA buffer, playback and recording buffer should be allocated seperately */ +static int alloc_dmabuf(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + void *rawbuf = NULL; + int order; + unsigned long map, mapend; + + /* alloc as big a chunk as we can */ + for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--) + if((rawbuf = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, order))) + break; + + if (!rawbuf) + return -ENOMEM; + +#ifdef DEBUG + printk("i810_audio: allocated %ld (order = %d) bytes at %p\n", + PAGE_SIZE << order, order, rawbuf); +#endif + + dmabuf->ready = dmabuf->mapped = 0; + dmabuf->rawbuf = rawbuf; + dmabuf->buforder = order; + + /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */ + mapend = MAP_NR(rawbuf + (PAGE_SIZE << order) - 1); + for (map = MAP_NR(rawbuf); map <= mapend; map++) + set_bit(PG_reserved, &mem_map[map].flags); + + return 0; +} + +/* free DMA buffer */ +static void dealloc_dmabuf(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + unsigned long map, mapend; + + if (dmabuf->rawbuf) { + /* undo marking the pages as reserved */ + mapend = MAP_NR(dmabuf->rawbuf + (PAGE_SIZE << dmabuf->buforder) - 1); + for (map = MAP_NR(dmabuf->rawbuf); map <= mapend; map++) + clear_bit(PG_reserved, &mem_map[map].flags); + free_pages((unsigned long)dmabuf->rawbuf,dmabuf->buforder); + } + dmabuf->rawbuf = NULL; + dmabuf->mapped = dmabuf->ready = 0; +} + +static int prog_dmabuf(struct i810_state *state, unsigned rec) +{ + struct dmabuf *dmabuf = &state->dmabuf; + struct sg_item *sg; + unsigned bytepersec; + unsigned bufsize; + unsigned long flags; + int ret; + unsigned fragsize; + int i; + + spin_lock_irqsave(&state->card->lock, flags); + resync_dma_ptrs(state); + dmabuf->total_bytes = 0; + dmabuf->count = dmabuf->error = 0; + spin_unlock_irqrestore(&state->card->lock, flags); + + /* allocate DMA buffer if not allocated yet */ + if (!dmabuf->rawbuf) + if ((ret = alloc_dmabuf(state))) + return ret; + + /* FIXME: figure out all this OSS fragment stuff */ + bytepersec = dmabuf->rate << sample_shift[dmabuf->fmt]; + bufsize = PAGE_SIZE << dmabuf->buforder; + if (dmabuf->ossfragshift) { + if ((1000 << dmabuf->ossfragshift) < bytepersec) + dmabuf->fragshift = ld2(bytepersec/1000); + else + dmabuf->fragshift = dmabuf->ossfragshift; + } else { + /* lets hand out reasonable big ass buffers by default */ + dmabuf->fragshift = (dmabuf->buforder + PAGE_SHIFT -2); + } + dmabuf->numfrag = bufsize >> dmabuf->fragshift; + while (dmabuf->numfrag < 4 && dmabuf->fragshift > 3) { + dmabuf->fragshift--; + dmabuf->numfrag = bufsize >> dmabuf->fragshift; + } + dmabuf->fragsize = 1 << dmabuf->fragshift; + if (dmabuf->ossmaxfrags >= 4 && dmabuf->ossmaxfrags < dmabuf->numfrag) + dmabuf->numfrag = dmabuf->ossmaxfrags; + dmabuf->fragsamples = dmabuf->fragsize >> sample_shift[dmabuf->fmt]; + dmabuf->dmasize = dmabuf->numfrag << dmabuf->fragshift; + + memset(dmabuf->rawbuf, (dmabuf->fmt & I810_FMT_16BIT) ? 0 : 0x80, + dmabuf->dmasize); + + /* + * Now set up the ring + */ + + sg=&dmabuf->channel->sg[0]; + fragsize = bufsize / SG_LEN; + + /* + * Load up 32 sg entries and take an interrupt at each + * step (we might want less interrupts later..) + */ + + for(i=0;i<32;i++) + { + sg->busaddr=virt_to_bus(dmabuf->rawbuf+fragsize*i); + sg->control=(fragsize>>1); + sg->control|=CON_IOC; + sg++; + } + spin_lock_irqsave(&state->card->lock, flags); + outl(virt_to_bus(&dmabuf->channel->sg[0]), state->card->iobase+dmabuf->channel->port+OFF_BDBAR); + outb(16, state->card->iobase+dmabuf->channel->port+OFF_LVI); + outb(0, state->card->iobase+dmabuf->channel->port+OFF_CIV); + if (rec) { + i810_rec_setup(state); + } else { + i810_play_setup(state); + } + spin_unlock_irqrestore(&state->card->lock, flags); + + /* set the ready flag for the dma buffer */ + dmabuf->ready = 1; + +#ifdef DEBUG + printk("i810_audio: prog_dmabuf, sample rate = %d, format = %d, numfrag = %d, " + "fragsize = %d dmasize = %d\n", + dmabuf->rate, dmabuf->fmt, dmabuf->numfrag, + dmabuf->fragsize, dmabuf->dmasize); +#endif + + return 0; +} + +/* we are doing quantum mechanics here, the buffer can only be empty, half or full filled i.e. + |------------|------------| or |xxxxxxxxxxxx|------------| or |xxxxxxxxxxxx|xxxxxxxxxxxx| + but we almost always get this + |xxxxxx------|------------| or |xxxxxxxxxxxx|xxxxx-------| + so we have to clear the tail space to "silence" + |xxxxxx000000|------------| or |xxxxxxxxxxxx|xxxxxx000000| +*/ +static void i810_clear_tail(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + unsigned swptr; + unsigned char silence = (dmabuf->fmt & I810_FMT_16BIT) ? 0 : 0x80; + unsigned int len; + unsigned long flags; + + spin_lock_irqsave(&state->card->lock, flags); + swptr = dmabuf->swptr; + spin_unlock_irqrestore(&state->card->lock, flags); + + if (swptr == 0 || swptr == dmabuf->dmasize / 2 || swptr == dmabuf->dmasize) + return; + + if (swptr < dmabuf->dmasize/2) + len = dmabuf->dmasize/2 - swptr; + else + len = dmabuf->dmasize - swptr; + + memset(dmabuf->rawbuf + swptr, silence, len); + + spin_lock_irqsave(&state->card->lock, flags); + dmabuf->swptr += len; + dmabuf->count += len; + spin_unlock_irqrestore(&state->card->lock, flags); + + /* restart the dma machine in case it is halted */ + start_dac(state); +} + +static int drain_dac(struct i810_state *state, int nonblock) +{ + struct wait_queue wait = {current, NULL}; + struct dmabuf *dmabuf = &state->dmabuf; + unsigned long flags; + unsigned long tmo; + int count; + + if (dmabuf->mapped || !dmabuf->ready) + return 0; + + add_wait_queue(&dmabuf->wait, &wait); + for (;;) { + /* It seems that we have to set the current state to TASK_INTERRUPTIBLE + every time to make the process really go to sleep */ + current->state = TASK_INTERRUPTIBLE; + + spin_lock_irqsave(&state->card->lock, flags); + count = dmabuf->count; + spin_unlock_irqrestore(&state->card->lock, flags); + + if (count <= 0) + break; + + if (signal_pending(current)) + break; + + if (nonblock) { + remove_wait_queue(&dmabuf->wait, &wait); + current->state = TASK_RUNNING; + return -EBUSY; + } + + tmo = (dmabuf->dmasize * HZ) / dmabuf->rate; + tmo >>= sample_shift[dmabuf->fmt]; + if (!schedule_timeout(tmo ? tmo : 1) && tmo){ + printk(KERN_ERR "i810_audio: drain_dac, dma timeout?\n"); + break; + } + } + remove_wait_queue(&dmabuf->wait, &wait); + current->state = TASK_RUNNING; + if (signal_pending(current)) + return -ERESTARTSYS; + + return 0; +} + +/* update buffer manangement pointers, especially, dmabuf->count and dmabuf->hwptr */ +static void i810_update_ptr(struct i810_state *state) +{ + struct dmabuf *dmabuf = &state->dmabuf; + unsigned hwptr, swptr; + int clear_cnt = 0; + int diff; + unsigned char silence; +// unsigned half_dmasize; + + /* update hardware pointer */ + hwptr = i810_get_dma_addr(state); + diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize; +// printk("HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff); + dmabuf->hwptr = hwptr; + dmabuf->total_bytes += diff; + + /* error handling and process wake up for DAC */ + if (dmabuf->enable == ADC_RUNNING) { + if (dmabuf->mapped) { + dmabuf->count -= diff; + if (dmabuf->count >= (signed)dmabuf->fragsize) + wake_up(&dmabuf->wait); + } else { + dmabuf->count += diff; + + if (dmabuf->count < 0 || dmabuf->count > dmabuf->dmasize) { + /* buffer underrun or buffer overrun, we have no way to recover + it here, just stop the machine and let the process force hwptr + and swptr to sync */ + __stop_adc(state); + dmabuf->error++; + } + else if (!dmabuf->endcleared) { + swptr = dmabuf->swptr; + silence = (dmabuf->fmt & I810_FMT_16BIT ? 0 : 0x80); + if (dmabuf->count < (signed) dmabuf->fragsize) + { + clear_cnt = dmabuf->fragsize; + if ((swptr + clear_cnt) > dmabuf->dmasize) + clear_cnt = dmabuf->dmasize - swptr; + memset (dmabuf->rawbuf + swptr, silence, clear_cnt); + dmabuf->endcleared = 1; + } + } + wake_up(&dmabuf->wait); + } + } + /* error handling and process wake up for DAC */ + if (dmabuf->enable == DAC_RUNNING) { + if (dmabuf->mapped) { + dmabuf->count += diff; + if (dmabuf->count >= (signed)dmabuf->fragsize) + wake_up(&dmabuf->wait); + } else { + dmabuf->count -= diff; + + if (dmabuf->count < 0 || dmabuf->count > dmabuf->dmasize) { + /* buffer underrun or buffer overrun, we have no way to recover + it here, just stop the machine and let the process force hwptr + and swptr to sync */ + __stop_dac(state); +// printk("DMA overrun on send\n"); + dmabuf->error++; + } + wake_up(&dmabuf->wait); + } + } +} + +static void i810_channel_interrupt(struct i810_card *card) +{ + int i; + +// printk("CHANNEL IRQ .. "); + for(i=0;istates[i]; + struct i810_channel *c; + unsigned long port = card->iobase; + u16 status; + + if(!state) + continue; + if(!state->dmabuf.ready) + continue; + c=state->dmabuf.channel; + + port+=c->port; + +// printk("PORT %lX (", port); + + status = inw(port + OFF_SR); + +// printk("ST%d ", status); + + if(status & DMA_INT_LVI) + { + /* Back to the start */ +// printk("LVI - STOP"); + outb((inb(port+OFF_CIV)-1)&31, port+OFF_LVI); + i810_update_ptr(state); + outb(0, port + OFF_CR); + } + if(status & DMA_INT_COMPLETE) + { + int x; + /* Keep the card chasing its tail */ + outb(x=((inb(port+OFF_CIV)-1)&31), port+OFF_LVI); + i810_update_ptr(state); +// printk("COMP%d ",x); + } +// printk(")"); + outw(status & DMA_INT_MASK, port + OFF_SR); + } +// printk("\n"); +} + +static void i810_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct i810_card *card = (struct i810_card *)dev_id; + u32 status; + + spin_lock(&card->lock); + + status = inl(card->iobase + GLOB_STA); + if(!(status & INT_MASK)) + { + spin_unlock(&card->lock); + return; /* not for us */ + } + +// printk("Interrupt %X: ", status); + if(status & (INT_PO|INT_PI|INT_MC)) + i810_channel_interrupt(card); + + /* clear 'em */ + outl(status & INT_MASK, card->iobase + GLOB_STA); + spin_unlock(&card->lock); +} + +static loff_t i810_llseek(struct file *file, loff_t offset, int origin) +{ + return -ESPIPE; +} + +/* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to + the user's buffer. it is filled by the dma machine and drained by this loop. */ +static ssize_t i810_read(struct file *file, char *buffer, size_t count, loff_t *ppos) +{ + struct i810_state *state = (struct i810_state *)file->private_data; + struct dmabuf *dmabuf = &state->dmabuf; + ssize_t ret; + unsigned long flags; + unsigned swptr; + int cnt; + +#ifdef DEBUG + printk("i810_audio: i810_read called, count = %d\n", count); +#endif + + if (ppos != &file->f_pos) + return -ESPIPE; + if (dmabuf->mapped) + return -ENXIO; + if (!dmabuf->ready && (ret = prog_dmabuf(state, 1))) + return ret; + if (!access_ok(VERIFY_WRITE, buffer, count)) + return -EFAULT; + ret = 0; + + while (count > 0) { + spin_lock_irqsave(&state->card->lock, flags); + if (dmabuf->count > (signed) dmabuf->dmasize) { + /* buffer overrun, we are recovering from sleep_on_timeout, + resync hwptr and swptr, make process flush the buffer */ + dmabuf->count = dmabuf->dmasize; + dmabuf->swptr = dmabuf->hwptr; + } + swptr = dmabuf->swptr; + cnt = dmabuf->dmasize - swptr; + if (dmabuf->count < cnt) + cnt = dmabuf->count; + spin_unlock_irqrestore(&state->card->lock, flags); + + if (cnt > count) + cnt = count; + if (cnt <= 0) { + unsigned long tmo; + /* buffer is empty, start the dma machine and wait for data to be + recorded */ + start_adc(state); + if (file->f_flags & O_NONBLOCK) { + if (!ret) ret = -EAGAIN; + return ret; + } + /* This isnt strictly right for the 810 but it'll do */ + tmo = (dmabuf->dmasize * HZ) / (dmabuf->rate * 2); + tmo >>= sample_shift[dmabuf->fmt]; + /* There are two situations when sleep_on_timeout returns, one is when + the interrupt is serviced correctly and the process is waked up by + ISR ON TIME. Another is when timeout is expired, which means that + either interrupt is NOT serviced correctly (pending interrupt) or it + is TOO LATE for the process to be scheduled to run (scheduler latency) + which results in a (potential) buffer overrun. And worse, there is + NOTHING we can do to prevent it. */ + if (!interruptible_sleep_on_timeout(&dmabuf->wait, tmo)) { +#ifdef DEBUG + printk(KERN_ERR "i810_audio: recording schedule timeout, " + "dmasz %u fragsz %u count %i hwptr %u swptr %u\n", + dmabuf->dmasize, dmabuf->fragsize, dmabuf->count, + dmabuf->hwptr, dmabuf->swptr); +#endif + /* a buffer overrun, we delay the recovery untill next time the + while loop begin and we REALLY have space to record */ + } + if (signal_pending(current)) { + ret = ret ? ret : -ERESTARTSYS; + return ret; + } + continue; + } + + if (copy_to_user(buffer, dmabuf->rawbuf + swptr, cnt)) { + if (!ret) ret = -EFAULT; + return ret; + } + + swptr = (swptr + cnt) % dmabuf->dmasize; + + spin_lock_irqsave(&state->card->lock, flags); + dmabuf->swptr = swptr; + dmabuf->count -= cnt; + spin_unlock_irqrestore(&state->card->lock, flags); + + count -= cnt; + buffer += cnt; + ret += cnt; + start_adc(state); + } + return ret; +} + +/* in this loop, dmabuf.count signifies the amount of data that is waiting to be dma to + the soundcard. it is drained by the dma machine and filled by this loop. */ +static ssize_t i810_write(struct file *file, const char *buffer, size_t count, loff_t *ppos) +{ + struct i810_state *state = (struct i810_state *)file->private_data; + struct dmabuf *dmabuf = &state->dmabuf; + ssize_t ret; + unsigned long flags; + unsigned swptr; + int cnt; + +#ifdef DEBUG + printk("i810_audio: i810_write called, count = %d\n", count); +#endif + + if (ppos != &file->f_pos) + return -ESPIPE; + if (dmabuf->mapped) + return -ENXIO; + if (!dmabuf->ready && (ret = prog_dmabuf(state, 0))) + return ret; + if (!access_ok(VERIFY_READ, buffer, count)) + return -EFAULT; + ret = 0; + + while (count > 0) { + spin_lock_irqsave(&state->card->lock, flags); + if (dmabuf->count < 0) { + /* buffer underrun, we are recovering from sleep_on_timeout, + resync hwptr and swptr */ + dmabuf->count = 0; + dmabuf->swptr = dmabuf->hwptr; + } + swptr = dmabuf->swptr; + cnt = dmabuf->dmasize - swptr; + if (dmabuf->count + cnt > dmabuf->dmasize) + cnt = dmabuf->dmasize - dmabuf->count; + spin_unlock_irqrestore(&state->card->lock, flags); + + if (cnt > count) + cnt = count; + if (cnt <= 0) { + unsigned long tmo; + /* buffer is full, start the dma machine and wait for data to be + played */ + start_dac(state); + if (file->f_flags & O_NONBLOCK) { + if (!ret) ret = -EAGAIN; + return ret; + } + /* Not strictly correct but works */ + tmo = (dmabuf->dmasize * HZ) / (dmabuf->rate * 2); + tmo >>= sample_shift[dmabuf->fmt]; + /* There are two situations when sleep_on_timeout returns, one is when + the interrupt is serviced correctly and the process is waked up by + ISR ON TIME. Another is when timeout is expired, which means that + either interrupt is NOT serviced correctly (pending interrupt) or it + is TOO LATE for the process to be scheduled to run (scheduler latency) + which results in a (potential) buffer underrun. And worse, there is + NOTHING we can do to prevent it. */ + if (!interruptible_sleep_on_timeout(&dmabuf->wait, tmo)) { +#ifdef DEBUG + printk(KERN_ERR "i810_audio: playback schedule timeout, " + "dmasz %u fragsz %u count %i hwptr %u swptr %u\n", + dmabuf->dmasize, dmabuf->fragsize, dmabuf->count, + dmabuf->hwptr, dmabuf->swptr); +#endif + /* a buffer underrun, we delay the recovery untill next time the + while loop begin and we REALLY have data to play */ + } + if (signal_pending(current)) { + if (!ret) ret = -ERESTARTSYS; + return ret; + } + continue; + } + if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) { + if (!ret) ret = -EFAULT; + return ret; + } + + swptr = (swptr + cnt) % dmabuf->dmasize; + + spin_lock_irqsave(&state->card->lock, flags); + dmabuf->swptr = swptr; + dmabuf->count += cnt; + dmabuf->endcleared = 0; + spin_unlock_irqrestore(&state->card->lock, flags); + + count -= cnt; + buffer += cnt; + ret += cnt; + start_dac(state); + } + return ret; +} + +static unsigned int i810_poll(struct file *file, struct poll_table_struct *wait) +{ + struct i810_state *state = (struct i810_state *)file->private_data; + struct dmabuf *dmabuf = &state->dmabuf; + unsigned long flags; + unsigned int mask = 0; + + if (file->f_mode & FMODE_WRITE) + poll_wait(file, &dmabuf->wait, wait); + if (file->f_mode & FMODE_READ) + poll_wait(file, &dmabuf->wait, wait); + + spin_lock_irqsave(&state->card->lock, flags); + i810_update_ptr(state); + if (file->f_mode & FMODE_READ) { + if (dmabuf->count >= (signed)dmabuf->fragsize) + mask |= POLLIN | POLLRDNORM; + } + if (file->f_mode & FMODE_WRITE) { + if (dmabuf->mapped) { + if (dmabuf->count >= (signed)dmabuf->fragsize) + mask |= POLLOUT | POLLWRNORM; + } else { + if ((signed)dmabuf->dmasize >= dmabuf->count + (signed)dmabuf->fragsize) + mask |= POLLOUT | POLLWRNORM; + } + } + spin_unlock_irqrestore(&state->card->lock, flags); + + return mask; +} + +static int i810_mmap(struct file *file, struct vm_area_struct *vma) +{ + struct i810_state *state = (struct i810_state *)file->private_data; + struct dmabuf *dmabuf = &state->dmabuf; + int ret; + unsigned long size; + + if (vma->vm_flags & VM_WRITE) { + if ((ret = prog_dmabuf(state, 0)) != 0) + return ret; + } else if (vma->vm_flags & VM_READ) { + if ((ret = prog_dmabuf(state, 1)) != 0) + return ret; + } else + return -EINVAL; + + if (vma->vm_offset != 0) + return -EINVAL; + size = vma->vm_end - vma->vm_start; + if (size > (PAGE_SIZE << dmabuf->buforder)) + return -EINVAL; + if (remap_page_range(vma->vm_start, virt_to_phys(dmabuf->rawbuf), + size, vma->vm_page_prot)) + return -EAGAIN; + dmabuf->mapped = 1; + + return 0; +} + +static int i810_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ + struct i810_state *state = (struct i810_state *)file->private_data; + struct dmabuf *dmabuf = &state->dmabuf; + unsigned long flags; + audio_buf_info abinfo; + count_info cinfo; + int val, mapped, ret; + + mapped = ((file->f_mode & FMODE_WRITE) && dmabuf->mapped) || + ((file->f_mode & FMODE_READ) && dmabuf->mapped); +#ifdef DEBUG + printk("i810_audio: i810_ioctl, command = %2d, arg = 0x%08x\n", + _IOC_NR(cmd), arg ? *(int *)arg : 0); +#endif + + switch (cmd) + { + case OSS_GETVERSION: + return put_user(SOUND_VERSION, (int *)arg); + + case SNDCTL_DSP_RESET: + /* FIXME: spin_lock ? */ + if (file->f_mode & FMODE_WRITE) { + stop_dac(state); + synchronize_irq(); + dmabuf->ready = 0; + resync_dma_ptrs(state); + dmabuf->swptr = dmabuf->hwptr = 0; + dmabuf->count = dmabuf->total_bytes = 0; + } + if (file->f_mode & FMODE_READ) { + stop_adc(state); + synchronize_irq(); + resync_dma_ptrs(state); + dmabuf->ready = 0; + dmabuf->swptr = dmabuf->hwptr = 0; + dmabuf->count = dmabuf->total_bytes = 0; + } + return 0; + + case SNDCTL_DSP_SYNC: + if (file->f_mode & FMODE_WRITE) + return drain_dac(state, file->f_flags & O_NONBLOCK); + return 0; + + case SNDCTL_DSP_SPEED: /* set smaple rate */ + get_user_ret(val, (int *)arg, -EFAULT); + if (val >= 0) { + if (file->f_mode & FMODE_WRITE) { + stop_dac(state); + dmabuf->ready = 0; + spin_lock_irqsave(&state->card->lock, flags); + i810_set_dac_rate(state, val); + spin_unlock_irqrestore(&state->card->lock, flags); + } + if (file->f_mode & FMODE_READ) { + stop_adc(state); + dmabuf->ready = 0; + spin_lock_irqsave(&state->card->lock, flags); + i810_set_adc_rate(state, val); + spin_unlock_irqrestore(&state->card->lock, flags); + } + } + return put_user(dmabuf->rate, (int *)arg); + + case SNDCTL_DSP_STEREO: /* set stereo or mono channel */ + get_user_ret(val, (int *)arg, -EFAULT); + if(val==0) + return -EINVAL; + if (file->f_mode & FMODE_WRITE) { + stop_dac(state); + dmabuf->ready = 0; + dmabuf->fmt = I810_FMT_STEREO; + } + if (file->f_mode & FMODE_READ) { + stop_adc(state); + dmabuf->ready = 0; + dmabuf->fmt = I810_FMT_STEREO; + } + return 0; + + case SNDCTL_DSP_GETBLKSIZE: + if (file->f_mode & FMODE_WRITE) { + if ((val = prog_dmabuf(state, 0))) + return val; + return put_user(dmabuf->fragsize, (int *)arg); + } + if (file->f_mode & FMODE_READ) { + if ((val = prog_dmabuf(state, 1))) + return val; + return put_user(dmabuf->fragsize, (int *)arg); + } + + case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/ + return put_user(AFMT_S16_LE, (int *)arg); + + case SNDCTL_DSP_SETFMT: /* Select sample format */ + get_user_ret(val, (int *)arg, -EFAULT); + if (val != AFMT_QUERY) { + if (file->f_mode & FMODE_WRITE) { + stop_dac(state); + dmabuf->ready = 0; + } + if (file->f_mode & FMODE_READ) { + stop_adc(state); + dmabuf->ready = 0; + } + } + return put_user(AFMT_S16_LE, (int *)arg); + + case SNDCTL_DSP_CHANNELS: + get_user_ret(val, (int *)arg, -EFAULT); + if (val != 0) { + if (file->f_mode & FMODE_WRITE) { + stop_dac(state); + dmabuf->ready = 0; + } + if (file->f_mode & FMODE_READ) { + stop_adc(state); + dmabuf->ready = 0; + } + } + return put_user(2, (int *)arg); + + case SNDCTL_DSP_POST: + /* FIXME: the same as RESET ?? */ + return 0; + + case SNDCTL_DSP_SUBDIVIDE: + if (dmabuf->subdivision) + return -EINVAL; + get_user_ret(val, (int *)arg, -EFAULT); + if (val != 1 && val != 2 && val != 4) + return -EINVAL; + dmabuf->subdivision = val; + return 0; + + case SNDCTL_DSP_SETFRAGMENT: + get_user_ret(val, (int *)arg, -EFAULT); + + dmabuf->ossfragshift = val & 0xffff; + dmabuf->ossmaxfrags = (val >> 16) & 0xffff; + if (dmabuf->ossfragshift < 4) + dmabuf->ossfragshift = 4; + if (dmabuf->ossfragshift > 15) + dmabuf->ossfragshift = 15; + if (dmabuf->ossmaxfrags < 4) + dmabuf->ossmaxfrags = 4; + + return 0; + + case SNDCTL_DSP_GETOSPACE: + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; + if (!dmabuf->enable && (val = prog_dmabuf(state, 0)) != 0) + return val; + spin_lock_irqsave(&state->card->lock, flags); + i810_update_ptr(state); + abinfo.fragsize = dmabuf->fragsize; + abinfo.bytes = dmabuf->dmasize - dmabuf->count; + abinfo.fragstotal = dmabuf->numfrag; + abinfo.fragments = abinfo.bytes >> dmabuf->fragshift; + spin_unlock_irqrestore(&state->card->lock, flags); + return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; + + case SNDCTL_DSP_GETISPACE: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; + if (!dmabuf->enable && (val = prog_dmabuf(state, 1)) != 0) + return val; + spin_lock_irqsave(&state->card->lock, flags); + i810_update_ptr(state); + abinfo.fragsize = dmabuf->fragsize; + abinfo.bytes = dmabuf->count; + abinfo.fragstotal = dmabuf->numfrag; + abinfo.fragments = abinfo.bytes >> dmabuf->fragshift; + spin_unlock_irqrestore(&state->card->lock, flags); + return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0; + + case SNDCTL_DSP_NONBLOCK: + file->f_flags |= O_NONBLOCK; + return 0; + + case SNDCTL_DSP_GETCAPS: + return put_user(DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP, + (int *)arg); + + case SNDCTL_DSP_GETTRIGGER: + val = 0; + if (file->f_mode & FMODE_READ && dmabuf->enable) + val |= PCM_ENABLE_INPUT; + if (file->f_mode & FMODE_WRITE && dmabuf->enable) + val |= PCM_ENABLE_OUTPUT; + return put_user(val, (int *)arg); + + case SNDCTL_DSP_SETTRIGGER: + get_user_ret(val, (int *)arg, -EFAULT); + if (file->f_mode & FMODE_READ) { + if (val & PCM_ENABLE_INPUT) { + if (!dmabuf->ready && (ret = prog_dmabuf(state, 1))) + return ret; + start_adc(state); + } else + stop_adc(state); + } + if (file->f_mode & FMODE_WRITE) { + if (val & PCM_ENABLE_OUTPUT) { + if (!dmabuf->ready && (ret = prog_dmabuf(state, 0))) + return ret; + start_dac(state); + } else + stop_dac(state); + } + return 0; + + case SNDCTL_DSP_GETIPTR: + if (!(file->f_mode & FMODE_READ)) + return -EINVAL; + spin_lock_irqsave(&state->card->lock, flags); + i810_update_ptr(state); + cinfo.bytes = dmabuf->total_bytes; + cinfo.blocks = dmabuf->count >> dmabuf->fragshift; + cinfo.ptr = dmabuf->hwptr; + if (dmabuf->mapped) + dmabuf->count &= dmabuf->fragsize-1; + spin_unlock_irqrestore(&state->card->lock, flags); + return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)); + + case SNDCTL_DSP_GETOPTR: + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; + spin_lock_irqsave(&state->card->lock, flags); + i810_update_ptr(state); + cinfo.bytes = dmabuf->total_bytes; + cinfo.blocks = dmabuf->count >> dmabuf->fragshift; + cinfo.ptr = dmabuf->hwptr; + if (dmabuf->mapped) + dmabuf->count &= dmabuf->fragsize-1; + spin_unlock_irqrestore(&state->card->lock, flags); + return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)); + + case SNDCTL_DSP_SETDUPLEX: + return -EINVAL; + + case SNDCTL_DSP_GETODELAY: + if (!(file->f_mode & FMODE_WRITE)) + return -EINVAL; + spin_lock_irqsave(&state->card->lock, flags); + i810_update_ptr(state); + val = dmabuf->count; + spin_unlock_irqrestore(&state->card->lock, flags); + return put_user(val, (int *)arg); + + case SOUND_PCM_READ_RATE: + return put_user(dmabuf->rate, (int *)arg); + + case SOUND_PCM_READ_CHANNELS: + return put_user((dmabuf->fmt & I810_FMT_STEREO) ? 2 : 1, + (int *)arg); + + case SOUND_PCM_READ_BITS: + return put_user(AFMT_S16_LE, (int *)arg); + + case SNDCTL_DSP_MAPINBUF: + case SNDCTL_DSP_MAPOUTBUF: + case SNDCTL_DSP_SETSYNCRO: + case SOUND_PCM_WRITE_FILTER: + case SOUND_PCM_READ_FILTER: + return -EINVAL; + } + return -EINVAL; +} + +static int i810_open(struct inode *inode, struct file *file) +{ + int i = 0; + int minor = MINOR(inode->i_rdev); + struct i810_card *card = devs; + struct i810_state *state = NULL; + struct dmabuf *dmabuf = NULL; + + /* find an avaiable virtual channel (instance of /dev/dsp) */ + while (card != NULL) { + for (i = 0; i < NR_HW_CH; i++) { + if (card->states[i] == NULL) { + state = card->states[i] = (struct i810_state *) + kmalloc(sizeof(struct i810_state), GFP_KERNEL); + if (state == NULL) + return -ENOMEM; + memset(state, 0, sizeof(struct i810_state)); + dmabuf = &state->dmabuf; + goto found_virt; + } + } + card = card->next; + } + /* no more virtual channel avaiable */ + if (!state) + return -ENODEV; + + found_virt: + /* found a free virtual channel, allocate hardware channels */ + if(file->f_mode & FMODE_READ) + dmabuf->channel = card->alloc_rec_pcm_channel(card); + else + dmabuf->channel = card->alloc_pcm_channel(card); + + if (dmabuf->channel == NULL) { + kfree (card->states[i]); + card->states[i] = NULL;; + return -ENODEV; + } + + /* initialize the virtual channel */ + state->virt = i; + state->card = card; + state->magic = I810_STATE_MAGIC; + dmabuf->wait = NULL; + state->open_sem = MUTEX; + file->private_data = state; + + down(&state->open_sem); + + /* set default sample format. According to OSS Programmer's Guide /dev/dsp + should be default to unsigned 8-bits, mono, with sample rate 8kHz and + /dev/dspW will accept 16-bits sample */ + if (file->f_mode & FMODE_WRITE) { + dmabuf->fmt &= ~I810_FMT_MASK; + dmabuf->fmt |= I810_FMT_16BIT; + dmabuf->ossfragshift = 0; + dmabuf->ossmaxfrags = 0; + dmabuf->subdivision = 0; + i810_set_dac_rate(state, 48000); + } + + if (file->f_mode & FMODE_READ) { + dmabuf->fmt &= ~I810_FMT_MASK; + dmabuf->fmt |= I810_FMT_16BIT; + dmabuf->ossfragshift = 0; + dmabuf->ossmaxfrags = 0; + dmabuf->subdivision = 0; + i810_set_adc_rate(state, 48000); + } + + state->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE); + up(&state->open_sem); + + MOD_INC_USE_COUNT; + return 0; +} + +static int i810_release(struct inode *inode, struct file *file) +{ + struct i810_state *state = (struct i810_state *)file->private_data; + struct dmabuf *dmabuf = &state->dmabuf; + + if (file->f_mode & FMODE_WRITE) { + /* FIXME :.. */ + i810_clear_tail(state); + drain_dac(state, file->f_flags & O_NONBLOCK); + } + + /* stop DMA state machine and free DMA buffers/channels */ + down(&state->open_sem); + + if (file->f_mode & FMODE_WRITE) { + stop_dac(state); + dealloc_dmabuf(state); + state->card->free_pcm_channel(state->card, dmabuf->channel->num); + } + if (file->f_mode & FMODE_READ) { + stop_adc(state); + dealloc_dmabuf(state); + state->card->free_pcm_channel(state->card, dmabuf->channel->num); + } + + kfree(state->card->states[state->virt]); + state->card->states[state->virt] = NULL; + state->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE); + + /* we're covered by the open_sem */ + up(&state->open_sem); + + MOD_DEC_USE_COUNT; + return 0; +} + +static /*const*/ struct file_operations i810_audio_fops = { + llseek: i810_llseek, + read: i810_read, + write: i810_write, + poll: i810_poll, + ioctl: i810_ioctl, + mmap: i810_mmap, + open: i810_open, + release: i810_release, +}; + +/* Write AC97 codec registers */ + +static u16 i810_ac97_get(struct ac97_codec *dev, u8 reg) +{ + struct i810_card *card = dev->private_data; + int count = 100; + + while(count-- && (inb(card->iobase + CAS) & 1)) + udelay(1); + return inw(card->ac97base + (reg&0x7f)); +} + +static void i810_ac97_set(struct ac97_codec *dev, u8 reg, u16 data) +{ + struct i810_card *card = dev->private_data; + int count = 100; + + while(count-- && (inb(card->iobase + CAS) & 1)) + udelay(1); + outw(data, card->ac97base + (reg&0x7f)); +} + + +/* OSS /dev/mixer file operation methods */ + +static int i810_open_mixdev(struct inode *inode, struct file *file) +{ + int i; + int minor = MINOR(inode->i_rdev); + struct i810_card *card = devs; + + for (card = devs; card != NULL; card = card->next) + for (i = 0; i < NR_AC97; i++) + if (card->ac97_codec[i] != NULL && + card->ac97_codec[i]->dev_mixer == minor) + goto match; + + if (!card) + return -ENODEV; + + match: + file->private_data = card->ac97_codec[i]; + + MOD_INC_USE_COUNT; + return 0; +} + +static int i810_release_mixdev(struct inode *inode, struct file *file) +{ + MOD_DEC_USE_COUNT; + return 0; +} + +static int i810_ioctl_mixdev(struct inode *inode, struct file *file, unsigned int cmd, + unsigned long arg) +{ + struct ac97_codec *codec = (struct ac97_codec *)file->private_data; + + return codec->mixer_ioctl(codec, cmd, arg); +} + +static /*const*/ struct file_operations i810_mixer_fops = { + llseek: i810_llseek, + ioctl: i810_ioctl_mixdev, + open: i810_open_mixdev, + release: i810_release_mixdev, +}; + +/* AC97 codec initialisation. */ +static int __init i810_ac97_init(struct i810_card *card) +{ + int num_ac97 = 0; + int ready_2nd = 0; + struct ac97_codec *codec; + u16 eid; + + outl(0, card->iobase + GLOB_CNT); + udelay(500); + outl(1<<1, card->iobase + GLOB_CNT); + + for (num_ac97 = 0; num_ac97 < NR_AC97; num_ac97++) { + if ((codec = kmalloc(sizeof(struct ac97_codec), GFP_KERNEL)) == NULL) + return -ENOMEM; + memset(codec, 0, sizeof(struct ac97_codec)); + + /* initialize some basic codec information, other fields will be filled + in ac97_probe_codec */ + codec->private_data = card; + codec->id = num_ac97; + + codec->codec_read = i810_ac97_get; + codec->codec_write = i810_ac97_set; + + if (ac97_probe_codec(codec) == 0) + break; + + eid = i810_ac97_get(codec, AC97_EXTENDED_ID); + + if(eid==0xFFFFFF) + { + printk(KERN_WARNING "i810_audio: no codec attached ?\n"); + kfree(codec); + break; + } + + card->ac97_features = eid; + + if(!(eid&0x0001)) + printk(KERN_WARNING "i810_audio: only 48Khz playback available.\n"); + else + /* Enable variable rate mode */ + i810_ac97_set(codec, AC97_EXTENDED_STATUS, + i810_ac97_get(codec,AC97_EXTENDED_STATUS)|1); + + if ((codec->dev_mixer = register_sound_mixer(&i810_mixer_fops, -1)) < 0) { + printk(KERN_ERR "i810_audio: couldn't register mixer!\n"); + kfree(codec); + break; + } + + /* Now check the codec for useful features to make up for + the dumbness of the 810 hardware engine */ + + card->ac97_codec[num_ac97] = codec; + + /* if there is no secondary codec at all, don't probe any more */ + if (!ready_2nd) + return num_ac97+1; + } + return num_ac97; +} + +/* install the driver, we do not allocate hardware channel nor DMA buffer now, they are defered + untill "ACCESS" time (in prog_dmabuf called by open/read/write/ioctl/mmap) */ + +static int __init i810_install(struct pci_dev *pci_dev, int type, char *name) +{ + struct i810_card *card; + + if ((card = kmalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) { + printk(KERN_ERR "i810_audio: out of memory\n"); + return -ENOMEM; + } + memset(card, 0, sizeof(*card)); + + card->iobase = pci_dev->base_address[1]&PCI_BASE_ADDRESS_IO_MASK; + card->ac97base = pci_dev->base_address[0]&PCI_BASE_ADDRESS_IO_MASK; + card->pci_dev = pci_dev; + card->pci_id = type; + card->irq = pci_dev->irq; + card->next = devs; + card->magic = I810_CARD_MAGIC; + spin_lock_init(&card->lock); + devs = card; + + pci_set_master(pci_dev); + + printk(KERN_INFO "i810: %s found at IO 0x%04lx and 0x%04lx, IRQ %d\n", + name, card->iobase, card->ac97base, card->irq); + + card->alloc_pcm_channel = i810_alloc_pcm_channel; + card->alloc_rec_pcm_channel = i810_alloc_rec_pcm_channel; + card->free_pcm_channel = i810_free_pcm_channel; + + /* claim our iospace and irq */ + request_region(card->iobase, 64, name); + request_region(card->ac97base, 256, name); + + if (request_irq(card->irq, &i810_interrupt, SA_SHIRQ, name, card)) { + printk(KERN_ERR "i810_audio: unable to allocate irq %d\n", card->irq); + release_region(card->iobase, 64); + release_region(card->ac97base, 256); + kfree(card); + return -ENODEV; + } + /* register /dev/dsp */ + if ((card->dev_audio = register_sound_dsp(&i810_audio_fops, -1)) < 0) { + printk(KERN_ERR "i810_audio: couldn't register DSP device!\n"); + release_region(card->iobase, 64); + release_region(card->ac97base, 256); + free_irq(card->irq, card); + kfree(card); + return -ENODEV; + } + + + /* initialize AC97 codec and register /dev/mixer */ + if (i810_ac97_init(card) <= 0) { + unregister_sound_dsp(card->dev_audio); + release_region(card->iobase, 64); + release_region(card->ac97base, 256); + free_irq(card->irq, card); + kfree(card); + return -ENODEV; + } + +// printk("resetting codec?\n"); + outl(0, card->iobase + GLOB_CNT); + udelay(500); +// printk("bringing it back?\n"); + outl(1<<1, card->iobase + GLOB_CNT); + return 0; +} + +static void i810_remove(struct i810_card *card) +{ + int i; + /* free hardware resources */ + free_irq(card->irq, card); + release_region(card->iobase, 64); + release_region(card->ac97base, 256); + + /* unregister audio devices */ + for (i = 0; i < NR_AC97; i++) + if (card->ac97_codec[i] != NULL) { + unregister_sound_mixer(card->ac97_codec[i]->dev_mixer); + kfree (card->ac97_codec[i]); + } + unregister_sound_dsp(card->dev_audio); + kfree(card); +} + +MODULE_AUTHOR("Assorted"); +MODULE_DESCRIPTION("Intel 810 audio support"); + +static int __init i810_probe(void) +{ + struct pci_dev *pcidev = NULL; + int foundone=0; + + if (!pci_present()) /* No PCI bus in this machine! */ + return -ENODEV; + + printk(KERN_INFO "Intel 810 + AC97 Audio, version " + DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n"); + + while( (pcidev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801, pcidev))!=NULL ) { + if (i810_install(pcidev, ICH82801AA, "Intel ICH 82801AA")==0) + foundone++; + } + while( (pcidev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82901, pcidev))!=NULL ) { + if (i810_install(pcidev, ICH82901AB, "Intel ICH 82901AB")==0) + foundone++; + } + while( (pcidev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_440MX, pcidev))!=NULL ) { + if (i810_install(pcidev, INTEL440MX, "Intel 440MX")==0) + foundone++; + } + + printk(KERN_INFO "i810_audio: Found %d audio device(s).\n", + foundone); + return foundone; +} + +#ifdef MODULE + +int init_module(void) +{ + if(i810_probe()==0) + printk(KERN_ERR "i810_audio: No devices found.\n"); + return 0; +} + +void cleanup_module (void) +{ + struct i810_card *next; + while(devs) + { + next=devs->next; + i810_remove(devs); + devs=next; + } +} + +#endif \ No newline at end of file diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sound/maestro.c linux.16p3/drivers/sound/maestro.c --- linux.vanilla/drivers/sound/maestro.c Fri Apr 21 12:46:35 2000 +++ linux.16p3/drivers/sound/maestro.c Mon May 15 18:37:18 2000 @@ -2407,10 +2407,24 @@ struct ess_state *s = (struct ess_state *)file->private_data; unsigned long flags; unsigned int mask = 0; + int ret; VALIDATE_STATE(s); + + +/* In 0.14 prog_dmabuf always returns success anyway ... */ + if (file->f_mode & FMODE_WRITE) { + if (!s->dma_dac.ready && (ret = prog_dmabuf(s, 0))) + return POLLERR; + } + if (file->f_mode & FMODE_READ) { + if (!s->dma_adc.ready && (ret = prog_dmabuf(s, 1))) + return POLLERR; + } + if (file->f_mode & (FMODE_WRITE|FMODE_READ)) poll_wait(file, &s->poll_wait, wait); + spin_lock_irqsave(&s->lock, flags); ess_update_ptr(s); if (file->f_mode & FMODE_READ) { @@ -3448,6 +3462,7 @@ unregister_sound_dsp(s->dev_audio); } release_region(card->iobase, 256); + unregister_reboot_notifier(&maestro_nb); kfree(card); return 0; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/sound/vidc_audio.c linux.16p3/drivers/sound/vidc_audio.c --- linux.vanilla/drivers/sound/vidc_audio.c Fri Apr 21 12:46:36 2000 +++ linux.16p3/drivers/sound/vidc_audio.c Mon May 15 12:09:27 2000 @@ -79,9 +79,9 @@ newsize = 208; if (newsize > 4096) newsize = 4096; - for (new2size = 128; new2size < newsize; new2size <<= 1) - if (new2size - newsize > newsize - (new2size >> 1)) - new2size >>= 1; + for (new2size = 128; new2size < newsize; new2size <<= 1); + if (new2size - newsize > newsize - (new2size >> 1)) + new2size >>= 1; dma_bufsize = new2size; } return 250000 / vidc_audio_rate; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/video/mdacon.c linux.16p3/drivers/video/mdacon.c --- linux.vanilla/drivers/video/mdacon.c Fri Apr 21 12:46:39 2000 +++ linux.16p3/drivers/video/mdacon.c Wed Apr 19 13:56:02 2000 @@ -5,6 +5,8 @@ * * including portions (c) 1995-1998 Patrick Caulfield. * + * slight improvements (c) 2000 Edward Betts + * * This file is based on the VGA console driver (vgacon.c): * * Created 28 Sep 1997 by Geert Uytterhoeven @@ -240,13 +242,18 @@ /* Ok, there is definitely a card registering at the correct * memory location, so now we do an I/O port test. */ - - if (! test_mda_b(0x66, 0x0f)) { /* cursor low register */ + + /* Edward: These two mess `tests' mess up my cursor on bootup */ + + /* cursor low register */ + /* if (! test_mda_b(0x66, 0x0f)) { return 0; - } - if (! test_mda_b(0x99, 0x0f)) { /* cursor low register */ + } */ + + /* cursor low register */ + /* if (! test_mda_b(0x99, 0x0f)) { return 0; - } + } */ /* See if the card is a Hercules, by checking whether the vsync * bit of the status register is changing. This test lasts for @@ -339,6 +346,9 @@ mda_initialize(); } + /* cursor looks ugly during boot-up, so turn it off */ + mda_set_cursor(mda_vram_len - 1); + printk("mdacon: %s with %ldK of memory detected.\n", mda_type_name, mda_vram_len/1024); @@ -494,13 +504,21 @@ static int mdacon_blank(struct vc_data *c, int blank) { - if (blank) { - outb_p(0x00, mda_mode_port); /* disable video */ + if (mda_type == TYPE_MDA) { + if (blank) + scr_memsetw((void *)mda_vram_base, + mda_convert_attr(c->vc_video_erase_char), + c->vc_screenbuf_size); + /* Tell console.c that it has to restore the screen itself */ + return 1; } else { - outb_p(MDA_MODE_VIDEO_EN | MDA_MODE_BLINK_EN, mda_mode_port); + if (blank) + outb_p(0x00, mda_mode_port); /* disable video */ + else + outb_p(MDA_MODE_VIDEO_EN | MDA_MODE_BLINK_EN, + mda_mode_port); + return 0; } - - return 0; } static int mdacon_font_op(struct vc_data *c, struct console_font_op *op) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/binfmt_elf.c linux.16p3/fs/binfmt_elf.c --- linux.vanilla/fs/binfmt_elf.c Fri Apr 21 12:46:41 2000 +++ linux.16p3/fs/binfmt_elf.c Mon May 15 12:30:18 2000 @@ -376,6 +376,9 @@ goto out; } + if ((unsigned long)addr + text_data < text_data) + goto out; + do_mmap(NULL, 0, text_data, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_FIXED|MAP_PRIVATE, 0); retval = read_exec(interpreter_dentry, offset, addr, text_data, 0); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/buffer.c linux.16p3/fs/buffer.c --- linux.vanilla/fs/buffer.c Fri Apr 21 12:46:41 2000 +++ linux.16p3/fs/buffer.c Mon May 15 18:06:33 2000 @@ -679,21 +679,26 @@ bhnext = bh->b_next_free; if (bh->b_dev != dev || bh->b_size == size) continue; - if (buffer_dirty(bh)) - printk(KERN_ERR "set_blocksize: dev %s buffer_dirty %lu size %lu\n", kdevname(dev), bh->b_blocknr, bh->b_size); if (buffer_locked(bh)) { slept = 1; wait_on_buffer(bh); } + if (buffer_dirty(bh)) + printk(KERN_WARNING "set_blocksize: dev %s buffer_dirty %lu size %lu\n", kdevname(dev), bh->b_blocknr, bh->b_size); if (!bh->b_count) put_last_free(bh); else - printk(KERN_ERR + { + mark_buffer_clean(bh); + clear_bit(BH_Uptodate, &bh->b_state); + clear_bit(BH_Req, &bh->b_state); + printk(KERN_WARNING "set_blocksize: " - "b_count %d, dev %s, block %lu!\n", + "b_count %d, dev %s, block %lu, from %p\n", bh->b_count, bdevname(bh->b_dev), - bh->b_blocknr); + bh->b_blocknr, __builtin_return_address(0)); + } if (slept) goto again; } @@ -708,6 +713,7 @@ if (!grow_buffers(size)) { wakeup_bdflush(1); current->policy |= SCHED_YIELD; + current->state = TASK_RUNNING; schedule(); } } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/dcache.c linux.16p3/fs/dcache.c --- linux.vanilla/fs/dcache.c Fri Apr 21 12:46:41 2000 +++ linux.16p3/fs/dcache.c Mon May 1 00:56:09 2000 @@ -378,7 +378,8 @@ resume: while (next != &this_parent->d_subdirs) { struct list_head *tmp = next; - struct dentry *dentry = list_entry(tmp, struct dentry, d_child); next = tmp->next; + struct dentry *dentry = list_entry(tmp, struct dentry, d_child); + next = tmp->next; /* Have we found a mount point ? */ if (dentry->d_mounts != dentry) return 1; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/exec.c linux.16p3/fs/exec.c --- linux.vanilla/fs/exec.c Fri Apr 21 12:46:42 2000 +++ linux.16p3/fs/exec.c Tue May 16 12:45:30 2000 @@ -761,6 +761,17 @@ } } #endif + /* + * kernel module loader fixup + * We don't try to load run modprobe in kernel space but at the + * same time kernel/kmod.c calls us with fs set to KERNEL_DS. This + * would cause us to explode messily on a split address space machine + * and its sort of lucky it ever worked before. Since the S/390 is + * such a split address space box we have to fix it.. + */ + + set_fs(USER_DS); + for (try=0; try<2; try++) { for (fmt = formats ; fmt ; fmt = fmt->next) { int (*fn)(struct linux_binprm *, struct pt_regs *) = fmt->load_binary; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/ext2/balloc.c linux.16p3/fs/ext2/balloc.c --- linux.vanilla/fs/ext2/balloc.c Fri Apr 21 12:46:42 2000 +++ linux.16p3/fs/ext2/balloc.c Thu May 4 00:49:00 2000 @@ -213,7 +213,7 @@ */ if (sb->u.ext2_sb.s_loaded_block_bitmaps > 0 && sb->u.ext2_sb.s_block_bitmap_number[0] == block_group && - sb->u.ext2_sb.s_block_bitmap[block_group]) { + sb->u.ext2_sb.s_block_bitmap[0]) { return 0; } /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/fat/dir.c linux.16p3/fs/fat/dir.c --- linux.vanilla/fs/fat/dir.c Fri Apr 21 12:46:42 2000 +++ linux.16p3/fs/fat/dir.c Wed Apr 19 13:58:55 2000 @@ -76,25 +76,21 @@ op = ascii; while (*ip || ip[1]) { - cl = *ip++; - ch = *ip++; - - uni_page = nls->page_uni2charset[ch]; - if (uni_page && uni_page[cl]) { - *op++ = uni_page[cl]; - } else { - if (uni_xlate == 1) { - *op++ = ':'; - val = (cl << 8) + ch; - op[2] = fat_uni2esc[val & 0x3f]; - val >>= 6; - op[1] = fat_uni2esc[val & 0x3f]; - val >>= 6; - *op = fat_uni2esc[val & 0x3f]; - op += 3; - } else { - *op++ = '?'; - } + int len; + nls->uni2char(ip[1], ip[0], op, 20, &len); + if (uni_xlate == 1 && len == 1 && op[0] == '?'){ + *op++ = ':'; + val = (ip[0] << 8) + ip[1]; + op[2] = fat_uni2esc[val & 0x3f]; + val >>= 6; + op[1] = fat_uni2esc[val & 0x3f]; + val >>= 6; + op[0] = fat_uni2esc[val & 0x3f]; + op += 3; + } + else{ + ip += 2; + op += len; } /* We have some slack there, so it's OK */ if (op>ascii+256) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/fat/inode.c linux.16p3/fs/fat/inode.c --- linux.vanilla/fs/fat/inode.c Fri Apr 21 12:46:42 2000 +++ linux.16p3/fs/fat/inode.c Wed Apr 19 13:58:55 2000 @@ -633,7 +633,7 @@ MSDOS_SB(sb)->nls_io = NULL; if (MSDOS_SB(sb)->options.isvfat && !opts.utf8) { - p = opts.iocharset ? opts.iocharset : "iso8859-1"; + p = opts.iocharset ? opts.iocharset : CONFIG_NLS_DEFAULT; MSDOS_SB(sb)->nls_io = load_nls(p); if (! MSDOS_SB(sb)->nls_io) { /* Fail only if explicit charset specified */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/isofs/inode.c linux.16p3/fs/isofs/inode.c --- linux.vanilla/fs/isofs/inode.c Fri Apr 21 12:46:43 2000 +++ linux.16p3/fs/isofs/inode.c Sun Apr 30 23:42:32 2000 @@ -411,7 +411,7 @@ struct inode inode_fake; struct file_operations *fops; extern struct file_operations * get_blkfops(unsigned int); - int i; + int i, session = 0; vol_desc_start=0; fops = get_blkfops(MAJOR(dev)); @@ -424,6 +424,27 @@ mm_segment_t old_fs=get_fs(); inode_fake.i_rdev=dev; ms_info.addr_format=CDROM_LBA; + /* If a minor device was explicitly opened, set session to the + * minor number. For instance, if /dev/hdc1 is mounted, session + * 1 on the CD-ROM is selected. CD_PART_MAX gives access to + * a max of 64 sessions on IDE. SCSI drives must still use + * the session option to mount. + */ + if ((MINOR(dev) % CD_PART_MAX) && (MAJOR(dev) != SCSI_CDROM_MAJOR)) + session = MINOR(dev) % CD_PART_MAX; + if (session > 0 && session <= CD_PART_MAX) { + struct cdrom_tocentry entry; + entry.cdte_track=session; + entry.cdte_format=CDROM_LBA; + set_fs(KERNEL_DS); + i=get_blkfops(MAJOR(dev))->ioctl(&inode_fake, + NULL, CDROMREADTOCENTRY, (unsigned long) &entry); + set_fs(old_fs); + if(!i) printk(KERN_ERR"Session %d start %d type %d\n",session,entry.cdte_addr.lba,entry.cdte_ctrl&CDROM_DATA_TRACK); + if(i || (entry.cdte_ctrl & CDROM_DATA_TRACK) != 4) + printk(KERN_ERR"Invalid session number or type of track\n"); + else return entry.cdte_addr.lba; + } set_fs(KERNEL_DS); i=get_blkfops(MAJOR(dev))->ioctl(&inode_fake, NULL, @@ -736,7 +757,7 @@ #ifdef CONFIG_JOLIET if (joliet_level && opt.utf8 == 0) { - char * p = opt.iocharset ? opt.iocharset : "iso8859-1"; + char * p = opt.iocharset ? opt.iocharset : CONFIG_NLS_DEFAULT; s->u.isofs_sb.s_nls_iocharset = load_nls(p); if (! s->u.isofs_sb.s_nls_iocharset) { /* Fail only if explicit charset specified */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/isofs/joliet.c linux.16p3/fs/isofs/joliet.c --- linux.vanilla/fs/isofs/joliet.c Fri Apr 21 12:46:43 2000 +++ linux.16p3/fs/isofs/joliet.c Wed Apr 19 13:58:55 2000 @@ -26,15 +26,10 @@ op = ascii; while ((*ip || ip[1]) && len) { - ch = *ip++; - cl = *ip++; - - uni_page = nls->page_uni2charset[ch]; - if (uni_page && uni_page[cl]) { - *op++ = uni_page[cl]; - } else { - *op++ = '?'; - } + int llen; + nls->uni2char(ip[0], ip[1], op, 20, &llen); + op += llen; + ip += 2; len--; } *op = 0; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/ncpfs/ncplib_kernel.h linux.16p3/fs/ncpfs/ncplib_kernel.h --- linux.vanilla/fs/ncpfs/ncplib_kernel.h Fri Apr 21 23:25:36 2000 +++ linux.16p3/fs/ncpfs/ncplib_kernel.h Mon May 15 18:44:09 2000 @@ -114,9 +114,9 @@ static inline void io2vol(struct ncp_server *server, char *name, int case_trans) { - unsigned char nc; + unsigned char nc[2]; unsigned char *np; - unsigned char *up; + int len; struct nls_unicode uc; struct nls_table *nls_in; struct nls_table *nls_out; @@ -127,11 +127,10 @@ while (*np) { - nc = 0; - uc = nls_in->charset2uni[toupperif(*np, case_trans)]; - up = nls_out->page_uni2charset[uc.uni2]; - if (up != NULL) nc = up[uc.uni1]; - if (nc != 0) *np = nc; + nc[0] = toupperif(*np, case_trans); + nc[1] = 0x00; + nls_in->char2uni(nc, &len, &uc.uni2, &uc.uni1); + nls_out->uni2char(0x00, uc.uni2, np, 1, &len); np++; } } @@ -139,9 +138,9 @@ static inline void vol2io(struct ncp_server *server, char *name, int case_trans) { - unsigned char nc; + unsigned char nc[2]; unsigned char *np; - unsigned char *up; + int len; struct nls_unicode uc; struct nls_table *nls_in; struct nls_table *nls_out; @@ -152,12 +151,11 @@ while (*np) { - nc = 0; - uc = nls_in->charset2uni[*np]; - up = nls_out->page_uni2charset[uc.uni2]; - if (up != NULL) nc = up[uc.uni1]; - if (nc == 0) nc = *np; - *np = tolowerif(nc, case_trans); + nc[0] = *np; + nc[1] = 0; + nls_in->char2uni(nc, &len, &uc.uni2, &uc.uni1); + nls_out->uni2char(0x00, uc.uni2, nc, 1, &len); + *np = tolowerif(nc[0], case_trans); np++; } } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/Config.in linux.16p3/fs/nls/Config.in --- linux.vanilla/fs/nls/Config.in Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/Config.in Wed Apr 19 13:58:55 2000 @@ -13,6 +13,7 @@ if [ "$CONFIG_NLS" = "y" ]; then mainmenu_option next_comment comment 'Native Language Support' + string 'Default NLS Option' CONFIG_NLS_DEFAULT "cp437" tristate 'Codepage 437 (United States, Canada)' CONFIG_NLS_CODEPAGE_437 tristate 'Codepage 737 (Greek)' CONFIG_NLS_CODEPAGE_737 tristate 'Codepage 775 (Baltic Rim)' CONFIG_NLS_CODEPAGE_775 @@ -29,6 +30,10 @@ tristate 'Codepage 866 (Cyrillic/Russian)' CONFIG_NLS_CODEPAGE_866 tristate 'Codepage 869 (Greek)' CONFIG_NLS_CODEPAGE_869 tristate 'Codepage 874 (Thai)' CONFIG_NLS_CODEPAGE_874 + tristate 'Codepage 932 (Shift-JIS)' CONFIG_NLS_CODEPAGE_932 + tristate 'Codepage 936 (GBK)' CONFIG_NLS_CODEPAGE_936 + tristate 'Codepage 949 (UnifiedHangul)' CONFIG_NLS_CODEPAGE_949 + tristate 'Codepage 950 (Big5)' CONFIG_NLS_CODEPAGE_950 tristate 'NLS ISO 8859-1 (Latin 1; Western European Languages)' CONFIG_NLS_ISO8859_1 tristate 'NLS ISO 8859-2 (Latin 2; Slavic/Central European Languages)' CONFIG_NLS_ISO8859_2 tristate 'NLS ISO 8859-3 (Latin 3; Esperanto, Galician, Maltese, Turkish)' CONFIG_NLS_ISO8859_3 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/Makefile linux.16p3/fs/nls/Makefile --- linux.vanilla/fs/nls/Makefile Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/Makefile Wed Apr 19 13:58:55 2000 @@ -134,6 +134,38 @@ endif endif +ifeq ($(CONFIG_NLS_CODEPAGE_932),y) +NLS += nls_cp932.o +else + ifeq ($(CONFIG_NLS_CODEPAGE_932),m) + M_OBJS += nls_cp932.o + endif +endif + +ifeq ($(CONFIG_NLS_CODEPAGE_936),y) +NLS += nls_cp936.o +else + ifeq ($(CONFIG_NLS_CODEPAGE_936),m) + M_OBJS += nls_cp936.o + endif +endif + +ifeq ($(CONFIG_NLS_CODEPAGE_949),y) +NLS += nls_cp949.o +else + ifeq ($(CONFIG_NLS_CODEPAGE_949),m) + M_OBJS += nls_cp949.o + endif +endif + +ifeq ($(CONFIG_NLS_CODEPAGE_950),y) +NLS += nls_cp950.o +else + ifeq ($(CONFIG_NLS_CODEPAGE_950),m) + M_OBJS += nls_cp950.o + endif +endif + ifeq ($(CONFIG_NLS_CODEPAGE_1250),y) NLS += nls_cp1250.o else diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_base.c linux.16p3/fs/nls/nls_base.c --- linux.vanilla/fs/nls/nls_base.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_base.c Wed Apr 19 13:58:55 2000 @@ -363,6 +363,29 @@ page00 }; +void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} void inc_use_count(void) { @@ -374,8 +397,8 @@ static struct nls_table default_table = { "default", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL @@ -386,7 +409,13 @@ /* Returns a simple default translation table */ struct nls_table *load_nls_default(void) { - return &default_table; + struct nls_table *default_nls; + + default_nls = load_nls(CONFIG_NLS_DEFAULT); + if (default_nls != NULL) + return default_nls; + else + return &default_table; } EXPORT_SYMBOL(register_nls); @@ -482,6 +511,18 @@ #endif #ifdef CONFIG_NLS_CODEPAGE_874 init_nls_cp874(); +#endif +#ifdef CONFIG_NLS_CODEPAGE_932 + init_nls_cp932(); +#endif +#ifdef CONFIG_NLS_CODEPAGE_936 + init_nls_cp936(); +#endif +#ifdef CONFIG_NLS_CODEPAGE_949 + init_nls_cp949(); +#endif +#ifdef CONFIG_NLS_CODEPAGE_950 + init_nls_cp950(); #endif #ifdef CONFIG_NLS_KOI8_R init_nls_koi8_r(); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp437.c linux.16p3/fs/nls/nls_cp437.c --- linux.vanilla/fs/nls/nls_cp437.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp437.c Wed Apr 19 13:58:55 2000 @@ -392,6 +392,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -405,8 +428,8 @@ static struct nls_table table = { "cp437", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp737.c linux.16p3/fs/nls/nls_cp737.c --- linux.vanilla/fs/nls/nls_cp737.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp737.c Wed Apr 19 13:58:55 2000 @@ -320,6 +320,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { @@ -333,8 +357,8 @@ static struct nls_table table = { "cp737", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp775.c linux.16p3/fs/nls/nls_cp775.c --- linux.vanilla/fs/nls/nls_cp775.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp775.c Wed Apr 19 13:58:55 2000 @@ -320,6 +320,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -333,8 +356,8 @@ static struct nls_table table = { "cp775", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp850.c linux.16p3/fs/nls/nls_cp850.c --- linux.vanilla/fs/nls/nls_cp850.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp850.c Wed Apr 19 13:58:55 2000 @@ -284,6 +284,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -297,8 +320,8 @@ static struct nls_table table = { "cp850", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp852.c linux.16p3/fs/nls/nls_cp852.c --- linux.vanilla/fs/nls/nls_cp852.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp852.c Wed Apr 19 13:58:55 2000 @@ -284,6 +284,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -297,8 +320,8 @@ static struct nls_table table = { "cp852", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp855.c linux.16p3/fs/nls/nls_cp855.c --- linux.vanilla/fs/nls/nls_cp855.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp855.c Wed Apr 19 13:58:55 2000 @@ -284,6 +284,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -297,8 +320,8 @@ static struct nls_table table = { "cp855", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp857.c linux.16p3/fs/nls/nls_cp857.c --- linux.vanilla/fs/nls/nls_cp857.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp857.c Wed Apr 19 13:58:55 2000 @@ -248,6 +248,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -261,8 +284,8 @@ static struct nls_table table = { "cp857", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp860.c linux.16p3/fs/nls/nls_cp860.c --- linux.vanilla/fs/nls/nls_cp860.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp860.c Wed Apr 19 13:58:55 2000 @@ -356,6 +356,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -369,8 +392,8 @@ static struct nls_table table = { "cp860", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp861.c linux.16p3/fs/nls/nls_cp861.c --- linux.vanilla/fs/nls/nls_cp861.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp861.c Wed Apr 19 13:58:55 2000 @@ -392,6 +392,29 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} static void inc_use_count(void) { @@ -405,8 +428,8 @@ static struct nls_table table = { "cp861", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp862.c linux.16p3/fs/nls/nls_cp862.c --- linux.vanilla/fs/nls/nls_cp862.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp862.c Wed Apr 19 13:58:55 2000 @@ -428,6 +428,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -440,8 +464,8 @@ static struct nls_table table = { "cp862", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp863.c linux.16p3/fs/nls/nls_cp863.c --- linux.vanilla/fs/nls/nls_cp863.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp863.c Wed Apr 19 13:58:55 2000 @@ -392,6 +392,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -404,8 +428,8 @@ static struct nls_table table = { "cp863", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp864.c linux.16p3/fs/nls/nls_cp864.c --- linux.vanilla/fs/nls/nls_cp864.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp864.c Wed Apr 19 13:58:55 2000 @@ -383,6 +383,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -395,8 +419,8 @@ static struct nls_table table = { "cp864", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp865.c linux.16p3/fs/nls/nls_cp865.c --- linux.vanilla/fs/nls/nls_cp865.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp865.c Wed Apr 19 13:58:55 2000 @@ -392,6 +392,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -404,8 +428,8 @@ static struct nls_table table = { "cp865", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp866.c linux.16p3/fs/nls/nls_cp866.c --- linux.vanilla/fs/nls/nls_cp866.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp866.c Wed Apr 19 13:58:55 2000 @@ -320,6 +320,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -332,8 +356,8 @@ static struct nls_table table = { "cp866", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp869.c linux.16p3/fs/nls/nls_cp869.c --- linux.vanilla/fs/nls/nls_cp869.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp869.c Wed Apr 19 13:58:55 2000 @@ -284,6 +284,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -296,8 +320,8 @@ static struct nls_table table = { "cp869", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp874.c linux.16p3/fs/nls/nls_cp874.c --- linux.vanilla/fs/nls/nls_cp874.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_cp874.c Wed Apr 19 13:58:55 2000 @@ -248,6 +248,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -260,8 +284,8 @@ static struct nls_table table = { "cp874", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp932.c linux.16p3/fs/nls/nls_cp932.c --- linux.vanilla/fs/nls/nls_cp932.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/fs/nls/nls_cp932.c Wed Apr 19 13:58:55 2000 @@ -0,0 +1,9847 @@ +/* + * linux/fs/nls_cp932.c + * + * Charset cp932 translation tables. + * Generated automatically from the Microsoft + */ + +#include +#include +#include +#include + +static struct nls_unicode c2u_81[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x30, 0x00}, {0x30, 0x01}, {0x30, 0x02}, {0xFF, 0x0C}, /* 0x40-0x43 */ + {0xFF, 0x0E}, {0x30, 0xFB}, {0xFF, 0x1A}, {0xFF, 0x1B}, /* 0x44-0x47 */ + {0xFF, 0x1F}, {0xFF, 0x01}, {0x30, 0x9B}, {0x30, 0x9C}, /* 0x48-0x4B */ + {0x00, 0xB4}, {0xFF, 0x40}, {0x00, 0xA8}, {0xFF, 0x3E}, /* 0x4C-0x4F */ + {0xFF, 0xE3}, {0xFF, 0x3F}, {0x30, 0xFD}, {0x30, 0xFE}, /* 0x50-0x53 */ + {0x30, 0x9D}, {0x30, 0x9E}, {0x30, 0x03}, {0x4E, 0xDD}, /* 0x54-0x57 */ + {0x30, 0x05}, {0x30, 0x06}, {0x30, 0x07}, {0x30, 0xFC}, /* 0x58-0x5B */ + {0x20, 0x15}, {0x20, 0x10}, {0xFF, 0x0F}, {0xFF, 0x3C}, /* 0x5C-0x5F */ + {0xFF, 0x5E}, {0x22, 0x25}, {0xFF, 0x5C}, {0x20, 0x26}, /* 0x60-0x63 */ + {0x20, 0x25}, {0x20, 0x18}, {0x20, 0x19}, {0x20, 0x1C}, /* 0x64-0x67 */ + {0x20, 0x1D}, {0xFF, 0x08}, {0xFF, 0x09}, {0x30, 0x14}, /* 0x68-0x6B */ + {0x30, 0x15}, {0xFF, 0x3B}, {0xFF, 0x3D}, {0xFF, 0x5B}, /* 0x6C-0x6F */ + {0xFF, 0x5D}, {0x30, 0x08}, {0x30, 0x09}, {0x30, 0x0A}, /* 0x70-0x73 */ + {0x30, 0x0B}, {0x30, 0x0C}, {0x30, 0x0D}, {0x30, 0x0E}, /* 0x74-0x77 */ + {0x30, 0x0F}, {0x30, 0x10}, {0x30, 0x11}, {0xFF, 0x0B}, /* 0x78-0x7B */ + {0xFF, 0x0D}, {0x00, 0xB1}, {0x00, 0xD7}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0xF7}, {0xFF, 0x1D}, {0x22, 0x60}, {0xFF, 0x1C}, /* 0x80-0x83 */ + {0xFF, 0x1E}, {0x22, 0x66}, {0x22, 0x67}, {0x22, 0x1E}, /* 0x84-0x87 */ + {0x22, 0x34}, {0x26, 0x42}, {0x26, 0x40}, {0x00, 0xB0}, /* 0x88-0x8B */ + {0x20, 0x32}, {0x20, 0x33}, {0x21, 0x03}, {0xFF, 0xE5}, /* 0x8C-0x8F */ + {0xFF, 0x04}, {0xFF, 0xE0}, {0xFF, 0xE1}, {0xFF, 0x05}, /* 0x90-0x93 */ + {0xFF, 0x03}, {0xFF, 0x06}, {0xFF, 0x0A}, {0xFF, 0x20}, /* 0x94-0x97 */ + {0x00, 0xA7}, {0x26, 0x06}, {0x26, 0x05}, {0x25, 0xCB}, /* 0x98-0x9B */ + {0x25, 0xCF}, {0x25, 0xCE}, {0x25, 0xC7}, {0x25, 0xC6}, /* 0x9C-0x9F */ + {0x25, 0xA1}, {0x25, 0xA0}, {0x25, 0xB3}, {0x25, 0xB2}, /* 0xA0-0xA3 */ + {0x25, 0xBD}, {0x25, 0xBC}, {0x20, 0x3B}, {0x30, 0x12}, /* 0xA4-0xA7 */ + {0x21, 0x92}, {0x21, 0x90}, {0x21, 0x91}, {0x21, 0x93}, /* 0xA8-0xAB */ + {0x30, 0x13}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x22, 0x08}, {0x22, 0x0B}, {0x22, 0x86}, {0x22, 0x87}, /* 0xB8-0xBB */ + {0x22, 0x82}, {0x22, 0x83}, {0x22, 0x2A}, {0x22, 0x29}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x22, 0x27}, {0x22, 0x28}, {0xFF, 0xE2}, {0x21, 0xD2}, /* 0xC8-0xCB */ + {0x21, 0xD4}, {0x22, 0x00}, {0x22, 0x03}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x22, 0x20}, {0x22, 0xA5}, /* 0xD8-0xDB */ + {0x23, 0x12}, {0x22, 0x02}, {0x22, 0x07}, {0x22, 0x61}, /* 0xDC-0xDF */ + {0x22, 0x52}, {0x22, 0x6A}, {0x22, 0x6B}, {0x22, 0x1A}, /* 0xE0-0xE3 */ + {0x22, 0x3D}, {0x22, 0x1D}, {0x22, 0x35}, {0x22, 0x2B}, /* 0xE4-0xE7 */ + {0x22, 0x2C}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x21, 0x2B}, {0x20, 0x30}, {0x26, 0x6F}, {0x26, 0x6D}, /* 0xF0-0xF3 */ + {0x26, 0x6A}, {0x20, 0x20}, {0x20, 0x21}, {0x00, 0xB6}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x25, 0xEF}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_82[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0xFF, 0x10}, /* 0x4C-0x4F */ + {0xFF, 0x11}, {0xFF, 0x12}, {0xFF, 0x13}, {0xFF, 0x14}, /* 0x50-0x53 */ + {0xFF, 0x15}, {0xFF, 0x16}, {0xFF, 0x17}, {0xFF, 0x18}, /* 0x54-0x57 */ + {0xFF, 0x19}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0xFF, 0x21}, {0xFF, 0x22}, {0xFF, 0x23}, {0xFF, 0x24}, /* 0x60-0x63 */ + {0xFF, 0x25}, {0xFF, 0x26}, {0xFF, 0x27}, {0xFF, 0x28}, /* 0x64-0x67 */ + {0xFF, 0x29}, {0xFF, 0x2A}, {0xFF, 0x2B}, {0xFF, 0x2C}, /* 0x68-0x6B */ + {0xFF, 0x2D}, {0xFF, 0x2E}, {0xFF, 0x2F}, {0xFF, 0x30}, /* 0x6C-0x6F */ + {0xFF, 0x31}, {0xFF, 0x32}, {0xFF, 0x33}, {0xFF, 0x34}, /* 0x70-0x73 */ + {0xFF, 0x35}, {0xFF, 0x36}, {0xFF, 0x37}, {0xFF, 0x38}, /* 0x74-0x77 */ + {0xFF, 0x39}, {0xFF, 0x3A}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xFF, 0x41}, {0xFF, 0x42}, {0xFF, 0x43}, /* 0x80-0x83 */ + {0xFF, 0x44}, {0xFF, 0x45}, {0xFF, 0x46}, {0xFF, 0x47}, /* 0x84-0x87 */ + {0xFF, 0x48}, {0xFF, 0x49}, {0xFF, 0x4A}, {0xFF, 0x4B}, /* 0x88-0x8B */ + {0xFF, 0x4C}, {0xFF, 0x4D}, {0xFF, 0x4E}, {0xFF, 0x4F}, /* 0x8C-0x8F */ + {0xFF, 0x50}, {0xFF, 0x51}, {0xFF, 0x52}, {0xFF, 0x53}, /* 0x90-0x93 */ + {0xFF, 0x54}, {0xFF, 0x55}, {0xFF, 0x56}, {0xFF, 0x57}, /* 0x94-0x97 */ + {0xFF, 0x58}, {0xFF, 0x59}, {0xFF, 0x5A}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x30, 0x41}, /* 0x9C-0x9F */ + {0x30, 0x42}, {0x30, 0x43}, {0x30, 0x44}, {0x30, 0x45}, /* 0xA0-0xA3 */ + {0x30, 0x46}, {0x30, 0x47}, {0x30, 0x48}, {0x30, 0x49}, /* 0xA4-0xA7 */ + {0x30, 0x4A}, {0x30, 0x4B}, {0x30, 0x4C}, {0x30, 0x4D}, /* 0xA8-0xAB */ + {0x30, 0x4E}, {0x30, 0x4F}, {0x30, 0x50}, {0x30, 0x51}, /* 0xAC-0xAF */ + {0x30, 0x52}, {0x30, 0x53}, {0x30, 0x54}, {0x30, 0x55}, /* 0xB0-0xB3 */ + {0x30, 0x56}, {0x30, 0x57}, {0x30, 0x58}, {0x30, 0x59}, /* 0xB4-0xB7 */ + {0x30, 0x5A}, {0x30, 0x5B}, {0x30, 0x5C}, {0x30, 0x5D}, /* 0xB8-0xBB */ + {0x30, 0x5E}, {0x30, 0x5F}, {0x30, 0x60}, {0x30, 0x61}, /* 0xBC-0xBF */ + {0x30, 0x62}, {0x30, 0x63}, {0x30, 0x64}, {0x30, 0x65}, /* 0xC0-0xC3 */ + {0x30, 0x66}, {0x30, 0x67}, {0x30, 0x68}, {0x30, 0x69}, /* 0xC4-0xC7 */ + {0x30, 0x6A}, {0x30, 0x6B}, {0x30, 0x6C}, {0x30, 0x6D}, /* 0xC8-0xCB */ + {0x30, 0x6E}, {0x30, 0x6F}, {0x30, 0x70}, {0x30, 0x71}, /* 0xCC-0xCF */ + {0x30, 0x72}, {0x30, 0x73}, {0x30, 0x74}, {0x30, 0x75}, /* 0xD0-0xD3 */ + {0x30, 0x76}, {0x30, 0x77}, {0x30, 0x78}, {0x30, 0x79}, /* 0xD4-0xD7 */ + {0x30, 0x7A}, {0x30, 0x7B}, {0x30, 0x7C}, {0x30, 0x7D}, /* 0xD8-0xDB */ + {0x30, 0x7E}, {0x30, 0x7F}, {0x30, 0x80}, {0x30, 0x81}, /* 0xDC-0xDF */ + {0x30, 0x82}, {0x30, 0x83}, {0x30, 0x84}, {0x30, 0x85}, /* 0xE0-0xE3 */ + {0x30, 0x86}, {0x30, 0x87}, {0x30, 0x88}, {0x30, 0x89}, /* 0xE4-0xE7 */ + {0x30, 0x8A}, {0x30, 0x8B}, {0x30, 0x8C}, {0x30, 0x8D}, /* 0xE8-0xEB */ + {0x30, 0x8E}, {0x30, 0x8F}, {0x30, 0x90}, {0x30, 0x91}, /* 0xEC-0xEF */ + {0x30, 0x92}, {0x30, 0x93}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_83[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x30, 0xA1}, {0x30, 0xA2}, {0x30, 0xA3}, {0x30, 0xA4}, /* 0x40-0x43 */ + {0x30, 0xA5}, {0x30, 0xA6}, {0x30, 0xA7}, {0x30, 0xA8}, /* 0x44-0x47 */ + {0x30, 0xA9}, {0x30, 0xAA}, {0x30, 0xAB}, {0x30, 0xAC}, /* 0x48-0x4B */ + {0x30, 0xAD}, {0x30, 0xAE}, {0x30, 0xAF}, {0x30, 0xB0}, /* 0x4C-0x4F */ + {0x30, 0xB1}, {0x30, 0xB2}, {0x30, 0xB3}, {0x30, 0xB4}, /* 0x50-0x53 */ + {0x30, 0xB5}, {0x30, 0xB6}, {0x30, 0xB7}, {0x30, 0xB8}, /* 0x54-0x57 */ + {0x30, 0xB9}, {0x30, 0xBA}, {0x30, 0xBB}, {0x30, 0xBC}, /* 0x58-0x5B */ + {0x30, 0xBD}, {0x30, 0xBE}, {0x30, 0xBF}, {0x30, 0xC0}, /* 0x5C-0x5F */ + {0x30, 0xC1}, {0x30, 0xC2}, {0x30, 0xC3}, {0x30, 0xC4}, /* 0x60-0x63 */ + {0x30, 0xC5}, {0x30, 0xC6}, {0x30, 0xC7}, {0x30, 0xC8}, /* 0x64-0x67 */ + {0x30, 0xC9}, {0x30, 0xCA}, {0x30, 0xCB}, {0x30, 0xCC}, /* 0x68-0x6B */ + {0x30, 0xCD}, {0x30, 0xCE}, {0x30, 0xCF}, {0x30, 0xD0}, /* 0x6C-0x6F */ + {0x30, 0xD1}, {0x30, 0xD2}, {0x30, 0xD3}, {0x30, 0xD4}, /* 0x70-0x73 */ + {0x30, 0xD5}, {0x30, 0xD6}, {0x30, 0xD7}, {0x30, 0xD8}, /* 0x74-0x77 */ + {0x30, 0xD9}, {0x30, 0xDA}, {0x30, 0xDB}, {0x30, 0xDC}, /* 0x78-0x7B */ + {0x30, 0xDD}, {0x30, 0xDE}, {0x30, 0xDF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x30, 0xE0}, {0x30, 0xE1}, {0x30, 0xE2}, {0x30, 0xE3}, /* 0x80-0x83 */ + {0x30, 0xE4}, {0x30, 0xE5}, {0x30, 0xE6}, {0x30, 0xE7}, /* 0x84-0x87 */ + {0x30, 0xE8}, {0x30, 0xE9}, {0x30, 0xEA}, {0x30, 0xEB}, /* 0x88-0x8B */ + {0x30, 0xEC}, {0x30, 0xED}, {0x30, 0xEE}, {0x30, 0xEF}, /* 0x8C-0x8F */ + {0x30, 0xF0}, {0x30, 0xF1}, {0x30, 0xF2}, {0x30, 0xF3}, /* 0x90-0x93 */ + {0x30, 0xF4}, {0x30, 0xF5}, {0x30, 0xF6}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x03, 0x91}, /* 0x9C-0x9F */ + {0x03, 0x92}, {0x03, 0x93}, {0x03, 0x94}, {0x03, 0x95}, /* 0xA0-0xA3 */ + {0x03, 0x96}, {0x03, 0x97}, {0x03, 0x98}, {0x03, 0x99}, /* 0xA4-0xA7 */ + {0x03, 0x9A}, {0x03, 0x9B}, {0x03, 0x9C}, {0x03, 0x9D}, /* 0xA8-0xAB */ + {0x03, 0x9E}, {0x03, 0x9F}, {0x03, 0xA0}, {0x03, 0xA1}, /* 0xAC-0xAF */ + {0x03, 0xA3}, {0x03, 0xA4}, {0x03, 0xA5}, {0x03, 0xA6}, /* 0xB0-0xB3 */ + {0x03, 0xA7}, {0x03, 0xA8}, {0x03, 0xA9}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x03, 0xB1}, /* 0xBC-0xBF */ + {0x03, 0xB2}, {0x03, 0xB3}, {0x03, 0xB4}, {0x03, 0xB5}, /* 0xC0-0xC3 */ + {0x03, 0xB6}, {0x03, 0xB7}, {0x03, 0xB8}, {0x03, 0xB9}, /* 0xC4-0xC7 */ + {0x03, 0xBA}, {0x03, 0xBB}, {0x03, 0xBC}, {0x03, 0xBD}, /* 0xC8-0xCB */ + {0x03, 0xBE}, {0x03, 0xBF}, {0x03, 0xC0}, {0x03, 0xC1}, /* 0xCC-0xCF */ + {0x03, 0xC3}, {0x03, 0xC4}, {0x03, 0xC5}, {0x03, 0xC6}, /* 0xD0-0xD3 */ + {0x03, 0xC7}, {0x03, 0xC8}, {0x03, 0xC9}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_84[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x04, 0x10}, {0x04, 0x11}, {0x04, 0x12}, {0x04, 0x13}, /* 0x40-0x43 */ + {0x04, 0x14}, {0x04, 0x15}, {0x04, 0x01}, {0x04, 0x16}, /* 0x44-0x47 */ + {0x04, 0x17}, {0x04, 0x18}, {0x04, 0x19}, {0x04, 0x1A}, /* 0x48-0x4B */ + {0x04, 0x1B}, {0x04, 0x1C}, {0x04, 0x1D}, {0x04, 0x1E}, /* 0x4C-0x4F */ + {0x04, 0x1F}, {0x04, 0x20}, {0x04, 0x21}, {0x04, 0x22}, /* 0x50-0x53 */ + {0x04, 0x23}, {0x04, 0x24}, {0x04, 0x25}, {0x04, 0x26}, /* 0x54-0x57 */ + {0x04, 0x27}, {0x04, 0x28}, {0x04, 0x29}, {0x04, 0x2A}, /* 0x58-0x5B */ + {0x04, 0x2B}, {0x04, 0x2C}, {0x04, 0x2D}, {0x04, 0x2E}, /* 0x5C-0x5F */ + {0x04, 0x2F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x04, 0x30}, {0x04, 0x31}, {0x04, 0x32}, {0x04, 0x33}, /* 0x70-0x73 */ + {0x04, 0x34}, {0x04, 0x35}, {0x04, 0x51}, {0x04, 0x36}, /* 0x74-0x77 */ + {0x04, 0x37}, {0x04, 0x38}, {0x04, 0x39}, {0x04, 0x3A}, /* 0x78-0x7B */ + {0x04, 0x3B}, {0x04, 0x3C}, {0x04, 0x3D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x04, 0x3E}, {0x04, 0x3F}, {0x04, 0x40}, {0x04, 0x41}, /* 0x80-0x83 */ + {0x04, 0x42}, {0x04, 0x43}, {0x04, 0x44}, {0x04, 0x45}, /* 0x84-0x87 */ + {0x04, 0x46}, {0x04, 0x47}, {0x04, 0x48}, {0x04, 0x49}, /* 0x88-0x8B */ + {0x04, 0x4A}, {0x04, 0x4B}, {0x04, 0x4C}, {0x04, 0x4D}, /* 0x8C-0x8F */ + {0x04, 0x4E}, {0x04, 0x4F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x25, 0x00}, /* 0x9C-0x9F */ + {0x25, 0x02}, {0x25, 0x0C}, {0x25, 0x10}, {0x25, 0x18}, /* 0xA0-0xA3 */ + {0x25, 0x14}, {0x25, 0x1C}, {0x25, 0x2C}, {0x25, 0x24}, /* 0xA4-0xA7 */ + {0x25, 0x34}, {0x25, 0x3C}, {0x25, 0x01}, {0x25, 0x03}, /* 0xA8-0xAB */ + {0x25, 0x0F}, {0x25, 0x13}, {0x25, 0x1B}, {0x25, 0x17}, /* 0xAC-0xAF */ + {0x25, 0x23}, {0x25, 0x33}, {0x25, 0x2B}, {0x25, 0x3B}, /* 0xB0-0xB3 */ + {0x25, 0x4B}, {0x25, 0x20}, {0x25, 0x2F}, {0x25, 0x28}, /* 0xB4-0xB7 */ + {0x25, 0x37}, {0x25, 0x3F}, {0x25, 0x1D}, {0x25, 0x30}, /* 0xB8-0xBB */ + {0x25, 0x25}, {0x25, 0x38}, {0x25, 0x42}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_87[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x24, 0x60}, {0x24, 0x61}, {0x24, 0x62}, {0x24, 0x63}, /* 0x40-0x43 */ + {0x24, 0x64}, {0x24, 0x65}, {0x24, 0x66}, {0x24, 0x67}, /* 0x44-0x47 */ + {0x24, 0x68}, {0x24, 0x69}, {0x24, 0x6A}, {0x24, 0x6B}, /* 0x48-0x4B */ + {0x24, 0x6C}, {0x24, 0x6D}, {0x24, 0x6E}, {0x24, 0x6F}, /* 0x4C-0x4F */ + {0x24, 0x70}, {0x24, 0x71}, {0x24, 0x72}, {0x24, 0x73}, /* 0x50-0x53 */ + {0x21, 0x60}, {0x21, 0x61}, {0x21, 0x62}, {0x21, 0x63}, /* 0x54-0x57 */ + {0x21, 0x64}, {0x21, 0x65}, {0x21, 0x66}, {0x21, 0x67}, /* 0x58-0x5B */ + {0x21, 0x68}, {0x21, 0x69}, {0x00, 0x3F}, {0x33, 0x49}, /* 0x5C-0x5F */ + {0x33, 0x14}, {0x33, 0x22}, {0x33, 0x4D}, {0x33, 0x18}, /* 0x60-0x63 */ + {0x33, 0x27}, {0x33, 0x03}, {0x33, 0x36}, {0x33, 0x51}, /* 0x64-0x67 */ + {0x33, 0x57}, {0x33, 0x0D}, {0x33, 0x26}, {0x33, 0x23}, /* 0x68-0x6B */ + {0x33, 0x2B}, {0x33, 0x4A}, {0x33, 0x3B}, {0x33, 0x9C}, /* 0x6C-0x6F */ + {0x33, 0x9D}, {0x33, 0x9E}, {0x33, 0x8E}, {0x33, 0x8F}, /* 0x70-0x73 */ + {0x33, 0xC4}, {0x33, 0xA1}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x33, 0x7B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x30, 0x1D}, {0x30, 0x1F}, {0x21, 0x16}, {0x33, 0xCD}, /* 0x80-0x83 */ + {0x21, 0x21}, {0x32, 0xA4}, {0x32, 0xA5}, {0x32, 0xA6}, /* 0x84-0x87 */ + {0x32, 0xA7}, {0x32, 0xA8}, {0x32, 0x31}, {0x32, 0x32}, /* 0x88-0x8B */ + {0x32, 0x39}, {0x33, 0x7E}, {0x33, 0x7D}, {0x33, 0x7C}, /* 0x8C-0x8F */ + {0x22, 0x52}, {0x22, 0x61}, {0x22, 0x2B}, {0x22, 0x2E}, /* 0x90-0x93 */ + {0x22, 0x11}, {0x22, 0x1A}, {0x22, 0xA5}, {0x22, 0x20}, /* 0x94-0x97 */ + {0x22, 0x1F}, {0x22, 0xBF}, {0x22, 0x35}, {0x22, 0x29}, /* 0x98-0x9B */ + {0x22, 0x2A}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_88[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x4E, 0x9C}, /* 0x9C-0x9F */ + {0x55, 0x16}, {0x5A, 0x03}, {0x96, 0x3F}, {0x54, 0xC0}, /* 0xA0-0xA3 */ + {0x61, 0x1B}, {0x63, 0x28}, {0x59, 0xF6}, {0x90, 0x22}, /* 0xA4-0xA7 */ + {0x84, 0x75}, {0x83, 0x1C}, {0x7A, 0x50}, {0x60, 0xAA}, /* 0xA8-0xAB */ + {0x63, 0xE1}, {0x6E, 0x25}, {0x65, 0xED}, {0x84, 0x66}, /* 0xAC-0xAF */ + {0x82, 0xA6}, {0x9B, 0xF5}, {0x68, 0x93}, {0x57, 0x27}, /* 0xB0-0xB3 */ + {0x65, 0xA1}, {0x62, 0x71}, {0x5B, 0x9B}, {0x59, 0xD0}, /* 0xB4-0xB7 */ + {0x86, 0x7B}, {0x98, 0xF4}, {0x7D, 0x62}, {0x7D, 0xBE}, /* 0xB8-0xBB */ + {0x9B, 0x8E}, {0x62, 0x16}, {0x7C, 0x9F}, {0x88, 0xB7}, /* 0xBC-0xBF */ + {0x5B, 0x89}, {0x5E, 0xB5}, {0x63, 0x09}, {0x66, 0x97}, /* 0xC0-0xC3 */ + {0x68, 0x48}, {0x95, 0xC7}, {0x97, 0x8D}, {0x67, 0x4F}, /* 0xC4-0xC7 */ + {0x4E, 0xE5}, {0x4F, 0x0A}, {0x4F, 0x4D}, {0x4F, 0x9D}, /* 0xC8-0xCB */ + {0x50, 0x49}, {0x56, 0xF2}, {0x59, 0x37}, {0x59, 0xD4}, /* 0xCC-0xCF */ + {0x5A, 0x01}, {0x5C, 0x09}, {0x60, 0xDF}, {0x61, 0x0F}, /* 0xD0-0xD3 */ + {0x61, 0x70}, {0x66, 0x13}, {0x69, 0x05}, {0x70, 0xBA}, /* 0xD4-0xD7 */ + {0x75, 0x4F}, {0x75, 0x70}, {0x79, 0xFB}, {0x7D, 0xAD}, /* 0xD8-0xDB */ + {0x7D, 0xEF}, {0x80, 0xC3}, {0x84, 0x0E}, {0x88, 0x63}, /* 0xDC-0xDF */ + {0x8B, 0x02}, {0x90, 0x55}, {0x90, 0x7A}, {0x53, 0x3B}, /* 0xE0-0xE3 */ + {0x4E, 0x95}, {0x4E, 0xA5}, {0x57, 0xDF}, {0x80, 0xB2}, /* 0xE4-0xE7 */ + {0x90, 0xC1}, {0x78, 0xEF}, {0x4E, 0x00}, {0x58, 0xF1}, /* 0xE8-0xEB */ + {0x6E, 0xA2}, {0x90, 0x38}, {0x7A, 0x32}, {0x83, 0x28}, /* 0xEC-0xEF */ + {0x82, 0x8B}, {0x9C, 0x2F}, {0x51, 0x41}, {0x53, 0x70}, /* 0xF0-0xF3 */ + {0x54, 0xBD}, {0x54, 0xE1}, {0x56, 0xE0}, {0x59, 0xFB}, /* 0xF4-0xF7 */ + {0x5F, 0x15}, {0x98, 0xF2}, {0x6D, 0xEB}, {0x80, 0xE4}, /* 0xF8-0xFB */ + {0x85, 0x2D}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_89[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x96, 0x62}, {0x96, 0x70}, {0x96, 0xA0}, {0x97, 0xFB}, /* 0x40-0x43 */ + {0x54, 0x0B}, {0x53, 0xF3}, {0x5B, 0x87}, {0x70, 0xCF}, /* 0x44-0x47 */ + {0x7F, 0xBD}, {0x8F, 0xC2}, {0x96, 0xE8}, {0x53, 0x6F}, /* 0x48-0x4B */ + {0x9D, 0x5C}, {0x7A, 0xBA}, {0x4E, 0x11}, {0x78, 0x93}, /* 0x4C-0x4F */ + {0x81, 0xFC}, {0x6E, 0x26}, {0x56, 0x18}, {0x55, 0x04}, /* 0x50-0x53 */ + {0x6B, 0x1D}, {0x85, 0x1A}, {0x9C, 0x3B}, {0x59, 0xE5}, /* 0x54-0x57 */ + {0x53, 0xA9}, {0x6D, 0x66}, {0x74, 0xDC}, {0x95, 0x8F}, /* 0x58-0x5B */ + {0x56, 0x42}, {0x4E, 0x91}, {0x90, 0x4B}, {0x96, 0xF2}, /* 0x5C-0x5F */ + {0x83, 0x4F}, {0x99, 0x0C}, {0x53, 0xE1}, {0x55, 0xB6}, /* 0x60-0x63 */ + {0x5B, 0x30}, {0x5F, 0x71}, {0x66, 0x20}, {0x66, 0xF3}, /* 0x64-0x67 */ + {0x68, 0x04}, {0x6C, 0x38}, {0x6C, 0xF3}, {0x6D, 0x29}, /* 0x68-0x6B */ + {0x74, 0x5B}, {0x76, 0xC8}, {0x7A, 0x4E}, {0x98, 0x34}, /* 0x6C-0x6F */ + {0x82, 0xF1}, {0x88, 0x5B}, {0x8A, 0x60}, {0x92, 0xED}, /* 0x70-0x73 */ + {0x6D, 0xB2}, {0x75, 0xAB}, {0x76, 0xCA}, {0x99, 0xC5}, /* 0x74-0x77 */ + {0x60, 0xA6}, {0x8B, 0x01}, {0x8D, 0x8A}, {0x95, 0xB2}, /* 0x78-0x7B */ + {0x69, 0x8E}, {0x53, 0xAD}, {0x51, 0x86}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x57, 0x12}, {0x58, 0x30}, {0x59, 0x44}, {0x5B, 0xB4}, /* 0x80-0x83 */ + {0x5E, 0xF6}, {0x60, 0x28}, {0x63, 0xA9}, {0x63, 0xF4}, /* 0x84-0x87 */ + {0x6C, 0xBF}, {0x6F, 0x14}, {0x70, 0x8E}, {0x71, 0x14}, /* 0x88-0x8B */ + {0x71, 0x59}, {0x71, 0xD5}, {0x73, 0x3F}, {0x7E, 0x01}, /* 0x8C-0x8F */ + {0x82, 0x76}, {0x82, 0xD1}, {0x85, 0x97}, {0x90, 0x60}, /* 0x90-0x93 */ + {0x92, 0x5B}, {0x9D, 0x1B}, {0x58, 0x69}, {0x65, 0xBC}, /* 0x94-0x97 */ + {0x6C, 0x5A}, {0x75, 0x25}, {0x51, 0xF9}, {0x59, 0x2E}, /* 0x98-0x9B */ + {0x59, 0x65}, {0x5F, 0x80}, {0x5F, 0xDC}, {0x62, 0xBC}, /* 0x9C-0x9F */ + {0x65, 0xFA}, {0x6A, 0x2A}, {0x6B, 0x27}, {0x6B, 0xB4}, /* 0xA0-0xA3 */ + {0x73, 0x8B}, {0x7F, 0xC1}, {0x89, 0x56}, {0x9D, 0x2C}, /* 0xA4-0xA7 */ + {0x9D, 0x0E}, {0x9E, 0xC4}, {0x5C, 0xA1}, {0x6C, 0x96}, /* 0xA8-0xAB */ + {0x83, 0x7B}, {0x51, 0x04}, {0x5C, 0x4B}, {0x61, 0xB6}, /* 0xAC-0xAF */ + {0x81, 0xC6}, {0x68, 0x76}, {0x72, 0x61}, {0x4E, 0x59}, /* 0xB0-0xB3 */ + {0x4F, 0xFA}, {0x53, 0x78}, {0x60, 0x69}, {0x6E, 0x29}, /* 0xB4-0xB7 */ + {0x7A, 0x4F}, {0x97, 0xF3}, {0x4E, 0x0B}, {0x53, 0x16}, /* 0xB8-0xBB */ + {0x4E, 0xEE}, {0x4F, 0x55}, {0x4F, 0x3D}, {0x4F, 0xA1}, /* 0xBC-0xBF */ + {0x4F, 0x73}, {0x52, 0xA0}, {0x53, 0xEF}, {0x56, 0x09}, /* 0xC0-0xC3 */ + {0x59, 0x0F}, {0x5A, 0xC1}, {0x5B, 0xB6}, {0x5B, 0xE1}, /* 0xC4-0xC7 */ + {0x79, 0xD1}, {0x66, 0x87}, {0x67, 0x9C}, {0x67, 0xB6}, /* 0xC8-0xCB */ + {0x6B, 0x4C}, {0x6C, 0xB3}, {0x70, 0x6B}, {0x73, 0xC2}, /* 0xCC-0xCF */ + {0x79, 0x8D}, {0x79, 0xBE}, {0x7A, 0x3C}, {0x7B, 0x87}, /* 0xD0-0xD3 */ + {0x82, 0xB1}, {0x82, 0xDB}, {0x83, 0x04}, {0x83, 0x77}, /* 0xD4-0xD7 */ + {0x83, 0xEF}, {0x83, 0xD3}, {0x87, 0x66}, {0x8A, 0xB2}, /* 0xD8-0xDB */ + {0x56, 0x29}, {0x8C, 0xA8}, {0x8F, 0xE6}, {0x90, 0x4E}, /* 0xDC-0xDF */ + {0x97, 0x1E}, {0x86, 0x8A}, {0x4F, 0xC4}, {0x5C, 0xE8}, /* 0xE0-0xE3 */ + {0x62, 0x11}, {0x72, 0x59}, {0x75, 0x3B}, {0x81, 0xE5}, /* 0xE4-0xE7 */ + {0x82, 0xBD}, {0x86, 0xFE}, {0x8C, 0xC0}, {0x96, 0xC5}, /* 0xE8-0xEB */ + {0x99, 0x13}, {0x99, 0xD5}, {0x4E, 0xCB}, {0x4F, 0x1A}, /* 0xEC-0xEF */ + {0x89, 0xE3}, {0x56, 0xDE}, {0x58, 0x4A}, {0x58, 0xCA}, /* 0xF0-0xF3 */ + {0x5E, 0xFB}, {0x5F, 0xEB}, {0x60, 0x2A}, {0x60, 0x94}, /* 0xF4-0xF7 */ + {0x60, 0x62}, {0x61, 0xD0}, {0x62, 0x12}, {0x62, 0xD0}, /* 0xF8-0xFB */ + {0x65, 0x39}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8A[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9B, 0x41}, {0x66, 0x66}, {0x68, 0xB0}, {0x6D, 0x77}, /* 0x40-0x43 */ + {0x70, 0x70}, {0x75, 0x4C}, {0x76, 0x86}, {0x7D, 0x75}, /* 0x44-0x47 */ + {0x82, 0xA5}, {0x87, 0xF9}, {0x95, 0x8B}, {0x96, 0x8E}, /* 0x48-0x4B */ + {0x8C, 0x9D}, {0x51, 0xF1}, {0x52, 0xBE}, {0x59, 0x16}, /* 0x4C-0x4F */ + {0x54, 0xB3}, {0x5B, 0xB3}, {0x5D, 0x16}, {0x61, 0x68}, /* 0x50-0x53 */ + {0x69, 0x82}, {0x6D, 0xAF}, {0x78, 0x8D}, {0x84, 0xCB}, /* 0x54-0x57 */ + {0x88, 0x57}, {0x8A, 0x72}, {0x93, 0xA7}, {0x9A, 0xB8}, /* 0x58-0x5B */ + {0x6D, 0x6C}, {0x99, 0xA8}, {0x86, 0xD9}, {0x57, 0xA3}, /* 0x5C-0x5F */ + {0x67, 0xFF}, {0x86, 0xCE}, {0x92, 0x0E}, {0x52, 0x83}, /* 0x60-0x63 */ + {0x56, 0x87}, {0x54, 0x04}, {0x5E, 0xD3}, {0x62, 0xE1}, /* 0x64-0x67 */ + {0x64, 0xB9}, {0x68, 0x3C}, {0x68, 0x38}, {0x6B, 0xBB}, /* 0x68-0x6B */ + {0x73, 0x72}, {0x78, 0xBA}, {0x7A, 0x6B}, {0x89, 0x9A}, /* 0x6C-0x6F */ + {0x89, 0xD2}, {0x8D, 0x6B}, {0x8F, 0x03}, {0x90, 0xED}, /* 0x70-0x73 */ + {0x95, 0xA3}, {0x96, 0x94}, {0x97, 0x69}, {0x5B, 0x66}, /* 0x74-0x77 */ + {0x5C, 0xB3}, {0x69, 0x7D}, {0x98, 0x4D}, {0x98, 0x4E}, /* 0x78-0x7B */ + {0x63, 0x9B}, {0x7B, 0x20}, {0x6A, 0x2B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6A, 0x7F}, {0x68, 0xB6}, {0x9C, 0x0D}, {0x6F, 0x5F}, /* 0x80-0x83 */ + {0x52, 0x72}, {0x55, 0x9D}, {0x60, 0x70}, {0x62, 0xEC}, /* 0x84-0x87 */ + {0x6D, 0x3B}, {0x6E, 0x07}, {0x6E, 0xD1}, {0x84, 0x5B}, /* 0x88-0x8B */ + {0x89, 0x10}, {0x8F, 0x44}, {0x4E, 0x14}, {0x9C, 0x39}, /* 0x8C-0x8F */ + {0x53, 0xF6}, {0x69, 0x1B}, {0x6A, 0x3A}, {0x97, 0x84}, /* 0x90-0x93 */ + {0x68, 0x2A}, {0x51, 0x5C}, {0x7A, 0xC3}, {0x84, 0xB2}, /* 0x94-0x97 */ + {0x91, 0xDC}, {0x93, 0x8C}, {0x56, 0x5B}, {0x9D, 0x28}, /* 0x98-0x9B */ + {0x68, 0x22}, {0x83, 0x05}, {0x84, 0x31}, {0x7C, 0xA5}, /* 0x9C-0x9F */ + {0x52, 0x08}, {0x82, 0xC5}, {0x74, 0xE6}, {0x4E, 0x7E}, /* 0xA0-0xA3 */ + {0x4F, 0x83}, {0x51, 0xA0}, {0x5B, 0xD2}, {0x52, 0x0A}, /* 0xA4-0xA7 */ + {0x52, 0xD8}, {0x52, 0xE7}, {0x5D, 0xFB}, {0x55, 0x9A}, /* 0xA8-0xAB */ + {0x58, 0x2A}, {0x59, 0xE6}, {0x5B, 0x8C}, {0x5B, 0x98}, /* 0xAC-0xAF */ + {0x5B, 0xDB}, {0x5E, 0x72}, {0x5E, 0x79}, {0x60, 0xA3}, /* 0xB0-0xB3 */ + {0x61, 0x1F}, {0x61, 0x63}, {0x61, 0xBE}, {0x63, 0xDB}, /* 0xB4-0xB7 */ + {0x65, 0x62}, {0x67, 0xD1}, {0x68, 0x53}, {0x68, 0xFA}, /* 0xB8-0xBB */ + {0x6B, 0x3E}, {0x6B, 0x53}, {0x6C, 0x57}, {0x6F, 0x22}, /* 0xBC-0xBF */ + {0x6F, 0x97}, {0x6F, 0x45}, {0x74, 0xB0}, {0x75, 0x18}, /* 0xC0-0xC3 */ + {0x76, 0xE3}, {0x77, 0x0B}, {0x7A, 0xFF}, {0x7B, 0xA1}, /* 0xC4-0xC7 */ + {0x7C, 0x21}, {0x7D, 0xE9}, {0x7F, 0x36}, {0x7F, 0xF0}, /* 0xC8-0xCB */ + {0x80, 0x9D}, {0x82, 0x66}, {0x83, 0x9E}, {0x89, 0xB3}, /* 0xCC-0xCF */ + {0x8A, 0xCC}, {0x8C, 0xAB}, {0x90, 0x84}, {0x94, 0x51}, /* 0xD0-0xD3 */ + {0x95, 0x93}, {0x95, 0x91}, {0x95, 0xA2}, {0x96, 0x65}, /* 0xD4-0xD7 */ + {0x97, 0xD3}, {0x99, 0x28}, {0x82, 0x18}, {0x4E, 0x38}, /* 0xD8-0xDB */ + {0x54, 0x2B}, {0x5C, 0xB8}, {0x5D, 0xCC}, {0x73, 0xA9}, /* 0xDC-0xDF */ + {0x76, 0x4C}, {0x77, 0x3C}, {0x5C, 0xA9}, {0x7F, 0xEB}, /* 0xE0-0xE3 */ + {0x8D, 0x0B}, {0x96, 0xC1}, {0x98, 0x11}, {0x98, 0x54}, /* 0xE4-0xE7 */ + {0x98, 0x58}, {0x4F, 0x01}, {0x4F, 0x0E}, {0x53, 0x71}, /* 0xE8-0xEB */ + {0x55, 0x9C}, {0x56, 0x68}, {0x57, 0xFA}, {0x59, 0x47}, /* 0xEC-0xEF */ + {0x5B, 0x09}, {0x5B, 0xC4}, {0x5C, 0x90}, {0x5E, 0x0C}, /* 0xF0-0xF3 */ + {0x5E, 0x7E}, {0x5F, 0xCC}, {0x63, 0xEE}, {0x67, 0x3A}, /* 0xF4-0xF7 */ + {0x65, 0xD7}, {0x65, 0xE2}, {0x67, 0x1F}, {0x68, 0xCB}, /* 0xF8-0xFB */ + {0x68, 0xC4}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8B[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6A, 0x5F}, {0x5E, 0x30}, {0x6B, 0xC5}, {0x6C, 0x17}, /* 0x40-0x43 */ + {0x6C, 0x7D}, {0x75, 0x7F}, {0x79, 0x48}, {0x5B, 0x63}, /* 0x44-0x47 */ + {0x7A, 0x00}, {0x7D, 0x00}, {0x5F, 0xBD}, {0x89, 0x8F}, /* 0x48-0x4B */ + {0x8A, 0x18}, {0x8C, 0xB4}, {0x8D, 0x77}, {0x8E, 0xCC}, /* 0x4C-0x4F */ + {0x8F, 0x1D}, {0x98, 0xE2}, {0x9A, 0x0E}, {0x9B, 0x3C}, /* 0x50-0x53 */ + {0x4E, 0x80}, {0x50, 0x7D}, {0x51, 0x00}, {0x59, 0x93}, /* 0x54-0x57 */ + {0x5B, 0x9C}, {0x62, 0x2F}, {0x62, 0x80}, {0x64, 0xEC}, /* 0x58-0x5B */ + {0x6B, 0x3A}, {0x72, 0xA0}, {0x75, 0x91}, {0x79, 0x47}, /* 0x5C-0x5F */ + {0x7F, 0xA9}, {0x87, 0xFB}, {0x8A, 0xBC}, {0x8B, 0x70}, /* 0x60-0x63 */ + {0x63, 0xAC}, {0x83, 0xCA}, {0x97, 0xA0}, {0x54, 0x09}, /* 0x64-0x67 */ + {0x54, 0x03}, {0x55, 0xAB}, {0x68, 0x54}, {0x6A, 0x58}, /* 0x68-0x6B */ + {0x8A, 0x70}, {0x78, 0x27}, {0x67, 0x75}, {0x9E, 0xCD}, /* 0x6C-0x6F */ + {0x53, 0x74}, {0x5B, 0xA2}, {0x81, 0x1A}, {0x86, 0x50}, /* 0x70-0x73 */ + {0x90, 0x06}, {0x4E, 0x18}, {0x4E, 0x45}, {0x4E, 0xC7}, /* 0x74-0x77 */ + {0x4F, 0x11}, {0x53, 0xCA}, {0x54, 0x38}, {0x5B, 0xAE}, /* 0x78-0x7B */ + {0x5F, 0x13}, {0x60, 0x25}, {0x65, 0x51}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x67, 0x3D}, {0x6C, 0x42}, {0x6C, 0x72}, {0x6C, 0xE3}, /* 0x80-0x83 */ + {0x70, 0x78}, {0x74, 0x03}, {0x7A, 0x76}, {0x7A, 0xAE}, /* 0x84-0x87 */ + {0x7B, 0x08}, {0x7D, 0x1A}, {0x7C, 0xFE}, {0x7D, 0x66}, /* 0x88-0x8B */ + {0x65, 0xE7}, {0x72, 0x5B}, {0x53, 0xBB}, {0x5C, 0x45}, /* 0x8C-0x8F */ + {0x5D, 0xE8}, {0x62, 0xD2}, {0x62, 0xE0}, {0x63, 0x19}, /* 0x90-0x93 */ + {0x6E, 0x20}, {0x86, 0x5A}, {0x8A, 0x31}, {0x8D, 0xDD}, /* 0x94-0x97 */ + {0x92, 0xF8}, {0x6F, 0x01}, {0x79, 0xA6}, {0x9B, 0x5A}, /* 0x98-0x9B */ + {0x4E, 0xA8}, {0x4E, 0xAB}, {0x4E, 0xAC}, {0x4F, 0x9B}, /* 0x9C-0x9F */ + {0x4F, 0xA0}, {0x50, 0xD1}, {0x51, 0x47}, {0x7A, 0xF6}, /* 0xA0-0xA3 */ + {0x51, 0x71}, {0x51, 0xF6}, {0x53, 0x54}, {0x53, 0x21}, /* 0xA4-0xA7 */ + {0x53, 0x7F}, {0x53, 0xEB}, {0x55, 0xAC}, {0x58, 0x83}, /* 0xA8-0xAB */ + {0x5C, 0xE1}, {0x5F, 0x37}, {0x5F, 0x4A}, {0x60, 0x2F}, /* 0xAC-0xAF */ + {0x60, 0x50}, {0x60, 0x6D}, {0x63, 0x1F}, {0x65, 0x59}, /* 0xB0-0xB3 */ + {0x6A, 0x4B}, {0x6C, 0xC1}, {0x72, 0xC2}, {0x72, 0xED}, /* 0xB4-0xB7 */ + {0x77, 0xEF}, {0x80, 0xF8}, {0x81, 0x05}, {0x82, 0x08}, /* 0xB8-0xBB */ + {0x85, 0x4E}, {0x90, 0xF7}, {0x93, 0xE1}, {0x97, 0xFF}, /* 0xBC-0xBF */ + {0x99, 0x57}, {0x9A, 0x5A}, {0x4E, 0xF0}, {0x51, 0xDD}, /* 0xC0-0xC3 */ + {0x5C, 0x2D}, {0x66, 0x81}, {0x69, 0x6D}, {0x5C, 0x40}, /* 0xC4-0xC7 */ + {0x66, 0xF2}, {0x69, 0x75}, {0x73, 0x89}, {0x68, 0x50}, /* 0xC8-0xCB */ + {0x7C, 0x81}, {0x50, 0xC5}, {0x52, 0xE4}, {0x57, 0x47}, /* 0xCC-0xCF */ + {0x5D, 0xFE}, {0x93, 0x26}, {0x65, 0xA4}, {0x6B, 0x23}, /* 0xD0-0xD3 */ + {0x6B, 0x3D}, {0x74, 0x34}, {0x79, 0x81}, {0x79, 0xBD}, /* 0xD4-0xD7 */ + {0x7B, 0x4B}, {0x7D, 0xCA}, {0x82, 0xB9}, {0x83, 0xCC}, /* 0xD8-0xDB */ + {0x88, 0x7F}, {0x89, 0x5F}, {0x8B, 0x39}, {0x8F, 0xD1}, /* 0xDC-0xDF */ + {0x91, 0xD1}, {0x54, 0x1F}, {0x92, 0x80}, {0x4E, 0x5D}, /* 0xE0-0xE3 */ + {0x50, 0x36}, {0x53, 0xE5}, {0x53, 0x3A}, {0x72, 0xD7}, /* 0xE4-0xE7 */ + {0x73, 0x96}, {0x77, 0xE9}, {0x82, 0xE6}, {0x8E, 0xAF}, /* 0xE8-0xEB */ + {0x99, 0xC6}, {0x99, 0xC8}, {0x99, 0xD2}, {0x51, 0x77}, /* 0xEC-0xEF */ + {0x61, 0x1A}, {0x86, 0x5E}, {0x55, 0xB0}, {0x7A, 0x7A}, /* 0xF0-0xF3 */ + {0x50, 0x76}, {0x5B, 0xD3}, {0x90, 0x47}, {0x96, 0x85}, /* 0xF4-0xF7 */ + {0x4E, 0x32}, {0x6A, 0xDB}, {0x91, 0xE7}, {0x5C, 0x51}, /* 0xF8-0xFB */ + {0x5C, 0x48}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8C[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x63, 0x98}, {0x7A, 0x9F}, {0x6C, 0x93}, {0x97, 0x74}, /* 0x40-0x43 */ + {0x8F, 0x61}, {0x7A, 0xAA}, {0x71, 0x8A}, {0x96, 0x88}, /* 0x44-0x47 */ + {0x7C, 0x82}, {0x68, 0x17}, {0x7E, 0x70}, {0x68, 0x51}, /* 0x48-0x4B */ + {0x93, 0x6C}, {0x52, 0xF2}, {0x54, 0x1B}, {0x85, 0xAB}, /* 0x4C-0x4F */ + {0x8A, 0x13}, {0x7F, 0xA4}, {0x8E, 0xCD}, {0x90, 0xE1}, /* 0x50-0x53 */ + {0x53, 0x66}, {0x88, 0x88}, {0x79, 0x41}, {0x4F, 0xC2}, /* 0x54-0x57 */ + {0x50, 0xBE}, {0x52, 0x11}, {0x51, 0x44}, {0x55, 0x53}, /* 0x58-0x5B */ + {0x57, 0x2D}, {0x73, 0xEA}, {0x57, 0x8B}, {0x59, 0x51}, /* 0x5C-0x5F */ + {0x5F, 0x62}, {0x5F, 0x84}, {0x60, 0x75}, {0x61, 0x76}, /* 0x60-0x63 */ + {0x61, 0x67}, {0x61, 0xA9}, {0x63, 0xB2}, {0x64, 0x3A}, /* 0x64-0x67 */ + {0x65, 0x6C}, {0x66, 0x6F}, {0x68, 0x42}, {0x6E, 0x13}, /* 0x68-0x6B */ + {0x75, 0x66}, {0x7A, 0x3D}, {0x7C, 0xFB}, {0x7D, 0x4C}, /* 0x6C-0x6F */ + {0x7D, 0x99}, {0x7E, 0x4B}, {0x7F, 0x6B}, {0x83, 0x0E}, /* 0x70-0x73 */ + {0x83, 0x4A}, {0x86, 0xCD}, {0x8A, 0x08}, {0x8A, 0x63}, /* 0x74-0x77 */ + {0x8B, 0x66}, {0x8E, 0xFD}, {0x98, 0x1A}, {0x9D, 0x8F}, /* 0x78-0x7B */ + {0x82, 0xB8}, {0x8F, 0xCE}, {0x9B, 0xE8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x52, 0x87}, {0x62, 0x1F}, {0x64, 0x83}, {0x6F, 0xC0}, /* 0x80-0x83 */ + {0x96, 0x99}, {0x68, 0x41}, {0x50, 0x91}, {0x6B, 0x20}, /* 0x84-0x87 */ + {0x6C, 0x7A}, {0x6F, 0x54}, {0x7A, 0x74}, {0x7D, 0x50}, /* 0x88-0x8B */ + {0x88, 0x40}, {0x8A, 0x23}, {0x67, 0x08}, {0x4E, 0xF6}, /* 0x8C-0x8F */ + {0x50, 0x39}, {0x50, 0x26}, {0x50, 0x65}, {0x51, 0x7C}, /* 0x90-0x93 */ + {0x52, 0x38}, {0x52, 0x63}, {0x55, 0xA7}, {0x57, 0x0F}, /* 0x94-0x97 */ + {0x58, 0x05}, {0x5A, 0xCC}, {0x5E, 0xFA}, {0x61, 0xB2}, /* 0x98-0x9B */ + {0x61, 0xF8}, {0x62, 0xF3}, {0x63, 0x72}, {0x69, 0x1C}, /* 0x9C-0x9F */ + {0x6A, 0x29}, {0x72, 0x7D}, {0x72, 0xAC}, {0x73, 0x2E}, /* 0xA0-0xA3 */ + {0x78, 0x14}, {0x78, 0x6F}, {0x7D, 0x79}, {0x77, 0x0C}, /* 0xA4-0xA7 */ + {0x80, 0xA9}, {0x89, 0x8B}, {0x8B, 0x19}, {0x8C, 0xE2}, /* 0xA8-0xAB */ + {0x8E, 0xD2}, {0x90, 0x63}, {0x93, 0x75}, {0x96, 0x7A}, /* 0xAC-0xAF */ + {0x98, 0x55}, {0x9A, 0x13}, {0x9E, 0x78}, {0x51, 0x43}, /* 0xB0-0xB3 */ + {0x53, 0x9F}, {0x53, 0xB3}, {0x5E, 0x7B}, {0x5F, 0x26}, /* 0xB4-0xB7 */ + {0x6E, 0x1B}, {0x6E, 0x90}, {0x73, 0x84}, {0x73, 0xFE}, /* 0xB8-0xBB */ + {0x7D, 0x43}, {0x82, 0x37}, {0x8A, 0x00}, {0x8A, 0xFA}, /* 0xBC-0xBF */ + {0x96, 0x50}, {0x4E, 0x4E}, {0x50, 0x0B}, {0x53, 0xE4}, /* 0xC0-0xC3 */ + {0x54, 0x7C}, {0x56, 0xFA}, {0x59, 0xD1}, {0x5B, 0x64}, /* 0xC4-0xC7 */ + {0x5D, 0xF1}, {0x5E, 0xAB}, {0x5F, 0x27}, {0x62, 0x38}, /* 0xC8-0xCB */ + {0x65, 0x45}, {0x67, 0xAF}, {0x6E, 0x56}, {0x72, 0xD0}, /* 0xCC-0xCF */ + {0x7C, 0xCA}, {0x88, 0xB4}, {0x80, 0xA1}, {0x80, 0xE1}, /* 0xD0-0xD3 */ + {0x83, 0xF0}, {0x86, 0x4E}, {0x8A, 0x87}, {0x8D, 0xE8}, /* 0xD4-0xD7 */ + {0x92, 0x37}, {0x96, 0xC7}, {0x98, 0x67}, {0x9F, 0x13}, /* 0xD8-0xDB */ + {0x4E, 0x94}, {0x4E, 0x92}, {0x4F, 0x0D}, {0x53, 0x48}, /* 0xDC-0xDF */ + {0x54, 0x49}, {0x54, 0x3E}, {0x5A, 0x2F}, {0x5F, 0x8C}, /* 0xE0-0xE3 */ + {0x5F, 0xA1}, {0x60, 0x9F}, {0x68, 0xA7}, {0x6A, 0x8E}, /* 0xE4-0xE7 */ + {0x74, 0x5A}, {0x78, 0x81}, {0x8A, 0x9E}, {0x8A, 0xA4}, /* 0xE8-0xEB */ + {0x8B, 0x77}, {0x91, 0x90}, {0x4E, 0x5E}, {0x9B, 0xC9}, /* 0xEC-0xEF */ + {0x4E, 0xA4}, {0x4F, 0x7C}, {0x4F, 0xAF}, {0x50, 0x19}, /* 0xF0-0xF3 */ + {0x50, 0x16}, {0x51, 0x49}, {0x51, 0x6C}, {0x52, 0x9F}, /* 0xF4-0xF7 */ + {0x52, 0xB9}, {0x52, 0xFE}, {0x53, 0x9A}, {0x53, 0xE3}, /* 0xF8-0xFB */ + {0x54, 0x11}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8D[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x54, 0x0E}, {0x55, 0x89}, {0x57, 0x51}, {0x57, 0xA2}, /* 0x40-0x43 */ + {0x59, 0x7D}, {0x5B, 0x54}, {0x5B, 0x5D}, {0x5B, 0x8F}, /* 0x44-0x47 */ + {0x5D, 0xE5}, {0x5D, 0xE7}, {0x5D, 0xF7}, {0x5E, 0x78}, /* 0x48-0x4B */ + {0x5E, 0x83}, {0x5E, 0x9A}, {0x5E, 0xB7}, {0x5F, 0x18}, /* 0x4C-0x4F */ + {0x60, 0x52}, {0x61, 0x4C}, {0x62, 0x97}, {0x62, 0xD8}, /* 0x50-0x53 */ + {0x63, 0xA7}, {0x65, 0x3B}, {0x66, 0x02}, {0x66, 0x43}, /* 0x54-0x57 */ + {0x66, 0xF4}, {0x67, 0x6D}, {0x68, 0x21}, {0x68, 0x97}, /* 0x58-0x5B */ + {0x69, 0xCB}, {0x6C, 0x5F}, {0x6D, 0x2A}, {0x6D, 0x69}, /* 0x5C-0x5F */ + {0x6E, 0x2F}, {0x6E, 0x9D}, {0x75, 0x32}, {0x76, 0x87}, /* 0x60-0x63 */ + {0x78, 0x6C}, {0x7A, 0x3F}, {0x7C, 0xE0}, {0x7D, 0x05}, /* 0x64-0x67 */ + {0x7D, 0x18}, {0x7D, 0x5E}, {0x7D, 0xB1}, {0x80, 0x15}, /* 0x68-0x6B */ + {0x80, 0x03}, {0x80, 0xAF}, {0x80, 0xB1}, {0x81, 0x54}, /* 0x6C-0x6F */ + {0x81, 0x8F}, {0x82, 0x2A}, {0x83, 0x52}, {0x88, 0x4C}, /* 0x70-0x73 */ + {0x88, 0x61}, {0x8B, 0x1B}, {0x8C, 0xA2}, {0x8C, 0xFC}, /* 0x74-0x77 */ + {0x90, 0xCA}, {0x91, 0x75}, {0x92, 0x71}, {0x78, 0x3F}, /* 0x78-0x7B */ + {0x92, 0xFC}, {0x95, 0xA4}, {0x96, 0x4D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x98, 0x05}, {0x99, 0x99}, {0x9A, 0xD8}, {0x9D, 0x3B}, /* 0x80-0x83 */ + {0x52, 0x5B}, {0x52, 0xAB}, {0x53, 0xF7}, {0x54, 0x08}, /* 0x84-0x87 */ + {0x58, 0xD5}, {0x62, 0xF7}, {0x6F, 0xE0}, {0x8C, 0x6A}, /* 0x88-0x8B */ + {0x8F, 0x5F}, {0x9E, 0xB9}, {0x51, 0x4B}, {0x52, 0x3B}, /* 0x8C-0x8F */ + {0x54, 0x4A}, {0x56, 0xFD}, {0x7A, 0x40}, {0x91, 0x77}, /* 0x90-0x93 */ + {0x9D, 0x60}, {0x9E, 0xD2}, {0x73, 0x44}, {0x6F, 0x09}, /* 0x94-0x97 */ + {0x81, 0x70}, {0x75, 0x11}, {0x5F, 0xFD}, {0x60, 0xDA}, /* 0x98-0x9B */ + {0x9A, 0xA8}, {0x72, 0xDB}, {0x8F, 0xBC}, {0x6B, 0x64}, /* 0x9C-0x9F */ + {0x98, 0x03}, {0x4E, 0xCA}, {0x56, 0xF0}, {0x57, 0x64}, /* 0xA0-0xA3 */ + {0x58, 0xBE}, {0x5A, 0x5A}, {0x60, 0x68}, {0x61, 0xC7}, /* 0xA4-0xA7 */ + {0x66, 0x0F}, {0x66, 0x06}, {0x68, 0x39}, {0x68, 0xB1}, /* 0xA8-0xAB */ + {0x6D, 0xF7}, {0x75, 0xD5}, {0x7D, 0x3A}, {0x82, 0x6E}, /* 0xAC-0xAF */ + {0x9B, 0x42}, {0x4E, 0x9B}, {0x4F, 0x50}, {0x53, 0xC9}, /* 0xB0-0xB3 */ + {0x55, 0x06}, {0x5D, 0x6F}, {0x5D, 0xE6}, {0x5D, 0xEE}, /* 0xB4-0xB7 */ + {0x67, 0xFB}, {0x6C, 0x99}, {0x74, 0x73}, {0x78, 0x02}, /* 0xB8-0xBB */ + {0x8A, 0x50}, {0x93, 0x96}, {0x88, 0xDF}, {0x57, 0x50}, /* 0xBC-0xBF */ + {0x5E, 0xA7}, {0x63, 0x2B}, {0x50, 0xB5}, {0x50, 0xAC}, /* 0xC0-0xC3 */ + {0x51, 0x8D}, {0x67, 0x00}, {0x54, 0xC9}, {0x58, 0x5E}, /* 0xC4-0xC7 */ + {0x59, 0xBB}, {0x5B, 0xB0}, {0x5F, 0x69}, {0x62, 0x4D}, /* 0xC8-0xCB */ + {0x63, 0xA1}, {0x68, 0x3D}, {0x6B, 0x73}, {0x6E, 0x08}, /* 0xCC-0xCF */ + {0x70, 0x7D}, {0x91, 0xC7}, {0x72, 0x80}, {0x78, 0x15}, /* 0xD0-0xD3 */ + {0x78, 0x26}, {0x79, 0x6D}, {0x65, 0x8E}, {0x7D, 0x30}, /* 0xD4-0xD7 */ + {0x83, 0xDC}, {0x88, 0xC1}, {0x8F, 0x09}, {0x96, 0x9B}, /* 0xD8-0xDB */ + {0x52, 0x64}, {0x57, 0x28}, {0x67, 0x50}, {0x7F, 0x6A}, /* 0xDC-0xDF */ + {0x8C, 0xA1}, {0x51, 0xB4}, {0x57, 0x42}, {0x96, 0x2A}, /* 0xE0-0xE3 */ + {0x58, 0x3A}, {0x69, 0x8A}, {0x80, 0xB4}, {0x54, 0xB2}, /* 0xE4-0xE7 */ + {0x5D, 0x0E}, {0x57, 0xFC}, {0x78, 0x95}, {0x9D, 0xFA}, /* 0xE8-0xEB */ + {0x4F, 0x5C}, {0x52, 0x4A}, {0x54, 0x8B}, {0x64, 0x3E}, /* 0xEC-0xEF */ + {0x66, 0x28}, {0x67, 0x14}, {0x67, 0xF5}, {0x7A, 0x84}, /* 0xF0-0xF3 */ + {0x7B, 0x56}, {0x7D, 0x22}, {0x93, 0x2F}, {0x68, 0x5C}, /* 0xF4-0xF7 */ + {0x9B, 0xAD}, {0x7B, 0x39}, {0x53, 0x19}, {0x51, 0x8A}, /* 0xF8-0xFB */ + {0x52, 0x37}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8E[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5B, 0xDF}, {0x62, 0xF6}, {0x64, 0xAE}, {0x64, 0xE6}, /* 0x40-0x43 */ + {0x67, 0x2D}, {0x6B, 0xBA}, {0x85, 0xA9}, {0x96, 0xD1}, /* 0x44-0x47 */ + {0x76, 0x90}, {0x9B, 0xD6}, {0x63, 0x4C}, {0x93, 0x06}, /* 0x48-0x4B */ + {0x9B, 0xAB}, {0x76, 0xBF}, {0x66, 0x52}, {0x4E, 0x09}, /* 0x4C-0x4F */ + {0x50, 0x98}, {0x53, 0xC2}, {0x5C, 0x71}, {0x60, 0xE8}, /* 0x50-0x53 */ + {0x64, 0x92}, {0x65, 0x63}, {0x68, 0x5F}, {0x71, 0xE6}, /* 0x54-0x57 */ + {0x73, 0xCA}, {0x75, 0x23}, {0x7B, 0x97}, {0x7E, 0x82}, /* 0x58-0x5B */ + {0x86, 0x95}, {0x8B, 0x83}, {0x8C, 0xDB}, {0x91, 0x78}, /* 0x5C-0x5F */ + {0x99, 0x10}, {0x65, 0xAC}, {0x66, 0xAB}, {0x6B, 0x8B}, /* 0x60-0x63 */ + {0x4E, 0xD5}, {0x4E, 0xD4}, {0x4F, 0x3A}, {0x4F, 0x7F}, /* 0x64-0x67 */ + {0x52, 0x3A}, {0x53, 0xF8}, {0x53, 0xF2}, {0x55, 0xE3}, /* 0x68-0x6B */ + {0x56, 0xDB}, {0x58, 0xEB}, {0x59, 0xCB}, {0x59, 0xC9}, /* 0x6C-0x6F */ + {0x59, 0xFF}, {0x5B, 0x50}, {0x5C, 0x4D}, {0x5E, 0x02}, /* 0x70-0x73 */ + {0x5E, 0x2B}, {0x5F, 0xD7}, {0x60, 0x1D}, {0x63, 0x07}, /* 0x74-0x77 */ + {0x65, 0x2F}, {0x5B, 0x5C}, {0x65, 0xAF}, {0x65, 0xBD}, /* 0x78-0x7B */ + {0x65, 0xE8}, {0x67, 0x9D}, {0x6B, 0x62}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6B, 0x7B}, {0x6C, 0x0F}, {0x73, 0x45}, {0x79, 0x49}, /* 0x80-0x83 */ + {0x79, 0xC1}, {0x7C, 0xF8}, {0x7D, 0x19}, {0x7D, 0x2B}, /* 0x84-0x87 */ + {0x80, 0xA2}, {0x81, 0x02}, {0x81, 0xF3}, {0x89, 0x96}, /* 0x88-0x8B */ + {0x8A, 0x5E}, {0x8A, 0x69}, {0x8A, 0x66}, {0x8A, 0x8C}, /* 0x8C-0x8F */ + {0x8A, 0xEE}, {0x8C, 0xC7}, {0x8C, 0xDC}, {0x96, 0xCC}, /* 0x90-0x93 */ + {0x98, 0xFC}, {0x6B, 0x6F}, {0x4E, 0x8B}, {0x4F, 0x3C}, /* 0x94-0x97 */ + {0x4F, 0x8D}, {0x51, 0x50}, {0x5B, 0x57}, {0x5B, 0xFA}, /* 0x98-0x9B */ + {0x61, 0x48}, {0x63, 0x01}, {0x66, 0x42}, {0x6B, 0x21}, /* 0x9C-0x9F */ + {0x6E, 0xCB}, {0x6C, 0xBB}, {0x72, 0x3E}, {0x74, 0xBD}, /* 0xA0-0xA3 */ + {0x75, 0xD4}, {0x78, 0xC1}, {0x79, 0x3A}, {0x80, 0x0C}, /* 0xA4-0xA7 */ + {0x80, 0x33}, {0x81, 0xEA}, {0x84, 0x94}, {0x8F, 0x9E}, /* 0xA8-0xAB */ + {0x6C, 0x50}, {0x9E, 0x7F}, {0x5F, 0x0F}, {0x8B, 0x58}, /* 0xAC-0xAF */ + {0x9D, 0x2B}, {0x7A, 0xFA}, {0x8E, 0xF8}, {0x5B, 0x8D}, /* 0xB0-0xB3 */ + {0x96, 0xEB}, {0x4E, 0x03}, {0x53, 0xF1}, {0x57, 0xF7}, /* 0xB4-0xB7 */ + {0x59, 0x31}, {0x5A, 0xC9}, {0x5B, 0xA4}, {0x60, 0x89}, /* 0xB8-0xBB */ + {0x6E, 0x7F}, {0x6F, 0x06}, {0x75, 0xBE}, {0x8C, 0xEA}, /* 0xBC-0xBF */ + {0x5B, 0x9F}, {0x85, 0x00}, {0x7B, 0xE0}, {0x50, 0x72}, /* 0xC0-0xC3 */ + {0x67, 0xF4}, {0x82, 0x9D}, {0x5C, 0x61}, {0x85, 0x4A}, /* 0xC4-0xC7 */ + {0x7E, 0x1E}, {0x82, 0x0E}, {0x51, 0x99}, {0x5C, 0x04}, /* 0xC8-0xCB */ + {0x63, 0x68}, {0x8D, 0x66}, {0x65, 0x9C}, {0x71, 0x6E}, /* 0xCC-0xCF */ + {0x79, 0x3E}, {0x7D, 0x17}, {0x80, 0x05}, {0x8B, 0x1D}, /* 0xD0-0xD3 */ + {0x8E, 0xCA}, {0x90, 0x6E}, {0x86, 0xC7}, {0x90, 0xAA}, /* 0xD4-0xD7 */ + {0x50, 0x1F}, {0x52, 0xFA}, {0x5C, 0x3A}, {0x67, 0x53}, /* 0xD8-0xDB */ + {0x70, 0x7C}, {0x72, 0x35}, {0x91, 0x4C}, {0x91, 0xC8}, /* 0xDC-0xDF */ + {0x93, 0x2B}, {0x82, 0xE5}, {0x5B, 0xC2}, {0x5F, 0x31}, /* 0xE0-0xE3 */ + {0x60, 0xF9}, {0x4E, 0x3B}, {0x53, 0xD6}, {0x5B, 0x88}, /* 0xE4-0xE7 */ + {0x62, 0x4B}, {0x67, 0x31}, {0x6B, 0x8A}, {0x72, 0xE9}, /* 0xE8-0xEB */ + {0x73, 0xE0}, {0x7A, 0x2E}, {0x81, 0x6B}, {0x8D, 0xA3}, /* 0xEC-0xEF */ + {0x91, 0x52}, {0x99, 0x96}, {0x51, 0x12}, {0x53, 0xD7}, /* 0xF0-0xF3 */ + {0x54, 0x6A}, {0x5B, 0xFF}, {0x63, 0x88}, {0x6A, 0x39}, /* 0xF4-0xF7 */ + {0x7D, 0xAC}, {0x97, 0x00}, {0x56, 0xDA}, {0x53, 0xCE}, /* 0xF8-0xFB */ + {0x54, 0x68}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8F[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5B, 0x97}, {0x5C, 0x31}, {0x5D, 0xDE}, {0x4F, 0xEE}, /* 0x40-0x43 */ + {0x61, 0x01}, {0x62, 0xFE}, {0x6D, 0x32}, {0x79, 0xC0}, /* 0x44-0x47 */ + {0x79, 0xCB}, {0x7D, 0x42}, {0x7E, 0x4D}, {0x7F, 0xD2}, /* 0x48-0x4B */ + {0x81, 0xED}, {0x82, 0x1F}, {0x84, 0x90}, {0x88, 0x46}, /* 0x4C-0x4F */ + {0x89, 0x72}, {0x8B, 0x90}, {0x8E, 0x74}, {0x8F, 0x2F}, /* 0x50-0x53 */ + {0x90, 0x31}, {0x91, 0x4B}, {0x91, 0x6C}, {0x96, 0xC6}, /* 0x54-0x57 */ + {0x91, 0x9C}, {0x4E, 0xC0}, {0x4F, 0x4F}, {0x51, 0x45}, /* 0x58-0x5B */ + {0x53, 0x41}, {0x5F, 0x93}, {0x62, 0x0E}, {0x67, 0xD4}, /* 0x5C-0x5F */ + {0x6C, 0x41}, {0x6E, 0x0B}, {0x73, 0x63}, {0x7E, 0x26}, /* 0x60-0x63 */ + {0x91, 0xCD}, {0x92, 0x83}, {0x53, 0xD4}, {0x59, 0x19}, /* 0x64-0x67 */ + {0x5B, 0xBF}, {0x6D, 0xD1}, {0x79, 0x5D}, {0x7E, 0x2E}, /* 0x68-0x6B */ + {0x7C, 0x9B}, {0x58, 0x7E}, {0x71, 0x9F}, {0x51, 0xFA}, /* 0x6C-0x6F */ + {0x88, 0x53}, {0x8F, 0xF0}, {0x4F, 0xCA}, {0x5C, 0xFB}, /* 0x70-0x73 */ + {0x66, 0x25}, {0x77, 0xAC}, {0x7A, 0xE3}, {0x82, 0x1C}, /* 0x74-0x77 */ + {0x99, 0xFF}, {0x51, 0xC6}, {0x5F, 0xAA}, {0x65, 0xEC}, /* 0x78-0x7B */ + {0x69, 0x6F}, {0x6B, 0x89}, {0x6D, 0xF3}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6E, 0x96}, {0x6F, 0x64}, {0x76, 0xFE}, {0x7D, 0x14}, /* 0x80-0x83 */ + {0x5D, 0xE1}, {0x90, 0x75}, {0x91, 0x87}, {0x98, 0x06}, /* 0x84-0x87 */ + {0x51, 0xE6}, {0x52, 0x1D}, {0x62, 0x40}, {0x66, 0x91}, /* 0x88-0x8B */ + {0x66, 0xD9}, {0x6E, 0x1A}, {0x5E, 0xB6}, {0x7D, 0xD2}, /* 0x8C-0x8F */ + {0x7F, 0x72}, {0x66, 0xF8}, {0x85, 0xAF}, {0x85, 0xF7}, /* 0x90-0x93 */ + {0x8A, 0xF8}, {0x52, 0xA9}, {0x53, 0xD9}, {0x59, 0x73}, /* 0x94-0x97 */ + {0x5E, 0x8F}, {0x5F, 0x90}, {0x60, 0x55}, {0x92, 0xE4}, /* 0x98-0x9B */ + {0x96, 0x64}, {0x50, 0xB7}, {0x51, 0x1F}, {0x52, 0xDD}, /* 0x9C-0x9F */ + {0x53, 0x20}, {0x53, 0x47}, {0x53, 0xEC}, {0x54, 0xE8}, /* 0xA0-0xA3 */ + {0x55, 0x46}, {0x55, 0x31}, {0x56, 0x17}, {0x59, 0x68}, /* 0xA4-0xA7 */ + {0x59, 0xBE}, {0x5A, 0x3C}, {0x5B, 0xB5}, {0x5C, 0x06}, /* 0xA8-0xAB */ + {0x5C, 0x0F}, {0x5C, 0x11}, {0x5C, 0x1A}, {0x5E, 0x84}, /* 0xAC-0xAF */ + {0x5E, 0x8A}, {0x5E, 0xE0}, {0x5F, 0x70}, {0x62, 0x7F}, /* 0xB0-0xB3 */ + {0x62, 0x84}, {0x62, 0xDB}, {0x63, 0x8C}, {0x63, 0x77}, /* 0xB4-0xB7 */ + {0x66, 0x07}, {0x66, 0x0C}, {0x66, 0x2D}, {0x66, 0x76}, /* 0xB8-0xBB */ + {0x67, 0x7E}, {0x68, 0xA2}, {0x6A, 0x1F}, {0x6A, 0x35}, /* 0xBC-0xBF */ + {0x6C, 0xBC}, {0x6D, 0x88}, {0x6E, 0x09}, {0x6E, 0x58}, /* 0xC0-0xC3 */ + {0x71, 0x3C}, {0x71, 0x26}, {0x71, 0x67}, {0x75, 0xC7}, /* 0xC4-0xC7 */ + {0x77, 0x01}, {0x78, 0x5D}, {0x79, 0x01}, {0x79, 0x65}, /* 0xC8-0xCB */ + {0x79, 0xF0}, {0x7A, 0xE0}, {0x7B, 0x11}, {0x7C, 0xA7}, /* 0xCC-0xCF */ + {0x7D, 0x39}, {0x80, 0x96}, {0x83, 0xD6}, {0x84, 0x8B}, /* 0xD0-0xD3 */ + {0x85, 0x49}, {0x88, 0x5D}, {0x88, 0xF3}, {0x8A, 0x1F}, /* 0xD4-0xD7 */ + {0x8A, 0x3C}, {0x8A, 0x54}, {0x8A, 0x73}, {0x8C, 0x61}, /* 0xD8-0xDB */ + {0x8C, 0xDE}, {0x91, 0xA4}, {0x92, 0x66}, {0x93, 0x7E}, /* 0xDC-0xDF */ + {0x94, 0x18}, {0x96, 0x9C}, {0x97, 0x98}, {0x4E, 0x0A}, /* 0xE0-0xE3 */ + {0x4E, 0x08}, {0x4E, 0x1E}, {0x4E, 0x57}, {0x51, 0x97}, /* 0xE4-0xE7 */ + {0x52, 0x70}, {0x57, 0xCE}, {0x58, 0x34}, {0x58, 0xCC}, /* 0xE8-0xEB */ + {0x5B, 0x22}, {0x5E, 0x38}, {0x60, 0xC5}, {0x64, 0xFE}, /* 0xEC-0xEF */ + {0x67, 0x61}, {0x67, 0x56}, {0x6D, 0x44}, {0x72, 0xB6}, /* 0xF0-0xF3 */ + {0x75, 0x73}, {0x7A, 0x63}, {0x84, 0xB8}, {0x8B, 0x72}, /* 0xF4-0xF7 */ + {0x91, 0xB8}, {0x93, 0x20}, {0x56, 0x31}, {0x57, 0xF4}, /* 0xF8-0xFB */ + {0x98, 0xFE}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_90[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x62, 0xED}, {0x69, 0x0D}, {0x6B, 0x96}, {0x71, 0xED}, /* 0x40-0x43 */ + {0x7E, 0x54}, {0x80, 0x77}, {0x82, 0x72}, {0x89, 0xE6}, /* 0x44-0x47 */ + {0x98, 0xDF}, {0x87, 0x55}, {0x8F, 0xB1}, {0x5C, 0x3B}, /* 0x48-0x4B */ + {0x4F, 0x38}, {0x4F, 0xE1}, {0x4F, 0xB5}, {0x55, 0x07}, /* 0x4C-0x4F */ + {0x5A, 0x20}, {0x5B, 0xDD}, {0x5B, 0xE9}, {0x5F, 0xC3}, /* 0x50-0x53 */ + {0x61, 0x4E}, {0x63, 0x2F}, {0x65, 0xB0}, {0x66, 0x4B}, /* 0x54-0x57 */ + {0x68, 0xEE}, {0x69, 0x9B}, {0x6D, 0x78}, {0x6D, 0xF1}, /* 0x58-0x5B */ + {0x75, 0x33}, {0x75, 0xB9}, {0x77, 0x1F}, {0x79, 0x5E}, /* 0x5C-0x5F */ + {0x79, 0xE6}, {0x7D, 0x33}, {0x81, 0xE3}, {0x82, 0xAF}, /* 0x60-0x63 */ + {0x85, 0xAA}, {0x89, 0xAA}, {0x8A, 0x3A}, {0x8E, 0xAB}, /* 0x64-0x67 */ + {0x8F, 0x9B}, {0x90, 0x32}, {0x91, 0xDD}, {0x97, 0x07}, /* 0x68-0x6B */ + {0x4E, 0xBA}, {0x4E, 0xC1}, {0x52, 0x03}, {0x58, 0x75}, /* 0x6C-0x6F */ + {0x58, 0xEC}, {0x5C, 0x0B}, {0x75, 0x1A}, {0x5C, 0x3D}, /* 0x70-0x73 */ + {0x81, 0x4E}, {0x8A, 0x0A}, {0x8F, 0xC5}, {0x96, 0x63}, /* 0x74-0x77 */ + {0x97, 0x6D}, {0x7B, 0x25}, {0x8A, 0xCF}, {0x98, 0x08}, /* 0x78-0x7B */ + {0x91, 0x62}, {0x56, 0xF3}, {0x53, 0xA8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x90, 0x17}, {0x54, 0x39}, {0x57, 0x82}, {0x5E, 0x25}, /* 0x80-0x83 */ + {0x63, 0xA8}, {0x6C, 0x34}, {0x70, 0x8A}, {0x77, 0x61}, /* 0x84-0x87 */ + {0x7C, 0x8B}, {0x7F, 0xE0}, {0x88, 0x70}, {0x90, 0x42}, /* 0x88-0x8B */ + {0x91, 0x54}, {0x93, 0x10}, {0x93, 0x18}, {0x96, 0x8F}, /* 0x8C-0x8F */ + {0x74, 0x5E}, {0x9A, 0xC4}, {0x5D, 0x07}, {0x5D, 0x69}, /* 0x90-0x93 */ + {0x65, 0x70}, {0x67, 0xA2}, {0x8D, 0xA8}, {0x96, 0xDB}, /* 0x94-0x97 */ + {0x63, 0x6E}, {0x67, 0x49}, {0x69, 0x19}, {0x83, 0xC5}, /* 0x98-0x9B */ + {0x98, 0x17}, {0x96, 0xC0}, {0x88, 0xFE}, {0x6F, 0x84}, /* 0x9C-0x9F */ + {0x64, 0x7A}, {0x5B, 0xF8}, {0x4E, 0x16}, {0x70, 0x2C}, /* 0xA0-0xA3 */ + {0x75, 0x5D}, {0x66, 0x2F}, {0x51, 0xC4}, {0x52, 0x36}, /* 0xA4-0xA7 */ + {0x52, 0xE2}, {0x59, 0xD3}, {0x5F, 0x81}, {0x60, 0x27}, /* 0xA8-0xAB */ + {0x62, 0x10}, {0x65, 0x3F}, {0x65, 0x74}, {0x66, 0x1F}, /* 0xAC-0xAF */ + {0x66, 0x74}, {0x68, 0xF2}, {0x68, 0x16}, {0x6B, 0x63}, /* 0xB0-0xB3 */ + {0x6E, 0x05}, {0x72, 0x72}, {0x75, 0x1F}, {0x76, 0xDB}, /* 0xB4-0xB7 */ + {0x7C, 0xBE}, {0x80, 0x56}, {0x58, 0xF0}, {0x88, 0xFD}, /* 0xB8-0xBB */ + {0x89, 0x7F}, {0x8A, 0xA0}, {0x8A, 0x93}, {0x8A, 0xCB}, /* 0xBC-0xBF */ + {0x90, 0x1D}, {0x91, 0x92}, {0x97, 0x52}, {0x97, 0x59}, /* 0xC0-0xC3 */ + {0x65, 0x89}, {0x7A, 0x0E}, {0x81, 0x06}, {0x96, 0xBB}, /* 0xC4-0xC7 */ + {0x5E, 0x2D}, {0x60, 0xDC}, {0x62, 0x1A}, {0x65, 0xA5}, /* 0xC8-0xCB */ + {0x66, 0x14}, {0x67, 0x90}, {0x77, 0xF3}, {0x7A, 0x4D}, /* 0xCC-0xCF */ + {0x7C, 0x4D}, {0x7E, 0x3E}, {0x81, 0x0A}, {0x8C, 0xAC}, /* 0xD0-0xD3 */ + {0x8D, 0x64}, {0x8D, 0xE1}, {0x8E, 0x5F}, {0x78, 0xA9}, /* 0xD4-0xD7 */ + {0x52, 0x07}, {0x62, 0xD9}, {0x63, 0xA5}, {0x64, 0x42}, /* 0xD8-0xDB */ + {0x62, 0x98}, {0x8A, 0x2D}, {0x7A, 0x83}, {0x7B, 0xC0}, /* 0xDC-0xDF */ + {0x8A, 0xAC}, {0x96, 0xEA}, {0x7D, 0x76}, {0x82, 0x0C}, /* 0xE0-0xE3 */ + {0x87, 0x49}, {0x4E, 0xD9}, {0x51, 0x48}, {0x53, 0x43}, /* 0xE4-0xE7 */ + {0x53, 0x60}, {0x5B, 0xA3}, {0x5C, 0x02}, {0x5C, 0x16}, /* 0xE8-0xEB */ + {0x5D, 0xDD}, {0x62, 0x26}, {0x62, 0x47}, {0x64, 0xB0}, /* 0xEC-0xEF */ + {0x68, 0x13}, {0x68, 0x34}, {0x6C, 0xC9}, {0x6D, 0x45}, /* 0xF0-0xF3 */ + {0x6D, 0x17}, {0x67, 0xD3}, {0x6F, 0x5C}, {0x71, 0x4E}, /* 0xF4-0xF7 */ + {0x71, 0x7D}, {0x65, 0xCB}, {0x7A, 0x7F}, {0x7B, 0xAD}, /* 0xF8-0xFB */ + {0x7D, 0xDA}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_91[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7E, 0x4A}, {0x7F, 0xA8}, {0x81, 0x7A}, {0x82, 0x1B}, /* 0x40-0x43 */ + {0x82, 0x39}, {0x85, 0xA6}, {0x8A, 0x6E}, {0x8C, 0xCE}, /* 0x44-0x47 */ + {0x8D, 0xF5}, {0x90, 0x78}, {0x90, 0x77}, {0x92, 0xAD}, /* 0x48-0x4B */ + {0x92, 0x91}, {0x95, 0x83}, {0x9B, 0xAE}, {0x52, 0x4D}, /* 0x4C-0x4F */ + {0x55, 0x84}, {0x6F, 0x38}, {0x71, 0x36}, {0x51, 0x68}, /* 0x50-0x53 */ + {0x79, 0x85}, {0x7E, 0x55}, {0x81, 0xB3}, {0x7C, 0xCE}, /* 0x54-0x57 */ + {0x56, 0x4C}, {0x58, 0x51}, {0x5C, 0xA8}, {0x63, 0xAA}, /* 0x58-0x5B */ + {0x66, 0xFE}, {0x66, 0xFD}, {0x69, 0x5A}, {0x72, 0xD9}, /* 0x5C-0x5F */ + {0x75, 0x8F}, {0x75, 0x8E}, {0x79, 0x0E}, {0x79, 0x56}, /* 0x60-0x63 */ + {0x79, 0xDF}, {0x7C, 0x97}, {0x7D, 0x20}, {0x7D, 0x44}, /* 0x64-0x67 */ + {0x86, 0x07}, {0x8A, 0x34}, {0x96, 0x3B}, {0x90, 0x61}, /* 0x68-0x6B */ + {0x9F, 0x20}, {0x50, 0xE7}, {0x52, 0x75}, {0x53, 0xCC}, /* 0x6C-0x6F */ + {0x53, 0xE2}, {0x50, 0x09}, {0x55, 0xAA}, {0x58, 0xEE}, /* 0x70-0x73 */ + {0x59, 0x4F}, {0x72, 0x3D}, {0x5B, 0x8B}, {0x5C, 0x64}, /* 0x74-0x77 */ + {0x53, 0x1D}, {0x60, 0xE3}, {0x60, 0xF3}, {0x63, 0x5C}, /* 0x78-0x7B */ + {0x63, 0x83}, {0x63, 0x3F}, {0x63, 0xBB}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x64, 0xCD}, {0x65, 0xE9}, {0x66, 0xF9}, {0x5D, 0xE3}, /* 0x80-0x83 */ + {0x69, 0xCD}, {0x69, 0xFD}, {0x6F, 0x15}, {0x71, 0xE5}, /* 0x84-0x87 */ + {0x4E, 0x89}, {0x75, 0xE9}, {0x76, 0xF8}, {0x7A, 0x93}, /* 0x88-0x8B */ + {0x7C, 0xDF}, {0x7D, 0xCF}, {0x7D, 0x9C}, {0x80, 0x61}, /* 0x8C-0x8F */ + {0x83, 0x49}, {0x83, 0x58}, {0x84, 0x6C}, {0x84, 0xBC}, /* 0x90-0x93 */ + {0x85, 0xFB}, {0x88, 0xC5}, {0x8D, 0x70}, {0x90, 0x01}, /* 0x94-0x97 */ + {0x90, 0x6D}, {0x93, 0x97}, {0x97, 0x1C}, {0x9A, 0x12}, /* 0x98-0x9B */ + {0x50, 0xCF}, {0x58, 0x97}, {0x61, 0x8E}, {0x81, 0xD3}, /* 0x9C-0x9F */ + {0x85, 0x35}, {0x8D, 0x08}, {0x90, 0x20}, {0x4F, 0xC3}, /* 0xA0-0xA3 */ + {0x50, 0x74}, {0x52, 0x47}, {0x53, 0x73}, {0x60, 0x6F}, /* 0xA4-0xA7 */ + {0x63, 0x49}, {0x67, 0x5F}, {0x6E, 0x2C}, {0x8D, 0xB3}, /* 0xA8-0xAB */ + {0x90, 0x1F}, {0x4F, 0xD7}, {0x5C, 0x5E}, {0x8C, 0xCA}, /* 0xAC-0xAF */ + {0x65, 0xCF}, {0x7D, 0x9A}, {0x53, 0x52}, {0x88, 0x96}, /* 0xB0-0xB3 */ + {0x51, 0x76}, {0x63, 0xC3}, {0x5B, 0x58}, {0x5B, 0x6B}, /* 0xB4-0xB7 */ + {0x5C, 0x0A}, {0x64, 0x0D}, {0x67, 0x51}, {0x90, 0x5C}, /* 0xB8-0xBB */ + {0x4E, 0xD6}, {0x59, 0x1A}, {0x59, 0x2A}, {0x6C, 0x70}, /* 0xBC-0xBF */ + {0x8A, 0x51}, {0x55, 0x3E}, {0x58, 0x15}, {0x59, 0xA5}, /* 0xC0-0xC3 */ + {0x60, 0xF0}, {0x62, 0x53}, {0x67, 0xC1}, {0x82, 0x35}, /* 0xC4-0xC7 */ + {0x69, 0x55}, {0x96, 0x40}, {0x99, 0xC4}, {0x9A, 0x28}, /* 0xC8-0xCB */ + {0x4F, 0x53}, {0x58, 0x06}, {0x5B, 0xFE}, {0x80, 0x10}, /* 0xCC-0xCF */ + {0x5C, 0xB1}, {0x5E, 0x2F}, {0x5F, 0x85}, {0x60, 0x20}, /* 0xD0-0xD3 */ + {0x61, 0x4B}, {0x62, 0x34}, {0x66, 0xFF}, {0x6C, 0xF0}, /* 0xD4-0xD7 */ + {0x6E, 0xDE}, {0x80, 0xCE}, {0x81, 0x7F}, {0x82, 0xD4}, /* 0xD8-0xDB */ + {0x88, 0x8B}, {0x8C, 0xB8}, {0x90, 0x00}, {0x90, 0x2E}, /* 0xDC-0xDF */ + {0x96, 0x8A}, {0x9E, 0xDB}, {0x9B, 0xDB}, {0x4E, 0xE3}, /* 0xE0-0xE3 */ + {0x53, 0xF0}, {0x59, 0x27}, {0x7B, 0x2C}, {0x91, 0x8D}, /* 0xE4-0xE7 */ + {0x98, 0x4C}, {0x9D, 0xF9}, {0x6E, 0xDD}, {0x70, 0x27}, /* 0xE8-0xEB */ + {0x53, 0x53}, {0x55, 0x44}, {0x5B, 0x85}, {0x62, 0x58}, /* 0xEC-0xEF */ + {0x62, 0x9E}, {0x62, 0xD3}, {0x6C, 0xA2}, {0x6F, 0xEF}, /* 0xF0-0xF3 */ + {0x74, 0x22}, {0x8A, 0x17}, {0x94, 0x38}, {0x6F, 0xC1}, /* 0xF4-0xF7 */ + {0x8A, 0xFE}, {0x83, 0x38}, {0x51, 0xE7}, {0x86, 0xF8}, /* 0xF8-0xFB */ + {0x53, 0xEA}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_92[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x53, 0xE9}, {0x4F, 0x46}, {0x90, 0x54}, {0x8F, 0xB0}, /* 0x40-0x43 */ + {0x59, 0x6A}, {0x81, 0x31}, {0x5D, 0xFD}, {0x7A, 0xEA}, /* 0x44-0x47 */ + {0x8F, 0xBF}, {0x68, 0xDA}, {0x8C, 0x37}, {0x72, 0xF8}, /* 0x48-0x4B */ + {0x9C, 0x48}, {0x6A, 0x3D}, {0x8A, 0xB0}, {0x4E, 0x39}, /* 0x4C-0x4F */ + {0x53, 0x58}, {0x56, 0x06}, {0x57, 0x66}, {0x62, 0xC5}, /* 0x50-0x53 */ + {0x63, 0xA2}, {0x65, 0xE6}, {0x6B, 0x4E}, {0x6D, 0xE1}, /* 0x54-0x57 */ + {0x6E, 0x5B}, {0x70, 0xAD}, {0x77, 0xED}, {0x7A, 0xEF}, /* 0x58-0x5B */ + {0x7B, 0xAA}, {0x7D, 0xBB}, {0x80, 0x3D}, {0x80, 0xC6}, /* 0x5C-0x5F */ + {0x86, 0xCB}, {0x8A, 0x95}, {0x93, 0x5B}, {0x56, 0xE3}, /* 0x60-0x63 */ + {0x58, 0xC7}, {0x5F, 0x3E}, {0x65, 0xAD}, {0x66, 0x96}, /* 0x64-0x67 */ + {0x6A, 0x80}, {0x6B, 0xB5}, {0x75, 0x37}, {0x8A, 0xC7}, /* 0x68-0x6B */ + {0x50, 0x24}, {0x77, 0xE5}, {0x57, 0x30}, {0x5F, 0x1B}, /* 0x6C-0x6F */ + {0x60, 0x65}, {0x66, 0x7A}, {0x6C, 0x60}, {0x75, 0xF4}, /* 0x70-0x73 */ + {0x7A, 0x1A}, {0x7F, 0x6E}, {0x81, 0xF4}, {0x87, 0x18}, /* 0x74-0x77 */ + {0x90, 0x45}, {0x99, 0xB3}, {0x7B, 0xC9}, {0x75, 0x5C}, /* 0x78-0x7B */ + {0x7A, 0xF9}, {0x7B, 0x51}, {0x84, 0xC4}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x90, 0x10}, {0x79, 0xE9}, {0x7A, 0x92}, {0x83, 0x36}, /* 0x80-0x83 */ + {0x5A, 0xE1}, {0x77, 0x40}, {0x4E, 0x2D}, {0x4E, 0xF2}, /* 0x84-0x87 */ + {0x5B, 0x99}, {0x5F, 0xE0}, {0x62, 0xBD}, {0x66, 0x3C}, /* 0x88-0x8B */ + {0x67, 0xF1}, {0x6C, 0xE8}, {0x86, 0x6B}, {0x88, 0x77}, /* 0x8C-0x8F */ + {0x8A, 0x3B}, {0x91, 0x4E}, {0x92, 0xF3}, {0x99, 0xD0}, /* 0x90-0x93 */ + {0x6A, 0x17}, {0x70, 0x26}, {0x73, 0x2A}, {0x82, 0xE7}, /* 0x94-0x97 */ + {0x84, 0x57}, {0x8C, 0xAF}, {0x4E, 0x01}, {0x51, 0x46}, /* 0x98-0x9B */ + {0x51, 0xCB}, {0x55, 0x8B}, {0x5B, 0xF5}, {0x5E, 0x16}, /* 0x9C-0x9F */ + {0x5E, 0x33}, {0x5E, 0x81}, {0x5F, 0x14}, {0x5F, 0x35}, /* 0xA0-0xA3 */ + {0x5F, 0x6B}, {0x5F, 0xB4}, {0x61, 0xF2}, {0x63, 0x11}, /* 0xA4-0xA7 */ + {0x66, 0xA2}, {0x67, 0x1D}, {0x6F, 0x6E}, {0x72, 0x52}, /* 0xA8-0xAB */ + {0x75, 0x3A}, {0x77, 0x3A}, {0x80, 0x74}, {0x81, 0x39}, /* 0xAC-0xAF */ + {0x81, 0x78}, {0x87, 0x76}, {0x8A, 0xBF}, {0x8A, 0xDC}, /* 0xB0-0xB3 */ + {0x8D, 0x85}, {0x8D, 0xF3}, {0x92, 0x9A}, {0x95, 0x77}, /* 0xB4-0xB7 */ + {0x98, 0x02}, {0x9C, 0xE5}, {0x52, 0xC5}, {0x63, 0x57}, /* 0xB8-0xBB */ + {0x76, 0xF4}, {0x67, 0x15}, {0x6C, 0x88}, {0x73, 0xCD}, /* 0xBC-0xBF */ + {0x8C, 0xC3}, {0x93, 0xAE}, {0x96, 0x73}, {0x6D, 0x25}, /* 0xC0-0xC3 */ + {0x58, 0x9C}, {0x69, 0x0E}, {0x69, 0xCC}, {0x8F, 0xFD}, /* 0xC4-0xC7 */ + {0x93, 0x9A}, {0x75, 0xDB}, {0x90, 0x1A}, {0x58, 0x5A}, /* 0xC8-0xCB */ + {0x68, 0x02}, {0x63, 0xB4}, {0x69, 0xFB}, {0x4F, 0x43}, /* 0xCC-0xCF */ + {0x6F, 0x2C}, {0x67, 0xD8}, {0x8F, 0xBB}, {0x85, 0x26}, /* 0xD0-0xD3 */ + {0x7D, 0xB4}, {0x93, 0x54}, {0x69, 0x3F}, {0x6F, 0x70}, /* 0xD4-0xD7 */ + {0x57, 0x6A}, {0x58, 0xF7}, {0x5B, 0x2C}, {0x7D, 0x2C}, /* 0xD8-0xDB */ + {0x72, 0x2A}, {0x54, 0x0A}, {0x91, 0xE3}, {0x9D, 0xB4}, /* 0xDC-0xDF */ + {0x4E, 0xAD}, {0x4F, 0x4E}, {0x50, 0x5C}, {0x50, 0x75}, /* 0xE0-0xE3 */ + {0x52, 0x43}, {0x8C, 0x9E}, {0x54, 0x48}, {0x58, 0x24}, /* 0xE4-0xE7 */ + {0x5B, 0x9A}, {0x5E, 0x1D}, {0x5E, 0x95}, {0x5E, 0xAD}, /* 0xE8-0xEB */ + {0x5E, 0xF7}, {0x5F, 0x1F}, {0x60, 0x8C}, {0x62, 0xB5}, /* 0xEC-0xEF */ + {0x63, 0x3A}, {0x63, 0xD0}, {0x68, 0xAF}, {0x6C, 0x40}, /* 0xF0-0xF3 */ + {0x78, 0x87}, {0x79, 0x8E}, {0x7A, 0x0B}, {0x7D, 0xE0}, /* 0xF4-0xF7 */ + {0x82, 0x47}, {0x8A, 0x02}, {0x8A, 0xE6}, {0x8E, 0x44}, /* 0xF8-0xFB */ + {0x90, 0x13}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_93[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x90, 0xB8}, {0x91, 0x2D}, {0x91, 0xD8}, {0x9F, 0x0E}, /* 0x40-0x43 */ + {0x6C, 0xE5}, {0x64, 0x58}, {0x64, 0xE2}, {0x65, 0x75}, /* 0x44-0x47 */ + {0x6E, 0xF4}, {0x76, 0x84}, {0x7B, 0x1B}, {0x90, 0x69}, /* 0x48-0x4B */ + {0x93, 0xD1}, {0x6E, 0xBA}, {0x54, 0xF2}, {0x5F, 0xB9}, /* 0x4C-0x4F */ + {0x64, 0xA4}, {0x8F, 0x4D}, {0x8F, 0xED}, {0x92, 0x44}, /* 0x50-0x53 */ + {0x51, 0x78}, {0x58, 0x6B}, {0x59, 0x29}, {0x5C, 0x55}, /* 0x54-0x57 */ + {0x5E, 0x97}, {0x6D, 0xFB}, {0x7E, 0x8F}, {0x75, 0x1C}, /* 0x58-0x5B */ + {0x8C, 0xBC}, {0x8E, 0xE2}, {0x98, 0x5B}, {0x70, 0xB9}, /* 0x5C-0x5F */ + {0x4F, 0x1D}, {0x6B, 0xBF}, {0x6F, 0xB1}, {0x75, 0x30}, /* 0x60-0x63 */ + {0x96, 0xFB}, {0x51, 0x4E}, {0x54, 0x10}, {0x58, 0x35}, /* 0x64-0x67 */ + {0x58, 0x57}, {0x59, 0xAC}, {0x5C, 0x60}, {0x5F, 0x92}, /* 0x68-0x6B */ + {0x65, 0x97}, {0x67, 0x5C}, {0x6E, 0x21}, {0x76, 0x7B}, /* 0x6C-0x6F */ + {0x83, 0xDF}, {0x8C, 0xED}, {0x90, 0x14}, {0x90, 0xFD}, /* 0x70-0x73 */ + {0x93, 0x4D}, {0x78, 0x25}, {0x78, 0x3A}, {0x52, 0xAA}, /* 0x74-0x77 */ + {0x5E, 0xA6}, {0x57, 0x1F}, {0x59, 0x74}, {0x60, 0x12}, /* 0x78-0x7B */ + {0x50, 0x12}, {0x51, 0x5A}, {0x51, 0xAC}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x51, 0xCD}, {0x52, 0x00}, {0x55, 0x10}, {0x58, 0x54}, /* 0x80-0x83 */ + {0x58, 0x58}, {0x59, 0x57}, {0x5B, 0x95}, {0x5C, 0xF6}, /* 0x84-0x87 */ + {0x5D, 0x8B}, {0x60, 0xBC}, {0x62, 0x95}, {0x64, 0x2D}, /* 0x88-0x8B */ + {0x67, 0x71}, {0x68, 0x43}, {0x68, 0xBC}, {0x68, 0xDF}, /* 0x8C-0x8F */ + {0x76, 0xD7}, {0x6D, 0xD8}, {0x6E, 0x6F}, {0x6D, 0x9B}, /* 0x90-0x93 */ + {0x70, 0x6F}, {0x71, 0xC8}, {0x5F, 0x53}, {0x75, 0xD8}, /* 0x94-0x97 */ + {0x79, 0x77}, {0x7B, 0x49}, {0x7B, 0x54}, {0x7B, 0x52}, /* 0x98-0x9B */ + {0x7C, 0xD6}, {0x7D, 0x71}, {0x52, 0x30}, {0x84, 0x63}, /* 0x9C-0x9F */ + {0x85, 0x69}, {0x85, 0xE4}, {0x8A, 0x0E}, {0x8B, 0x04}, /* 0xA0-0xA3 */ + {0x8C, 0x46}, {0x8E, 0x0F}, {0x90, 0x03}, {0x90, 0x0F}, /* 0xA4-0xA7 */ + {0x94, 0x19}, {0x96, 0x76}, {0x98, 0x2D}, {0x9A, 0x30}, /* 0xA8-0xAB */ + {0x95, 0xD8}, {0x50, 0xCD}, {0x52, 0xD5}, {0x54, 0x0C}, /* 0xAC-0xAF */ + {0x58, 0x02}, {0x5C, 0x0E}, {0x61, 0xA7}, {0x64, 0x9E}, /* 0xB0-0xB3 */ + {0x6D, 0x1E}, {0x77, 0xB3}, {0x7A, 0xE5}, {0x80, 0xF4}, /* 0xB4-0xB7 */ + {0x84, 0x04}, {0x90, 0x53}, {0x92, 0x85}, {0x5C, 0xE0}, /* 0xB8-0xBB */ + {0x9D, 0x07}, {0x53, 0x3F}, {0x5F, 0x97}, {0x5F, 0xB3}, /* 0xBC-0xBF */ + {0x6D, 0x9C}, {0x72, 0x79}, {0x77, 0x63}, {0x79, 0xBF}, /* 0xC0-0xC3 */ + {0x7B, 0xE4}, {0x6B, 0xD2}, {0x72, 0xEC}, {0x8A, 0xAD}, /* 0xC4-0xC7 */ + {0x68, 0x03}, {0x6A, 0x61}, {0x51, 0xF8}, {0x7A, 0x81}, /* 0xC8-0xCB */ + {0x69, 0x34}, {0x5C, 0x4A}, {0x9C, 0xF6}, {0x82, 0xEB}, /* 0xCC-0xCF */ + {0x5B, 0xC5}, {0x91, 0x49}, {0x70, 0x1E}, {0x56, 0x78}, /* 0xD0-0xD3 */ + {0x5C, 0x6F}, {0x60, 0xC7}, {0x65, 0x66}, {0x6C, 0x8C}, /* 0xD4-0xD7 */ + {0x8C, 0x5A}, {0x90, 0x41}, {0x98, 0x13}, {0x54, 0x51}, /* 0xD8-0xDB */ + {0x66, 0xC7}, {0x92, 0x0D}, {0x59, 0x48}, {0x90, 0xA3}, /* 0xDC-0xDF */ + {0x51, 0x85}, {0x4E, 0x4D}, {0x51, 0xEA}, {0x85, 0x99}, /* 0xE0-0xE3 */ + {0x8B, 0x0E}, {0x70, 0x58}, {0x63, 0x7A}, {0x93, 0x4B}, /* 0xE4-0xE7 */ + {0x69, 0x62}, {0x99, 0xB4}, {0x7E, 0x04}, {0x75, 0x77}, /* 0xE8-0xEB */ + {0x53, 0x57}, {0x69, 0x60}, {0x8E, 0xDF}, {0x96, 0xE3}, /* 0xEC-0xEF */ + {0x6C, 0x5D}, {0x4E, 0x8C}, {0x5C, 0x3C}, {0x5F, 0x10}, /* 0xF0-0xF3 */ + {0x8F, 0xE9}, {0x53, 0x02}, {0x8C, 0xD1}, {0x80, 0x89}, /* 0xF4-0xF7 */ + {0x86, 0x79}, {0x5E, 0xFF}, {0x65, 0xE5}, {0x4E, 0x73}, /* 0xF8-0xFB */ + {0x51, 0x65}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_94[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x59, 0x82}, {0x5C, 0x3F}, {0x97, 0xEE}, {0x4E, 0xFB}, /* 0x40-0x43 */ + {0x59, 0x8A}, {0x5F, 0xCD}, {0x8A, 0x8D}, {0x6F, 0xE1}, /* 0x44-0x47 */ + {0x79, 0xB0}, {0x79, 0x62}, {0x5B, 0xE7}, {0x84, 0x71}, /* 0x48-0x4B */ + {0x73, 0x2B}, {0x71, 0xB1}, {0x5E, 0x74}, {0x5F, 0xF5}, /* 0x4C-0x4F */ + {0x63, 0x7B}, {0x64, 0x9A}, {0x71, 0xC3}, {0x7C, 0x98}, /* 0x50-0x53 */ + {0x4E, 0x43}, {0x5E, 0xFC}, {0x4E, 0x4B}, {0x57, 0xDC}, /* 0x54-0x57 */ + {0x56, 0xA2}, {0x60, 0xA9}, {0x6F, 0xC3}, {0x7D, 0x0D}, /* 0x58-0x5B */ + {0x80, 0xFD}, {0x81, 0x33}, {0x81, 0xBF}, {0x8F, 0xB2}, /* 0x5C-0x5F */ + {0x89, 0x97}, {0x86, 0xA4}, {0x5D, 0xF4}, {0x62, 0x8A}, /* 0x60-0x63 */ + {0x64, 0xAD}, {0x89, 0x87}, {0x67, 0x77}, {0x6C, 0xE2}, /* 0x64-0x67 */ + {0x6D, 0x3E}, {0x74, 0x36}, {0x78, 0x34}, {0x5A, 0x46}, /* 0x68-0x6B */ + {0x7F, 0x75}, {0x82, 0xAD}, {0x99, 0xAC}, {0x4F, 0xF3}, /* 0x6C-0x6F */ + {0x5E, 0xC3}, {0x62, 0xDD}, {0x63, 0x92}, {0x65, 0x57}, /* 0x70-0x73 */ + {0x67, 0x6F}, {0x76, 0xC3}, {0x72, 0x4C}, {0x80, 0xCC}, /* 0x74-0x77 */ + {0x80, 0xBA}, {0x8F, 0x29}, {0x91, 0x4D}, {0x50, 0x0D}, /* 0x78-0x7B */ + {0x57, 0xF9}, {0x5A, 0x92}, {0x68, 0x85}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x69, 0x73}, {0x71, 0x64}, {0x72, 0xFD}, {0x8C, 0xB7}, /* 0x80-0x83 */ + {0x58, 0xF2}, {0x8C, 0xE0}, {0x96, 0x6A}, {0x90, 0x19}, /* 0x84-0x87 */ + {0x87, 0x7F}, {0x79, 0xE4}, {0x77, 0xE7}, {0x84, 0x29}, /* 0x88-0x8B */ + {0x4F, 0x2F}, {0x52, 0x65}, {0x53, 0x5A}, {0x62, 0xCD}, /* 0x8C-0x8F */ + {0x67, 0xCF}, {0x6C, 0xCA}, {0x76, 0x7D}, {0x7B, 0x94}, /* 0x90-0x93 */ + {0x7C, 0x95}, {0x82, 0x36}, {0x85, 0x84}, {0x8F, 0xEB}, /* 0x94-0x97 */ + {0x66, 0xDD}, {0x6F, 0x20}, {0x72, 0x06}, {0x7E, 0x1B}, /* 0x98-0x9B */ + {0x83, 0xAB}, {0x99, 0xC1}, {0x9E, 0xA6}, {0x51, 0xFD}, /* 0x9C-0x9F */ + {0x7B, 0xB1}, {0x78, 0x72}, {0x7B, 0xB8}, {0x80, 0x87}, /* 0xA0-0xA3 */ + {0x7B, 0x48}, {0x6A, 0xE8}, {0x5E, 0x61}, {0x80, 0x8C}, /* 0xA4-0xA7 */ + {0x75, 0x51}, {0x75, 0x60}, {0x51, 0x6B}, {0x92, 0x62}, /* 0xA8-0xAB */ + {0x6E, 0x8C}, {0x76, 0x7A}, {0x91, 0x97}, {0x9A, 0xEA}, /* 0xAC-0xAF */ + {0x4F, 0x10}, {0x7F, 0x70}, {0x62, 0x9C}, {0x7B, 0x4F}, /* 0xB0-0xB3 */ + {0x95, 0xA5}, {0x9C, 0xE9}, {0x56, 0x7A}, {0x58, 0x59}, /* 0xB4-0xB7 */ + {0x86, 0xE4}, {0x96, 0xBC}, {0x4F, 0x34}, {0x52, 0x24}, /* 0xB8-0xBB */ + {0x53, 0x4A}, {0x53, 0xCD}, {0x53, 0xDB}, {0x5E, 0x06}, /* 0xBC-0xBF */ + {0x64, 0x2C}, {0x65, 0x91}, {0x67, 0x7F}, {0x6C, 0x3E}, /* 0xC0-0xC3 */ + {0x6C, 0x4E}, {0x72, 0x48}, {0x72, 0xAF}, {0x73, 0xED}, /* 0xC4-0xC7 */ + {0x75, 0x54}, {0x7E, 0x41}, {0x82, 0x2C}, {0x85, 0xE9}, /* 0xC8-0xCB */ + {0x8C, 0xA9}, {0x7B, 0xC4}, {0x91, 0xC6}, {0x71, 0x69}, /* 0xCC-0xCF */ + {0x98, 0x12}, {0x98, 0xEF}, {0x63, 0x3D}, {0x66, 0x69}, /* 0xD0-0xD3 */ + {0x75, 0x6A}, {0x76, 0xE4}, {0x78, 0xD0}, {0x85, 0x43}, /* 0xD4-0xD7 */ + {0x86, 0xEE}, {0x53, 0x2A}, {0x53, 0x51}, {0x54, 0x26}, /* 0xD8-0xDB */ + {0x59, 0x83}, {0x5E, 0x87}, {0x5F, 0x7C}, {0x60, 0xB2}, /* 0xDC-0xDF */ + {0x62, 0x49}, {0x62, 0x79}, {0x62, 0xAB}, {0x65, 0x90}, /* 0xE0-0xE3 */ + {0x6B, 0xD4}, {0x6C, 0xCC}, {0x75, 0xB2}, {0x76, 0xAE}, /* 0xE4-0xE7 */ + {0x78, 0x91}, {0x79, 0xD8}, {0x7D, 0xCB}, {0x7F, 0x77}, /* 0xE8-0xEB */ + {0x80, 0xA5}, {0x88, 0xAB}, {0x8A, 0xB9}, {0x8C, 0xBB}, /* 0xEC-0xEF */ + {0x90, 0x7F}, {0x97, 0x5E}, {0x98, 0xDB}, {0x6A, 0x0B}, /* 0xF0-0xF3 */ + {0x7C, 0x38}, {0x50, 0x99}, {0x5C, 0x3E}, {0x5F, 0xAE}, /* 0xF4-0xF7 */ + {0x67, 0x87}, {0x6B, 0xD8}, {0x74, 0x35}, {0x77, 0x09}, /* 0xF8-0xFB */ + {0x7F, 0x8E}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_95[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9F, 0x3B}, {0x67, 0xCA}, {0x7A, 0x17}, {0x53, 0x39}, /* 0x40-0x43 */ + {0x75, 0x8B}, {0x9A, 0xED}, {0x5F, 0x66}, {0x81, 0x9D}, /* 0x44-0x47 */ + {0x83, 0xF1}, {0x80, 0x98}, {0x5F, 0x3C}, {0x5F, 0xC5}, /* 0x48-0x4B */ + {0x75, 0x62}, {0x7B, 0x46}, {0x90, 0x3C}, {0x68, 0x67}, /* 0x4C-0x4F */ + {0x59, 0xEB}, {0x5A, 0x9B}, {0x7D, 0x10}, {0x76, 0x7E}, /* 0x50-0x53 */ + {0x8B, 0x2C}, {0x4F, 0xF5}, {0x5F, 0x6A}, {0x6A, 0x19}, /* 0x54-0x57 */ + {0x6C, 0x37}, {0x6F, 0x02}, {0x74, 0xE2}, {0x79, 0x68}, /* 0x58-0x5B */ + {0x88, 0x68}, {0x8A, 0x55}, {0x8C, 0x79}, {0x5E, 0xDF}, /* 0x5C-0x5F */ + {0x63, 0xCF}, {0x75, 0xC5}, {0x79, 0xD2}, {0x82, 0xD7}, /* 0x60-0x63 */ + {0x93, 0x28}, {0x92, 0xF2}, {0x84, 0x9C}, {0x86, 0xED}, /* 0x64-0x67 */ + {0x9C, 0x2D}, {0x54, 0xC1}, {0x5F, 0x6C}, {0x65, 0x8C}, /* 0x68-0x6B */ + {0x6D, 0x5C}, {0x70, 0x15}, {0x8C, 0xA7}, {0x8C, 0xD3}, /* 0x6C-0x6F */ + {0x98, 0x3B}, {0x65, 0x4F}, {0x74, 0xF6}, {0x4E, 0x0D}, /* 0x70-0x73 */ + {0x4E, 0xD8}, {0x57, 0xE0}, {0x59, 0x2B}, {0x5A, 0x66}, /* 0x74-0x77 */ + {0x5B, 0xCC}, {0x51, 0xA8}, {0x5E, 0x03}, {0x5E, 0x9C}, /* 0x78-0x7B */ + {0x60, 0x16}, {0x62, 0x76}, {0x65, 0x77}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x65, 0xA7}, {0x66, 0x6E}, {0x6D, 0x6E}, {0x72, 0x36}, /* 0x80-0x83 */ + {0x7B, 0x26}, {0x81, 0x50}, {0x81, 0x9A}, {0x82, 0x99}, /* 0x84-0x87 */ + {0x8B, 0x5C}, {0x8C, 0xA0}, {0x8C, 0xE6}, {0x8D, 0x74}, /* 0x88-0x8B */ + {0x96, 0x1C}, {0x96, 0x44}, {0x4F, 0xAE}, {0x64, 0xAB}, /* 0x8C-0x8F */ + {0x6B, 0x66}, {0x82, 0x1E}, {0x84, 0x61}, {0x85, 0x6A}, /* 0x90-0x93 */ + {0x90, 0xE8}, {0x5C, 0x01}, {0x69, 0x53}, {0x98, 0xA8}, /* 0x94-0x97 */ + {0x84, 0x7A}, {0x85, 0x57}, {0x4F, 0x0F}, {0x52, 0x6F}, /* 0x98-0x9B */ + {0x5F, 0xA9}, {0x5E, 0x45}, {0x67, 0x0D}, {0x79, 0x8F}, /* 0x9C-0x9F */ + {0x81, 0x79}, {0x89, 0x07}, {0x89, 0x86}, {0x6D, 0xF5}, /* 0xA0-0xA3 */ + {0x5F, 0x17}, {0x62, 0x55}, {0x6C, 0xB8}, {0x4E, 0xCF}, /* 0xA4-0xA7 */ + {0x72, 0x69}, {0x9B, 0x92}, {0x52, 0x06}, {0x54, 0x3B}, /* 0xA8-0xAB */ + {0x56, 0x74}, {0x58, 0xB3}, {0x61, 0xA4}, {0x62, 0x6E}, /* 0xAC-0xAF */ + {0x71, 0x1A}, {0x59, 0x6E}, {0x7C, 0x89}, {0x7C, 0xDE}, /* 0xB0-0xB3 */ + {0x7D, 0x1B}, {0x96, 0xF0}, {0x65, 0x87}, {0x80, 0x5E}, /* 0xB4-0xB7 */ + {0x4E, 0x19}, {0x4F, 0x75}, {0x51, 0x75}, {0x58, 0x40}, /* 0xB8-0xBB */ + {0x5E, 0x63}, {0x5E, 0x73}, {0x5F, 0x0A}, {0x67, 0xC4}, /* 0xBC-0xBF */ + {0x4E, 0x26}, {0x85, 0x3D}, {0x95, 0x89}, {0x96, 0x5B}, /* 0xC0-0xC3 */ + {0x7C, 0x73}, {0x98, 0x01}, {0x50, 0xFB}, {0x58, 0xC1}, /* 0xC4-0xC7 */ + {0x76, 0x56}, {0x78, 0xA7}, {0x52, 0x25}, {0x77, 0xA5}, /* 0xC8-0xCB */ + {0x85, 0x11}, {0x7B, 0x86}, {0x50, 0x4F}, {0x59, 0x09}, /* 0xCC-0xCF */ + {0x72, 0x47}, {0x7B, 0xC7}, {0x7D, 0xE8}, {0x8F, 0xBA}, /* 0xD0-0xD3 */ + {0x8F, 0xD4}, {0x90, 0x4D}, {0x4F, 0xBF}, {0x52, 0xC9}, /* 0xD4-0xD7 */ + {0x5A, 0x29}, {0x5F, 0x01}, {0x97, 0xAD}, {0x4F, 0xDD}, /* 0xD8-0xDB */ + {0x82, 0x17}, {0x92, 0xEA}, {0x57, 0x03}, {0x63, 0x55}, /* 0xDC-0xDF */ + {0x6B, 0x69}, {0x75, 0x2B}, {0x88, 0xDC}, {0x8F, 0x14}, /* 0xE0-0xE3 */ + {0x7A, 0x42}, {0x52, 0xDF}, {0x58, 0x93}, {0x61, 0x55}, /* 0xE4-0xE7 */ + {0x62, 0x0A}, {0x66, 0xAE}, {0x6B, 0xCD}, {0x7C, 0x3F}, /* 0xE8-0xEB */ + {0x83, 0xE9}, {0x50, 0x23}, {0x4F, 0xF8}, {0x53, 0x05}, /* 0xEC-0xEF */ + {0x54, 0x46}, {0x58, 0x31}, {0x59, 0x49}, {0x5B, 0x9D}, /* 0xF0-0xF3 */ + {0x5C, 0xF0}, {0x5C, 0xEF}, {0x5D, 0x29}, {0x5E, 0x96}, /* 0xF4-0xF7 */ + {0x62, 0xB1}, {0x63, 0x67}, {0x65, 0x3E}, {0x65, 0xB9}, /* 0xF8-0xFB */ + {0x67, 0x0B}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_96[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6C, 0xD5}, {0x6C, 0xE1}, {0x70, 0xF9}, {0x78, 0x32}, /* 0x40-0x43 */ + {0x7E, 0x2B}, {0x80, 0xDE}, {0x82, 0xB3}, {0x84, 0x0C}, /* 0x44-0x47 */ + {0x84, 0xEC}, {0x87, 0x02}, {0x89, 0x12}, {0x8A, 0x2A}, /* 0x48-0x4B */ + {0x8C, 0x4A}, {0x90, 0xA6}, {0x92, 0xD2}, {0x98, 0xFD}, /* 0x4C-0x4F */ + {0x9C, 0xF3}, {0x9D, 0x6C}, {0x4E, 0x4F}, {0x4E, 0xA1}, /* 0x50-0x53 */ + {0x50, 0x8D}, {0x52, 0x56}, {0x57, 0x4A}, {0x59, 0xA8}, /* 0x54-0x57 */ + {0x5E, 0x3D}, {0x5F, 0xD8}, {0x5F, 0xD9}, {0x62, 0x3F}, /* 0x58-0x5B */ + {0x66, 0xB4}, {0x67, 0x1B}, {0x67, 0xD0}, {0x68, 0xD2}, /* 0x5C-0x5F */ + {0x51, 0x92}, {0x7D, 0x21}, {0x80, 0xAA}, {0x81, 0xA8}, /* 0x60-0x63 */ + {0x8B, 0x00}, {0x8C, 0x8C}, {0x8C, 0xBF}, {0x92, 0x7E}, /* 0x64-0x67 */ + {0x96, 0x32}, {0x54, 0x20}, {0x98, 0x2C}, {0x53, 0x17}, /* 0x68-0x6B */ + {0x50, 0xD5}, {0x53, 0x5C}, {0x58, 0xA8}, {0x64, 0xB2}, /* 0x6C-0x6F */ + {0x67, 0x34}, {0x72, 0x67}, {0x77, 0x66}, {0x7A, 0x46}, /* 0x70-0x73 */ + {0x91, 0xE6}, {0x52, 0xC3}, {0x6C, 0xA1}, {0x6B, 0x86}, /* 0x74-0x77 */ + {0x58, 0x00}, {0x5E, 0x4C}, {0x59, 0x54}, {0x67, 0x2C}, /* 0x78-0x7B */ + {0x7F, 0xFB}, {0x51, 0xE1}, {0x76, 0xC6}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x64, 0x69}, {0x78, 0xE8}, {0x9B, 0x54}, {0x9E, 0xBB}, /* 0x80-0x83 */ + {0x57, 0xCB}, {0x59, 0xB9}, {0x66, 0x27}, {0x67, 0x9A}, /* 0x84-0x87 */ + {0x6B, 0xCE}, {0x54, 0xE9}, {0x69, 0xD9}, {0x5E, 0x55}, /* 0x88-0x8B */ + {0x81, 0x9C}, {0x67, 0x95}, {0x9B, 0xAA}, {0x67, 0xFE}, /* 0x8C-0x8F */ + {0x9C, 0x52}, {0x68, 0x5D}, {0x4E, 0xA6}, {0x4F, 0xE3}, /* 0x90-0x93 */ + {0x53, 0xC8}, {0x62, 0xB9}, {0x67, 0x2B}, {0x6C, 0xAB}, /* 0x94-0x97 */ + {0x8F, 0xC4}, {0x4F, 0xAD}, {0x7E, 0x6D}, {0x9E, 0xBF}, /* 0x98-0x9B */ + {0x4E, 0x07}, {0x61, 0x62}, {0x6E, 0x80}, {0x6F, 0x2B}, /* 0x9C-0x9F */ + {0x85, 0x13}, {0x54, 0x73}, {0x67, 0x2A}, {0x9B, 0x45}, /* 0xA0-0xA3 */ + {0x5D, 0xF3}, {0x7B, 0x95}, {0x5C, 0xAC}, {0x5B, 0xC6}, /* 0xA4-0xA7 */ + {0x87, 0x1C}, {0x6E, 0x4A}, {0x84, 0xD1}, {0x7A, 0x14}, /* 0xA8-0xAB */ + {0x81, 0x08}, {0x59, 0x99}, {0x7C, 0x8D}, {0x6C, 0x11}, /* 0xAC-0xAF */ + {0x77, 0x20}, {0x52, 0xD9}, {0x59, 0x22}, {0x71, 0x21}, /* 0xB0-0xB3 */ + {0x72, 0x5F}, {0x77, 0xDB}, {0x97, 0x27}, {0x9D, 0x61}, /* 0xB4-0xB7 */ + {0x69, 0x0B}, {0x5A, 0x7F}, {0x5A, 0x18}, {0x51, 0xA5}, /* 0xB8-0xBB */ + {0x54, 0x0D}, {0x54, 0x7D}, {0x66, 0x0E}, {0x76, 0xDF}, /* 0xBC-0xBF */ + {0x8F, 0xF7}, {0x92, 0x98}, {0x9C, 0xF4}, {0x59, 0xEA}, /* 0xC0-0xC3 */ + {0x72, 0x5D}, {0x6E, 0xC5}, {0x51, 0x4D}, {0x68, 0xC9}, /* 0xC4-0xC7 */ + {0x7D, 0xBF}, {0x7D, 0xEC}, {0x97, 0x62}, {0x9E, 0xBA}, /* 0xC8-0xCB */ + {0x64, 0x78}, {0x6A, 0x21}, {0x83, 0x02}, {0x59, 0x84}, /* 0xCC-0xCF */ + {0x5B, 0x5F}, {0x6B, 0xDB}, {0x73, 0x1B}, {0x76, 0xF2}, /* 0xD0-0xD3 */ + {0x7D, 0xB2}, {0x80, 0x17}, {0x84, 0x99}, {0x51, 0x32}, /* 0xD4-0xD7 */ + {0x67, 0x28}, {0x9E, 0xD9}, {0x76, 0xEE}, {0x67, 0x62}, /* 0xD8-0xDB */ + {0x52, 0xFF}, {0x99, 0x05}, {0x5C, 0x24}, {0x62, 0x3B}, /* 0xDC-0xDF */ + {0x7C, 0x7E}, {0x8C, 0xB0}, {0x55, 0x4F}, {0x60, 0xB6}, /* 0xE0-0xE3 */ + {0x7D, 0x0B}, {0x95, 0x80}, {0x53, 0x01}, {0x4E, 0x5F}, /* 0xE4-0xE7 */ + {0x51, 0xB6}, {0x59, 0x1C}, {0x72, 0x3A}, {0x80, 0x36}, /* 0xE8-0xEB */ + {0x91, 0xCE}, {0x5F, 0x25}, {0x77, 0xE2}, {0x53, 0x84}, /* 0xEC-0xEF */ + {0x5F, 0x79}, {0x7D, 0x04}, {0x85, 0xAC}, {0x8A, 0x33}, /* 0xF0-0xF3 */ + {0x8E, 0x8D}, {0x97, 0x56}, {0x67, 0xF3}, {0x85, 0xAE}, /* 0xF4-0xF7 */ + {0x94, 0x53}, {0x61, 0x09}, {0x61, 0x08}, {0x6C, 0xB9}, /* 0xF8-0xFB */ + {0x76, 0x52}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_97[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8A, 0xED}, {0x8F, 0x38}, {0x55, 0x2F}, {0x4F, 0x51}, /* 0x40-0x43 */ + {0x51, 0x2A}, {0x52, 0xC7}, {0x53, 0xCB}, {0x5B, 0xA5}, /* 0x44-0x47 */ + {0x5E, 0x7D}, {0x60, 0xA0}, {0x61, 0x82}, {0x63, 0xD6}, /* 0x48-0x4B */ + {0x67, 0x09}, {0x67, 0xDA}, {0x6E, 0x67}, {0x6D, 0x8C}, /* 0x4C-0x4F */ + {0x73, 0x36}, {0x73, 0x37}, {0x75, 0x31}, {0x79, 0x50}, /* 0x50-0x53 */ + {0x88, 0xD5}, {0x8A, 0x98}, {0x90, 0x4A}, {0x90, 0x91}, /* 0x54-0x57 */ + {0x90, 0xF5}, {0x96, 0xC4}, {0x87, 0x8D}, {0x59, 0x15}, /* 0x58-0x5B */ + {0x4E, 0x88}, {0x4F, 0x59}, {0x4E, 0x0E}, {0x8A, 0x89}, /* 0x5C-0x5F */ + {0x8F, 0x3F}, {0x98, 0x10}, {0x50, 0xAD}, {0x5E, 0x7C}, /* 0x60-0x63 */ + {0x59, 0x96}, {0x5B, 0xB9}, {0x5E, 0xB8}, {0x63, 0xDA}, /* 0x64-0x67 */ + {0x63, 0xFA}, {0x64, 0xC1}, {0x66, 0xDC}, {0x69, 0x4A}, /* 0x68-0x6B */ + {0x69, 0xD8}, {0x6D, 0x0B}, {0x6E, 0xB6}, {0x71, 0x94}, /* 0x6C-0x6F */ + {0x75, 0x28}, {0x7A, 0xAF}, {0x7F, 0x8A}, {0x80, 0x00}, /* 0x70-0x73 */ + {0x84, 0x49}, {0x84, 0xC9}, {0x89, 0x81}, {0x8B, 0x21}, /* 0x74-0x77 */ + {0x8E, 0x0A}, {0x90, 0x65}, {0x96, 0x7D}, {0x99, 0x0A}, /* 0x78-0x7B */ + {0x61, 0x7E}, {0x62, 0x91}, {0x6B, 0x32}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6C, 0x83}, {0x6D, 0x74}, {0x7F, 0xCC}, {0x7F, 0xFC}, /* 0x80-0x83 */ + {0x6D, 0xC0}, {0x7F, 0x85}, {0x87, 0xBA}, {0x88, 0xF8}, /* 0x84-0x87 */ + {0x67, 0x65}, {0x83, 0xB1}, {0x98, 0x3C}, {0x96, 0xF7}, /* 0x88-0x8B */ + {0x6D, 0x1B}, {0x7D, 0x61}, {0x84, 0x3D}, {0x91, 0x6A}, /* 0x8C-0x8F */ + {0x4E, 0x71}, {0x53, 0x75}, {0x5D, 0x50}, {0x6B, 0x04}, /* 0x90-0x93 */ + {0x6F, 0xEB}, {0x85, 0xCD}, {0x86, 0x2D}, {0x89, 0xA7}, /* 0x94-0x97 */ + {0x52, 0x29}, {0x54, 0x0F}, {0x5C, 0x65}, {0x67, 0x4E}, /* 0x98-0x9B */ + {0x68, 0xA8}, {0x74, 0x06}, {0x74, 0x83}, {0x75, 0xE2}, /* 0x9C-0x9F */ + {0x88, 0xCF}, {0x88, 0xE1}, {0x91, 0xCC}, {0x96, 0xE2}, /* 0xA0-0xA3 */ + {0x96, 0x78}, {0x5F, 0x8B}, {0x73, 0x87}, {0x7A, 0xCB}, /* 0xA4-0xA7 */ + {0x84, 0x4E}, {0x63, 0xA0}, {0x75, 0x65}, {0x52, 0x89}, /* 0xA8-0xAB */ + {0x6D, 0x41}, {0x6E, 0x9C}, {0x74, 0x09}, {0x75, 0x59}, /* 0xAC-0xAF */ + {0x78, 0x6B}, {0x7C, 0x92}, {0x96, 0x86}, {0x7A, 0xDC}, /* 0xB0-0xB3 */ + {0x9F, 0x8D}, {0x4F, 0xB6}, {0x61, 0x6E}, {0x65, 0xC5}, /* 0xB4-0xB7 */ + {0x86, 0x5C}, {0x4E, 0x86}, {0x4E, 0xAE}, {0x50, 0xDA}, /* 0xB8-0xBB */ + {0x4E, 0x21}, {0x51, 0xCC}, {0x5B, 0xEE}, {0x65, 0x99}, /* 0xBC-0xBF */ + {0x68, 0x81}, {0x6D, 0xBC}, {0x73, 0x1F}, {0x76, 0x42}, /* 0xC0-0xC3 */ + {0x77, 0xAD}, {0x7A, 0x1C}, {0x7C, 0xE7}, {0x82, 0x6F}, /* 0xC4-0xC7 */ + {0x8A, 0xD2}, {0x90, 0x7C}, {0x91, 0xCF}, {0x96, 0x75}, /* 0xC8-0xCB */ + {0x98, 0x18}, {0x52, 0x9B}, {0x7D, 0xD1}, {0x50, 0x2B}, /* 0xCC-0xCF */ + {0x53, 0x98}, {0x67, 0x97}, {0x6D, 0xCB}, {0x71, 0xD0}, /* 0xD0-0xD3 */ + {0x74, 0x33}, {0x81, 0xE8}, {0x8F, 0x2A}, {0x96, 0xA3}, /* 0xD4-0xD7 */ + {0x9C, 0x57}, {0x9E, 0x9F}, {0x74, 0x60}, {0x58, 0x41}, /* 0xD8-0xDB */ + {0x6D, 0x99}, {0x7D, 0x2F}, {0x98, 0x5E}, {0x4E, 0xE4}, /* 0xDC-0xDF */ + {0x4F, 0x36}, {0x4F, 0x8B}, {0x51, 0xB7}, {0x52, 0xB1}, /* 0xE0-0xE3 */ + {0x5D, 0xBA}, {0x60, 0x1C}, {0x73, 0xB2}, {0x79, 0x3C}, /* 0xE4-0xE7 */ + {0x82, 0xD3}, {0x92, 0x34}, {0x96, 0xB7}, {0x96, 0xF6}, /* 0xE8-0xEB */ + {0x97, 0x0A}, {0x9E, 0x97}, {0x9F, 0x62}, {0x66, 0xA6}, /* 0xEC-0xEF */ + {0x6B, 0x74}, {0x52, 0x17}, {0x52, 0xA3}, {0x70, 0xC8}, /* 0xF0-0xF3 */ + {0x88, 0xC2}, {0x5E, 0xC9}, {0x60, 0x4B}, {0x61, 0x90}, /* 0xF4-0xF7 */ + {0x6F, 0x23}, {0x71, 0x49}, {0x7C, 0x3E}, {0x7D, 0xF4}, /* 0xF8-0xFB */ + {0x80, 0x6F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_98[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x84, 0xEE}, {0x90, 0x23}, {0x93, 0x2C}, {0x54, 0x42}, /* 0x40-0x43 */ + {0x9B, 0x6F}, {0x6A, 0xD3}, {0x70, 0x89}, {0x8C, 0xC2}, /* 0x44-0x47 */ + {0x8D, 0xEF}, {0x97, 0x32}, {0x52, 0xB4}, {0x5A, 0x41}, /* 0x48-0x4B */ + {0x5E, 0xCA}, {0x5F, 0x04}, {0x67, 0x17}, {0x69, 0x7C}, /* 0x4C-0x4F */ + {0x69, 0x94}, {0x6D, 0x6A}, {0x6F, 0x0F}, {0x72, 0x62}, /* 0x50-0x53 */ + {0x72, 0xFC}, {0x7B, 0xED}, {0x80, 0x01}, {0x80, 0x7E}, /* 0x54-0x57 */ + {0x87, 0x4B}, {0x90, 0xCE}, {0x51, 0x6D}, {0x9E, 0x93}, /* 0x58-0x5B */ + {0x79, 0x84}, {0x80, 0x8B}, {0x93, 0x32}, {0x8A, 0xD6}, /* 0x5C-0x5F */ + {0x50, 0x2D}, {0x54, 0x8C}, {0x8A, 0x71}, {0x6B, 0x6A}, /* 0x60-0x63 */ + {0x8C, 0xC4}, {0x81, 0x07}, {0x60, 0xD1}, {0x67, 0xA0}, /* 0x64-0x67 */ + {0x9D, 0xF2}, {0x4E, 0x99}, {0x4E, 0x98}, {0x9C, 0x10}, /* 0x68-0x6B */ + {0x8A, 0x6B}, {0x85, 0xC1}, {0x85, 0x68}, {0x69, 0x00}, /* 0x6C-0x6F */ + {0x6E, 0x7E}, {0x78, 0x97}, {0x81, 0x55}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x5F, 0x0C}, /* 0x9C-0x9F */ + {0x4E, 0x10}, {0x4E, 0x15}, {0x4E, 0x2A}, {0x4E, 0x31}, /* 0xA0-0xA3 */ + {0x4E, 0x36}, {0x4E, 0x3C}, {0x4E, 0x3F}, {0x4E, 0x42}, /* 0xA4-0xA7 */ + {0x4E, 0x56}, {0x4E, 0x58}, {0x4E, 0x82}, {0x4E, 0x85}, /* 0xA8-0xAB */ + {0x8C, 0x6B}, {0x4E, 0x8A}, {0x82, 0x12}, {0x5F, 0x0D}, /* 0xAC-0xAF */ + {0x4E, 0x8E}, {0x4E, 0x9E}, {0x4E, 0x9F}, {0x4E, 0xA0}, /* 0xB0-0xB3 */ + {0x4E, 0xA2}, {0x4E, 0xB0}, {0x4E, 0xB3}, {0x4E, 0xB6}, /* 0xB4-0xB7 */ + {0x4E, 0xCE}, {0x4E, 0xCD}, {0x4E, 0xC4}, {0x4E, 0xC6}, /* 0xB8-0xBB */ + {0x4E, 0xC2}, {0x4E, 0xD7}, {0x4E, 0xDE}, {0x4E, 0xED}, /* 0xBC-0xBF */ + {0x4E, 0xDF}, {0x4E, 0xF7}, {0x4F, 0x09}, {0x4F, 0x5A}, /* 0xC0-0xC3 */ + {0x4F, 0x30}, {0x4F, 0x5B}, {0x4F, 0x5D}, {0x4F, 0x57}, /* 0xC4-0xC7 */ + {0x4F, 0x47}, {0x4F, 0x76}, {0x4F, 0x88}, {0x4F, 0x8F}, /* 0xC8-0xCB */ + {0x4F, 0x98}, {0x4F, 0x7B}, {0x4F, 0x69}, {0x4F, 0x70}, /* 0xCC-0xCF */ + {0x4F, 0x91}, {0x4F, 0x6F}, {0x4F, 0x86}, {0x4F, 0x96}, /* 0xD0-0xD3 */ + {0x51, 0x18}, {0x4F, 0xD4}, {0x4F, 0xDF}, {0x4F, 0xCE}, /* 0xD4-0xD7 */ + {0x4F, 0xD8}, {0x4F, 0xDB}, {0x4F, 0xD1}, {0x4F, 0xDA}, /* 0xD8-0xDB */ + {0x4F, 0xD0}, {0x4F, 0xE4}, {0x4F, 0xE5}, {0x50, 0x1A}, /* 0xDC-0xDF */ + {0x50, 0x28}, {0x50, 0x14}, {0x50, 0x2A}, {0x50, 0x25}, /* 0xE0-0xE3 */ + {0x50, 0x05}, {0x4F, 0x1C}, {0x4F, 0xF6}, {0x50, 0x21}, /* 0xE4-0xE7 */ + {0x50, 0x29}, {0x50, 0x2C}, {0x4F, 0xFE}, {0x4F, 0xEF}, /* 0xE8-0xEB */ + {0x50, 0x11}, {0x50, 0x06}, {0x50, 0x43}, {0x50, 0x47}, /* 0xEC-0xEF */ + {0x67, 0x03}, {0x50, 0x55}, {0x50, 0x50}, {0x50, 0x48}, /* 0xF0-0xF3 */ + {0x50, 0x5A}, {0x50, 0x56}, {0x50, 0x6C}, {0x50, 0x78}, /* 0xF4-0xF7 */ + {0x50, 0x80}, {0x50, 0x9A}, {0x50, 0x85}, {0x50, 0xB4}, /* 0xF8-0xFB */ + {0x50, 0xB2}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_99[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x50, 0xC9}, {0x50, 0xCA}, {0x50, 0xB3}, {0x50, 0xC2}, /* 0x40-0x43 */ + {0x50, 0xD6}, {0x50, 0xDE}, {0x50, 0xE5}, {0x50, 0xED}, /* 0x44-0x47 */ + {0x50, 0xE3}, {0x50, 0xEE}, {0x50, 0xF9}, {0x50, 0xF5}, /* 0x48-0x4B */ + {0x51, 0x09}, {0x51, 0x01}, {0x51, 0x02}, {0x51, 0x16}, /* 0x4C-0x4F */ + {0x51, 0x15}, {0x51, 0x14}, {0x51, 0x1A}, {0x51, 0x21}, /* 0x50-0x53 */ + {0x51, 0x3A}, {0x51, 0x37}, {0x51, 0x3C}, {0x51, 0x3B}, /* 0x54-0x57 */ + {0x51, 0x3F}, {0x51, 0x40}, {0x51, 0x52}, {0x51, 0x4C}, /* 0x58-0x5B */ + {0x51, 0x54}, {0x51, 0x62}, {0x7A, 0xF8}, {0x51, 0x69}, /* 0x5C-0x5F */ + {0x51, 0x6A}, {0x51, 0x6E}, {0x51, 0x80}, {0x51, 0x82}, /* 0x60-0x63 */ + {0x56, 0xD8}, {0x51, 0x8C}, {0x51, 0x89}, {0x51, 0x8F}, /* 0x64-0x67 */ + {0x51, 0x91}, {0x51, 0x93}, {0x51, 0x95}, {0x51, 0x96}, /* 0x68-0x6B */ + {0x51, 0xA4}, {0x51, 0xA6}, {0x51, 0xA2}, {0x51, 0xA9}, /* 0x6C-0x6F */ + {0x51, 0xAA}, {0x51, 0xAB}, {0x51, 0xB3}, {0x51, 0xB1}, /* 0x70-0x73 */ + {0x51, 0xB2}, {0x51, 0xB0}, {0x51, 0xB5}, {0x51, 0xBD}, /* 0x74-0x77 */ + {0x51, 0xC5}, {0x51, 0xC9}, {0x51, 0xDB}, {0x51, 0xE0}, /* 0x78-0x7B */ + {0x86, 0x55}, {0x51, 0xE9}, {0x51, 0xED}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x51, 0xF0}, {0x51, 0xF5}, {0x51, 0xFE}, {0x52, 0x04}, /* 0x80-0x83 */ + {0x52, 0x0B}, {0x52, 0x14}, {0x52, 0x0E}, {0x52, 0x27}, /* 0x84-0x87 */ + {0x52, 0x2A}, {0x52, 0x2E}, {0x52, 0x33}, {0x52, 0x39}, /* 0x88-0x8B */ + {0x52, 0x4F}, {0x52, 0x44}, {0x52, 0x4B}, {0x52, 0x4C}, /* 0x8C-0x8F */ + {0x52, 0x5E}, {0x52, 0x54}, {0x52, 0x6A}, {0x52, 0x74}, /* 0x90-0x93 */ + {0x52, 0x69}, {0x52, 0x73}, {0x52, 0x7F}, {0x52, 0x7D}, /* 0x94-0x97 */ + {0x52, 0x8D}, {0x52, 0x94}, {0x52, 0x92}, {0x52, 0x71}, /* 0x98-0x9B */ + {0x52, 0x88}, {0x52, 0x91}, {0x8F, 0xA8}, {0x8F, 0xA7}, /* 0x9C-0x9F */ + {0x52, 0xAC}, {0x52, 0xAD}, {0x52, 0xBC}, {0x52, 0xB5}, /* 0xA0-0xA3 */ + {0x52, 0xC1}, {0x52, 0xCD}, {0x52, 0xD7}, {0x52, 0xDE}, /* 0xA4-0xA7 */ + {0x52, 0xE3}, {0x52, 0xE6}, {0x98, 0xED}, {0x52, 0xE0}, /* 0xA8-0xAB */ + {0x52, 0xF3}, {0x52, 0xF5}, {0x52, 0xF8}, {0x52, 0xF9}, /* 0xAC-0xAF */ + {0x53, 0x06}, {0x53, 0x08}, {0x75, 0x38}, {0x53, 0x0D}, /* 0xB0-0xB3 */ + {0x53, 0x10}, {0x53, 0x0F}, {0x53, 0x15}, {0x53, 0x1A}, /* 0xB4-0xB7 */ + {0x53, 0x23}, {0x53, 0x2F}, {0x53, 0x31}, {0x53, 0x33}, /* 0xB8-0xBB */ + {0x53, 0x38}, {0x53, 0x40}, {0x53, 0x46}, {0x53, 0x45}, /* 0xBC-0xBF */ + {0x4E, 0x17}, {0x53, 0x49}, {0x53, 0x4D}, {0x51, 0xD6}, /* 0xC0-0xC3 */ + {0x53, 0x5E}, {0x53, 0x69}, {0x53, 0x6E}, {0x59, 0x18}, /* 0xC4-0xC7 */ + {0x53, 0x7B}, {0x53, 0x77}, {0x53, 0x82}, {0x53, 0x96}, /* 0xC8-0xCB */ + {0x53, 0xA0}, {0x53, 0xA6}, {0x53, 0xA5}, {0x53, 0xAE}, /* 0xCC-0xCF */ + {0x53, 0xB0}, {0x53, 0xB6}, {0x53, 0xC3}, {0x7C, 0x12}, /* 0xD0-0xD3 */ + {0x96, 0xD9}, {0x53, 0xDF}, {0x66, 0xFC}, {0x71, 0xEE}, /* 0xD4-0xD7 */ + {0x53, 0xEE}, {0x53, 0xE8}, {0x53, 0xED}, {0x53, 0xFA}, /* 0xD8-0xDB */ + {0x54, 0x01}, {0x54, 0x3D}, {0x54, 0x40}, {0x54, 0x2C}, /* 0xDC-0xDF */ + {0x54, 0x2D}, {0x54, 0x3C}, {0x54, 0x2E}, {0x54, 0x36}, /* 0xE0-0xE3 */ + {0x54, 0x29}, {0x54, 0x1D}, {0x54, 0x4E}, {0x54, 0x8F}, /* 0xE4-0xE7 */ + {0x54, 0x75}, {0x54, 0x8E}, {0x54, 0x5F}, {0x54, 0x71}, /* 0xE8-0xEB */ + {0x54, 0x77}, {0x54, 0x70}, {0x54, 0x92}, {0x54, 0x7B}, /* 0xEC-0xEF */ + {0x54, 0x80}, {0x54, 0x76}, {0x54, 0x84}, {0x54, 0x90}, /* 0xF0-0xF3 */ + {0x54, 0x86}, {0x54, 0xC7}, {0x54, 0xA2}, {0x54, 0xB8}, /* 0xF4-0xF7 */ + {0x54, 0xA5}, {0x54, 0xAC}, {0x54, 0xC4}, {0x54, 0xC8}, /* 0xF8-0xFB */ + {0x54, 0xA8}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9A[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x54, 0xAB}, {0x54, 0xC2}, {0x54, 0xA4}, {0x54, 0xBE}, /* 0x40-0x43 */ + {0x54, 0xBC}, {0x54, 0xD8}, {0x54, 0xE5}, {0x54, 0xE6}, /* 0x44-0x47 */ + {0x55, 0x0F}, {0x55, 0x14}, {0x54, 0xFD}, {0x54, 0xEE}, /* 0x48-0x4B */ + {0x54, 0xED}, {0x54, 0xFA}, {0x54, 0xE2}, {0x55, 0x39}, /* 0x4C-0x4F */ + {0x55, 0x40}, {0x55, 0x63}, {0x55, 0x4C}, {0x55, 0x2E}, /* 0x50-0x53 */ + {0x55, 0x5C}, {0x55, 0x45}, {0x55, 0x56}, {0x55, 0x57}, /* 0x54-0x57 */ + {0x55, 0x38}, {0x55, 0x33}, {0x55, 0x5D}, {0x55, 0x99}, /* 0x58-0x5B */ + {0x55, 0x80}, {0x54, 0xAF}, {0x55, 0x8A}, {0x55, 0x9F}, /* 0x5C-0x5F */ + {0x55, 0x7B}, {0x55, 0x7E}, {0x55, 0x98}, {0x55, 0x9E}, /* 0x60-0x63 */ + {0x55, 0xAE}, {0x55, 0x7C}, {0x55, 0x83}, {0x55, 0xA9}, /* 0x64-0x67 */ + {0x55, 0x87}, {0x55, 0xA8}, {0x55, 0xDA}, {0x55, 0xC5}, /* 0x68-0x6B */ + {0x55, 0xDF}, {0x55, 0xC4}, {0x55, 0xDC}, {0x55, 0xE4}, /* 0x6C-0x6F */ + {0x55, 0xD4}, {0x56, 0x14}, {0x55, 0xF7}, {0x56, 0x16}, /* 0x70-0x73 */ + {0x55, 0xFE}, {0x55, 0xFD}, {0x56, 0x1B}, {0x55, 0xF9}, /* 0x74-0x77 */ + {0x56, 0x4E}, {0x56, 0x50}, {0x71, 0xDF}, {0x56, 0x34}, /* 0x78-0x7B */ + {0x56, 0x36}, {0x56, 0x32}, {0x56, 0x38}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x56, 0x6B}, {0x56, 0x64}, {0x56, 0x2F}, {0x56, 0x6C}, /* 0x80-0x83 */ + {0x56, 0x6A}, {0x56, 0x86}, {0x56, 0x80}, {0x56, 0x8A}, /* 0x84-0x87 */ + {0x56, 0xA0}, {0x56, 0x94}, {0x56, 0x8F}, {0x56, 0xA5}, /* 0x88-0x8B */ + {0x56, 0xAE}, {0x56, 0xB6}, {0x56, 0xB4}, {0x56, 0xC2}, /* 0x8C-0x8F */ + {0x56, 0xBC}, {0x56, 0xC1}, {0x56, 0xC3}, {0x56, 0xC0}, /* 0x90-0x93 */ + {0x56, 0xC8}, {0x56, 0xCE}, {0x56, 0xD1}, {0x56, 0xD3}, /* 0x94-0x97 */ + {0x56, 0xD7}, {0x56, 0xEE}, {0x56, 0xF9}, {0x57, 0x00}, /* 0x98-0x9B */ + {0x56, 0xFF}, {0x57, 0x04}, {0x57, 0x09}, {0x57, 0x08}, /* 0x9C-0x9F */ + {0x57, 0x0B}, {0x57, 0x0D}, {0x57, 0x13}, {0x57, 0x18}, /* 0xA0-0xA3 */ + {0x57, 0x16}, {0x55, 0xC7}, {0x57, 0x1C}, {0x57, 0x26}, /* 0xA4-0xA7 */ + {0x57, 0x37}, {0x57, 0x38}, {0x57, 0x4E}, {0x57, 0x3B}, /* 0xA8-0xAB */ + {0x57, 0x40}, {0x57, 0x4F}, {0x57, 0x69}, {0x57, 0xC0}, /* 0xAC-0xAF */ + {0x57, 0x88}, {0x57, 0x61}, {0x57, 0x7F}, {0x57, 0x89}, /* 0xB0-0xB3 */ + {0x57, 0x93}, {0x57, 0xA0}, {0x57, 0xB3}, {0x57, 0xA4}, /* 0xB4-0xB7 */ + {0x57, 0xAA}, {0x57, 0xB0}, {0x57, 0xC3}, {0x57, 0xC6}, /* 0xB8-0xBB */ + {0x57, 0xD4}, {0x57, 0xD2}, {0x57, 0xD3}, {0x58, 0x0A}, /* 0xBC-0xBF */ + {0x57, 0xD6}, {0x57, 0xE3}, {0x58, 0x0B}, {0x58, 0x19}, /* 0xC0-0xC3 */ + {0x58, 0x1D}, {0x58, 0x72}, {0x58, 0x21}, {0x58, 0x62}, /* 0xC4-0xC7 */ + {0x58, 0x4B}, {0x58, 0x70}, {0x6B, 0xC0}, {0x58, 0x52}, /* 0xC8-0xCB */ + {0x58, 0x3D}, {0x58, 0x79}, {0x58, 0x85}, {0x58, 0xB9}, /* 0xCC-0xCF */ + {0x58, 0x9F}, {0x58, 0xAB}, {0x58, 0xBA}, {0x58, 0xDE}, /* 0xD0-0xD3 */ + {0x58, 0xBB}, {0x58, 0xB8}, {0x58, 0xAE}, {0x58, 0xC5}, /* 0xD4-0xD7 */ + {0x58, 0xD3}, {0x58, 0xD1}, {0x58, 0xD7}, {0x58, 0xD9}, /* 0xD8-0xDB */ + {0x58, 0xD8}, {0x58, 0xE5}, {0x58, 0xDC}, {0x58, 0xE4}, /* 0xDC-0xDF */ + {0x58, 0xDF}, {0x58, 0xEF}, {0x58, 0xFA}, {0x58, 0xF9}, /* 0xE0-0xE3 */ + {0x58, 0xFB}, {0x58, 0xFC}, {0x58, 0xFD}, {0x59, 0x02}, /* 0xE4-0xE7 */ + {0x59, 0x0A}, {0x59, 0x10}, {0x59, 0x1B}, {0x68, 0xA6}, /* 0xE8-0xEB */ + {0x59, 0x25}, {0x59, 0x2C}, {0x59, 0x2D}, {0x59, 0x32}, /* 0xEC-0xEF */ + {0x59, 0x38}, {0x59, 0x3E}, {0x7A, 0xD2}, {0x59, 0x55}, /* 0xF0-0xF3 */ + {0x59, 0x50}, {0x59, 0x4E}, {0x59, 0x5A}, {0x59, 0x58}, /* 0xF4-0xF7 */ + {0x59, 0x62}, {0x59, 0x60}, {0x59, 0x67}, {0x59, 0x6C}, /* 0xF8-0xFB */ + {0x59, 0x69}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9B[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x59, 0x78}, {0x59, 0x81}, {0x59, 0x9D}, {0x4F, 0x5E}, /* 0x40-0x43 */ + {0x4F, 0xAB}, {0x59, 0xA3}, {0x59, 0xB2}, {0x59, 0xC6}, /* 0x44-0x47 */ + {0x59, 0xE8}, {0x59, 0xDC}, {0x59, 0x8D}, {0x59, 0xD9}, /* 0x48-0x4B */ + {0x59, 0xDA}, {0x5A, 0x25}, {0x5A, 0x1F}, {0x5A, 0x11}, /* 0x4C-0x4F */ + {0x5A, 0x1C}, {0x5A, 0x09}, {0x5A, 0x1A}, {0x5A, 0x40}, /* 0x50-0x53 */ + {0x5A, 0x6C}, {0x5A, 0x49}, {0x5A, 0x35}, {0x5A, 0x36}, /* 0x54-0x57 */ + {0x5A, 0x62}, {0x5A, 0x6A}, {0x5A, 0x9A}, {0x5A, 0xBC}, /* 0x58-0x5B */ + {0x5A, 0xBE}, {0x5A, 0xCB}, {0x5A, 0xC2}, {0x5A, 0xBD}, /* 0x5C-0x5F */ + {0x5A, 0xE3}, {0x5A, 0xD7}, {0x5A, 0xE6}, {0x5A, 0xE9}, /* 0x60-0x63 */ + {0x5A, 0xD6}, {0x5A, 0xFA}, {0x5A, 0xFB}, {0x5B, 0x0C}, /* 0x64-0x67 */ + {0x5B, 0x0B}, {0x5B, 0x16}, {0x5B, 0x32}, {0x5A, 0xD0}, /* 0x68-0x6B */ + {0x5B, 0x2A}, {0x5B, 0x36}, {0x5B, 0x3E}, {0x5B, 0x43}, /* 0x6C-0x6F */ + {0x5B, 0x45}, {0x5B, 0x40}, {0x5B, 0x51}, {0x5B, 0x55}, /* 0x70-0x73 */ + {0x5B, 0x5A}, {0x5B, 0x5B}, {0x5B, 0x65}, {0x5B, 0x69}, /* 0x74-0x77 */ + {0x5B, 0x70}, {0x5B, 0x73}, {0x5B, 0x75}, {0x5B, 0x78}, /* 0x78-0x7B */ + {0x65, 0x88}, {0x5B, 0x7A}, {0x5B, 0x80}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x5B, 0x83}, {0x5B, 0xA6}, {0x5B, 0xB8}, {0x5B, 0xC3}, /* 0x80-0x83 */ + {0x5B, 0xC7}, {0x5B, 0xC9}, {0x5B, 0xD4}, {0x5B, 0xD0}, /* 0x84-0x87 */ + {0x5B, 0xE4}, {0x5B, 0xE6}, {0x5B, 0xE2}, {0x5B, 0xDE}, /* 0x88-0x8B */ + {0x5B, 0xE5}, {0x5B, 0xEB}, {0x5B, 0xF0}, {0x5B, 0xF6}, /* 0x8C-0x8F */ + {0x5B, 0xF3}, {0x5C, 0x05}, {0x5C, 0x07}, {0x5C, 0x08}, /* 0x90-0x93 */ + {0x5C, 0x0D}, {0x5C, 0x13}, {0x5C, 0x20}, {0x5C, 0x22}, /* 0x94-0x97 */ + {0x5C, 0x28}, {0x5C, 0x38}, {0x5C, 0x39}, {0x5C, 0x41}, /* 0x98-0x9B */ + {0x5C, 0x46}, {0x5C, 0x4E}, {0x5C, 0x53}, {0x5C, 0x50}, /* 0x9C-0x9F */ + {0x5C, 0x4F}, {0x5B, 0x71}, {0x5C, 0x6C}, {0x5C, 0x6E}, /* 0xA0-0xA3 */ + {0x4E, 0x62}, {0x5C, 0x76}, {0x5C, 0x79}, {0x5C, 0x8C}, /* 0xA4-0xA7 */ + {0x5C, 0x91}, {0x5C, 0x94}, {0x59, 0x9B}, {0x5C, 0xAB}, /* 0xA8-0xAB */ + {0x5C, 0xBB}, {0x5C, 0xB6}, {0x5C, 0xBC}, {0x5C, 0xB7}, /* 0xAC-0xAF */ + {0x5C, 0xC5}, {0x5C, 0xBE}, {0x5C, 0xC7}, {0x5C, 0xD9}, /* 0xB0-0xB3 */ + {0x5C, 0xE9}, {0x5C, 0xFD}, {0x5C, 0xFA}, {0x5C, 0xED}, /* 0xB4-0xB7 */ + {0x5D, 0x8C}, {0x5C, 0xEA}, {0x5D, 0x0B}, {0x5D, 0x15}, /* 0xB8-0xBB */ + {0x5D, 0x17}, {0x5D, 0x5C}, {0x5D, 0x1F}, {0x5D, 0x1B}, /* 0xBC-0xBF */ + {0x5D, 0x11}, {0x5D, 0x14}, {0x5D, 0x22}, {0x5D, 0x1A}, /* 0xC0-0xC3 */ + {0x5D, 0x19}, {0x5D, 0x18}, {0x5D, 0x4C}, {0x5D, 0x52}, /* 0xC4-0xC7 */ + {0x5D, 0x4E}, {0x5D, 0x4B}, {0x5D, 0x6C}, {0x5D, 0x73}, /* 0xC8-0xCB */ + {0x5D, 0x76}, {0x5D, 0x87}, {0x5D, 0x84}, {0x5D, 0x82}, /* 0xCC-0xCF */ + {0x5D, 0xA2}, {0x5D, 0x9D}, {0x5D, 0xAC}, {0x5D, 0xAE}, /* 0xD0-0xD3 */ + {0x5D, 0xBD}, {0x5D, 0x90}, {0x5D, 0xB7}, {0x5D, 0xBC}, /* 0xD4-0xD7 */ + {0x5D, 0xC9}, {0x5D, 0xCD}, {0x5D, 0xD3}, {0x5D, 0xD2}, /* 0xD8-0xDB */ + {0x5D, 0xD6}, {0x5D, 0xDB}, {0x5D, 0xEB}, {0x5D, 0xF2}, /* 0xDC-0xDF */ + {0x5D, 0xF5}, {0x5E, 0x0B}, {0x5E, 0x1A}, {0x5E, 0x19}, /* 0xE0-0xE3 */ + {0x5E, 0x11}, {0x5E, 0x1B}, {0x5E, 0x36}, {0x5E, 0x37}, /* 0xE4-0xE7 */ + {0x5E, 0x44}, {0x5E, 0x43}, {0x5E, 0x40}, {0x5E, 0x4E}, /* 0xE8-0xEB */ + {0x5E, 0x57}, {0x5E, 0x54}, {0x5E, 0x5F}, {0x5E, 0x62}, /* 0xEC-0xEF */ + {0x5E, 0x64}, {0x5E, 0x47}, {0x5E, 0x75}, {0x5E, 0x76}, /* 0xF0-0xF3 */ + {0x5E, 0x7A}, {0x9E, 0xBC}, {0x5E, 0x7F}, {0x5E, 0xA0}, /* 0xF4-0xF7 */ + {0x5E, 0xC1}, {0x5E, 0xC2}, {0x5E, 0xC8}, {0x5E, 0xD0}, /* 0xF8-0xFB */ + {0x5E, 0xCF}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9C[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5E, 0xD6}, {0x5E, 0xE3}, {0x5E, 0xDD}, {0x5E, 0xDA}, /* 0x40-0x43 */ + {0x5E, 0xDB}, {0x5E, 0xE2}, {0x5E, 0xE1}, {0x5E, 0xE8}, /* 0x44-0x47 */ + {0x5E, 0xE9}, {0x5E, 0xEC}, {0x5E, 0xF1}, {0x5E, 0xF3}, /* 0x48-0x4B */ + {0x5E, 0xF0}, {0x5E, 0xF4}, {0x5E, 0xF8}, {0x5E, 0xFE}, /* 0x4C-0x4F */ + {0x5F, 0x03}, {0x5F, 0x09}, {0x5F, 0x5D}, {0x5F, 0x5C}, /* 0x50-0x53 */ + {0x5F, 0x0B}, {0x5F, 0x11}, {0x5F, 0x16}, {0x5F, 0x29}, /* 0x54-0x57 */ + {0x5F, 0x2D}, {0x5F, 0x38}, {0x5F, 0x41}, {0x5F, 0x48}, /* 0x58-0x5B */ + {0x5F, 0x4C}, {0x5F, 0x4E}, {0x5F, 0x2F}, {0x5F, 0x51}, /* 0x5C-0x5F */ + {0x5F, 0x56}, {0x5F, 0x57}, {0x5F, 0x59}, {0x5F, 0x61}, /* 0x60-0x63 */ + {0x5F, 0x6D}, {0x5F, 0x73}, {0x5F, 0x77}, {0x5F, 0x83}, /* 0x64-0x67 */ + {0x5F, 0x82}, {0x5F, 0x7F}, {0x5F, 0x8A}, {0x5F, 0x88}, /* 0x68-0x6B */ + {0x5F, 0x91}, {0x5F, 0x87}, {0x5F, 0x9E}, {0x5F, 0x99}, /* 0x6C-0x6F */ + {0x5F, 0x98}, {0x5F, 0xA0}, {0x5F, 0xA8}, {0x5F, 0xAD}, /* 0x70-0x73 */ + {0x5F, 0xBC}, {0x5F, 0xD6}, {0x5F, 0xFB}, {0x5F, 0xE4}, /* 0x74-0x77 */ + {0x5F, 0xF8}, {0x5F, 0xF1}, {0x5F, 0xDD}, {0x60, 0xB3}, /* 0x78-0x7B */ + {0x5F, 0xFF}, {0x60, 0x21}, {0x60, 0x60}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x60, 0x19}, {0x60, 0x10}, {0x60, 0x29}, {0x60, 0x0E}, /* 0x80-0x83 */ + {0x60, 0x31}, {0x60, 0x1B}, {0x60, 0x15}, {0x60, 0x2B}, /* 0x84-0x87 */ + {0x60, 0x26}, {0x60, 0x0F}, {0x60, 0x3A}, {0x60, 0x5A}, /* 0x88-0x8B */ + {0x60, 0x41}, {0x60, 0x6A}, {0x60, 0x77}, {0x60, 0x5F}, /* 0x8C-0x8F */ + {0x60, 0x4A}, {0x60, 0x46}, {0x60, 0x4D}, {0x60, 0x63}, /* 0x90-0x93 */ + {0x60, 0x43}, {0x60, 0x64}, {0x60, 0x42}, {0x60, 0x6C}, /* 0x94-0x97 */ + {0x60, 0x6B}, {0x60, 0x59}, {0x60, 0x81}, {0x60, 0x8D}, /* 0x98-0x9B */ + {0x60, 0xE7}, {0x60, 0x83}, {0x60, 0x9A}, {0x60, 0x84}, /* 0x9C-0x9F */ + {0x60, 0x9B}, {0x60, 0x96}, {0x60, 0x97}, {0x60, 0x92}, /* 0xA0-0xA3 */ + {0x60, 0xA7}, {0x60, 0x8B}, {0x60, 0xE1}, {0x60, 0xB8}, /* 0xA4-0xA7 */ + {0x60, 0xE0}, {0x60, 0xD3}, {0x60, 0xB4}, {0x5F, 0xF0}, /* 0xA8-0xAB */ + {0x60, 0xBD}, {0x60, 0xC6}, {0x60, 0xB5}, {0x60, 0xD8}, /* 0xAC-0xAF */ + {0x61, 0x4D}, {0x61, 0x15}, {0x61, 0x06}, {0x60, 0xF6}, /* 0xB0-0xB3 */ + {0x60, 0xF7}, {0x61, 0x00}, {0x60, 0xF4}, {0x60, 0xFA}, /* 0xB4-0xB7 */ + {0x61, 0x03}, {0x61, 0x21}, {0x60, 0xFB}, {0x60, 0xF1}, /* 0xB8-0xBB */ + {0x61, 0x0D}, {0x61, 0x0E}, {0x61, 0x47}, {0x61, 0x3E}, /* 0xBC-0xBF */ + {0x61, 0x28}, {0x61, 0x27}, {0x61, 0x4A}, {0x61, 0x3F}, /* 0xC0-0xC3 */ + {0x61, 0x3C}, {0x61, 0x2C}, {0x61, 0x34}, {0x61, 0x3D}, /* 0xC4-0xC7 */ + {0x61, 0x42}, {0x61, 0x44}, {0x61, 0x73}, {0x61, 0x77}, /* 0xC8-0xCB */ + {0x61, 0x58}, {0x61, 0x59}, {0x61, 0x5A}, {0x61, 0x6B}, /* 0xCC-0xCF */ + {0x61, 0x74}, {0x61, 0x6F}, {0x61, 0x65}, {0x61, 0x71}, /* 0xD0-0xD3 */ + {0x61, 0x5F}, {0x61, 0x5D}, {0x61, 0x53}, {0x61, 0x75}, /* 0xD4-0xD7 */ + {0x61, 0x99}, {0x61, 0x96}, {0x61, 0x87}, {0x61, 0xAC}, /* 0xD8-0xDB */ + {0x61, 0x94}, {0x61, 0x9A}, {0x61, 0x8A}, {0x61, 0x91}, /* 0xDC-0xDF */ + {0x61, 0xAB}, {0x61, 0xAE}, {0x61, 0xCC}, {0x61, 0xCA}, /* 0xE0-0xE3 */ + {0x61, 0xC9}, {0x61, 0xF7}, {0x61, 0xC8}, {0x61, 0xC3}, /* 0xE4-0xE7 */ + {0x61, 0xC6}, {0x61, 0xBA}, {0x61, 0xCB}, {0x7F, 0x79}, /* 0xE8-0xEB */ + {0x61, 0xCD}, {0x61, 0xE6}, {0x61, 0xE3}, {0x61, 0xF6}, /* 0xEC-0xEF */ + {0x61, 0xFA}, {0x61, 0xF4}, {0x61, 0xFF}, {0x61, 0xFD}, /* 0xF0-0xF3 */ + {0x61, 0xFC}, {0x61, 0xFE}, {0x62, 0x00}, {0x62, 0x08}, /* 0xF4-0xF7 */ + {0x62, 0x09}, {0x62, 0x0D}, {0x62, 0x0C}, {0x62, 0x14}, /* 0xF8-0xFB */ + {0x62, 0x1B}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9D[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x62, 0x1E}, {0x62, 0x21}, {0x62, 0x2A}, {0x62, 0x2E}, /* 0x40-0x43 */ + {0x62, 0x30}, {0x62, 0x32}, {0x62, 0x33}, {0x62, 0x41}, /* 0x44-0x47 */ + {0x62, 0x4E}, {0x62, 0x5E}, {0x62, 0x63}, {0x62, 0x5B}, /* 0x48-0x4B */ + {0x62, 0x60}, {0x62, 0x68}, {0x62, 0x7C}, {0x62, 0x82}, /* 0x4C-0x4F */ + {0x62, 0x89}, {0x62, 0x7E}, {0x62, 0x92}, {0x62, 0x93}, /* 0x50-0x53 */ + {0x62, 0x96}, {0x62, 0xD4}, {0x62, 0x83}, {0x62, 0x94}, /* 0x54-0x57 */ + {0x62, 0xD7}, {0x62, 0xD1}, {0x62, 0xBB}, {0x62, 0xCF}, /* 0x58-0x5B */ + {0x62, 0xFF}, {0x62, 0xC6}, {0x64, 0xD4}, {0x62, 0xC8}, /* 0x5C-0x5F */ + {0x62, 0xDC}, {0x62, 0xCC}, {0x62, 0xCA}, {0x62, 0xC2}, /* 0x60-0x63 */ + {0x62, 0xC7}, {0x62, 0x9B}, {0x62, 0xC9}, {0x63, 0x0C}, /* 0x64-0x67 */ + {0x62, 0xEE}, {0x62, 0xF1}, {0x63, 0x27}, {0x63, 0x02}, /* 0x68-0x6B */ + {0x63, 0x08}, {0x62, 0xEF}, {0x62, 0xF5}, {0x63, 0x50}, /* 0x6C-0x6F */ + {0x63, 0x3E}, {0x63, 0x4D}, {0x64, 0x1C}, {0x63, 0x4F}, /* 0x70-0x73 */ + {0x63, 0x96}, {0x63, 0x8E}, {0x63, 0x80}, {0x63, 0xAB}, /* 0x74-0x77 */ + {0x63, 0x76}, {0x63, 0xA3}, {0x63, 0x8F}, {0x63, 0x89}, /* 0x78-0x7B */ + {0x63, 0x9F}, {0x63, 0xB5}, {0x63, 0x6B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x63, 0x69}, {0x63, 0xBE}, {0x63, 0xE9}, {0x63, 0xC0}, /* 0x80-0x83 */ + {0x63, 0xC6}, {0x63, 0xE3}, {0x63, 0xC9}, {0x63, 0xD2}, /* 0x84-0x87 */ + {0x63, 0xF6}, {0x63, 0xC4}, {0x64, 0x16}, {0x64, 0x34}, /* 0x88-0x8B */ + {0x64, 0x06}, {0x64, 0x13}, {0x64, 0x26}, {0x64, 0x36}, /* 0x8C-0x8F */ + {0x65, 0x1D}, {0x64, 0x17}, {0x64, 0x28}, {0x64, 0x0F}, /* 0x90-0x93 */ + {0x64, 0x67}, {0x64, 0x6F}, {0x64, 0x76}, {0x64, 0x4E}, /* 0x94-0x97 */ + {0x65, 0x2A}, {0x64, 0x95}, {0x64, 0x93}, {0x64, 0xA5}, /* 0x98-0x9B */ + {0x64, 0xA9}, {0x64, 0x88}, {0x64, 0xBC}, {0x64, 0xDA}, /* 0x9C-0x9F */ + {0x64, 0xD2}, {0x64, 0xC5}, {0x64, 0xC7}, {0x64, 0xBB}, /* 0xA0-0xA3 */ + {0x64, 0xD8}, {0x64, 0xC2}, {0x64, 0xF1}, {0x64, 0xE7}, /* 0xA4-0xA7 */ + {0x82, 0x09}, {0x64, 0xE0}, {0x64, 0xE1}, {0x62, 0xAC}, /* 0xA8-0xAB */ + {0x64, 0xE3}, {0x64, 0xEF}, {0x65, 0x2C}, {0x64, 0xF6}, /* 0xAC-0xAF */ + {0x64, 0xF4}, {0x64, 0xF2}, {0x64, 0xFA}, {0x65, 0x00}, /* 0xB0-0xB3 */ + {0x64, 0xFD}, {0x65, 0x18}, {0x65, 0x1C}, {0x65, 0x05}, /* 0xB4-0xB7 */ + {0x65, 0x24}, {0x65, 0x23}, {0x65, 0x2B}, {0x65, 0x34}, /* 0xB8-0xBB */ + {0x65, 0x35}, {0x65, 0x37}, {0x65, 0x36}, {0x65, 0x38}, /* 0xBC-0xBF */ + {0x75, 0x4B}, {0x65, 0x48}, {0x65, 0x56}, {0x65, 0x55}, /* 0xC0-0xC3 */ + {0x65, 0x4D}, {0x65, 0x58}, {0x65, 0x5E}, {0x65, 0x5D}, /* 0xC4-0xC7 */ + {0x65, 0x72}, {0x65, 0x78}, {0x65, 0x82}, {0x65, 0x83}, /* 0xC8-0xCB */ + {0x8B, 0x8A}, {0x65, 0x9B}, {0x65, 0x9F}, {0x65, 0xAB}, /* 0xCC-0xCF */ + {0x65, 0xB7}, {0x65, 0xC3}, {0x65, 0xC6}, {0x65, 0xC1}, /* 0xD0-0xD3 */ + {0x65, 0xC4}, {0x65, 0xCC}, {0x65, 0xD2}, {0x65, 0xDB}, /* 0xD4-0xD7 */ + {0x65, 0xD9}, {0x65, 0xE0}, {0x65, 0xE1}, {0x65, 0xF1}, /* 0xD8-0xDB */ + {0x67, 0x72}, {0x66, 0x0A}, {0x66, 0x03}, {0x65, 0xFB}, /* 0xDC-0xDF */ + {0x67, 0x73}, {0x66, 0x35}, {0x66, 0x36}, {0x66, 0x34}, /* 0xE0-0xE3 */ + {0x66, 0x1C}, {0x66, 0x4F}, {0x66, 0x44}, {0x66, 0x49}, /* 0xE4-0xE7 */ + {0x66, 0x41}, {0x66, 0x5E}, {0x66, 0x5D}, {0x66, 0x64}, /* 0xE8-0xEB */ + {0x66, 0x67}, {0x66, 0x68}, {0x66, 0x5F}, {0x66, 0x62}, /* 0xEC-0xEF */ + {0x66, 0x70}, {0x66, 0x83}, {0x66, 0x88}, {0x66, 0x8E}, /* 0xF0-0xF3 */ + {0x66, 0x89}, {0x66, 0x84}, {0x66, 0x98}, {0x66, 0x9D}, /* 0xF4-0xF7 */ + {0x66, 0xC1}, {0x66, 0xB9}, {0x66, 0xC9}, {0x66, 0xBE}, /* 0xF8-0xFB */ + {0x66, 0xBC}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9E[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x66, 0xC4}, {0x66, 0xB8}, {0x66, 0xD6}, {0x66, 0xDA}, /* 0x40-0x43 */ + {0x66, 0xE0}, {0x66, 0x3F}, {0x66, 0xE6}, {0x66, 0xE9}, /* 0x44-0x47 */ + {0x66, 0xF0}, {0x66, 0xF5}, {0x66, 0xF7}, {0x67, 0x0F}, /* 0x48-0x4B */ + {0x67, 0x16}, {0x67, 0x1E}, {0x67, 0x26}, {0x67, 0x27}, /* 0x4C-0x4F */ + {0x97, 0x38}, {0x67, 0x2E}, {0x67, 0x3F}, {0x67, 0x36}, /* 0x50-0x53 */ + {0x67, 0x41}, {0x67, 0x38}, {0x67, 0x37}, {0x67, 0x46}, /* 0x54-0x57 */ + {0x67, 0x5E}, {0x67, 0x60}, {0x67, 0x59}, {0x67, 0x63}, /* 0x58-0x5B */ + {0x67, 0x64}, {0x67, 0x89}, {0x67, 0x70}, {0x67, 0xA9}, /* 0x5C-0x5F */ + {0x67, 0x7C}, {0x67, 0x6A}, {0x67, 0x8C}, {0x67, 0x8B}, /* 0x60-0x63 */ + {0x67, 0xA6}, {0x67, 0xA1}, {0x67, 0x85}, {0x67, 0xB7}, /* 0x64-0x67 */ + {0x67, 0xEF}, {0x67, 0xB4}, {0x67, 0xEC}, {0x67, 0xB3}, /* 0x68-0x6B */ + {0x67, 0xE9}, {0x67, 0xB8}, {0x67, 0xE4}, {0x67, 0xDE}, /* 0x6C-0x6F */ + {0x67, 0xDD}, {0x67, 0xE2}, {0x67, 0xEE}, {0x67, 0xB9}, /* 0x70-0x73 */ + {0x67, 0xCE}, {0x67, 0xC6}, {0x67, 0xE7}, {0x6A, 0x9C}, /* 0x74-0x77 */ + {0x68, 0x1E}, {0x68, 0x46}, {0x68, 0x29}, {0x68, 0x40}, /* 0x78-0x7B */ + {0x68, 0x4D}, {0x68, 0x32}, {0x68, 0x4E}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x68, 0xB3}, {0x68, 0x2B}, {0x68, 0x59}, {0x68, 0x63}, /* 0x80-0x83 */ + {0x68, 0x77}, {0x68, 0x7F}, {0x68, 0x9F}, {0x68, 0x8F}, /* 0x84-0x87 */ + {0x68, 0xAD}, {0x68, 0x94}, {0x68, 0x9D}, {0x68, 0x9B}, /* 0x88-0x8B */ + {0x68, 0x83}, {0x6A, 0xAE}, {0x68, 0xB9}, {0x68, 0x74}, /* 0x8C-0x8F */ + {0x68, 0xB5}, {0x68, 0xA0}, {0x68, 0xBA}, {0x69, 0x0F}, /* 0x90-0x93 */ + {0x68, 0x8D}, {0x68, 0x7E}, {0x69, 0x01}, {0x68, 0xCA}, /* 0x94-0x97 */ + {0x69, 0x08}, {0x68, 0xD8}, {0x69, 0x22}, {0x69, 0x26}, /* 0x98-0x9B */ + {0x68, 0xE1}, {0x69, 0x0C}, {0x68, 0xCD}, {0x68, 0xD4}, /* 0x9C-0x9F */ + {0x68, 0xE7}, {0x68, 0xD5}, {0x69, 0x36}, {0x69, 0x12}, /* 0xA0-0xA3 */ + {0x69, 0x04}, {0x68, 0xD7}, {0x68, 0xE3}, {0x69, 0x25}, /* 0xA4-0xA7 */ + {0x68, 0xF9}, {0x68, 0xE0}, {0x68, 0xEF}, {0x69, 0x28}, /* 0xA8-0xAB */ + {0x69, 0x2A}, {0x69, 0x1A}, {0x69, 0x23}, {0x69, 0x21}, /* 0xAC-0xAF */ + {0x68, 0xC6}, {0x69, 0x79}, {0x69, 0x77}, {0x69, 0x5C}, /* 0xB0-0xB3 */ + {0x69, 0x78}, {0x69, 0x6B}, {0x69, 0x54}, {0x69, 0x7E}, /* 0xB4-0xB7 */ + {0x69, 0x6E}, {0x69, 0x39}, {0x69, 0x74}, {0x69, 0x3D}, /* 0xB8-0xBB */ + {0x69, 0x59}, {0x69, 0x30}, {0x69, 0x61}, {0x69, 0x5E}, /* 0xBC-0xBF */ + {0x69, 0x5D}, {0x69, 0x81}, {0x69, 0x6A}, {0x69, 0xB2}, /* 0xC0-0xC3 */ + {0x69, 0xAE}, {0x69, 0xD0}, {0x69, 0xBF}, {0x69, 0xC1}, /* 0xC4-0xC7 */ + {0x69, 0xD3}, {0x69, 0xBE}, {0x69, 0xCE}, {0x5B, 0xE8}, /* 0xC8-0xCB */ + {0x69, 0xCA}, {0x69, 0xDD}, {0x69, 0xBB}, {0x69, 0xC3}, /* 0xCC-0xCF */ + {0x69, 0xA7}, {0x6A, 0x2E}, {0x69, 0x91}, {0x69, 0xA0}, /* 0xD0-0xD3 */ + {0x69, 0x9C}, {0x69, 0x95}, {0x69, 0xB4}, {0x69, 0xDE}, /* 0xD4-0xD7 */ + {0x69, 0xE8}, {0x6A, 0x02}, {0x6A, 0x1B}, {0x69, 0xFF}, /* 0xD8-0xDB */ + {0x6B, 0x0A}, {0x69, 0xF9}, {0x69, 0xF2}, {0x69, 0xE7}, /* 0xDC-0xDF */ + {0x6A, 0x05}, {0x69, 0xB1}, {0x6A, 0x1E}, {0x69, 0xED}, /* 0xE0-0xE3 */ + {0x6A, 0x14}, {0x69, 0xEB}, {0x6A, 0x0A}, {0x6A, 0x12}, /* 0xE4-0xE7 */ + {0x6A, 0xC1}, {0x6A, 0x23}, {0x6A, 0x13}, {0x6A, 0x44}, /* 0xE8-0xEB */ + {0x6A, 0x0C}, {0x6A, 0x72}, {0x6A, 0x36}, {0x6A, 0x78}, /* 0xEC-0xEF */ + {0x6A, 0x47}, {0x6A, 0x62}, {0x6A, 0x59}, {0x6A, 0x66}, /* 0xF0-0xF3 */ + {0x6A, 0x48}, {0x6A, 0x38}, {0x6A, 0x22}, {0x6A, 0x90}, /* 0xF4-0xF7 */ + {0x6A, 0x8D}, {0x6A, 0xA0}, {0x6A, 0x84}, {0x6A, 0xA2}, /* 0xF8-0xFB */ + {0x6A, 0xA3}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9F[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6A, 0x97}, {0x86, 0x17}, {0x6A, 0xBB}, {0x6A, 0xC3}, /* 0x40-0x43 */ + {0x6A, 0xC2}, {0x6A, 0xB8}, {0x6A, 0xB3}, {0x6A, 0xAC}, /* 0x44-0x47 */ + {0x6A, 0xDE}, {0x6A, 0xD1}, {0x6A, 0xDF}, {0x6A, 0xAA}, /* 0x48-0x4B */ + {0x6A, 0xDA}, {0x6A, 0xEA}, {0x6A, 0xFB}, {0x6B, 0x05}, /* 0x4C-0x4F */ + {0x86, 0x16}, {0x6A, 0xFA}, {0x6B, 0x12}, {0x6B, 0x16}, /* 0x50-0x53 */ + {0x9B, 0x31}, {0x6B, 0x1F}, {0x6B, 0x38}, {0x6B, 0x37}, /* 0x54-0x57 */ + {0x76, 0xDC}, {0x6B, 0x39}, {0x98, 0xEE}, {0x6B, 0x47}, /* 0x58-0x5B */ + {0x6B, 0x43}, {0x6B, 0x49}, {0x6B, 0x50}, {0x6B, 0x59}, /* 0x5C-0x5F */ + {0x6B, 0x54}, {0x6B, 0x5B}, {0x6B, 0x5F}, {0x6B, 0x61}, /* 0x60-0x63 */ + {0x6B, 0x78}, {0x6B, 0x79}, {0x6B, 0x7F}, {0x6B, 0x80}, /* 0x64-0x67 */ + {0x6B, 0x84}, {0x6B, 0x83}, {0x6B, 0x8D}, {0x6B, 0x98}, /* 0x68-0x6B */ + {0x6B, 0x95}, {0x6B, 0x9E}, {0x6B, 0xA4}, {0x6B, 0xAA}, /* 0x6C-0x6F */ + {0x6B, 0xAB}, {0x6B, 0xAF}, {0x6B, 0xB2}, {0x6B, 0xB1}, /* 0x70-0x73 */ + {0x6B, 0xB3}, {0x6B, 0xB7}, {0x6B, 0xBC}, {0x6B, 0xC6}, /* 0x74-0x77 */ + {0x6B, 0xCB}, {0x6B, 0xD3}, {0x6B, 0xDF}, {0x6B, 0xEC}, /* 0x78-0x7B */ + {0x6B, 0xEB}, {0x6B, 0xF3}, {0x6B, 0xEF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9E, 0xBE}, {0x6C, 0x08}, {0x6C, 0x13}, {0x6C, 0x14}, /* 0x80-0x83 */ + {0x6C, 0x1B}, {0x6C, 0x24}, {0x6C, 0x23}, {0x6C, 0x5E}, /* 0x84-0x87 */ + {0x6C, 0x55}, {0x6C, 0x62}, {0x6C, 0x6A}, {0x6C, 0x82}, /* 0x88-0x8B */ + {0x6C, 0x8D}, {0x6C, 0x9A}, {0x6C, 0x81}, {0x6C, 0x9B}, /* 0x8C-0x8F */ + {0x6C, 0x7E}, {0x6C, 0x68}, {0x6C, 0x73}, {0x6C, 0x92}, /* 0x90-0x93 */ + {0x6C, 0x90}, {0x6C, 0xC4}, {0x6C, 0xF1}, {0x6C, 0xD3}, /* 0x94-0x97 */ + {0x6C, 0xBD}, {0x6C, 0xD7}, {0x6C, 0xC5}, {0x6C, 0xDD}, /* 0x98-0x9B */ + {0x6C, 0xAE}, {0x6C, 0xB1}, {0x6C, 0xBE}, {0x6C, 0xBA}, /* 0x9C-0x9F */ + {0x6C, 0xDB}, {0x6C, 0xEF}, {0x6C, 0xD9}, {0x6C, 0xEA}, /* 0xA0-0xA3 */ + {0x6D, 0x1F}, {0x88, 0x4D}, {0x6D, 0x36}, {0x6D, 0x2B}, /* 0xA4-0xA7 */ + {0x6D, 0x3D}, {0x6D, 0x38}, {0x6D, 0x19}, {0x6D, 0x35}, /* 0xA8-0xAB */ + {0x6D, 0x33}, {0x6D, 0x12}, {0x6D, 0x0C}, {0x6D, 0x63}, /* 0xAC-0xAF */ + {0x6D, 0x93}, {0x6D, 0x64}, {0x6D, 0x5A}, {0x6D, 0x79}, /* 0xB0-0xB3 */ + {0x6D, 0x59}, {0x6D, 0x8E}, {0x6D, 0x95}, {0x6F, 0xE4}, /* 0xB4-0xB7 */ + {0x6D, 0x85}, {0x6D, 0xF9}, {0x6E, 0x15}, {0x6E, 0x0A}, /* 0xB8-0xBB */ + {0x6D, 0xB5}, {0x6D, 0xC7}, {0x6D, 0xE6}, {0x6D, 0xB8}, /* 0xBC-0xBF */ + {0x6D, 0xC6}, {0x6D, 0xEC}, {0x6D, 0xDE}, {0x6D, 0xCC}, /* 0xC0-0xC3 */ + {0x6D, 0xE8}, {0x6D, 0xD2}, {0x6D, 0xC5}, {0x6D, 0xFA}, /* 0xC4-0xC7 */ + {0x6D, 0xD9}, {0x6D, 0xE4}, {0x6D, 0xD5}, {0x6D, 0xEA}, /* 0xC8-0xCB */ + {0x6D, 0xEE}, {0x6E, 0x2D}, {0x6E, 0x6E}, {0x6E, 0x2E}, /* 0xCC-0xCF */ + {0x6E, 0x19}, {0x6E, 0x72}, {0x6E, 0x5F}, {0x6E, 0x3E}, /* 0xD0-0xD3 */ + {0x6E, 0x23}, {0x6E, 0x6B}, {0x6E, 0x2B}, {0x6E, 0x76}, /* 0xD4-0xD7 */ + {0x6E, 0x4D}, {0x6E, 0x1F}, {0x6E, 0x43}, {0x6E, 0x3A}, /* 0xD8-0xDB */ + {0x6E, 0x4E}, {0x6E, 0x24}, {0x6E, 0xFF}, {0x6E, 0x1D}, /* 0xDC-0xDF */ + {0x6E, 0x38}, {0x6E, 0x82}, {0x6E, 0xAA}, {0x6E, 0x98}, /* 0xE0-0xE3 */ + {0x6E, 0xC9}, {0x6E, 0xB7}, {0x6E, 0xD3}, {0x6E, 0xBD}, /* 0xE4-0xE7 */ + {0x6E, 0xAF}, {0x6E, 0xC4}, {0x6E, 0xB2}, {0x6E, 0xD4}, /* 0xE8-0xEB */ + {0x6E, 0xD5}, {0x6E, 0x8F}, {0x6E, 0xA5}, {0x6E, 0xC2}, /* 0xEC-0xEF */ + {0x6E, 0x9F}, {0x6F, 0x41}, {0x6F, 0x11}, {0x70, 0x4C}, /* 0xF0-0xF3 */ + {0x6E, 0xEC}, {0x6E, 0xF8}, {0x6E, 0xFE}, {0x6F, 0x3F}, /* 0xF4-0xF7 */ + {0x6E, 0xF2}, {0x6F, 0x31}, {0x6E, 0xEF}, {0x6F, 0x32}, /* 0xF8-0xFB */ + {0x6E, 0xCC}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6F, 0x3E}, {0x6F, 0x13}, {0x6E, 0xF7}, {0x6F, 0x86}, /* 0x40-0x43 */ + {0x6F, 0x7A}, {0x6F, 0x78}, {0x6F, 0x81}, {0x6F, 0x80}, /* 0x44-0x47 */ + {0x6F, 0x6F}, {0x6F, 0x5B}, {0x6F, 0xF3}, {0x6F, 0x6D}, /* 0x48-0x4B */ + {0x6F, 0x82}, {0x6F, 0x7C}, {0x6F, 0x58}, {0x6F, 0x8E}, /* 0x4C-0x4F */ + {0x6F, 0x91}, {0x6F, 0xC2}, {0x6F, 0x66}, {0x6F, 0xB3}, /* 0x50-0x53 */ + {0x6F, 0xA3}, {0x6F, 0xA1}, {0x6F, 0xA4}, {0x6F, 0xB9}, /* 0x54-0x57 */ + {0x6F, 0xC6}, {0x6F, 0xAA}, {0x6F, 0xDF}, {0x6F, 0xD5}, /* 0x58-0x5B */ + {0x6F, 0xEC}, {0x6F, 0xD4}, {0x6F, 0xD8}, {0x6F, 0xF1}, /* 0x5C-0x5F */ + {0x6F, 0xEE}, {0x6F, 0xDB}, {0x70, 0x09}, {0x70, 0x0B}, /* 0x60-0x63 */ + {0x6F, 0xFA}, {0x70, 0x11}, {0x70, 0x01}, {0x70, 0x0F}, /* 0x64-0x67 */ + {0x6F, 0xFE}, {0x70, 0x1B}, {0x70, 0x1A}, {0x6F, 0x74}, /* 0x68-0x6B */ + {0x70, 0x1D}, {0x70, 0x18}, {0x70, 0x1F}, {0x70, 0x30}, /* 0x6C-0x6F */ + {0x70, 0x3E}, {0x70, 0x32}, {0x70, 0x51}, {0x70, 0x63}, /* 0x70-0x73 */ + {0x70, 0x99}, {0x70, 0x92}, {0x70, 0xAF}, {0x70, 0xF1}, /* 0x74-0x77 */ + {0x70, 0xAC}, {0x70, 0xB8}, {0x70, 0xB3}, {0x70, 0xAE}, /* 0x78-0x7B */ + {0x70, 0xDF}, {0x70, 0xCB}, {0x70, 0xDD}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x70, 0xD9}, {0x71, 0x09}, {0x70, 0xFD}, {0x71, 0x1C}, /* 0x80-0x83 */ + {0x71, 0x19}, {0x71, 0x65}, {0x71, 0x55}, {0x71, 0x88}, /* 0x84-0x87 */ + {0x71, 0x66}, {0x71, 0x62}, {0x71, 0x4C}, {0x71, 0x56}, /* 0x88-0x8B */ + {0x71, 0x6C}, {0x71, 0x8F}, {0x71, 0xFB}, {0x71, 0x84}, /* 0x8C-0x8F */ + {0x71, 0x95}, {0x71, 0xA8}, {0x71, 0xAC}, {0x71, 0xD7}, /* 0x90-0x93 */ + {0x71, 0xB9}, {0x71, 0xBE}, {0x71, 0xD2}, {0x71, 0xC9}, /* 0x94-0x97 */ + {0x71, 0xD4}, {0x71, 0xCE}, {0x71, 0xE0}, {0x71, 0xEC}, /* 0x98-0x9B */ + {0x71, 0xE7}, {0x71, 0xF5}, {0x71, 0xFC}, {0x71, 0xF9}, /* 0x9C-0x9F */ + {0x71, 0xFF}, {0x72, 0x0D}, {0x72, 0x10}, {0x72, 0x1B}, /* 0xA0-0xA3 */ + {0x72, 0x28}, {0x72, 0x2D}, {0x72, 0x2C}, {0x72, 0x30}, /* 0xA4-0xA7 */ + {0x72, 0x32}, {0x72, 0x3B}, {0x72, 0x3C}, {0x72, 0x3F}, /* 0xA8-0xAB */ + {0x72, 0x40}, {0x72, 0x46}, {0x72, 0x4B}, {0x72, 0x58}, /* 0xAC-0xAF */ + {0x72, 0x74}, {0x72, 0x7E}, {0x72, 0x82}, {0x72, 0x81}, /* 0xB0-0xB3 */ + {0x72, 0x87}, {0x72, 0x92}, {0x72, 0x96}, {0x72, 0xA2}, /* 0xB4-0xB7 */ + {0x72, 0xA7}, {0x72, 0xB9}, {0x72, 0xB2}, {0x72, 0xC3}, /* 0xB8-0xBB */ + {0x72, 0xC6}, {0x72, 0xC4}, {0x72, 0xCE}, {0x72, 0xD2}, /* 0xBC-0xBF */ + {0x72, 0xE2}, {0x72, 0xE0}, {0x72, 0xE1}, {0x72, 0xF9}, /* 0xC0-0xC3 */ + {0x72, 0xF7}, {0x50, 0x0F}, {0x73, 0x17}, {0x73, 0x0A}, /* 0xC4-0xC7 */ + {0x73, 0x1C}, {0x73, 0x16}, {0x73, 0x1D}, {0x73, 0x34}, /* 0xC8-0xCB */ + {0x73, 0x2F}, {0x73, 0x29}, {0x73, 0x25}, {0x73, 0x3E}, /* 0xCC-0xCF */ + {0x73, 0x4E}, {0x73, 0x4F}, {0x9E, 0xD8}, {0x73, 0x57}, /* 0xD0-0xD3 */ + {0x73, 0x6A}, {0x73, 0x68}, {0x73, 0x70}, {0x73, 0x78}, /* 0xD4-0xD7 */ + {0x73, 0x75}, {0x73, 0x7B}, {0x73, 0x7A}, {0x73, 0xC8}, /* 0xD8-0xDB */ + {0x73, 0xB3}, {0x73, 0xCE}, {0x73, 0xBB}, {0x73, 0xC0}, /* 0xDC-0xDF */ + {0x73, 0xE5}, {0x73, 0xEE}, {0x73, 0xDE}, {0x74, 0xA2}, /* 0xE0-0xE3 */ + {0x74, 0x05}, {0x74, 0x6F}, {0x74, 0x25}, {0x73, 0xF8}, /* 0xE4-0xE7 */ + {0x74, 0x32}, {0x74, 0x3A}, {0x74, 0x55}, {0x74, 0x3F}, /* 0xE8-0xEB */ + {0x74, 0x5F}, {0x74, 0x59}, {0x74, 0x41}, {0x74, 0x5C}, /* 0xEC-0xEF */ + {0x74, 0x69}, {0x74, 0x70}, {0x74, 0x63}, {0x74, 0x6A}, /* 0xF0-0xF3 */ + {0x74, 0x76}, {0x74, 0x7E}, {0x74, 0x8B}, {0x74, 0x9E}, /* 0xF4-0xF7 */ + {0x74, 0xA7}, {0x74, 0xCA}, {0x74, 0xCF}, {0x74, 0xD4}, /* 0xF8-0xFB */ + {0x73, 0xF1}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x74, 0xE0}, {0x74, 0xE3}, {0x74, 0xE7}, {0x74, 0xE9}, /* 0x40-0x43 */ + {0x74, 0xEE}, {0x74, 0xF2}, {0x74, 0xF0}, {0x74, 0xF1}, /* 0x44-0x47 */ + {0x74, 0xF8}, {0x74, 0xF7}, {0x75, 0x04}, {0x75, 0x03}, /* 0x48-0x4B */ + {0x75, 0x05}, {0x75, 0x0C}, {0x75, 0x0E}, {0x75, 0x0D}, /* 0x4C-0x4F */ + {0x75, 0x15}, {0x75, 0x13}, {0x75, 0x1E}, {0x75, 0x26}, /* 0x50-0x53 */ + {0x75, 0x2C}, {0x75, 0x3C}, {0x75, 0x44}, {0x75, 0x4D}, /* 0x54-0x57 */ + {0x75, 0x4A}, {0x75, 0x49}, {0x75, 0x5B}, {0x75, 0x46}, /* 0x58-0x5B */ + {0x75, 0x5A}, {0x75, 0x69}, {0x75, 0x64}, {0x75, 0x67}, /* 0x5C-0x5F */ + {0x75, 0x6B}, {0x75, 0x6D}, {0x75, 0x78}, {0x75, 0x76}, /* 0x60-0x63 */ + {0x75, 0x86}, {0x75, 0x87}, {0x75, 0x74}, {0x75, 0x8A}, /* 0x64-0x67 */ + {0x75, 0x89}, {0x75, 0x82}, {0x75, 0x94}, {0x75, 0x9A}, /* 0x68-0x6B */ + {0x75, 0x9D}, {0x75, 0xA5}, {0x75, 0xA3}, {0x75, 0xC2}, /* 0x6C-0x6F */ + {0x75, 0xB3}, {0x75, 0xC3}, {0x75, 0xB5}, {0x75, 0xBD}, /* 0x70-0x73 */ + {0x75, 0xB8}, {0x75, 0xBC}, {0x75, 0xB1}, {0x75, 0xCD}, /* 0x74-0x77 */ + {0x75, 0xCA}, {0x75, 0xD2}, {0x75, 0xD9}, {0x75, 0xE3}, /* 0x78-0x7B */ + {0x75, 0xDE}, {0x75, 0xFE}, {0x75, 0xFF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x75, 0xFC}, {0x76, 0x01}, {0x75, 0xF0}, {0x75, 0xFA}, /* 0x80-0x83 */ + {0x75, 0xF2}, {0x75, 0xF3}, {0x76, 0x0B}, {0x76, 0x0D}, /* 0x84-0x87 */ + {0x76, 0x09}, {0x76, 0x1F}, {0x76, 0x27}, {0x76, 0x20}, /* 0x88-0x8B */ + {0x76, 0x21}, {0x76, 0x22}, {0x76, 0x24}, {0x76, 0x34}, /* 0x8C-0x8F */ + {0x76, 0x30}, {0x76, 0x3B}, {0x76, 0x47}, {0x76, 0x48}, /* 0x90-0x93 */ + {0x76, 0x46}, {0x76, 0x5C}, {0x76, 0x58}, {0x76, 0x61}, /* 0x94-0x97 */ + {0x76, 0x62}, {0x76, 0x68}, {0x76, 0x69}, {0x76, 0x6A}, /* 0x98-0x9B */ + {0x76, 0x67}, {0x76, 0x6C}, {0x76, 0x70}, {0x76, 0x72}, /* 0x9C-0x9F */ + {0x76, 0x76}, {0x76, 0x78}, {0x76, 0x7C}, {0x76, 0x80}, /* 0xA0-0xA3 */ + {0x76, 0x83}, {0x76, 0x88}, {0x76, 0x8B}, {0x76, 0x8E}, /* 0xA4-0xA7 */ + {0x76, 0x96}, {0x76, 0x93}, {0x76, 0x99}, {0x76, 0x9A}, /* 0xA8-0xAB */ + {0x76, 0xB0}, {0x76, 0xB4}, {0x76, 0xB8}, {0x76, 0xB9}, /* 0xAC-0xAF */ + {0x76, 0xBA}, {0x76, 0xC2}, {0x76, 0xCD}, {0x76, 0xD6}, /* 0xB0-0xB3 */ + {0x76, 0xD2}, {0x76, 0xDE}, {0x76, 0xE1}, {0x76, 0xE5}, /* 0xB4-0xB7 */ + {0x76, 0xE7}, {0x76, 0xEA}, {0x86, 0x2F}, {0x76, 0xFB}, /* 0xB8-0xBB */ + {0x77, 0x08}, {0x77, 0x07}, {0x77, 0x04}, {0x77, 0x29}, /* 0xBC-0xBF */ + {0x77, 0x24}, {0x77, 0x1E}, {0x77, 0x25}, {0x77, 0x26}, /* 0xC0-0xC3 */ + {0x77, 0x1B}, {0x77, 0x37}, {0x77, 0x38}, {0x77, 0x47}, /* 0xC4-0xC7 */ + {0x77, 0x5A}, {0x77, 0x68}, {0x77, 0x6B}, {0x77, 0x5B}, /* 0xC8-0xCB */ + {0x77, 0x65}, {0x77, 0x7F}, {0x77, 0x7E}, {0x77, 0x79}, /* 0xCC-0xCF */ + {0x77, 0x8E}, {0x77, 0x8B}, {0x77, 0x91}, {0x77, 0xA0}, /* 0xD0-0xD3 */ + {0x77, 0x9E}, {0x77, 0xB0}, {0x77, 0xB6}, {0x77, 0xB9}, /* 0xD4-0xD7 */ + {0x77, 0xBF}, {0x77, 0xBC}, {0x77, 0xBD}, {0x77, 0xBB}, /* 0xD8-0xDB */ + {0x77, 0xC7}, {0x77, 0xCD}, {0x77, 0xD7}, {0x77, 0xDA}, /* 0xDC-0xDF */ + {0x77, 0xDC}, {0x77, 0xE3}, {0x77, 0xEE}, {0x77, 0xFC}, /* 0xE0-0xE3 */ + {0x78, 0x0C}, {0x78, 0x12}, {0x79, 0x26}, {0x78, 0x20}, /* 0xE4-0xE7 */ + {0x79, 0x2A}, {0x78, 0x45}, {0x78, 0x8E}, {0x78, 0x74}, /* 0xE8-0xEB */ + {0x78, 0x86}, {0x78, 0x7C}, {0x78, 0x9A}, {0x78, 0x8C}, /* 0xEC-0xEF */ + {0x78, 0xA3}, {0x78, 0xB5}, {0x78, 0xAA}, {0x78, 0xAF}, /* 0xF0-0xF3 */ + {0x78, 0xD1}, {0x78, 0xC6}, {0x78, 0xCB}, {0x78, 0xD4}, /* 0xF4-0xF7 */ + {0x78, 0xBE}, {0x78, 0xBC}, {0x78, 0xC5}, {0x78, 0xCA}, /* 0xF8-0xFB */ + {0x78, 0xEC}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x78, 0xE7}, {0x78, 0xDA}, {0x78, 0xFD}, {0x78, 0xF4}, /* 0x40-0x43 */ + {0x79, 0x07}, {0x79, 0x12}, {0x79, 0x11}, {0x79, 0x19}, /* 0x44-0x47 */ + {0x79, 0x2C}, {0x79, 0x2B}, {0x79, 0x40}, {0x79, 0x60}, /* 0x48-0x4B */ + {0x79, 0x57}, {0x79, 0x5F}, {0x79, 0x5A}, {0x79, 0x55}, /* 0x4C-0x4F */ + {0x79, 0x53}, {0x79, 0x7A}, {0x79, 0x7F}, {0x79, 0x8A}, /* 0x50-0x53 */ + {0x79, 0x9D}, {0x79, 0xA7}, {0x9F, 0x4B}, {0x79, 0xAA}, /* 0x54-0x57 */ + {0x79, 0xAE}, {0x79, 0xB3}, {0x79, 0xB9}, {0x79, 0xBA}, /* 0x58-0x5B */ + {0x79, 0xC9}, {0x79, 0xD5}, {0x79, 0xE7}, {0x79, 0xEC}, /* 0x5C-0x5F */ + {0x79, 0xE1}, {0x79, 0xE3}, {0x7A, 0x08}, {0x7A, 0x0D}, /* 0x60-0x63 */ + {0x7A, 0x18}, {0x7A, 0x19}, {0x7A, 0x20}, {0x7A, 0x1F}, /* 0x64-0x67 */ + {0x79, 0x80}, {0x7A, 0x31}, {0x7A, 0x3B}, {0x7A, 0x3E}, /* 0x68-0x6B */ + {0x7A, 0x37}, {0x7A, 0x43}, {0x7A, 0x57}, {0x7A, 0x49}, /* 0x6C-0x6F */ + {0x7A, 0x61}, {0x7A, 0x62}, {0x7A, 0x69}, {0x9F, 0x9D}, /* 0x70-0x73 */ + {0x7A, 0x70}, {0x7A, 0x79}, {0x7A, 0x7D}, {0x7A, 0x88}, /* 0x74-0x77 */ + {0x7A, 0x97}, {0x7A, 0x95}, {0x7A, 0x98}, {0x7A, 0x96}, /* 0x78-0x7B */ + {0x7A, 0xA9}, {0x7A, 0xC8}, {0x7A, 0xB0}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7A, 0xB6}, {0x7A, 0xC5}, {0x7A, 0xC4}, {0x7A, 0xBF}, /* 0x80-0x83 */ + {0x90, 0x83}, {0x7A, 0xC7}, {0x7A, 0xCA}, {0x7A, 0xCD}, /* 0x84-0x87 */ + {0x7A, 0xCF}, {0x7A, 0xD5}, {0x7A, 0xD3}, {0x7A, 0xD9}, /* 0x88-0x8B */ + {0x7A, 0xDA}, {0x7A, 0xDD}, {0x7A, 0xE1}, {0x7A, 0xE2}, /* 0x8C-0x8F */ + {0x7A, 0xE6}, {0x7A, 0xED}, {0x7A, 0xF0}, {0x7B, 0x02}, /* 0x90-0x93 */ + {0x7B, 0x0F}, {0x7B, 0x0A}, {0x7B, 0x06}, {0x7B, 0x33}, /* 0x94-0x97 */ + {0x7B, 0x18}, {0x7B, 0x19}, {0x7B, 0x1E}, {0x7B, 0x35}, /* 0x98-0x9B */ + {0x7B, 0x28}, {0x7B, 0x36}, {0x7B, 0x50}, {0x7B, 0x7A}, /* 0x9C-0x9F */ + {0x7B, 0x04}, {0x7B, 0x4D}, {0x7B, 0x0B}, {0x7B, 0x4C}, /* 0xA0-0xA3 */ + {0x7B, 0x45}, {0x7B, 0x75}, {0x7B, 0x65}, {0x7B, 0x74}, /* 0xA4-0xA7 */ + {0x7B, 0x67}, {0x7B, 0x70}, {0x7B, 0x71}, {0x7B, 0x6C}, /* 0xA8-0xAB */ + {0x7B, 0x6E}, {0x7B, 0x9D}, {0x7B, 0x98}, {0x7B, 0x9F}, /* 0xAC-0xAF */ + {0x7B, 0x8D}, {0x7B, 0x9C}, {0x7B, 0x9A}, {0x7B, 0x8B}, /* 0xB0-0xB3 */ + {0x7B, 0x92}, {0x7B, 0x8F}, {0x7B, 0x5D}, {0x7B, 0x99}, /* 0xB4-0xB7 */ + {0x7B, 0xCB}, {0x7B, 0xC1}, {0x7B, 0xCC}, {0x7B, 0xCF}, /* 0xB8-0xBB */ + {0x7B, 0xB4}, {0x7B, 0xC6}, {0x7B, 0xDD}, {0x7B, 0xE9}, /* 0xBC-0xBF */ + {0x7C, 0x11}, {0x7C, 0x14}, {0x7B, 0xE6}, {0x7B, 0xE5}, /* 0xC0-0xC3 */ + {0x7C, 0x60}, {0x7C, 0x00}, {0x7C, 0x07}, {0x7C, 0x13}, /* 0xC4-0xC7 */ + {0x7B, 0xF3}, {0x7B, 0xF7}, {0x7C, 0x17}, {0x7C, 0x0D}, /* 0xC8-0xCB */ + {0x7B, 0xF6}, {0x7C, 0x23}, {0x7C, 0x27}, {0x7C, 0x2A}, /* 0xCC-0xCF */ + {0x7C, 0x1F}, {0x7C, 0x37}, {0x7C, 0x2B}, {0x7C, 0x3D}, /* 0xD0-0xD3 */ + {0x7C, 0x4C}, {0x7C, 0x43}, {0x7C, 0x54}, {0x7C, 0x4F}, /* 0xD4-0xD7 */ + {0x7C, 0x40}, {0x7C, 0x50}, {0x7C, 0x58}, {0x7C, 0x5F}, /* 0xD8-0xDB */ + {0x7C, 0x64}, {0x7C, 0x56}, {0x7C, 0x65}, {0x7C, 0x6C}, /* 0xDC-0xDF */ + {0x7C, 0x75}, {0x7C, 0x83}, {0x7C, 0x90}, {0x7C, 0xA4}, /* 0xE0-0xE3 */ + {0x7C, 0xAD}, {0x7C, 0xA2}, {0x7C, 0xAB}, {0x7C, 0xA1}, /* 0xE4-0xE7 */ + {0x7C, 0xA8}, {0x7C, 0xB3}, {0x7C, 0xB2}, {0x7C, 0xB1}, /* 0xE8-0xEB */ + {0x7C, 0xAE}, {0x7C, 0xB9}, {0x7C, 0xBD}, {0x7C, 0xC0}, /* 0xEC-0xEF */ + {0x7C, 0xC5}, {0x7C, 0xC2}, {0x7C, 0xD8}, {0x7C, 0xD2}, /* 0xF0-0xF3 */ + {0x7C, 0xDC}, {0x7C, 0xE2}, {0x9B, 0x3B}, {0x7C, 0xEF}, /* 0xF4-0xF7 */ + {0x7C, 0xF2}, {0x7C, 0xF4}, {0x7C, 0xF6}, {0x7C, 0xFA}, /* 0xF8-0xFB */ + {0x7D, 0x06}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7D, 0x02}, {0x7D, 0x1C}, {0x7D, 0x15}, {0x7D, 0x0A}, /* 0x40-0x43 */ + {0x7D, 0x45}, {0x7D, 0x4B}, {0x7D, 0x2E}, {0x7D, 0x32}, /* 0x44-0x47 */ + {0x7D, 0x3F}, {0x7D, 0x35}, {0x7D, 0x46}, {0x7D, 0x73}, /* 0x48-0x4B */ + {0x7D, 0x56}, {0x7D, 0x4E}, {0x7D, 0x72}, {0x7D, 0x68}, /* 0x4C-0x4F */ + {0x7D, 0x6E}, {0x7D, 0x4F}, {0x7D, 0x63}, {0x7D, 0x93}, /* 0x50-0x53 */ + {0x7D, 0x89}, {0x7D, 0x5B}, {0x7D, 0x8F}, {0x7D, 0x7D}, /* 0x54-0x57 */ + {0x7D, 0x9B}, {0x7D, 0xBA}, {0x7D, 0xAE}, {0x7D, 0xA3}, /* 0x58-0x5B */ + {0x7D, 0xB5}, {0x7D, 0xC7}, {0x7D, 0xBD}, {0x7D, 0xAB}, /* 0x5C-0x5F */ + {0x7E, 0x3D}, {0x7D, 0xA2}, {0x7D, 0xAF}, {0x7D, 0xDC}, /* 0x60-0x63 */ + {0x7D, 0xB8}, {0x7D, 0x9F}, {0x7D, 0xB0}, {0x7D, 0xD8}, /* 0x64-0x67 */ + {0x7D, 0xDD}, {0x7D, 0xE4}, {0x7D, 0xDE}, {0x7D, 0xFB}, /* 0x68-0x6B */ + {0x7D, 0xF2}, {0x7D, 0xE1}, {0x7E, 0x05}, {0x7E, 0x0A}, /* 0x6C-0x6F */ + {0x7E, 0x23}, {0x7E, 0x21}, {0x7E, 0x12}, {0x7E, 0x31}, /* 0x70-0x73 */ + {0x7E, 0x1F}, {0x7E, 0x09}, {0x7E, 0x0B}, {0x7E, 0x22}, /* 0x74-0x77 */ + {0x7E, 0x46}, {0x7E, 0x66}, {0x7E, 0x3B}, {0x7E, 0x35}, /* 0x78-0x7B */ + {0x7E, 0x39}, {0x7E, 0x43}, {0x7E, 0x37}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7E, 0x32}, {0x7E, 0x3A}, {0x7E, 0x67}, {0x7E, 0x5D}, /* 0x80-0x83 */ + {0x7E, 0x56}, {0x7E, 0x5E}, {0x7E, 0x59}, {0x7E, 0x5A}, /* 0x84-0x87 */ + {0x7E, 0x79}, {0x7E, 0x6A}, {0x7E, 0x69}, {0x7E, 0x7C}, /* 0x88-0x8B */ + {0x7E, 0x7B}, {0x7E, 0x83}, {0x7D, 0xD5}, {0x7E, 0x7D}, /* 0x8C-0x8F */ + {0x8F, 0xAE}, {0x7E, 0x7F}, {0x7E, 0x88}, {0x7E, 0x89}, /* 0x90-0x93 */ + {0x7E, 0x8C}, {0x7E, 0x92}, {0x7E, 0x90}, {0x7E, 0x93}, /* 0x94-0x97 */ + {0x7E, 0x94}, {0x7E, 0x96}, {0x7E, 0x8E}, {0x7E, 0x9B}, /* 0x98-0x9B */ + {0x7E, 0x9C}, {0x7F, 0x38}, {0x7F, 0x3A}, {0x7F, 0x45}, /* 0x9C-0x9F */ + {0x7F, 0x4C}, {0x7F, 0x4D}, {0x7F, 0x4E}, {0x7F, 0x50}, /* 0xA0-0xA3 */ + {0x7F, 0x51}, {0x7F, 0x55}, {0x7F, 0x54}, {0x7F, 0x58}, /* 0xA4-0xA7 */ + {0x7F, 0x5F}, {0x7F, 0x60}, {0x7F, 0x68}, {0x7F, 0x69}, /* 0xA8-0xAB */ + {0x7F, 0x67}, {0x7F, 0x78}, {0x7F, 0x82}, {0x7F, 0x86}, /* 0xAC-0xAF */ + {0x7F, 0x83}, {0x7F, 0x88}, {0x7F, 0x87}, {0x7F, 0x8C}, /* 0xB0-0xB3 */ + {0x7F, 0x94}, {0x7F, 0x9E}, {0x7F, 0x9D}, {0x7F, 0x9A}, /* 0xB4-0xB7 */ + {0x7F, 0xA3}, {0x7F, 0xAF}, {0x7F, 0xB2}, {0x7F, 0xB9}, /* 0xB8-0xBB */ + {0x7F, 0xAE}, {0x7F, 0xB6}, {0x7F, 0xB8}, {0x8B, 0x71}, /* 0xBC-0xBF */ + {0x7F, 0xC5}, {0x7F, 0xC6}, {0x7F, 0xCA}, {0x7F, 0xD5}, /* 0xC0-0xC3 */ + {0x7F, 0xD4}, {0x7F, 0xE1}, {0x7F, 0xE6}, {0x7F, 0xE9}, /* 0xC4-0xC7 */ + {0x7F, 0xF3}, {0x7F, 0xF9}, {0x98, 0xDC}, {0x80, 0x06}, /* 0xC8-0xCB */ + {0x80, 0x04}, {0x80, 0x0B}, {0x80, 0x12}, {0x80, 0x18}, /* 0xCC-0xCF */ + {0x80, 0x19}, {0x80, 0x1C}, {0x80, 0x21}, {0x80, 0x28}, /* 0xD0-0xD3 */ + {0x80, 0x3F}, {0x80, 0x3B}, {0x80, 0x4A}, {0x80, 0x46}, /* 0xD4-0xD7 */ + {0x80, 0x52}, {0x80, 0x58}, {0x80, 0x5A}, {0x80, 0x5F}, /* 0xD8-0xDB */ + {0x80, 0x62}, {0x80, 0x68}, {0x80, 0x73}, {0x80, 0x72}, /* 0xDC-0xDF */ + {0x80, 0x70}, {0x80, 0x76}, {0x80, 0x79}, {0x80, 0x7D}, /* 0xE0-0xE3 */ + {0x80, 0x7F}, {0x80, 0x84}, {0x80, 0x86}, {0x80, 0x85}, /* 0xE4-0xE7 */ + {0x80, 0x9B}, {0x80, 0x93}, {0x80, 0x9A}, {0x80, 0xAD}, /* 0xE8-0xEB */ + {0x51, 0x90}, {0x80, 0xAC}, {0x80, 0xDB}, {0x80, 0xE5}, /* 0xEC-0xEF */ + {0x80, 0xD9}, {0x80, 0xDD}, {0x80, 0xC4}, {0x80, 0xDA}, /* 0xF0-0xF3 */ + {0x80, 0xD6}, {0x81, 0x09}, {0x80, 0xEF}, {0x80, 0xF1}, /* 0xF4-0xF7 */ + {0x81, 0x1B}, {0x81, 0x29}, {0x81, 0x23}, {0x81, 0x2F}, /* 0xF8-0xFB */ + {0x81, 0x4B}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x96, 0x8B}, {0x81, 0x46}, {0x81, 0x3E}, {0x81, 0x53}, /* 0x40-0x43 */ + {0x81, 0x51}, {0x80, 0xFC}, {0x81, 0x71}, {0x81, 0x6E}, /* 0x44-0x47 */ + {0x81, 0x65}, {0x81, 0x66}, {0x81, 0x74}, {0x81, 0x83}, /* 0x48-0x4B */ + {0x81, 0x88}, {0x81, 0x8A}, {0x81, 0x80}, {0x81, 0x82}, /* 0x4C-0x4F */ + {0x81, 0xA0}, {0x81, 0x95}, {0x81, 0xA4}, {0x81, 0xA3}, /* 0x50-0x53 */ + {0x81, 0x5F}, {0x81, 0x93}, {0x81, 0xA9}, {0x81, 0xB0}, /* 0x54-0x57 */ + {0x81, 0xB5}, {0x81, 0xBE}, {0x81, 0xB8}, {0x81, 0xBD}, /* 0x58-0x5B */ + {0x81, 0xC0}, {0x81, 0xC2}, {0x81, 0xBA}, {0x81, 0xC9}, /* 0x5C-0x5F */ + {0x81, 0xCD}, {0x81, 0xD1}, {0x81, 0xD9}, {0x81, 0xD8}, /* 0x60-0x63 */ + {0x81, 0xC8}, {0x81, 0xDA}, {0x81, 0xDF}, {0x81, 0xE0}, /* 0x64-0x67 */ + {0x81, 0xE7}, {0x81, 0xFA}, {0x81, 0xFB}, {0x81, 0xFE}, /* 0x68-0x6B */ + {0x82, 0x01}, {0x82, 0x02}, {0x82, 0x05}, {0x82, 0x07}, /* 0x6C-0x6F */ + {0x82, 0x0A}, {0x82, 0x0D}, {0x82, 0x10}, {0x82, 0x16}, /* 0x70-0x73 */ + {0x82, 0x29}, {0x82, 0x2B}, {0x82, 0x38}, {0x82, 0x33}, /* 0x74-0x77 */ + {0x82, 0x40}, {0x82, 0x59}, {0x82, 0x58}, {0x82, 0x5D}, /* 0x78-0x7B */ + {0x82, 0x5A}, {0x82, 0x5F}, {0x82, 0x64}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x82, 0x62}, {0x82, 0x68}, {0x82, 0x6A}, {0x82, 0x6B}, /* 0x80-0x83 */ + {0x82, 0x2E}, {0x82, 0x71}, {0x82, 0x77}, {0x82, 0x78}, /* 0x84-0x87 */ + {0x82, 0x7E}, {0x82, 0x8D}, {0x82, 0x92}, {0x82, 0xAB}, /* 0x88-0x8B */ + {0x82, 0x9F}, {0x82, 0xBB}, {0x82, 0xAC}, {0x82, 0xE1}, /* 0x8C-0x8F */ + {0x82, 0xE3}, {0x82, 0xDF}, {0x82, 0xD2}, {0x82, 0xF4}, /* 0x90-0x93 */ + {0x82, 0xF3}, {0x82, 0xFA}, {0x83, 0x93}, {0x83, 0x03}, /* 0x94-0x97 */ + {0x82, 0xFB}, {0x82, 0xF9}, {0x82, 0xDE}, {0x83, 0x06}, /* 0x98-0x9B */ + {0x82, 0xDC}, {0x83, 0x09}, {0x82, 0xD9}, {0x83, 0x35}, /* 0x9C-0x9F */ + {0x83, 0x34}, {0x83, 0x16}, {0x83, 0x32}, {0x83, 0x31}, /* 0xA0-0xA3 */ + {0x83, 0x40}, {0x83, 0x39}, {0x83, 0x50}, {0x83, 0x45}, /* 0xA4-0xA7 */ + {0x83, 0x2F}, {0x83, 0x2B}, {0x83, 0x17}, {0x83, 0x18}, /* 0xA8-0xAB */ + {0x83, 0x85}, {0x83, 0x9A}, {0x83, 0xAA}, {0x83, 0x9F}, /* 0xAC-0xAF */ + {0x83, 0xA2}, {0x83, 0x96}, {0x83, 0x23}, {0x83, 0x8E}, /* 0xB0-0xB3 */ + {0x83, 0x87}, {0x83, 0x8A}, {0x83, 0x7C}, {0x83, 0xB5}, /* 0xB4-0xB7 */ + {0x83, 0x73}, {0x83, 0x75}, {0x83, 0xA0}, {0x83, 0x89}, /* 0xB8-0xBB */ + {0x83, 0xA8}, {0x83, 0xF4}, {0x84, 0x13}, {0x83, 0xEB}, /* 0xBC-0xBF */ + {0x83, 0xCE}, {0x83, 0xFD}, {0x84, 0x03}, {0x83, 0xD8}, /* 0xC0-0xC3 */ + {0x84, 0x0B}, {0x83, 0xC1}, {0x83, 0xF7}, {0x84, 0x07}, /* 0xC4-0xC7 */ + {0x83, 0xE0}, {0x83, 0xF2}, {0x84, 0x0D}, {0x84, 0x22}, /* 0xC8-0xCB */ + {0x84, 0x20}, {0x83, 0xBD}, {0x84, 0x38}, {0x85, 0x06}, /* 0xCC-0xCF */ + {0x83, 0xFB}, {0x84, 0x6D}, {0x84, 0x2A}, {0x84, 0x3C}, /* 0xD0-0xD3 */ + {0x85, 0x5A}, {0x84, 0x84}, {0x84, 0x77}, {0x84, 0x6B}, /* 0xD4-0xD7 */ + {0x84, 0xAD}, {0x84, 0x6E}, {0x84, 0x82}, {0x84, 0x69}, /* 0xD8-0xDB */ + {0x84, 0x46}, {0x84, 0x2C}, {0x84, 0x6F}, {0x84, 0x79}, /* 0xDC-0xDF */ + {0x84, 0x35}, {0x84, 0xCA}, {0x84, 0x62}, {0x84, 0xB9}, /* 0xE0-0xE3 */ + {0x84, 0xBF}, {0x84, 0x9F}, {0x84, 0xD9}, {0x84, 0xCD}, /* 0xE4-0xE7 */ + {0x84, 0xBB}, {0x84, 0xDA}, {0x84, 0xD0}, {0x84, 0xC1}, /* 0xE8-0xEB */ + {0x84, 0xC6}, {0x84, 0xD6}, {0x84, 0xA1}, {0x85, 0x21}, /* 0xEC-0xEF */ + {0x84, 0xFF}, {0x84, 0xF4}, {0x85, 0x17}, {0x85, 0x18}, /* 0xF0-0xF3 */ + {0x85, 0x2C}, {0x85, 0x1F}, {0x85, 0x15}, {0x85, 0x14}, /* 0xF4-0xF7 */ + {0x84, 0xFC}, {0x85, 0x40}, {0x85, 0x63}, {0x85, 0x58}, /* 0xF8-0xFB */ + {0x85, 0x48}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x85, 0x41}, {0x86, 0x02}, {0x85, 0x4B}, {0x85, 0x55}, /* 0x40-0x43 */ + {0x85, 0x80}, {0x85, 0xA4}, {0x85, 0x88}, {0x85, 0x91}, /* 0x44-0x47 */ + {0x85, 0x8A}, {0x85, 0xA8}, {0x85, 0x6D}, {0x85, 0x94}, /* 0x48-0x4B */ + {0x85, 0x9B}, {0x85, 0xEA}, {0x85, 0x87}, {0x85, 0x9C}, /* 0x4C-0x4F */ + {0x85, 0x77}, {0x85, 0x7E}, {0x85, 0x90}, {0x85, 0xC9}, /* 0x50-0x53 */ + {0x85, 0xBA}, {0x85, 0xCF}, {0x85, 0xB9}, {0x85, 0xD0}, /* 0x54-0x57 */ + {0x85, 0xD5}, {0x85, 0xDD}, {0x85, 0xE5}, {0x85, 0xDC}, /* 0x58-0x5B */ + {0x85, 0xF9}, {0x86, 0x0A}, {0x86, 0x13}, {0x86, 0x0B}, /* 0x5C-0x5F */ + {0x85, 0xFE}, {0x85, 0xFA}, {0x86, 0x06}, {0x86, 0x22}, /* 0x60-0x63 */ + {0x86, 0x1A}, {0x86, 0x30}, {0x86, 0x3F}, {0x86, 0x4D}, /* 0x64-0x67 */ + {0x4E, 0x55}, {0x86, 0x54}, {0x86, 0x5F}, {0x86, 0x67}, /* 0x68-0x6B */ + {0x86, 0x71}, {0x86, 0x93}, {0x86, 0xA3}, {0x86, 0xA9}, /* 0x6C-0x6F */ + {0x86, 0xAA}, {0x86, 0x8B}, {0x86, 0x8C}, {0x86, 0xB6}, /* 0x70-0x73 */ + {0x86, 0xAF}, {0x86, 0xC4}, {0x86, 0xC6}, {0x86, 0xB0}, /* 0x74-0x77 */ + {0x86, 0xC9}, {0x88, 0x23}, {0x86, 0xAB}, {0x86, 0xD4}, /* 0x78-0x7B */ + {0x86, 0xDE}, {0x86, 0xE9}, {0x86, 0xEC}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x86, 0xDF}, {0x86, 0xDB}, {0x86, 0xEF}, {0x87, 0x12}, /* 0x80-0x83 */ + {0x87, 0x06}, {0x87, 0x08}, {0x87, 0x00}, {0x87, 0x03}, /* 0x84-0x87 */ + {0x86, 0xFB}, {0x87, 0x11}, {0x87, 0x09}, {0x87, 0x0D}, /* 0x88-0x8B */ + {0x86, 0xF9}, {0x87, 0x0A}, {0x87, 0x34}, {0x87, 0x3F}, /* 0x8C-0x8F */ + {0x87, 0x37}, {0x87, 0x3B}, {0x87, 0x25}, {0x87, 0x29}, /* 0x90-0x93 */ + {0x87, 0x1A}, {0x87, 0x60}, {0x87, 0x5F}, {0x87, 0x78}, /* 0x94-0x97 */ + {0x87, 0x4C}, {0x87, 0x4E}, {0x87, 0x74}, {0x87, 0x57}, /* 0x98-0x9B */ + {0x87, 0x68}, {0x87, 0x6E}, {0x87, 0x59}, {0x87, 0x53}, /* 0x9C-0x9F */ + {0x87, 0x63}, {0x87, 0x6A}, {0x88, 0x05}, {0x87, 0xA2}, /* 0xA0-0xA3 */ + {0x87, 0x9F}, {0x87, 0x82}, {0x87, 0xAF}, {0x87, 0xCB}, /* 0xA4-0xA7 */ + {0x87, 0xBD}, {0x87, 0xC0}, {0x87, 0xD0}, {0x96, 0xD6}, /* 0xA8-0xAB */ + {0x87, 0xAB}, {0x87, 0xC4}, {0x87, 0xB3}, {0x87, 0xC7}, /* 0xAC-0xAF */ + {0x87, 0xC6}, {0x87, 0xBB}, {0x87, 0xEF}, {0x87, 0xF2}, /* 0xB0-0xB3 */ + {0x87, 0xE0}, {0x88, 0x0F}, {0x88, 0x0D}, {0x87, 0xFE}, /* 0xB4-0xB7 */ + {0x87, 0xF6}, {0x87, 0xF7}, {0x88, 0x0E}, {0x87, 0xD2}, /* 0xB8-0xBB */ + {0x88, 0x11}, {0x88, 0x16}, {0x88, 0x15}, {0x88, 0x22}, /* 0xBC-0xBF */ + {0x88, 0x21}, {0x88, 0x31}, {0x88, 0x36}, {0x88, 0x39}, /* 0xC0-0xC3 */ + {0x88, 0x27}, {0x88, 0x3B}, {0x88, 0x44}, {0x88, 0x42}, /* 0xC4-0xC7 */ + {0x88, 0x52}, {0x88, 0x59}, {0x88, 0x5E}, {0x88, 0x62}, /* 0xC8-0xCB */ + {0x88, 0x6B}, {0x88, 0x81}, {0x88, 0x7E}, {0x88, 0x9E}, /* 0xCC-0xCF */ + {0x88, 0x75}, {0x88, 0x7D}, {0x88, 0xB5}, {0x88, 0x72}, /* 0xD0-0xD3 */ + {0x88, 0x82}, {0x88, 0x97}, {0x88, 0x92}, {0x88, 0xAE}, /* 0xD4-0xD7 */ + {0x88, 0x99}, {0x88, 0xA2}, {0x88, 0x8D}, {0x88, 0xA4}, /* 0xD8-0xDB */ + {0x88, 0xB0}, {0x88, 0xBF}, {0x88, 0xB1}, {0x88, 0xC3}, /* 0xDC-0xDF */ + {0x88, 0xC4}, {0x88, 0xD4}, {0x88, 0xD8}, {0x88, 0xD9}, /* 0xE0-0xE3 */ + {0x88, 0xDD}, {0x88, 0xF9}, {0x89, 0x02}, {0x88, 0xFC}, /* 0xE4-0xE7 */ + {0x88, 0xF4}, {0x88, 0xE8}, {0x88, 0xF2}, {0x89, 0x04}, /* 0xE8-0xEB */ + {0x89, 0x0C}, {0x89, 0x0A}, {0x89, 0x13}, {0x89, 0x43}, /* 0xEC-0xEF */ + {0x89, 0x1E}, {0x89, 0x25}, {0x89, 0x2A}, {0x89, 0x2B}, /* 0xF0-0xF3 */ + {0x89, 0x41}, {0x89, 0x44}, {0x89, 0x3B}, {0x89, 0x36}, /* 0xF4-0xF7 */ + {0x89, 0x38}, {0x89, 0x4C}, {0x89, 0x1D}, {0x89, 0x60}, /* 0xF8-0xFB */ + {0x89, 0x5E}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x89, 0x66}, {0x89, 0x64}, {0x89, 0x6D}, {0x89, 0x6A}, /* 0x40-0x43 */ + {0x89, 0x6F}, {0x89, 0x74}, {0x89, 0x77}, {0x89, 0x7E}, /* 0x44-0x47 */ + {0x89, 0x83}, {0x89, 0x88}, {0x89, 0x8A}, {0x89, 0x93}, /* 0x48-0x4B */ + {0x89, 0x98}, {0x89, 0xA1}, {0x89, 0xA9}, {0x89, 0xA6}, /* 0x4C-0x4F */ + {0x89, 0xAC}, {0x89, 0xAF}, {0x89, 0xB2}, {0x89, 0xBA}, /* 0x50-0x53 */ + {0x89, 0xBD}, {0x89, 0xBF}, {0x89, 0xC0}, {0x89, 0xDA}, /* 0x54-0x57 */ + {0x89, 0xDC}, {0x89, 0xDD}, {0x89, 0xE7}, {0x89, 0xF4}, /* 0x58-0x5B */ + {0x89, 0xF8}, {0x8A, 0x03}, {0x8A, 0x16}, {0x8A, 0x10}, /* 0x5C-0x5F */ + {0x8A, 0x0C}, {0x8A, 0x1B}, {0x8A, 0x1D}, {0x8A, 0x25}, /* 0x60-0x63 */ + {0x8A, 0x36}, {0x8A, 0x41}, {0x8A, 0x5B}, {0x8A, 0x52}, /* 0x64-0x67 */ + {0x8A, 0x46}, {0x8A, 0x48}, {0x8A, 0x7C}, {0x8A, 0x6D}, /* 0x68-0x6B */ + {0x8A, 0x6C}, {0x8A, 0x62}, {0x8A, 0x85}, {0x8A, 0x82}, /* 0x6C-0x6F */ + {0x8A, 0x84}, {0x8A, 0xA8}, {0x8A, 0xA1}, {0x8A, 0x91}, /* 0x70-0x73 */ + {0x8A, 0xA5}, {0x8A, 0xA6}, {0x8A, 0x9A}, {0x8A, 0xA3}, /* 0x74-0x77 */ + {0x8A, 0xC4}, {0x8A, 0xCD}, {0x8A, 0xC2}, {0x8A, 0xDA}, /* 0x78-0x7B */ + {0x8A, 0xEB}, {0x8A, 0xF3}, {0x8A, 0xE7}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8A, 0xE4}, {0x8A, 0xF1}, {0x8B, 0x14}, {0x8A, 0xE0}, /* 0x80-0x83 */ + {0x8A, 0xE2}, {0x8A, 0xF7}, {0x8A, 0xDE}, {0x8A, 0xDB}, /* 0x84-0x87 */ + {0x8B, 0x0C}, {0x8B, 0x07}, {0x8B, 0x1A}, {0x8A, 0xE1}, /* 0x88-0x8B */ + {0x8B, 0x16}, {0x8B, 0x10}, {0x8B, 0x17}, {0x8B, 0x20}, /* 0x8C-0x8F */ + {0x8B, 0x33}, {0x97, 0xAB}, {0x8B, 0x26}, {0x8B, 0x2B}, /* 0x90-0x93 */ + {0x8B, 0x3E}, {0x8B, 0x28}, {0x8B, 0x41}, {0x8B, 0x4C}, /* 0x94-0x97 */ + {0x8B, 0x4F}, {0x8B, 0x4E}, {0x8B, 0x49}, {0x8B, 0x56}, /* 0x98-0x9B */ + {0x8B, 0x5B}, {0x8B, 0x5A}, {0x8B, 0x6B}, {0x8B, 0x5F}, /* 0x9C-0x9F */ + {0x8B, 0x6C}, {0x8B, 0x6F}, {0x8B, 0x74}, {0x8B, 0x7D}, /* 0xA0-0xA3 */ + {0x8B, 0x80}, {0x8B, 0x8C}, {0x8B, 0x8E}, {0x8B, 0x92}, /* 0xA4-0xA7 */ + {0x8B, 0x93}, {0x8B, 0x96}, {0x8B, 0x99}, {0x8B, 0x9A}, /* 0xA8-0xAB */ + {0x8C, 0x3A}, {0x8C, 0x41}, {0x8C, 0x3F}, {0x8C, 0x48}, /* 0xAC-0xAF */ + {0x8C, 0x4C}, {0x8C, 0x4E}, {0x8C, 0x50}, {0x8C, 0x55}, /* 0xB0-0xB3 */ + {0x8C, 0x62}, {0x8C, 0x6C}, {0x8C, 0x78}, {0x8C, 0x7A}, /* 0xB4-0xB7 */ + {0x8C, 0x82}, {0x8C, 0x89}, {0x8C, 0x85}, {0x8C, 0x8A}, /* 0xB8-0xBB */ + {0x8C, 0x8D}, {0x8C, 0x8E}, {0x8C, 0x94}, {0x8C, 0x7C}, /* 0xBC-0xBF */ + {0x8C, 0x98}, {0x62, 0x1D}, {0x8C, 0xAD}, {0x8C, 0xAA}, /* 0xC0-0xC3 */ + {0x8C, 0xBD}, {0x8C, 0xB2}, {0x8C, 0xB3}, {0x8C, 0xAE}, /* 0xC4-0xC7 */ + {0x8C, 0xB6}, {0x8C, 0xC8}, {0x8C, 0xC1}, {0x8C, 0xE4}, /* 0xC8-0xCB */ + {0x8C, 0xE3}, {0x8C, 0xDA}, {0x8C, 0xFD}, {0x8C, 0xFA}, /* 0xCC-0xCF */ + {0x8C, 0xFB}, {0x8D, 0x04}, {0x8D, 0x05}, {0x8D, 0x0A}, /* 0xD0-0xD3 */ + {0x8D, 0x07}, {0x8D, 0x0F}, {0x8D, 0x0D}, {0x8D, 0x10}, /* 0xD4-0xD7 */ + {0x9F, 0x4E}, {0x8D, 0x13}, {0x8C, 0xCD}, {0x8D, 0x14}, /* 0xD8-0xDB */ + {0x8D, 0x16}, {0x8D, 0x67}, {0x8D, 0x6D}, {0x8D, 0x71}, /* 0xDC-0xDF */ + {0x8D, 0x73}, {0x8D, 0x81}, {0x8D, 0x99}, {0x8D, 0xC2}, /* 0xE0-0xE3 */ + {0x8D, 0xBE}, {0x8D, 0xBA}, {0x8D, 0xCF}, {0x8D, 0xDA}, /* 0xE4-0xE7 */ + {0x8D, 0xD6}, {0x8D, 0xCC}, {0x8D, 0xDB}, {0x8D, 0xCB}, /* 0xE8-0xEB */ + {0x8D, 0xEA}, {0x8D, 0xEB}, {0x8D, 0xDF}, {0x8D, 0xE3}, /* 0xEC-0xEF */ + {0x8D, 0xFC}, {0x8E, 0x08}, {0x8E, 0x09}, {0x8D, 0xFF}, /* 0xF0-0xF3 */ + {0x8E, 0x1D}, {0x8E, 0x1E}, {0x8E, 0x10}, {0x8E, 0x1F}, /* 0xF4-0xF7 */ + {0x8E, 0x42}, {0x8E, 0x35}, {0x8E, 0x30}, {0x8E, 0x34}, /* 0xF8-0xFB */ + {0x8E, 0x4A}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8E, 0x47}, {0x8E, 0x49}, {0x8E, 0x4C}, {0x8E, 0x50}, /* 0x40-0x43 */ + {0x8E, 0x48}, {0x8E, 0x59}, {0x8E, 0x64}, {0x8E, 0x60}, /* 0x44-0x47 */ + {0x8E, 0x2A}, {0x8E, 0x63}, {0x8E, 0x55}, {0x8E, 0x76}, /* 0x48-0x4B */ + {0x8E, 0x72}, {0x8E, 0x7C}, {0x8E, 0x81}, {0x8E, 0x87}, /* 0x4C-0x4F */ + {0x8E, 0x85}, {0x8E, 0x84}, {0x8E, 0x8B}, {0x8E, 0x8A}, /* 0x50-0x53 */ + {0x8E, 0x93}, {0x8E, 0x91}, {0x8E, 0x94}, {0x8E, 0x99}, /* 0x54-0x57 */ + {0x8E, 0xAA}, {0x8E, 0xA1}, {0x8E, 0xAC}, {0x8E, 0xB0}, /* 0x58-0x5B */ + {0x8E, 0xC6}, {0x8E, 0xB1}, {0x8E, 0xBE}, {0x8E, 0xC5}, /* 0x5C-0x5F */ + {0x8E, 0xC8}, {0x8E, 0xCB}, {0x8E, 0xDB}, {0x8E, 0xE3}, /* 0x60-0x63 */ + {0x8E, 0xFC}, {0x8E, 0xFB}, {0x8E, 0xEB}, {0x8E, 0xFE}, /* 0x64-0x67 */ + {0x8F, 0x0A}, {0x8F, 0x05}, {0x8F, 0x15}, {0x8F, 0x12}, /* 0x68-0x6B */ + {0x8F, 0x19}, {0x8F, 0x13}, {0x8F, 0x1C}, {0x8F, 0x1F}, /* 0x6C-0x6F */ + {0x8F, 0x1B}, {0x8F, 0x0C}, {0x8F, 0x26}, {0x8F, 0x33}, /* 0x70-0x73 */ + {0x8F, 0x3B}, {0x8F, 0x39}, {0x8F, 0x45}, {0x8F, 0x42}, /* 0x74-0x77 */ + {0x8F, 0x3E}, {0x8F, 0x4C}, {0x8F, 0x49}, {0x8F, 0x46}, /* 0x78-0x7B */ + {0x8F, 0x4E}, {0x8F, 0x57}, {0x8F, 0x5C}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8F, 0x62}, {0x8F, 0x63}, {0x8F, 0x64}, {0x8F, 0x9C}, /* 0x80-0x83 */ + {0x8F, 0x9F}, {0x8F, 0xA3}, {0x8F, 0xAD}, {0x8F, 0xAF}, /* 0x84-0x87 */ + {0x8F, 0xB7}, {0x8F, 0xDA}, {0x8F, 0xE5}, {0x8F, 0xE2}, /* 0x88-0x8B */ + {0x8F, 0xEA}, {0x8F, 0xEF}, {0x90, 0x87}, {0x8F, 0xF4}, /* 0x8C-0x8F */ + {0x90, 0x05}, {0x8F, 0xF9}, {0x8F, 0xFA}, {0x90, 0x11}, /* 0x90-0x93 */ + {0x90, 0x15}, {0x90, 0x21}, {0x90, 0x0D}, {0x90, 0x1E}, /* 0x94-0x97 */ + {0x90, 0x16}, {0x90, 0x0B}, {0x90, 0x27}, {0x90, 0x36}, /* 0x98-0x9B */ + {0x90, 0x35}, {0x90, 0x39}, {0x8F, 0xF8}, {0x90, 0x4F}, /* 0x9C-0x9F */ + {0x90, 0x50}, {0x90, 0x51}, {0x90, 0x52}, {0x90, 0x0E}, /* 0xA0-0xA3 */ + {0x90, 0x49}, {0x90, 0x3E}, {0x90, 0x56}, {0x90, 0x58}, /* 0xA4-0xA7 */ + {0x90, 0x5E}, {0x90, 0x68}, {0x90, 0x6F}, {0x90, 0x76}, /* 0xA8-0xAB */ + {0x96, 0xA8}, {0x90, 0x72}, {0x90, 0x82}, {0x90, 0x7D}, /* 0xAC-0xAF */ + {0x90, 0x81}, {0x90, 0x80}, {0x90, 0x8A}, {0x90, 0x89}, /* 0xB0-0xB3 */ + {0x90, 0x8F}, {0x90, 0xA8}, {0x90, 0xAF}, {0x90, 0xB1}, /* 0xB4-0xB7 */ + {0x90, 0xB5}, {0x90, 0xE2}, {0x90, 0xE4}, {0x62, 0x48}, /* 0xB8-0xBB */ + {0x90, 0xDB}, {0x91, 0x02}, {0x91, 0x12}, {0x91, 0x19}, /* 0xBC-0xBF */ + {0x91, 0x32}, {0x91, 0x30}, {0x91, 0x4A}, {0x91, 0x56}, /* 0xC0-0xC3 */ + {0x91, 0x58}, {0x91, 0x63}, {0x91, 0x65}, {0x91, 0x69}, /* 0xC4-0xC7 */ + {0x91, 0x73}, {0x91, 0x72}, {0x91, 0x8B}, {0x91, 0x89}, /* 0xC8-0xCB */ + {0x91, 0x82}, {0x91, 0xA2}, {0x91, 0xAB}, {0x91, 0xAF}, /* 0xCC-0xCF */ + {0x91, 0xAA}, {0x91, 0xB5}, {0x91, 0xB4}, {0x91, 0xBA}, /* 0xD0-0xD3 */ + {0x91, 0xC0}, {0x91, 0xC1}, {0x91, 0xC9}, {0x91, 0xCB}, /* 0xD4-0xD7 */ + {0x91, 0xD0}, {0x91, 0xD6}, {0x91, 0xDF}, {0x91, 0xE1}, /* 0xD8-0xDB */ + {0x91, 0xDB}, {0x91, 0xFC}, {0x91, 0xF5}, {0x91, 0xF6}, /* 0xDC-0xDF */ + {0x92, 0x1E}, {0x91, 0xFF}, {0x92, 0x14}, {0x92, 0x2C}, /* 0xE0-0xE3 */ + {0x92, 0x15}, {0x92, 0x11}, {0x92, 0x5E}, {0x92, 0x57}, /* 0xE4-0xE7 */ + {0x92, 0x45}, {0x92, 0x49}, {0x92, 0x64}, {0x92, 0x48}, /* 0xE8-0xEB */ + {0x92, 0x95}, {0x92, 0x3F}, {0x92, 0x4B}, {0x92, 0x50}, /* 0xEC-0xEF */ + {0x92, 0x9C}, {0x92, 0x96}, {0x92, 0x93}, {0x92, 0x9B}, /* 0xF0-0xF3 */ + {0x92, 0x5A}, {0x92, 0xCF}, {0x92, 0xB9}, {0x92, 0xB7}, /* 0xF4-0xF7 */ + {0x92, 0xE9}, {0x93, 0x0F}, {0x92, 0xFA}, {0x93, 0x44}, /* 0xF8-0xFB */ + {0x93, 0x2E}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0x19}, {0x93, 0x22}, {0x93, 0x1A}, {0x93, 0x23}, /* 0x40-0x43 */ + {0x93, 0x3A}, {0x93, 0x35}, {0x93, 0x3B}, {0x93, 0x5C}, /* 0x44-0x47 */ + {0x93, 0x60}, {0x93, 0x7C}, {0x93, 0x6E}, {0x93, 0x56}, /* 0x48-0x4B */ + {0x93, 0xB0}, {0x93, 0xAC}, {0x93, 0xAD}, {0x93, 0x94}, /* 0x4C-0x4F */ + {0x93, 0xB9}, {0x93, 0xD6}, {0x93, 0xD7}, {0x93, 0xE8}, /* 0x50-0x53 */ + {0x93, 0xE5}, {0x93, 0xD8}, {0x93, 0xC3}, {0x93, 0xDD}, /* 0x54-0x57 */ + {0x93, 0xD0}, {0x93, 0xC8}, {0x93, 0xE4}, {0x94, 0x1A}, /* 0x58-0x5B */ + {0x94, 0x14}, {0x94, 0x13}, {0x94, 0x03}, {0x94, 0x07}, /* 0x5C-0x5F */ + {0x94, 0x10}, {0x94, 0x36}, {0x94, 0x2B}, {0x94, 0x35}, /* 0x60-0x63 */ + {0x94, 0x21}, {0x94, 0x3A}, {0x94, 0x41}, {0x94, 0x52}, /* 0x64-0x67 */ + {0x94, 0x44}, {0x94, 0x5B}, {0x94, 0x60}, {0x94, 0x62}, /* 0x68-0x6B */ + {0x94, 0x5E}, {0x94, 0x6A}, {0x92, 0x29}, {0x94, 0x70}, /* 0x6C-0x6F */ + {0x94, 0x75}, {0x94, 0x77}, {0x94, 0x7D}, {0x94, 0x5A}, /* 0x70-0x73 */ + {0x94, 0x7C}, {0x94, 0x7E}, {0x94, 0x81}, {0x94, 0x7F}, /* 0x74-0x77 */ + {0x95, 0x82}, {0x95, 0x87}, {0x95, 0x8A}, {0x95, 0x94}, /* 0x78-0x7B */ + {0x95, 0x96}, {0x95, 0x98}, {0x95, 0x99}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x95, 0xA0}, {0x95, 0xA8}, {0x95, 0xA7}, {0x95, 0xAD}, /* 0x80-0x83 */ + {0x95, 0xBC}, {0x95, 0xBB}, {0x95, 0xB9}, {0x95, 0xBE}, /* 0x84-0x87 */ + {0x95, 0xCA}, {0x6F, 0xF6}, {0x95, 0xC3}, {0x95, 0xCD}, /* 0x88-0x8B */ + {0x95, 0xCC}, {0x95, 0xD5}, {0x95, 0xD4}, {0x95, 0xD6}, /* 0x8C-0x8F */ + {0x95, 0xDC}, {0x95, 0xE1}, {0x95, 0xE5}, {0x95, 0xE2}, /* 0x90-0x93 */ + {0x96, 0x21}, {0x96, 0x28}, {0x96, 0x2E}, {0x96, 0x2F}, /* 0x94-0x97 */ + {0x96, 0x42}, {0x96, 0x4C}, {0x96, 0x4F}, {0x96, 0x4B}, /* 0x98-0x9B */ + {0x96, 0x77}, {0x96, 0x5C}, {0x96, 0x5E}, {0x96, 0x5D}, /* 0x9C-0x9F */ + {0x96, 0x5F}, {0x96, 0x66}, {0x96, 0x72}, {0x96, 0x6C}, /* 0xA0-0xA3 */ + {0x96, 0x8D}, {0x96, 0x98}, {0x96, 0x95}, {0x96, 0x97}, /* 0xA4-0xA7 */ + {0x96, 0xAA}, {0x96, 0xA7}, {0x96, 0xB1}, {0x96, 0xB2}, /* 0xA8-0xAB */ + {0x96, 0xB0}, {0x96, 0xB4}, {0x96, 0xB6}, {0x96, 0xB8}, /* 0xAC-0xAF */ + {0x96, 0xB9}, {0x96, 0xCE}, {0x96, 0xCB}, {0x96, 0xC9}, /* 0xB0-0xB3 */ + {0x96, 0xCD}, {0x89, 0x4D}, {0x96, 0xDC}, {0x97, 0x0D}, /* 0xB4-0xB7 */ + {0x96, 0xD5}, {0x96, 0xF9}, {0x97, 0x04}, {0x97, 0x06}, /* 0xB8-0xBB */ + {0x97, 0x08}, {0x97, 0x13}, {0x97, 0x0E}, {0x97, 0x11}, /* 0xBC-0xBF */ + {0x97, 0x0F}, {0x97, 0x16}, {0x97, 0x19}, {0x97, 0x24}, /* 0xC0-0xC3 */ + {0x97, 0x2A}, {0x97, 0x30}, {0x97, 0x39}, {0x97, 0x3D}, /* 0xC4-0xC7 */ + {0x97, 0x3E}, {0x97, 0x44}, {0x97, 0x46}, {0x97, 0x48}, /* 0xC8-0xCB */ + {0x97, 0x42}, {0x97, 0x49}, {0x97, 0x5C}, {0x97, 0x60}, /* 0xCC-0xCF */ + {0x97, 0x64}, {0x97, 0x66}, {0x97, 0x68}, {0x52, 0xD2}, /* 0xD0-0xD3 */ + {0x97, 0x6B}, {0x97, 0x71}, {0x97, 0x79}, {0x97, 0x85}, /* 0xD4-0xD7 */ + {0x97, 0x7C}, {0x97, 0x81}, {0x97, 0x7A}, {0x97, 0x86}, /* 0xD8-0xDB */ + {0x97, 0x8B}, {0x97, 0x8F}, {0x97, 0x90}, {0x97, 0x9C}, /* 0xDC-0xDF */ + {0x97, 0xA8}, {0x97, 0xA6}, {0x97, 0xA3}, {0x97, 0xB3}, /* 0xE0-0xE3 */ + {0x97, 0xB4}, {0x97, 0xC3}, {0x97, 0xC6}, {0x97, 0xC8}, /* 0xE4-0xE7 */ + {0x97, 0xCB}, {0x97, 0xDC}, {0x97, 0xED}, {0x9F, 0x4F}, /* 0xE8-0xEB */ + {0x97, 0xF2}, {0x7A, 0xDF}, {0x97, 0xF6}, {0x97, 0xF5}, /* 0xEC-0xEF */ + {0x98, 0x0F}, {0x98, 0x0C}, {0x98, 0x38}, {0x98, 0x24}, /* 0xF0-0xF3 */ + {0x98, 0x21}, {0x98, 0x37}, {0x98, 0x3D}, {0x98, 0x46}, /* 0xF4-0xF7 */ + {0x98, 0x4F}, {0x98, 0x4B}, {0x98, 0x6B}, {0x98, 0x6F}, /* 0xF8-0xFB */ + {0x98, 0x70}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x98, 0x71}, {0x98, 0x74}, {0x98, 0x73}, {0x98, 0xAA}, /* 0x40-0x43 */ + {0x98, 0xAF}, {0x98, 0xB1}, {0x98, 0xB6}, {0x98, 0xC4}, /* 0x44-0x47 */ + {0x98, 0xC3}, {0x98, 0xC6}, {0x98, 0xE9}, {0x98, 0xEB}, /* 0x48-0x4B */ + {0x99, 0x03}, {0x99, 0x09}, {0x99, 0x12}, {0x99, 0x14}, /* 0x4C-0x4F */ + {0x99, 0x18}, {0x99, 0x21}, {0x99, 0x1D}, {0x99, 0x1E}, /* 0x50-0x53 */ + {0x99, 0x24}, {0x99, 0x20}, {0x99, 0x2C}, {0x99, 0x2E}, /* 0x54-0x57 */ + {0x99, 0x3D}, {0x99, 0x3E}, {0x99, 0x42}, {0x99, 0x49}, /* 0x58-0x5B */ + {0x99, 0x45}, {0x99, 0x50}, {0x99, 0x4B}, {0x99, 0x51}, /* 0x5C-0x5F */ + {0x99, 0x52}, {0x99, 0x4C}, {0x99, 0x55}, {0x99, 0x97}, /* 0x60-0x63 */ + {0x99, 0x98}, {0x99, 0xA5}, {0x99, 0xAD}, {0x99, 0xAE}, /* 0x64-0x67 */ + {0x99, 0xBC}, {0x99, 0xDF}, {0x99, 0xDB}, {0x99, 0xDD}, /* 0x68-0x6B */ + {0x99, 0xD8}, {0x99, 0xD1}, {0x99, 0xED}, {0x99, 0xEE}, /* 0x6C-0x6F */ + {0x99, 0xF1}, {0x99, 0xF2}, {0x99, 0xFB}, {0x99, 0xF8}, /* 0x70-0x73 */ + {0x9A, 0x01}, {0x9A, 0x0F}, {0x9A, 0x05}, {0x99, 0xE2}, /* 0x74-0x77 */ + {0x9A, 0x19}, {0x9A, 0x2B}, {0x9A, 0x37}, {0x9A, 0x45}, /* 0x78-0x7B */ + {0x9A, 0x42}, {0x9A, 0x40}, {0x9A, 0x43}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9A, 0x3E}, {0x9A, 0x55}, {0x9A, 0x4D}, {0x9A, 0x5B}, /* 0x80-0x83 */ + {0x9A, 0x57}, {0x9A, 0x5F}, {0x9A, 0x62}, {0x9A, 0x65}, /* 0x84-0x87 */ + {0x9A, 0x64}, {0x9A, 0x69}, {0x9A, 0x6B}, {0x9A, 0x6A}, /* 0x88-0x8B */ + {0x9A, 0xAD}, {0x9A, 0xB0}, {0x9A, 0xBC}, {0x9A, 0xC0}, /* 0x8C-0x8F */ + {0x9A, 0xCF}, {0x9A, 0xD1}, {0x9A, 0xD3}, {0x9A, 0xD4}, /* 0x90-0x93 */ + {0x9A, 0xDE}, {0x9A, 0xDF}, {0x9A, 0xE2}, {0x9A, 0xE3}, /* 0x94-0x97 */ + {0x9A, 0xE6}, {0x9A, 0xEF}, {0x9A, 0xEB}, {0x9A, 0xEE}, /* 0x98-0x9B */ + {0x9A, 0xF4}, {0x9A, 0xF1}, {0x9A, 0xF7}, {0x9A, 0xFB}, /* 0x9C-0x9F */ + {0x9B, 0x06}, {0x9B, 0x18}, {0x9B, 0x1A}, {0x9B, 0x1F}, /* 0xA0-0xA3 */ + {0x9B, 0x22}, {0x9B, 0x23}, {0x9B, 0x25}, {0x9B, 0x27}, /* 0xA4-0xA7 */ + {0x9B, 0x28}, {0x9B, 0x29}, {0x9B, 0x2A}, {0x9B, 0x2E}, /* 0xA8-0xAB */ + {0x9B, 0x2F}, {0x9B, 0x32}, {0x9B, 0x44}, {0x9B, 0x43}, /* 0xAC-0xAF */ + {0x9B, 0x4F}, {0x9B, 0x4D}, {0x9B, 0x4E}, {0x9B, 0x51}, /* 0xB0-0xB3 */ + {0x9B, 0x58}, {0x9B, 0x74}, {0x9B, 0x93}, {0x9B, 0x83}, /* 0xB4-0xB7 */ + {0x9B, 0x91}, {0x9B, 0x96}, {0x9B, 0x97}, {0x9B, 0x9F}, /* 0xB8-0xBB */ + {0x9B, 0xA0}, {0x9B, 0xA8}, {0x9B, 0xB4}, {0x9B, 0xC0}, /* 0xBC-0xBF */ + {0x9B, 0xCA}, {0x9B, 0xB9}, {0x9B, 0xC6}, {0x9B, 0xCF}, /* 0xC0-0xC3 */ + {0x9B, 0xD1}, {0x9B, 0xD2}, {0x9B, 0xE3}, {0x9B, 0xE2}, /* 0xC4-0xC7 */ + {0x9B, 0xE4}, {0x9B, 0xD4}, {0x9B, 0xE1}, {0x9C, 0x3A}, /* 0xC8-0xCB */ + {0x9B, 0xF2}, {0x9B, 0xF1}, {0x9B, 0xF0}, {0x9C, 0x15}, /* 0xCC-0xCF */ + {0x9C, 0x14}, {0x9C, 0x09}, {0x9C, 0x13}, {0x9C, 0x0C}, /* 0xD0-0xD3 */ + {0x9C, 0x06}, {0x9C, 0x08}, {0x9C, 0x12}, {0x9C, 0x0A}, /* 0xD4-0xD7 */ + {0x9C, 0x04}, {0x9C, 0x2E}, {0x9C, 0x1B}, {0x9C, 0x25}, /* 0xD8-0xDB */ + {0x9C, 0x24}, {0x9C, 0x21}, {0x9C, 0x30}, {0x9C, 0x47}, /* 0xDC-0xDF */ + {0x9C, 0x32}, {0x9C, 0x46}, {0x9C, 0x3E}, {0x9C, 0x5A}, /* 0xE0-0xE3 */ + {0x9C, 0x60}, {0x9C, 0x67}, {0x9C, 0x76}, {0x9C, 0x78}, /* 0xE4-0xE7 */ + {0x9C, 0xE7}, {0x9C, 0xEC}, {0x9C, 0xF0}, {0x9D, 0x09}, /* 0xE8-0xEB */ + {0x9D, 0x08}, {0x9C, 0xEB}, {0x9D, 0x03}, {0x9D, 0x06}, /* 0xEC-0xEF */ + {0x9D, 0x2A}, {0x9D, 0x26}, {0x9D, 0xAF}, {0x9D, 0x23}, /* 0xF0-0xF3 */ + {0x9D, 0x1F}, {0x9D, 0x44}, {0x9D, 0x15}, {0x9D, 0x12}, /* 0xF4-0xF7 */ + {0x9D, 0x41}, {0x9D, 0x3F}, {0x9D, 0x3E}, {0x9D, 0x46}, /* 0xF8-0xFB */ + {0x9D, 0x48}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9D, 0x5D}, {0x9D, 0x5E}, {0x9D, 0x64}, {0x9D, 0x51}, /* 0x40-0x43 */ + {0x9D, 0x50}, {0x9D, 0x59}, {0x9D, 0x72}, {0x9D, 0x89}, /* 0x44-0x47 */ + {0x9D, 0x87}, {0x9D, 0xAB}, {0x9D, 0x6F}, {0x9D, 0x7A}, /* 0x48-0x4B */ + {0x9D, 0x9A}, {0x9D, 0xA4}, {0x9D, 0xA9}, {0x9D, 0xB2}, /* 0x4C-0x4F */ + {0x9D, 0xC4}, {0x9D, 0xC1}, {0x9D, 0xBB}, {0x9D, 0xB8}, /* 0x50-0x53 */ + {0x9D, 0xBA}, {0x9D, 0xC6}, {0x9D, 0xCF}, {0x9D, 0xC2}, /* 0x54-0x57 */ + {0x9D, 0xD9}, {0x9D, 0xD3}, {0x9D, 0xF8}, {0x9D, 0xE6}, /* 0x58-0x5B */ + {0x9D, 0xED}, {0x9D, 0xEF}, {0x9D, 0xFD}, {0x9E, 0x1A}, /* 0x5C-0x5F */ + {0x9E, 0x1B}, {0x9E, 0x1E}, {0x9E, 0x75}, {0x9E, 0x79}, /* 0x60-0x63 */ + {0x9E, 0x7D}, {0x9E, 0x81}, {0x9E, 0x88}, {0x9E, 0x8B}, /* 0x64-0x67 */ + {0x9E, 0x8C}, {0x9E, 0x92}, {0x9E, 0x95}, {0x9E, 0x91}, /* 0x68-0x6B */ + {0x9E, 0x9D}, {0x9E, 0xA5}, {0x9E, 0xA9}, {0x9E, 0xB8}, /* 0x6C-0x6F */ + {0x9E, 0xAA}, {0x9E, 0xAD}, {0x97, 0x61}, {0x9E, 0xCC}, /* 0x70-0x73 */ + {0x9E, 0xCE}, {0x9E, 0xCF}, {0x9E, 0xD0}, {0x9E, 0xD4}, /* 0x74-0x77 */ + {0x9E, 0xDC}, {0x9E, 0xDE}, {0x9E, 0xDD}, {0x9E, 0xE0}, /* 0x78-0x7B */ + {0x9E, 0xE5}, {0x9E, 0xE8}, {0x9E, 0xEF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9E, 0xF4}, {0x9E, 0xF6}, {0x9E, 0xF7}, {0x9E, 0xF9}, /* 0x80-0x83 */ + {0x9E, 0xFB}, {0x9E, 0xFC}, {0x9E, 0xFD}, {0x9F, 0x07}, /* 0x84-0x87 */ + {0x9F, 0x08}, {0x76, 0xB7}, {0x9F, 0x15}, {0x9F, 0x21}, /* 0x88-0x8B */ + {0x9F, 0x2C}, {0x9F, 0x3E}, {0x9F, 0x4A}, {0x9F, 0x52}, /* 0x8C-0x8F */ + {0x9F, 0x54}, {0x9F, 0x63}, {0x9F, 0x5F}, {0x9F, 0x60}, /* 0x90-0x93 */ + {0x9F, 0x61}, {0x9F, 0x66}, {0x9F, 0x67}, {0x9F, 0x6C}, /* 0x94-0x97 */ + {0x9F, 0x6A}, {0x9F, 0x77}, {0x9F, 0x72}, {0x9F, 0x76}, /* 0x98-0x9B */ + {0x9F, 0x95}, {0x9F, 0x9C}, {0x9F, 0xA0}, {0x58, 0x2F}, /* 0x9C-0x9F */ + {0x69, 0xC7}, {0x90, 0x59}, {0x74, 0x64}, {0x51, 0xDC}, /* 0xA0-0xA3 */ + {0x71, 0x99}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_ED[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7E, 0x8A}, {0x89, 0x1C}, {0x93, 0x48}, {0x92, 0x88}, /* 0x40-0x43 */ + {0x84, 0xDC}, {0x4F, 0xC9}, {0x70, 0xBB}, {0x66, 0x31}, /* 0x44-0x47 */ + {0x68, 0xC8}, {0x92, 0xF9}, {0x66, 0xFB}, {0x5F, 0x45}, /* 0x48-0x4B */ + {0x4E, 0x28}, {0x4E, 0xE1}, {0x4E, 0xFC}, {0x4F, 0x00}, /* 0x4C-0x4F */ + {0x4F, 0x03}, {0x4F, 0x39}, {0x4F, 0x56}, {0x4F, 0x92}, /* 0x50-0x53 */ + {0x4F, 0x8A}, {0x4F, 0x9A}, {0x4F, 0x94}, {0x4F, 0xCD}, /* 0x54-0x57 */ + {0x50, 0x40}, {0x50, 0x22}, {0x4F, 0xFF}, {0x50, 0x1E}, /* 0x58-0x5B */ + {0x50, 0x46}, {0x50, 0x70}, {0x50, 0x42}, {0x50, 0x94}, /* 0x5C-0x5F */ + {0x50, 0xF4}, {0x50, 0xD8}, {0x51, 0x4A}, {0x51, 0x64}, /* 0x60-0x63 */ + {0x51, 0x9D}, {0x51, 0xBE}, {0x51, 0xEC}, {0x52, 0x15}, /* 0x64-0x67 */ + {0x52, 0x9C}, {0x52, 0xA6}, {0x52, 0xC0}, {0x52, 0xDB}, /* 0x68-0x6B */ + {0x53, 0x00}, {0x53, 0x07}, {0x53, 0x24}, {0x53, 0x72}, /* 0x6C-0x6F */ + {0x53, 0x93}, {0x53, 0xB2}, {0x53, 0xDD}, {0xFA, 0x0E}, /* 0x70-0x73 */ + {0x54, 0x9C}, {0x54, 0x8A}, {0x54, 0xA9}, {0x54, 0xFF}, /* 0x74-0x77 */ + {0x55, 0x86}, {0x57, 0x59}, {0x57, 0x65}, {0x57, 0xAC}, /* 0x78-0x7B */ + {0x57, 0xC8}, {0x57, 0xC7}, {0xFA, 0x0F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0xFA, 0x10}, {0x58, 0x9E}, {0x58, 0xB2}, {0x59, 0x0B}, /* 0x80-0x83 */ + {0x59, 0x53}, {0x59, 0x5B}, {0x59, 0x5D}, {0x59, 0x63}, /* 0x84-0x87 */ + {0x59, 0xA4}, {0x59, 0xBA}, {0x5B, 0x56}, {0x5B, 0xC0}, /* 0x88-0x8B */ + {0x75, 0x2F}, {0x5B, 0xD8}, {0x5B, 0xEC}, {0x5C, 0x1E}, /* 0x8C-0x8F */ + {0x5C, 0xA6}, {0x5C, 0xBA}, {0x5C, 0xF5}, {0x5D, 0x27}, /* 0x90-0x93 */ + {0x5D, 0x53}, {0xFA, 0x11}, {0x5D, 0x42}, {0x5D, 0x6D}, /* 0x94-0x97 */ + {0x5D, 0xB8}, {0x5D, 0xB9}, {0x5D, 0xD0}, {0x5F, 0x21}, /* 0x98-0x9B */ + {0x5F, 0x34}, {0x5F, 0x67}, {0x5F, 0xB7}, {0x5F, 0xDE}, /* 0x9C-0x9F */ + {0x60, 0x5D}, {0x60, 0x85}, {0x60, 0x8A}, {0x60, 0xDE}, /* 0xA0-0xA3 */ + {0x60, 0xD5}, {0x61, 0x20}, {0x60, 0xF2}, {0x61, 0x11}, /* 0xA4-0xA7 */ + {0x61, 0x37}, {0x61, 0x30}, {0x61, 0x98}, {0x62, 0x13}, /* 0xA8-0xAB */ + {0x62, 0xA6}, {0x63, 0xF5}, {0x64, 0x60}, {0x64, 0x9D}, /* 0xAC-0xAF */ + {0x64, 0xCE}, {0x65, 0x4E}, {0x66, 0x00}, {0x66, 0x15}, /* 0xB0-0xB3 */ + {0x66, 0x3B}, {0x66, 0x09}, {0x66, 0x2E}, {0x66, 0x1E}, /* 0xB4-0xB7 */ + {0x66, 0x24}, {0x66, 0x65}, {0x66, 0x57}, {0x66, 0x59}, /* 0xB8-0xBB */ + {0xFA, 0x12}, {0x66, 0x73}, {0x66, 0x99}, {0x66, 0xA0}, /* 0xBC-0xBF */ + {0x66, 0xB2}, {0x66, 0xBF}, {0x66, 0xFA}, {0x67, 0x0E}, /* 0xC0-0xC3 */ + {0xF9, 0x29}, {0x67, 0x66}, {0x67, 0xBB}, {0x68, 0x52}, /* 0xC4-0xC7 */ + {0x67, 0xC0}, {0x68, 0x01}, {0x68, 0x44}, {0x68, 0xCF}, /* 0xC8-0xCB */ + {0xFA, 0x13}, {0x69, 0x68}, {0xFA, 0x14}, {0x69, 0x98}, /* 0xCC-0xCF */ + {0x69, 0xE2}, {0x6A, 0x30}, {0x6A, 0x6B}, {0x6A, 0x46}, /* 0xD0-0xD3 */ + {0x6A, 0x73}, {0x6A, 0x7E}, {0x6A, 0xE2}, {0x6A, 0xE4}, /* 0xD4-0xD7 */ + {0x6B, 0xD6}, {0x6C, 0x3F}, {0x6C, 0x5C}, {0x6C, 0x86}, /* 0xD8-0xDB */ + {0x6C, 0x6F}, {0x6C, 0xDA}, {0x6D, 0x04}, {0x6D, 0x87}, /* 0xDC-0xDF */ + {0x6D, 0x6F}, {0x6D, 0x96}, {0x6D, 0xAC}, {0x6D, 0xCF}, /* 0xE0-0xE3 */ + {0x6D, 0xF8}, {0x6D, 0xF2}, {0x6D, 0xFC}, {0x6E, 0x39}, /* 0xE4-0xE7 */ + {0x6E, 0x5C}, {0x6E, 0x27}, {0x6E, 0x3C}, {0x6E, 0xBF}, /* 0xE8-0xEB */ + {0x6F, 0x88}, {0x6F, 0xB5}, {0x6F, 0xF5}, {0x70, 0x05}, /* 0xEC-0xEF */ + {0x70, 0x07}, {0x70, 0x28}, {0x70, 0x85}, {0x70, 0xAB}, /* 0xF0-0xF3 */ + {0x71, 0x0F}, {0x71, 0x04}, {0x71, 0x5C}, {0x71, 0x46}, /* 0xF4-0xF7 */ + {0x71, 0x47}, {0xFA, 0x15}, {0x71, 0xC1}, {0x71, 0xFE}, /* 0xF8-0xFB */ + {0x72, 0xB1}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x72, 0xBE}, {0x73, 0x24}, {0xFA, 0x16}, {0x73, 0x77}, /* 0x40-0x43 */ + {0x73, 0xBD}, {0x73, 0xC9}, {0x73, 0xD6}, {0x73, 0xE3}, /* 0x44-0x47 */ + {0x73, 0xD2}, {0x74, 0x07}, {0x73, 0xF5}, {0x74, 0x26}, /* 0x48-0x4B */ + {0x74, 0x2A}, {0x74, 0x29}, {0x74, 0x2E}, {0x74, 0x62}, /* 0x4C-0x4F */ + {0x74, 0x89}, {0x74, 0x9F}, {0x75, 0x01}, {0x75, 0x6F}, /* 0x50-0x53 */ + {0x76, 0x82}, {0x76, 0x9C}, {0x76, 0x9E}, {0x76, 0x9B}, /* 0x54-0x57 */ + {0x76, 0xA6}, {0xFA, 0x17}, {0x77, 0x46}, {0x52, 0xAF}, /* 0x58-0x5B */ + {0x78, 0x21}, {0x78, 0x4E}, {0x78, 0x64}, {0x78, 0x7A}, /* 0x5C-0x5F */ + {0x79, 0x30}, {0xFA, 0x18}, {0xFA, 0x19}, {0xFA, 0x1A}, /* 0x60-0x63 */ + {0x79, 0x94}, {0xFA, 0x1B}, {0x79, 0x9B}, {0x7A, 0xD1}, /* 0x64-0x67 */ + {0x7A, 0xE7}, {0xFA, 0x1C}, {0x7A, 0xEB}, {0x7B, 0x9E}, /* 0x68-0x6B */ + {0xFA, 0x1D}, {0x7D, 0x48}, {0x7D, 0x5C}, {0x7D, 0xB7}, /* 0x6C-0x6F */ + {0x7D, 0xA0}, {0x7D, 0xD6}, {0x7E, 0x52}, {0x7F, 0x47}, /* 0x70-0x73 */ + {0x7F, 0xA1}, {0xFA, 0x1E}, {0x83, 0x01}, {0x83, 0x62}, /* 0x74-0x77 */ + {0x83, 0x7F}, {0x83, 0xC7}, {0x83, 0xF6}, {0x84, 0x48}, /* 0x78-0x7B */ + {0x84, 0xB4}, {0x85, 0x53}, {0x85, 0x59}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x85, 0x6B}, {0xFA, 0x1F}, {0x85, 0xB0}, {0xFA, 0x20}, /* 0x80-0x83 */ + {0xFA, 0x21}, {0x88, 0x07}, {0x88, 0xF5}, {0x8A, 0x12}, /* 0x84-0x87 */ + {0x8A, 0x37}, {0x8A, 0x79}, {0x8A, 0xA7}, {0x8A, 0xBE}, /* 0x88-0x8B */ + {0x8A, 0xDF}, {0xFA, 0x22}, {0x8A, 0xF6}, {0x8B, 0x53}, /* 0x8C-0x8F */ + {0x8B, 0x7F}, {0x8C, 0xF0}, {0x8C, 0xF4}, {0x8D, 0x12}, /* 0x90-0x93 */ + {0x8D, 0x76}, {0xFA, 0x23}, {0x8E, 0xCF}, {0xFA, 0x24}, /* 0x94-0x97 */ + {0xFA, 0x25}, {0x90, 0x67}, {0x90, 0xDE}, {0xFA, 0x26}, /* 0x98-0x9B */ + {0x91, 0x15}, {0x91, 0x27}, {0x91, 0xDA}, {0x91, 0xD7}, /* 0x9C-0x9F */ + {0x91, 0xDE}, {0x91, 0xED}, {0x91, 0xEE}, {0x91, 0xE4}, /* 0xA0-0xA3 */ + {0x91, 0xE5}, {0x92, 0x06}, {0x92, 0x10}, {0x92, 0x0A}, /* 0xA4-0xA7 */ + {0x92, 0x3A}, {0x92, 0x40}, {0x92, 0x3C}, {0x92, 0x4E}, /* 0xA8-0xAB */ + {0x92, 0x59}, {0x92, 0x51}, {0x92, 0x39}, {0x92, 0x67}, /* 0xAC-0xAF */ + {0x92, 0xA7}, {0x92, 0x77}, {0x92, 0x78}, {0x92, 0xE7}, /* 0xB0-0xB3 */ + {0x92, 0xD7}, {0x92, 0xD9}, {0x92, 0xD0}, {0xFA, 0x27}, /* 0xB4-0xB7 */ + {0x92, 0xD5}, {0x92, 0xE0}, {0x92, 0xD3}, {0x93, 0x25}, /* 0xB8-0xBB */ + {0x93, 0x21}, {0x92, 0xFB}, {0xFA, 0x28}, {0x93, 0x1E}, /* 0xBC-0xBF */ + {0x92, 0xFF}, {0x93, 0x1D}, {0x93, 0x02}, {0x93, 0x70}, /* 0xC0-0xC3 */ + {0x93, 0x57}, {0x93, 0xA4}, {0x93, 0xC6}, {0x93, 0xDE}, /* 0xC4-0xC7 */ + {0x93, 0xF8}, {0x94, 0x31}, {0x94, 0x45}, {0x94, 0x48}, /* 0xC8-0xCB */ + {0x95, 0x92}, {0xF9, 0xDC}, {0xFA, 0x29}, {0x96, 0x9D}, /* 0xCC-0xCF */ + {0x96, 0xAF}, {0x97, 0x33}, {0x97, 0x3B}, {0x97, 0x43}, /* 0xD0-0xD3 */ + {0x97, 0x4D}, {0x97, 0x4F}, {0x97, 0x51}, {0x97, 0x55}, /* 0xD4-0xD7 */ + {0x98, 0x57}, {0x98, 0x65}, {0xFA, 0x2A}, {0xFA, 0x2B}, /* 0xD8-0xDB */ + {0x99, 0x27}, {0xFA, 0x2C}, {0x99, 0x9E}, {0x9A, 0x4E}, /* 0xDC-0xDF */ + {0x9A, 0xD9}, {0x9A, 0xDC}, {0x9B, 0x75}, {0x9B, 0x72}, /* 0xE0-0xE3 */ + {0x9B, 0x8F}, {0x9B, 0xB1}, {0x9B, 0xBB}, {0x9C, 0x00}, /* 0xE4-0xE7 */ + {0x9D, 0x70}, {0x9D, 0x6B}, {0xFA, 0x2D}, {0x9E, 0x19}, /* 0xE8-0xEB */ + {0x9E, 0xD1}, {0x00, 0x3F}, {0x00, 0x3F}, {0x21, 0x70}, /* 0xEC-0xEF */ + {0x21, 0x71}, {0x21, 0x72}, {0x21, 0x73}, {0x21, 0x74}, /* 0xF0-0xF3 */ + {0x21, 0x75}, {0x21, 0x76}, {0x21, 0x77}, {0x21, 0x78}, /* 0xF4-0xF7 */ + {0x21, 0x79}, {0xFF, 0xE2}, {0xFF, 0xE4}, {0xFF, 0x07}, /* 0xF8-0xFB */ + {0xFF, 0x02}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x21, 0x70}, {0x21, 0x71}, {0x21, 0x72}, {0x21, 0x73}, /* 0x40-0x43 */ + {0x21, 0x74}, {0x21, 0x75}, {0x21, 0x76}, {0x21, 0x77}, /* 0x44-0x47 */ + {0x21, 0x78}, {0x21, 0x79}, {0x21, 0x60}, {0x21, 0x61}, /* 0x48-0x4B */ + {0x21, 0x62}, {0x21, 0x63}, {0x21, 0x64}, {0x21, 0x65}, /* 0x4C-0x4F */ + {0x21, 0x66}, {0x21, 0x67}, {0x21, 0x68}, {0x21, 0x69}, /* 0x50-0x53 */ + {0xFF, 0xE2}, {0xFF, 0xE4}, {0xFF, 0x07}, {0xFF, 0x02}, /* 0x54-0x57 */ + {0x32, 0x31}, {0x21, 0x16}, {0x21, 0x21}, {0x22, 0x35}, /* 0x58-0x5B */ + {0x7E, 0x8A}, {0x89, 0x1C}, {0x93, 0x48}, {0x92, 0x88}, /* 0x5C-0x5F */ + {0x84, 0xDC}, {0x4F, 0xC9}, {0x70, 0xBB}, {0x66, 0x31}, /* 0x60-0x63 */ + {0x68, 0xC8}, {0x92, 0xF9}, {0x66, 0xFB}, {0x5F, 0x45}, /* 0x64-0x67 */ + {0x4E, 0x28}, {0x4E, 0xE1}, {0x4E, 0xFC}, {0x4F, 0x00}, /* 0x68-0x6B */ + {0x4F, 0x03}, {0x4F, 0x39}, {0x4F, 0x56}, {0x4F, 0x92}, /* 0x6C-0x6F */ + {0x4F, 0x8A}, {0x4F, 0x9A}, {0x4F, 0x94}, {0x4F, 0xCD}, /* 0x70-0x73 */ + {0x50, 0x40}, {0x50, 0x22}, {0x4F, 0xFF}, {0x50, 0x1E}, /* 0x74-0x77 */ + {0x50, 0x46}, {0x50, 0x70}, {0x50, 0x42}, {0x50, 0x94}, /* 0x78-0x7B */ + {0x50, 0xF4}, {0x50, 0xD8}, {0x51, 0x4A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x51, 0x64}, {0x51, 0x9D}, {0x51, 0xBE}, {0x51, 0xEC}, /* 0x80-0x83 */ + {0x52, 0x15}, {0x52, 0x9C}, {0x52, 0xA6}, {0x52, 0xC0}, /* 0x84-0x87 */ + {0x52, 0xDB}, {0x53, 0x00}, {0x53, 0x07}, {0x53, 0x24}, /* 0x88-0x8B */ + {0x53, 0x72}, {0x53, 0x93}, {0x53, 0xB2}, {0x53, 0xDD}, /* 0x8C-0x8F */ + {0xFA, 0x0E}, {0x54, 0x9C}, {0x54, 0x8A}, {0x54, 0xA9}, /* 0x90-0x93 */ + {0x54, 0xFF}, {0x55, 0x86}, {0x57, 0x59}, {0x57, 0x65}, /* 0x94-0x97 */ + {0x57, 0xAC}, {0x57, 0xC8}, {0x57, 0xC7}, {0xFA, 0x0F}, /* 0x98-0x9B */ + {0xFA, 0x10}, {0x58, 0x9E}, {0x58, 0xB2}, {0x59, 0x0B}, /* 0x9C-0x9F */ + {0x59, 0x53}, {0x59, 0x5B}, {0x59, 0x5D}, {0x59, 0x63}, /* 0xA0-0xA3 */ + {0x59, 0xA4}, {0x59, 0xBA}, {0x5B, 0x56}, {0x5B, 0xC0}, /* 0xA4-0xA7 */ + {0x75, 0x2F}, {0x5B, 0xD8}, {0x5B, 0xEC}, {0x5C, 0x1E}, /* 0xA8-0xAB */ + {0x5C, 0xA6}, {0x5C, 0xBA}, {0x5C, 0xF5}, {0x5D, 0x27}, /* 0xAC-0xAF */ + {0x5D, 0x53}, {0xFA, 0x11}, {0x5D, 0x42}, {0x5D, 0x6D}, /* 0xB0-0xB3 */ + {0x5D, 0xB8}, {0x5D, 0xB9}, {0x5D, 0xD0}, {0x5F, 0x21}, /* 0xB4-0xB7 */ + {0x5F, 0x34}, {0x5F, 0x67}, {0x5F, 0xB7}, {0x5F, 0xDE}, /* 0xB8-0xBB */ + {0x60, 0x5D}, {0x60, 0x85}, {0x60, 0x8A}, {0x60, 0xDE}, /* 0xBC-0xBF */ + {0x60, 0xD5}, {0x61, 0x20}, {0x60, 0xF2}, {0x61, 0x11}, /* 0xC0-0xC3 */ + {0x61, 0x37}, {0x61, 0x30}, {0x61, 0x98}, {0x62, 0x13}, /* 0xC4-0xC7 */ + {0x62, 0xA6}, {0x63, 0xF5}, {0x64, 0x60}, {0x64, 0x9D}, /* 0xC8-0xCB */ + {0x64, 0xCE}, {0x65, 0x4E}, {0x66, 0x00}, {0x66, 0x15}, /* 0xCC-0xCF */ + {0x66, 0x3B}, {0x66, 0x09}, {0x66, 0x2E}, {0x66, 0x1E}, /* 0xD0-0xD3 */ + {0x66, 0x24}, {0x66, 0x65}, {0x66, 0x57}, {0x66, 0x59}, /* 0xD4-0xD7 */ + {0xFA, 0x12}, {0x66, 0x73}, {0x66, 0x99}, {0x66, 0xA0}, /* 0xD8-0xDB */ + {0x66, 0xB2}, {0x66, 0xBF}, {0x66, 0xFA}, {0x67, 0x0E}, /* 0xDC-0xDF */ + {0xF9, 0x29}, {0x67, 0x66}, {0x67, 0xBB}, {0x68, 0x52}, /* 0xE0-0xE3 */ + {0x67, 0xC0}, {0x68, 0x01}, {0x68, 0x44}, {0x68, 0xCF}, /* 0xE4-0xE7 */ + {0xFA, 0x13}, {0x69, 0x68}, {0xFA, 0x14}, {0x69, 0x98}, /* 0xE8-0xEB */ + {0x69, 0xE2}, {0x6A, 0x30}, {0x6A, 0x6B}, {0x6A, 0x46}, /* 0xEC-0xEF */ + {0x6A, 0x73}, {0x6A, 0x7E}, {0x6A, 0xE2}, {0x6A, 0xE4}, /* 0xF0-0xF3 */ + {0x6B, 0xD6}, {0x6C, 0x3F}, {0x6C, 0x5C}, {0x6C, 0x86}, /* 0xF4-0xF7 */ + {0x6C, 0x6F}, {0x6C, 0xDA}, {0x6D, 0x04}, {0x6D, 0x87}, /* 0xF8-0xFB */ + {0x6D, 0x6F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6D, 0x96}, {0x6D, 0xAC}, {0x6D, 0xCF}, {0x6D, 0xF8}, /* 0x40-0x43 */ + {0x6D, 0xF2}, {0x6D, 0xFC}, {0x6E, 0x39}, {0x6E, 0x5C}, /* 0x44-0x47 */ + {0x6E, 0x27}, {0x6E, 0x3C}, {0x6E, 0xBF}, {0x6F, 0x88}, /* 0x48-0x4B */ + {0x6F, 0xB5}, {0x6F, 0xF5}, {0x70, 0x05}, {0x70, 0x07}, /* 0x4C-0x4F */ + {0x70, 0x28}, {0x70, 0x85}, {0x70, 0xAB}, {0x71, 0x0F}, /* 0x50-0x53 */ + {0x71, 0x04}, {0x71, 0x5C}, {0x71, 0x46}, {0x71, 0x47}, /* 0x54-0x57 */ + {0xFA, 0x15}, {0x71, 0xC1}, {0x71, 0xFE}, {0x72, 0xB1}, /* 0x58-0x5B */ + {0x72, 0xBE}, {0x73, 0x24}, {0xFA, 0x16}, {0x73, 0x77}, /* 0x5C-0x5F */ + {0x73, 0xBD}, {0x73, 0xC9}, {0x73, 0xD6}, {0x73, 0xE3}, /* 0x60-0x63 */ + {0x73, 0xD2}, {0x74, 0x07}, {0x73, 0xF5}, {0x74, 0x26}, /* 0x64-0x67 */ + {0x74, 0x2A}, {0x74, 0x29}, {0x74, 0x2E}, {0x74, 0x62}, /* 0x68-0x6B */ + {0x74, 0x89}, {0x74, 0x9F}, {0x75, 0x01}, {0x75, 0x6F}, /* 0x6C-0x6F */ + {0x76, 0x82}, {0x76, 0x9C}, {0x76, 0x9E}, {0x76, 0x9B}, /* 0x70-0x73 */ + {0x76, 0xA6}, {0xFA, 0x17}, {0x77, 0x46}, {0x52, 0xAF}, /* 0x74-0x77 */ + {0x78, 0x21}, {0x78, 0x4E}, {0x78, 0x64}, {0x78, 0x7A}, /* 0x78-0x7B */ + {0x79, 0x30}, {0xFA, 0x18}, {0xFA, 0x19}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0xFA, 0x1A}, {0x79, 0x94}, {0xFA, 0x1B}, {0x79, 0x9B}, /* 0x80-0x83 */ + {0x7A, 0xD1}, {0x7A, 0xE7}, {0xFA, 0x1C}, {0x7A, 0xEB}, /* 0x84-0x87 */ + {0x7B, 0x9E}, {0xFA, 0x1D}, {0x7D, 0x48}, {0x7D, 0x5C}, /* 0x88-0x8B */ + {0x7D, 0xB7}, {0x7D, 0xA0}, {0x7D, 0xD6}, {0x7E, 0x52}, /* 0x8C-0x8F */ + {0x7F, 0x47}, {0x7F, 0xA1}, {0xFA, 0x1E}, {0x83, 0x01}, /* 0x90-0x93 */ + {0x83, 0x62}, {0x83, 0x7F}, {0x83, 0xC7}, {0x83, 0xF6}, /* 0x94-0x97 */ + {0x84, 0x48}, {0x84, 0xB4}, {0x85, 0x53}, {0x85, 0x59}, /* 0x98-0x9B */ + {0x85, 0x6B}, {0xFA, 0x1F}, {0x85, 0xB0}, {0xFA, 0x20}, /* 0x9C-0x9F */ + {0xFA, 0x21}, {0x88, 0x07}, {0x88, 0xF5}, {0x8A, 0x12}, /* 0xA0-0xA3 */ + {0x8A, 0x37}, {0x8A, 0x79}, {0x8A, 0xA7}, {0x8A, 0xBE}, /* 0xA4-0xA7 */ + {0x8A, 0xDF}, {0xFA, 0x22}, {0x8A, 0xF6}, {0x8B, 0x53}, /* 0xA8-0xAB */ + {0x8B, 0x7F}, {0x8C, 0xF0}, {0x8C, 0xF4}, {0x8D, 0x12}, /* 0xAC-0xAF */ + {0x8D, 0x76}, {0xFA, 0x23}, {0x8E, 0xCF}, {0xFA, 0x24}, /* 0xB0-0xB3 */ + {0xFA, 0x25}, {0x90, 0x67}, {0x90, 0xDE}, {0xFA, 0x26}, /* 0xB4-0xB7 */ + {0x91, 0x15}, {0x91, 0x27}, {0x91, 0xDA}, {0x91, 0xD7}, /* 0xB8-0xBB */ + {0x91, 0xDE}, {0x91, 0xED}, {0x91, 0xEE}, {0x91, 0xE4}, /* 0xBC-0xBF */ + {0x91, 0xE5}, {0x92, 0x06}, {0x92, 0x10}, {0x92, 0x0A}, /* 0xC0-0xC3 */ + {0x92, 0x3A}, {0x92, 0x40}, {0x92, 0x3C}, {0x92, 0x4E}, /* 0xC4-0xC7 */ + {0x92, 0x59}, {0x92, 0x51}, {0x92, 0x39}, {0x92, 0x67}, /* 0xC8-0xCB */ + {0x92, 0xA7}, {0x92, 0x77}, {0x92, 0x78}, {0x92, 0xE7}, /* 0xCC-0xCF */ + {0x92, 0xD7}, {0x92, 0xD9}, {0x92, 0xD0}, {0xFA, 0x27}, /* 0xD0-0xD3 */ + {0x92, 0xD5}, {0x92, 0xE0}, {0x92, 0xD3}, {0x93, 0x25}, /* 0xD4-0xD7 */ + {0x93, 0x21}, {0x92, 0xFB}, {0xFA, 0x28}, {0x93, 0x1E}, /* 0xD8-0xDB */ + {0x92, 0xFF}, {0x93, 0x1D}, {0x93, 0x02}, {0x93, 0x70}, /* 0xDC-0xDF */ + {0x93, 0x57}, {0x93, 0xA4}, {0x93, 0xC6}, {0x93, 0xDE}, /* 0xE0-0xE3 */ + {0x93, 0xF8}, {0x94, 0x31}, {0x94, 0x45}, {0x94, 0x48}, /* 0xE4-0xE7 */ + {0x95, 0x92}, {0xF9, 0xDC}, {0xFA, 0x29}, {0x96, 0x9D}, /* 0xE8-0xEB */ + {0x96, 0xAF}, {0x97, 0x33}, {0x97, 0x3B}, {0x97, 0x43}, /* 0xEC-0xEF */ + {0x97, 0x4D}, {0x97, 0x4F}, {0x97, 0x51}, {0x97, 0x55}, /* 0xF0-0xF3 */ + {0x98, 0x57}, {0x98, 0x65}, {0xFA, 0x2A}, {0xFA, 0x2B}, /* 0xF4-0xF7 */ + {0x99, 0x27}, {0xFA, 0x2C}, {0x99, 0x9E}, {0x9A, 0x4E}, /* 0xF8-0xFB */ + {0x9A, 0xD9}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9A, 0xDC}, {0x9B, 0x75}, {0x9B, 0x72}, {0x9B, 0x8F}, /* 0x40-0x43 */ + {0x9B, 0xB1}, {0x9B, 0xBB}, {0x9C, 0x00}, {0x9D, 0x70}, /* 0x44-0x47 */ + {0x9D, 0x6B}, {0xFA, 0x2D}, {0x9E, 0x19}, {0x9E, 0xD1}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_81, c2u_82, c2u_83, c2u_84, NULL, NULL, c2u_87, + c2u_88, c2u_89, c2u_8A, c2u_8B, c2u_8C, c2u_8D, c2u_8E, c2u_8F, + c2u_90, c2u_91, c2u_92, c2u_93, c2u_94, c2u_95, c2u_96, c2u_97, + c2u_98, c2u_99, c2u_9A, c2u_9B, c2u_9C, c2u_9D, c2u_9E, c2u_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, NULL, NULL, c2u_ED, c2u_EE, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, c2u_FA, c2u_FB, c2u_FC, NULL, NULL, NULL, +}; + +static unsigned char u2c_03[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x83, 0x9F, 0x83, 0x00, 0x83, 0x00, /* 0x90-0x93 */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0x94-0x97 */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0x98-0x9B */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0x9C-0x9F */ + 0x83, 0x00, 0x83, 0x00, 0x3F, 0x3F, 0x83, 0x00, /* 0xA0-0xA3 */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0xA4-0xA7 */ + 0x83, 0x00, 0x83, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0xB0-0xB3 */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0xB4-0xB7 */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0xB8-0xBB */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0xBC-0xBF */ + 0x83, 0x00, 0x83, 0x00, 0x3F, 0x3F, 0x83, 0x00, /* 0xC0-0xC3 */ + 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, 0x83, 0x00, /* 0xC4-0xC7 */ + 0x83, 0x00, 0x83, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_04[512] = { + 0x3F, 0x3F, 0x84, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x84, 0x40, 0x84, 0x41, 0x84, 0x42, 0x84, 0x43, /* 0x10-0x13 */ + 0x84, 0x44, 0x84, 0x45, 0x84, 0x47, 0x84, 0x48, /* 0x14-0x17 */ + 0x84, 0x49, 0x84, 0x4A, 0x84, 0x4B, 0x84, 0x4C, /* 0x18-0x1B */ + 0x84, 0x4D, 0x84, 0x4E, 0x84, 0x4F, 0x84, 0x50, /* 0x1C-0x1F */ + 0x84, 0x51, 0x84, 0x52, 0x84, 0x53, 0x84, 0x54, /* 0x20-0x23 */ + 0x84, 0x55, 0x84, 0x56, 0x84, 0x57, 0x84, 0x58, /* 0x24-0x27 */ + 0x84, 0x59, 0x84, 0x5A, 0x84, 0x5B, 0x84, 0x5C, /* 0x28-0x2B */ + 0x84, 0x5D, 0x84, 0x5E, 0x84, 0x5F, 0x84, 0x60, /* 0x2C-0x2F */ + 0x84, 0x70, 0x84, 0x71, 0x84, 0x72, 0x84, 0x73, /* 0x30-0x33 */ + 0x84, 0x74, 0x84, 0x75, 0x84, 0x77, 0x84, 0x78, /* 0x34-0x37 */ + 0x84, 0x79, 0x84, 0x7A, 0x84, 0x7B, 0x84, 0x7C, /* 0x38-0x3B */ + 0x84, 0x7D, 0x84, 0x7E, 0x84, 0x80, 0x84, 0x81, /* 0x3C-0x3F */ + 0x84, 0x82, 0x84, 0x83, 0x84, 0x84, 0x84, 0x85, /* 0x40-0x43 */ + 0x84, 0x86, 0x84, 0x87, 0x84, 0x88, 0x84, 0x89, /* 0x44-0x47 */ + 0x84, 0x8A, 0x84, 0x8B, 0x84, 0x8C, 0x84, 0x8D, /* 0x48-0x4B */ + 0x84, 0x8E, 0x84, 0x8F, 0x84, 0x90, 0x84, 0x91, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x84, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_20[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x81, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x81, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x81, 0x65, 0x81, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x81, 0x67, 0x81, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x81, 0x00, 0x81, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x81, 0x64, 0x81, 0x63, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x81, 0x00, 0x3F, 0x3F, 0x81, 0x8C, 0x81, 0x8D, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_21[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x8E, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x59, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D, /* 0x60-0x63 */ + 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50, 0x00, 0x51, /* 0x64-0x67 */ + 0x00, 0x52, 0x00, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, /* 0x70-0x73 */ + 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, /* 0x74-0x77 */ + 0x00, 0x48, 0x00, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, 0x81, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x81, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_22[512] = { + 0x81, 0x00, 0x3F, 0x3F, 0x81, 0x00, 0x81, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, /* 0x04-0x07 */ + 0x81, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x87, 0x94, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x95, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x81, 0x00, 0x81, 0x87, 0x87, 0x98, /* 0x1C-0x1F */ + 0x87, 0x97, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x81, 0x61, 0x3F, 0x3F, 0x81, 0x00, /* 0x24-0x27 */ + 0x81, 0x00, 0x87, 0x9B, 0x87, 0x9C, 0x87, 0x92, /* 0x28-0x2B */ + 0x81, 0x00, 0x3F, 0x3F, 0x87, 0x93, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x81, 0x88, 0x00, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x81, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x90, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x81, 0x82, 0x87, 0x91, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x85, 0x81, 0x86, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x81, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x81, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x81, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x87, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x99, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_23[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_24[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x87, 0x40, 0x87, 0x41, 0x87, 0x42, 0x87, 0x43, /* 0x60-0x63 */ + 0x87, 0x44, 0x87, 0x45, 0x87, 0x46, 0x87, 0x47, /* 0x64-0x67 */ + 0x87, 0x48, 0x87, 0x49, 0x87, 0x4A, 0x87, 0x4B, /* 0x68-0x6B */ + 0x87, 0x4C, 0x87, 0x4D, 0x87, 0x4E, 0x87, 0x4F, /* 0x6C-0x6F */ + 0x87, 0x50, 0x87, 0x51, 0x87, 0x52, 0x87, 0x53, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_25[512] = { + 0x84, 0x9F, 0x84, 0x00, 0x84, 0x00, 0x84, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x0C-0x0F */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x10-0x13 */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x14-0x17 */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x18-0x1B */ + 0x84, 0x00, 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x20-0x23 */ + 0x84, 0x00, 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x28-0x2B */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x2C-0x2F */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x30-0x33 */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x34-0x37 */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x38-0x3B */ + 0x84, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x84, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x81, 0x00, 0x81, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x81, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x81, 0x00, 0x81, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x9F, 0x81, 0x9E, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x9B, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x9D, 0x81, 0x9C, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_26[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x81, 0x9A, 0x81, 0x99, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x81, 0x8A, 0x3F, 0x3F, 0x81, 0x89, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x00, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x81, 0x00, 0x3F, 0x3F, 0x81, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_30[512] = { + 0x81, 0x40, 0x81, 0x41, 0x81, 0x42, 0x81, 0x56, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x81, 0x58, 0x81, 0x59, 0x81, 0x5A, /* 0x04-0x07 */ + 0x81, 0x71, 0x81, 0x72, 0x81, 0x73, 0x81, 0x74, /* 0x08-0x0B */ + 0x81, 0x75, 0x81, 0x76, 0x81, 0x77, 0x81, 0x78, /* 0x0C-0x0F */ + 0x81, 0x79, 0x81, 0x7A, 0x81, 0x00, 0x81, 0x00, /* 0x10-0x13 */ + 0x81, 0x6B, 0x81, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x87, 0x80, 0x3F, 0x3F, 0x87, 0x81, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x82, 0x9F, 0x82, 0x00, 0x82, 0x00, /* 0x40-0x43 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x44-0x47 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x48-0x4B */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x4C-0x4F */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x50-0x53 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x54-0x57 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x58-0x5B */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x5C-0x5F */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x60-0x63 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x64-0x67 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x68-0x6B */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x6C-0x6F */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x70-0x73 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x74-0x77 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x78-0x7B */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x7C-0x7F */ + + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x80-0x83 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x84-0x87 */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x88-0x8B */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x8C-0x8F */ + 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x4A, /* 0x98-0x9B */ + 0x81, 0x4B, 0x81, 0x54, 0x81, 0x55, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x83, 0x40, 0x83, 0x41, 0x83, 0x42, /* 0xA0-0xA3 */ + 0x83, 0x43, 0x83, 0x44, 0x83, 0x45, 0x83, 0x46, /* 0xA4-0xA7 */ + 0x83, 0x47, 0x83, 0x48, 0x83, 0x49, 0x83, 0x4A, /* 0xA8-0xAB */ + 0x83, 0x4B, 0x83, 0x4C, 0x83, 0x4D, 0x83, 0x4E, /* 0xAC-0xAF */ + 0x83, 0x4F, 0x83, 0x50, 0x83, 0x51, 0x83, 0x52, /* 0xB0-0xB3 */ + 0x83, 0x53, 0x83, 0x54, 0x83, 0x55, 0x83, 0x56, /* 0xB4-0xB7 */ + 0x83, 0x57, 0x83, 0x58, 0x83, 0x59, 0x83, 0x5A, /* 0xB8-0xBB */ + 0x83, 0x5B, 0x83, 0x5C, 0x83, 0x5D, 0x83, 0x5E, /* 0xBC-0xBF */ + 0x83, 0x5F, 0x83, 0x60, 0x83, 0x61, 0x83, 0x62, /* 0xC0-0xC3 */ + 0x83, 0x63, 0x83, 0x64, 0x83, 0x65, 0x83, 0x66, /* 0xC4-0xC7 */ + 0x83, 0x67, 0x83, 0x68, 0x83, 0x69, 0x83, 0x6A, /* 0xC8-0xCB */ + 0x83, 0x6B, 0x83, 0x6C, 0x83, 0x6D, 0x83, 0x6E, /* 0xCC-0xCF */ + 0x83, 0x6F, 0x83, 0x70, 0x83, 0x71, 0x83, 0x72, /* 0xD0-0xD3 */ + 0x83, 0x73, 0x83, 0x74, 0x83, 0x75, 0x83, 0x76, /* 0xD4-0xD7 */ + 0x83, 0x77, 0x83, 0x78, 0x83, 0x79, 0x83, 0x7A, /* 0xD8-0xDB */ + 0x83, 0x7B, 0x83, 0x7C, 0x83, 0x7D, 0x83, 0x7E, /* 0xDC-0xDF */ + 0x83, 0x80, 0x83, 0x81, 0x83, 0x82, 0x83, 0x83, /* 0xE0-0xE3 */ + 0x83, 0x84, 0x83, 0x85, 0x83, 0x86, 0x83, 0x87, /* 0xE4-0xE7 */ + 0x83, 0x88, 0x83, 0x89, 0x83, 0x8A, 0x83, 0x8B, /* 0xE8-0xEB */ + 0x83, 0x8C, 0x83, 0x8D, 0x83, 0x8E, 0x83, 0x8F, /* 0xEC-0xEF */ + 0x83, 0x90, 0x83, 0x91, 0x83, 0x92, 0x83, 0x93, /* 0xF0-0xF3 */ + 0x83, 0x94, 0x83, 0x95, 0x83, 0x96, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x81, 0x45, /* 0xF8-0xFB */ + 0x81, 0x5B, 0x81, 0x52, 0x81, 0x53, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_32[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x58, 0x87, 0x8B, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x87, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x87, 0x85, 0x87, 0x86, 0x87, 0x87, 0x87, 0x88, /* 0xA4-0xA7 */ + 0x87, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_33[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x65, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x87, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x87, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x87, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x61, 0x87, 0x6B, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x6A, 0x87, 0x64, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x6C, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x66, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x6E, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x87, 0x5F, 0x87, 0x6D, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x87, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x87, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x68, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x7E, /* 0x78-0x7B */ + 0x87, 0x8F, 0x87, 0x8E, 0x87, 0x8D, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x87, 0x72, 0x87, 0x73, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x87, 0x6F, 0x87, 0x70, 0x87, 0x71, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x87, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x87, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x87, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4E[512] = { + 0x88, 0x00, 0x92, 0x9A, 0x3F, 0x3F, 0x8E, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x9C, /* 0x04-0x07 */ + 0x8F, 0x00, 0x8E, 0x4F, 0x8F, 0x00, 0x89, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x95, 0x73, 0x97, 0x5E, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x98, 0x00, 0x89, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x8A, 0x8E, 0x98, 0x00, 0x90, 0x00, 0x99, 0x00, /* 0x14-0x17 */ + 0x8B, 0x75, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x00, 0x68, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x92, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x98, 0x00, 0x8B, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x8A, 0x00, 0x92, 0x4F, 0x3F, 0x3F, 0x8E, 0x00, /* 0x38-0x3B */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x94, 0x54, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x8B, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x56, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x93, 0x00, 0x8C, 0x00, 0x96, 0x52, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x68, 0x98, 0x00, 0x8F, 0x00, /* 0x54-0x57 */ + 0x98, 0x00, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x8B, 0x00, 0x8C, 0x00, 0x96, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x97, 0x90, 0x3F, 0x3F, 0x93, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x8B, 0x54, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x98, 0x00, 0x97, 0x00, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x97, 0x5C, 0x91, 0x88, 0x98, 0x00, 0x8E, 0x96, /* 0x88-0x8B */ + 0x93, 0x00, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x89, 0x5D, 0x8C, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x8C, 0x00, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x98, 0x6A, 0x98, 0x69, 0x3F, 0x3F, 0x8D, 0x00, /* 0x98-0x9B */ + 0x88, 0x9F, 0x3F, 0x3F, 0x98, 0x00, 0x98, 0x00, /* 0x9C-0x9F */ + 0x98, 0x00, 0x96, 0x53, 0x98, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x8C, 0x00, 0x88, 0x00, 0x96, 0x92, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x8B, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x9D, /* 0xA8-0xAB */ + 0x8B, 0x9E, 0x92, 0x00, 0x97, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x6C, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x8F, 0x59, 0x90, 0x6D, 0x98, 0x00, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x98, 0x00, 0x3F, 0x3F, 0x98, 0x00, 0x8B, 0x77, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x89, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x98, 0x00, 0x98, 0x00, 0x95, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x8E, 0x65, 0x8E, 0x64, 0x91, 0x00, 0x98, 0x00, /* 0xD4-0xD7 */ + 0x95, 0x74, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x81, 0x57, 0x98, 0x00, 0x98, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x69, 0x3F, 0x3F, 0x91, 0x00, /* 0xE0-0xE3 */ + 0x97, 0x00, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x98, 0x00, 0x89, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x8B, 0x00, 0x3F, 0x3F, 0x92, 0x87, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x8F, 0x98, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x43, /* 0xF8-0xFB */ + 0x00, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0x00, 0x6B, 0x8A, 0x00, 0x3F, 0x3F, 0x00, 0x6C, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x98, 0x00, 0x88, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x8C, 0x00, 0x8A, 0x00, 0x95, 0x9A, /* 0x0C-0x0F */ + 0x94, 0x00, 0x8B, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x98, 0x00, 0x93, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x8C, /* 0x2C-0x2F */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x94, 0x00, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x90, 0x4C, 0x00, 0x6D, 0x8E, 0x66, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x8E, 0x97, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x41, 0x98, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x88, 0x00, 0x92, 0x00, 0x8F, 0x5A, /* 0x4C-0x4F */ + 0x8D, 0x00, 0x97, 0x43, 0x3F, 0x3F, 0x91, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x89, 0x00, 0x00, 0x6E, 0x98, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x97, 0x5D, 0x98, 0x00, 0x98, 0x00, /* 0x58-0x5B */ + 0x8D, 0x00, 0x98, 0x00, 0x9B, 0x43, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, /* 0x6C-0x6F */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x95, 0x00, 0x98, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, /* 0x78-0x7B */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x67, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x98, 0x00, 0x3F, 0x3F, 0x00, 0x70, 0x97, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x8E, 0x98, 0x3F, 0x3F, 0x98, 0x00, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x98, 0x00, 0x00, 0x6F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x72, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x98, 0x00, 0x3F, 0x3F, 0x00, 0x71, 0x8B, 0x9F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x8B, 0x00, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x44, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x96, 0x99, 0x95, 0x8E, 0x8C, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x90, 0x4E, 0x97, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x57, 0x91, 0x00, /* 0xC0-0xC3 */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x00, 0x61, 0x8F, 0x72, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x73, 0x98, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x98, 0x00, 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0xD4-0xD7 */ + 0x98, 0x00, 0x3F, 0x3F, 0x98, 0x00, 0x98, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x98, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x90, 0x4D, 0x3F, 0x3F, 0x96, 0x93, /* 0xE0-0xE3 */ + 0x98, 0x00, 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x43, 0x98, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x6F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x95, 0x55, 0x98, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x95, 0x00, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x00, 0x76, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x98, 0x00, 0x98, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x91, 0x71, 0x3F, 0x3F, 0x8C, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x94, 0x7B, 0x3F, 0x3F, 0x00, 0x00, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x98, 0x00, 0x93, 0x7C, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x98, 0x00, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x98, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x77, 0x8E, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x98, 0x00, 0x00, 0x75, 0x95, 0x00, /* 0x20-0x23 */ + 0x92, 0x6C, 0x98, 0x00, 0x8C, 0x91, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x98, 0x00, 0x98, 0x00, 0x98, 0x00, 0x97, 0x00, /* 0x28-0x2B */ + 0x98, 0x00, 0x98, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x8C, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x00, 0x74, 0x3F, 0x3F, 0x00, 0x7A, 0x98, 0x00, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x78, 0x98, 0x00, /* 0x44-0x47 */ + 0x98, 0x00, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x4C-0x4F */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x98, 0x00, 0x98, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x8C, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x79, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x91, 0x00, 0x92, 0x00, 0x8B, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x8B, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x96, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x8C, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x8E, 0x50, 0x94, 0x00, 0x98, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x8D, 0x00, 0x97, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, 0x99, 0x42, /* 0xB0-0xB3 */ + 0x98, 0x00, 0x8D, 0x00, 0x3F, 0x3F, 0x8F, 0x9D, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x58, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x43, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x99, 0x40, 0x99, 0x41, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x91, 0x9C, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x96, 0x6C, 0x99, 0x44, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x7D, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x45, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x48, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x99, 0x46, 0x3F, 0x3F, 0x91, 0x6D, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x99, 0x47, 0x99, 0x49, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x7C, 0x99, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x99, 0x4A, 0x3F, 0x3F, 0x95, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0x8B, 0x56, 0x99, 0x4D, 0x99, 0x4E, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x99, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x99, 0x51, 0x99, 0x50, 0x99, 0x4F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x98, 0x00, 0x3F, 0x3F, 0x99, 0x52, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x9E, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x99, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x44, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x55, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x54, 0x99, 0x57, /* 0x38-0x3B */ + 0x99, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x58, /* 0x3C-0x3F */ + 0x99, 0x59, 0x88, 0x00, 0x3F, 0x3F, 0x8C, 0x00, /* 0x40-0x43 */ + 0x8C, 0x5A, 0x8F, 0x5B, 0x92, 0x9B, 0x8B, 0x00, /* 0x44-0x47 */ + 0x90, 0x00, 0x8C, 0x00, 0x00, 0x7E, 0x8D, 0x8E, /* 0x48-0x4B */ + 0x99, 0x5B, 0x96, 0x00, 0x93, 0x65, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8E, 0x99, 0x3F, 0x3F, 0x99, 0x5A, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x99, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x7D, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x8A, 0x95, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x5D, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x80, 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x91, 0x53, 0x99, 0x5F, 0x99, 0x60, 0x94, 0x00, /* 0x68-0x6B */ + 0x8C, 0x00, 0x98, 0x5A, 0x99, 0x61, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x95, 0x00, 0x91, 0x00, 0x8B, 0x00, /* 0x74-0x77 */ + 0x93, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x8C, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x99, 0x62, 0x3F, 0x3F, 0x99, 0x63, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x93, 0x00, 0x89, 0x7E, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x99, 0x66, 0x8D, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x99, 0x65, 0x8D, 0x00, 0x3F, 0x3F, 0x99, 0x67, /* 0x8C-0x8F */ + 0x00, 0x00, 0x99, 0x68, 0x96, 0x60, 0x99, 0x69, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x99, 0x6A, 0x99, 0x6B, 0x8F, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x00, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x8A, 0x00, 0x3F, 0x3F, 0x99, 0x6E, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x99, 0x6C, 0x96, 0x00, 0x99, 0x6D, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x95, 0x79, 0x99, 0x6F, 0x99, 0x70, 0x99, 0x71, /* 0xA8-0xAB */ + 0x93, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x99, 0x75, 0x99, 0x73, 0x99, 0x74, 0x99, 0x72, /* 0xB0-0xB3 */ + 0x8D, 0x00, 0x99, 0x76, 0x96, 0x00, 0x97, 0x00, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x99, 0x77, 0x00, 0x82, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x90, 0x00, 0x99, 0x78, 0x8F, 0x79, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x99, 0x79, 0x3F, 0x3F, 0x92, 0x9C, /* 0xC8-0xCB */ + 0x97, 0x00, 0x93, 0x80, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x7A, /* 0xD8-0xDB */ + 0x00, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x99, 0x7B, 0x96, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x88, 0x91, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x99, 0x7D, 0x93, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x00, 0x83, 0x99, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x99, 0x80, 0x8A, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x99, 0x81, 0x8B, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x93, 0x00, 0x89, 0x9A, 0x8F, 0x6F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x94, 0x9F, 0x99, 0x82, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0x93, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x6E, /* 0x00-0x03 */ + 0x99, 0x83, 0x3F, 0x3F, 0x95, 0x00, 0x90, 0x00, /* 0x04-0x07 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x8A, 0x00, 0x99, 0x84, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x86, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x8C, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x99, 0x85, 0x00, 0x84, 0x3F, 0x3F, 0x97, 0x00, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x8F, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x94, 0x00, 0x95, 0x00, 0x3F, 0x3F, 0x99, 0x87, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x97, 0x98, 0x99, 0x88, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x89, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x93, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x8A, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x8D, 0x00, /* 0x34-0x37 */ + 0x8C, 0x94, 0x99, 0x8B, 0x8E, 0x68, 0x8D, 0x8F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x40-0x43 */ + 0x99, 0x8D, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x99, 0x8E, /* 0x48-0x4B */ + 0x99, 0x8F, 0x91, 0x4F, 0x3F, 0x3F, 0x99, 0x8C, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x99, 0x91, 0x3F, 0x3F, 0x96, 0x55, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x84, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x90, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x95, /* 0x60-0x63 */ + 0x8D, 0x00, 0x94, 0x8D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x99, 0x94, 0x99, 0x92, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x9B, /* 0x6C-0x6F */ + 0x8F, 0x00, 0x99, 0x9B, 0x8A, 0x84, 0x99, 0x95, /* 0x70-0x73 */ + 0x99, 0x93, 0x91, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x99, 0x97, 0x3F, 0x3F, 0x99, 0x96, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x63, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x80, /* 0x84-0x87 */ + 0x99, 0x9C, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x99, 0x98, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x99, 0x9D, 0x99, 0x9A, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x99, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0x98-0x9B */ + 0x00, 0x85, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x9C-0x9F */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x86, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x8F, 0x95, 0x93, 0x77, 0x8D, 0x85, /* 0xA8-0xAB */ + 0x99, 0x00, 0x99, 0x00, 0x3F, 0x3F, 0x00, 0x77, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x98, 0x4A, 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x99, 0x00, 0x3F, 0x3F, 0x8A, 0x4E, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x87, 0x99, 0x00, 0x3F, 0x3F, 0x96, 0x75, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x97, 0x45, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x99, 0x00, /* 0xD4-0xD7 */ + 0x8A, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x00, 0x88, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x8F, 0x9F, 0x99, 0x00, 0x95, 0x00, /* 0xDC-0xDF */ + 0x99, 0x00, 0x3F, 0x3F, 0x90, 0x00, 0x99, 0x00, /* 0xE0-0xE3 */ + 0x8B, 0x00, 0x3F, 0x3F, 0x99, 0x00, 0x8A, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x4D, 0x99, 0x00, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x99, 0x00, 0x99, 0x00, 0x8E, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x96, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0x00, 0x89, 0x96, 0x00, 0x93, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x95, 0x00, 0x99, 0x00, 0x00, 0x8A, /* 0x04-0x07 */ + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x99, 0x00, /* 0x0C-0x0F */ + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x99, 0x00, 0x89, 0x00, 0x96, 0x6B, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x8D, 0x00, 0x99, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x91, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x8F, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x99, 0x00, /* 0x20-0x23 */ + 0x00, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x99, 0x00, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x99, 0x00, 0x95, 0x43, 0x8B, 0x00, 0x88, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0x3C-0x3F */ + 0x99, 0x00, 0x8F, 0x5C, 0x3F, 0x3F, 0x90, 0x00, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x99, 0x00, 0x99, 0x00, 0x8F, 0x00, /* 0x44-0x47 */ + 0x8C, 0x00, 0x99, 0x00, 0x94, 0x00, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x94, 0x00, 0x91, 0x00, 0x91, 0x00, /* 0x50-0x53 */ + 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0x54-0x57 */ + 0x92, 0x50, 0x3F, 0x3F, 0x94, 0x8E, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x96, 0x6D, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x54, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x89, 0x4B, /* 0x6C-0x6F */ + 0x88, 0x00, 0x8A, 0x00, 0x00, 0x8C, 0x91, 0x00, /* 0x70-0x73 */ + 0x8B, 0x70, 0x97, 0x91, 0x3F, 0x3F, 0x99, 0x00, /* 0x74-0x77 */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8D, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x97, 0x00, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x9C-0x9F */ + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x99, 0x00, 0x99, 0x00, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x90, 0x7E, 0x89, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x89, 0x7D, 0x99, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x99, 0x00, 0x3F, 0x3F, 0x00, 0x8E, 0x8C, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x8E, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x51, 0x99, 0x00, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x96, 0x94, 0x8D, 0x00, 0x8B, 0x79, 0x97, 0x46, /* 0xC8-0xCB */ + 0x91, 0x6F, 0x94, 0x00, 0x8E, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x8F, 0x66, 0x3F, 0x3F, 0x8E, 0x00, 0x8E, 0x00, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x8F, 0x96, 0x3F, 0x3F, 0x94, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x00, 0x8F, 0x3F, 0x3F, 0x99, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x89, 0x62, 0x91, 0x70, 0x8C, 0x00, /* 0xE0-0xE3 */ + 0x8C, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x99, 0x00, 0x92, 0x40, 0x91, 0x00, 0x8B, 0x00, /* 0xE8-0xEB */ + 0x8F, 0x00, 0x99, 0x00, 0x99, 0x00, 0x89, 0x00, /* 0xEC-0xEF */ + 0x91, 0x00, 0x8E, 0x00, 0x8E, 0x6A, 0x89, 0x45, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x90, 0x8D, 0x86, /* 0xF4-0xF7 */ + 0x8E, 0x69, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_54[512] = { + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x8B, 0x68, /* 0x00-0x03 */ + 0x8A, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x8D, 0x87, 0x8B, 0x67, 0x92, 0x00, 0x89, 0x44, /* 0x08-0x0B */ + 0x93, 0x00, 0x96, 0x00, 0x8D, 0x40, 0x97, 0x99, /* 0x0C-0x0F */ + 0x93, 0x66, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x4E, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x8B, 0x00, /* 0x1C-0x1F */ + 0x96, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x8A, 0x00, /* 0x28-0x2B */ + 0x99, 0x00, 0x99, 0x00, 0x99, 0x00, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x8B, 0x7A, 0x90, 0x81, 0x3F, 0x3F, 0x95, 0x00, /* 0x38-0x3B */ + 0x99, 0x00, 0x99, 0x00, 0x8C, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x99, 0x00, 0x3F, 0x3F, 0x98, 0x43, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x92, 0x00, 0x8C, 0x00, 0x8D, 0x90, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x8E, 0x00, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x99, 0x00, 0x99, 0x00, 0x3F, 0x3F, 0x96, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x99, 0x00, 0x99, 0x00, 0x99, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, /* 0x78-0x7B */ + 0x8C, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x99, 0x00, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x92, 0x8D, 0x00, /* 0x88-0x8B */ + 0x98, 0x61, 0x3F, 0x3F, 0x99, 0x00, 0x99, 0x00, /* 0x8C-0x8F */ + 0x99, 0x00, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x00, 0x91, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x9A, 0x42, 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x99, 0x00, 0x00, 0x93, 0x3F, 0x3F, 0x9A, 0x40, /* 0xA8-0xAB */ + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x5D, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x8A, 0x50, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x9A, 0x44, 0x88, 0x00, 0x9A, 0x43, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x88, 0x00, 0x95, 0x69, 0x9A, 0x41, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x99, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x00, /* 0xC4-0xC7 */ + 0x99, 0x00, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x9A, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x88, 0x00, 0x9A, 0x4E, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x9A, 0x46, 0x9A, 0x47, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x8F, 0x00, 0x96, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x9A, 0x4C, 0x9A, 0x4B, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x4E, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x4D, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x9A, 0x4A, 0x3F, 0x3F, 0x00, 0x94, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x89, 0x53, 0x3F, 0x3F, 0x8D, 0x00, 0x90, 0x4F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x48, /* 0x0C-0x0F */ + 0x93, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x9A, 0x49, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x53, 0x97, 0x42, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x9A, 0x59, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9A, 0x58, 0x9A, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x9A, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x91, 0x00, 0x9A, 0x55, 0x8F, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x9A, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x5B, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x56, 0x9A, 0x57, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x9A, 0x54, 0x9A, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x51, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x60, /* 0x78-0x7B */ + 0x9A, 0x65, 0x3F, 0x3F, 0x9A, 0x61, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x9A, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x66, /* 0x80-0x83 */ + 0x91, 0x50, 0x3F, 0x3F, 0x00, 0x95, 0x9A, 0x68, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x8D, 0x41, 0x9A, 0x5E, 0x92, 0x9D, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x9A, 0x62, 0x9A, 0x5B, 0x8A, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x8A, 0x00, 0x8A, 0x85, 0x9A, 0x63, 0x9A, 0x5F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x96, /* 0xA4-0xA7 */ + 0x9A, 0x69, 0x9A, 0x67, 0x91, 0x72, 0x8B, 0x69, /* 0xA8-0xAB */ + 0x8B, 0x00, 0x3F, 0x3F, 0x9A, 0x64, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x63, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x9A, 0x6D, 0x9A, 0x6B, 0x3F, 0x3F, 0x9A, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x9A, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x6A, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x9A, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x6C, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x6B, /* 0xE0-0xE3 */ + 0x9A, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x72, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x9A, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x9A, 0x75, 0x9A, 0x74, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x51, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x9A, 0x71, 0x3F, 0x3F, 0x9A, 0x73, 0x8F, 0x00, /* 0x14-0x17 */ + 0x89, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x76, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x82, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8F, 0x00, 0x9A, 0x7D, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x9A, 0x7B, 0x3F, 0x3F, 0x9A, 0x7C, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9A, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x5C, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x91, 0x58, 0x3F, 0x3F, 0x9A, 0x78, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x9A, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x9A, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x9A, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x9A, 0x84, 0x9A, 0x80, /* 0x68-0x6B */ + 0x9A, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x93, 0x00, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x9A, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x85, 0x8A, 0x64, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x87, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x8A, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x9A, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x9A, 0x88, 0x3F, 0x3F, 0x94, 0x58, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x9A, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x8C, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x9A, 0x8E, 0x3F, 0x3F, 0x9A, 0x8D, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x9A, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x9A, 0x93, 0x9A, 0x91, 0x9A, 0x8F, 0x9A, 0x92, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x9A, 0x94, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x95, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x9A, 0x96, 0x3F, 0x3F, 0x9A, 0x97, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x98, /* 0xD4-0xD7 */ + 0x99, 0x64, 0x3F, 0x3F, 0x8E, 0x00, 0x8E, 0x6C, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x63, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x99, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x8D, 0x00, 0x3F, 0x3F, 0x88, 0x00, 0x90, 0x7D, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x9A, 0x9A, 0x8C, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x8D, 0x91, 0x3F, 0x3F, 0x9A, 0x9C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x9A, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x00-0x03 */ + 0x9A, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x9A, 0x9F, 0x9A, 0x9E, 0x3F, 0x3F, 0x9A, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x8C, 0x97, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x80, 0x9A, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x79, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x88, 0x00, /* 0x24-0x27 */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x8C, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x92, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0x34-0x37 */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x9A, 0x00, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x56, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x9A, 0x00, /* 0x4C-0x4F */ + 0x8D, 0x00, 0x8D, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x8D, 0x00, 0x00, 0x97, 0x92, 0x52, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x92, 0x00, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x82, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x9A, 0x00, 0x9A, 0x00, 0x3F, 0x3F, 0x8C, 0x5E, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x9A, 0x00, 0x3F, 0x3F, 0x8D, 0x43, 0x8A, 0x5F, /* 0xA0-0xA3 */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x00, 0x98, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x00, 0x9A, /* 0xC4-0xC7 */ + 0x00, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x84, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x9A, 0x00, /* 0xD0-0xD3 */ + 0x9A, 0x00, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x94, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xDC-0xDF */ + 0x95, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x94, 0x7C, 0x8A, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0x96, 0x78, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x8C, 0x98, 0x91, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x9A, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9F, /* 0x2C-0x2F */ + 0x89, 0x81, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x8F, 0x00, 0x93, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x95, 0x00, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x9A, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x91, 0x59, 0x9A, 0x00, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x93, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x68, /* 0x54-0x57 */ + 0x93, 0x84, 0x94, 0x00, 0x92, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x89, 0x96, 0x3F, 0x3F, 0x93, 0x55, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x9A, 0x00, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x90, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x6D, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x9D, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x92, 0x00, 0x3F, 0x3F, 0x00, 0x9D, 0x9A, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x96, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9E, 0x95, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x9A, 0x00, 0x9A, 0x00, 0x9A, 0x00, 0x9A, 0x00, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x92, 0x64, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x9A, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x8D, 0x88, 0x3F, 0x3F, 0x9A, 0x00, /* 0xD4-0xD7 */ + 0x9A, 0x00, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x9A, 0x00, 0x3F, 0x3F, 0x9A, 0x00, 0x9A, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x9A, 0x00, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x6D, /* 0xE8-0xEB */ + 0x90, 0x70, 0x3F, 0x3F, 0x91, 0x73, 0x9A, 0x00, /* 0xEC-0xEF */ + 0x90, 0x00, 0x88, 0x00, 0x94, 0x84, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x9A, 0x00, 0x9A, 0x00, /* 0xF8-0xFB */ + 0x9A, 0x00, 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x95, 0x00, 0x9A, 0x00, 0x00, 0x9F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0x0C-0x0F */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x97, 0x5B, 0x8A, 0x4F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x99, 0x00, 0x8F, 0x67, 0x91, 0x00, 0x9A, 0x00, /* 0x18-0x1B */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, 0x91, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x93, 0x56, 0x91, 0x00, 0x95, 0x76, /* 0x28-0x2B */ + 0x9A, 0x00, 0x9A, 0x00, 0x89, 0x9B, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8E, 0x00, 0x9A, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0x34-0x37 */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x89, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0x44-0x47 */ + 0x93, 0x00, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x91, 0x74, /* 0x4C-0x4F */ + 0x9A, 0x00, 0x8C, 0x5F, 0x3F, 0x3F, 0x00, 0x00, /* 0x50-0x53 */ + 0x96, 0x7A, 0x9A, 0x00, 0x3F, 0x3F, 0x93, 0x85, /* 0x54-0x57 */ + 0x9A, 0x00, 0x3F, 0x3F, 0x9A, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x9A, 0x00, 0x3F, 0x3F, 0x9A, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x89, 0x9C, 0x3F, 0x3F, 0x9A, 0x00, /* 0x64-0x67 */ + 0x8F, 0x00, 0x9A, 0x00, 0x92, 0x44, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x9A, 0x00, 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x97, /* 0x70-0x73 */ + 0x93, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x9B, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x8D, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x9B, 0x41, 0x94, 0x40, 0x94, 0x00, /* 0x80-0x83 */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x44, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x9B, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x57, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x64, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x9B, 0x00, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x9B, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x45, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x96, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x93, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x46, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x96, 0x85, 0x00, 0x00, 0x8D, 0x00, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x47, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x8E, 0x6F, 0x3F, 0x3F, 0x8E, 0x6E, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x88, 0x00, 0x8C, 0x00, 0x3F, 0x3F, 0x90, 0x00, /* 0xD0-0xD3 */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x9B, 0x4B, 0x9B, 0x4C, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x9B, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x89, 0x57, 0x8A, 0x00, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x9B, 0x48, 0x3F, 0x3F, 0x96, 0x00, 0x95, 0x50, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x70, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x88, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x9B, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x9B, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x96, 0x00, 0x3F, 0x3F, 0x9B, 0x52, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x9B, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x4E, /* 0x1C-0x1F */ + 0x90, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x9B, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x9B, 0x56, 0x9B, 0x57, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x9B, 0x53, 0x98, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x6B, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x9B, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x58, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x77, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x59, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x9B, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x7D, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x5A, 0x95, 0x51, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x9B, 0x5B, 0x9B, 0x5F, 0x9B, 0x5C, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x89, 0x00, 0x9B, 0x5E, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x9B, 0x5D, /* 0xC8-0xCB */ + 0x8C, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x9B, 0x6B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x64, 0x9B, 0x61, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x92, 0x84, 0x3F, 0x3F, 0x9B, 0x60, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x62, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x9B, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x65, 0x9B, 0x66, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x9B, 0x68, /* 0x08-0x0B */ + 0x9B, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x69, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x6C, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x89, 0x64, 0x3F, 0x3F, 0x9B, 0x6A, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x6D, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x6E, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x9B, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x6F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x9B, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8E, 0x71, 0x9B, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x8D, 0x45, 0x9B, 0x73, 0x00, 0x00, 0x8E, 0x9A, /* 0x54-0x57 */ + 0x91, 0x00, 0x3F, 0x3F, 0x9B, 0x74, 0x9B, 0x75, /* 0x58-0x5B */ + 0x8E, 0x79, 0x8D, 0x46, 0x3F, 0x3F, 0x96, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x47, /* 0x60-0x63 */ + 0x8C, 0x00, 0x9B, 0x76, 0x8A, 0x77, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x9B, 0x77, 0x3F, 0x3F, 0x91, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x9B, 0x78, 0x9B, 0x00, 0x3F, 0x3F, 0x9B, 0x79, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x9B, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x9B, 0x7B, 0x3F, 0x3F, 0x9B, 0x7D, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x9B, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x80, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x89, 0x46, /* 0x84-0x87 */ + 0x8E, 0x00, 0x88, 0x00, 0x3F, 0x3F, 0x91, 0x76, /* 0x88-0x8B */ + 0x8A, 0x00, 0x8E, 0x00, 0x3F, 0x3F, 0x8D, 0x47, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x93, 0x86, 0x3F, 0x3F, 0x8F, 0x40, /* 0x94-0x97 */ + 0x8A, 0x00, 0x92, 0x88, 0x92, 0x00, 0x88, 0x00, /* 0x98-0x9B */ + 0x8B, 0x58, 0x95, 0x00, 0x3F, 0x3F, 0x8E, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x71, 0x90, 0x00, /* 0xA0-0xA3 */ + 0x8E, 0x00, 0x97, 0x47, 0x9B, 0x81, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x7B, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x51, /* 0xB0-0xB3 */ + 0x89, 0x83, 0x8F, 0x00, 0x89, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x9B, 0x82, 0x97, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x68, /* 0xBC-0xBF */ + 0x00, 0x00, 0x3F, 0x3F, 0x8E, 0x00, 0x9B, 0x83, /* 0xC0-0xC3 */ + 0x8A, 0x00, 0x93, 0x00, 0x96, 0x00, 0x9B, 0x84, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x9B, 0x85, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x95, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x9B, 0x87, 0x3F, 0x3F, 0x8A, 0x00, 0x8B, 0x00, /* 0xD0-0xD3 */ + 0x9B, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x90, 0x51, 0x9B, 0x8B, 0x8E, 0x40, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x89, 0x00, 0x9B, 0x8A, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x9B, 0x88, 0x9B, 0x8C, 0x9B, 0x89, 0x94, 0x4A, /* 0xE4-0xE7 */ + 0x9E, 0x00, 0x90, 0x52, 0x3F, 0x3F, 0x9B, 0x8D, /* 0xE8-0xEB */ + 0x00, 0x00, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x9B, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x90, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x92, 0x9E, 0x9B, 0x8F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x90, 0x00, 0x3F, 0x3F, 0x8E, 0x9B, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x8E, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x3F, 0x3F, 0x95, 0x95, 0x90, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x8E, 0x00, 0x9B, 0x91, 0x8F, 0x00, 0x9B, 0x92, /* 0x04-0x07 */ + 0x9B, 0x93, 0x88, 0x00, 0x91, 0x00, 0x90, 0x71, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x9B, 0x94, 0x93, 0x00, 0x8F, 0x00, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x9B, 0x95, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x9B, 0x96, 0x3F, 0x3F, 0x9B, 0x97, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x9B, 0x98, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8F, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9B, 0x99, 0x9B, 0x9A, 0x8E, 0x00, 0x90, 0x4B, /* 0x38-0x3B */ + 0x93, 0x00, 0x90, 0x73, 0x94, 0x00, 0x94, 0x41, /* 0x3C-0x3F */ + 0x8B, 0x00, 0x9B, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x8B, 0x8F, 0x9B, 0x9C, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x8B, 0x00, 0x3F, 0x3F, 0x93, 0x00, 0x89, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x8E, 0x72, 0x9B, 0x9D, 0x9B, 0x00, /* 0x4C-0x4F */ + 0x9B, 0x9F, 0x8B, 0x00, 0x3F, 0x3F, 0x9B, 0x9E, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x93, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x93, 0x6A, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x91, 0x77, 0x97, 0x9A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x9B, 0x00, 0x3F, 0x3F, 0x9B, 0x00, 0x93, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x8E, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x8A, 0x00, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x91, 0x5A, 0x8A, 0x00, 0x3F, 0x3F, 0x9B, 0x00, /* 0xA8-0xAB */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x8A, 0x78, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x9B, 0x00, /* 0xB4-0xB7 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x9B, 0x00, /* 0xB8-0xBB */ + 0x9B, 0x00, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x9B, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x93, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x89, 0x00, 0x9B, 0x00, 0x9B, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x95, 0x00, /* 0xEC-0xEF */ + 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x93, 0x87, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x8F, 0x73, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x92, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x9B, 0x00, 0x9B, 0x00, 0x8A, 0x52, 0x9B, 0x00, /* 0x14-0x17 */ + 0x9B, 0x00, 0x9B, 0x00, 0x9B, 0x00, 0x9B, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x48-0x4B */ + 0x9B, 0x00, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x97, 0x92, 0x3F, 0x3F, 0x9B, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x90, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x9B, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x8D, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x88, /* 0x88-0x8B */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x9B, 0x00, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x9B, 0x00, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x8A, 0x00, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x00, 0x00, 0x3F, 0x3F, 0x9B, 0x00, 0x9B, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x90, 0x00, 0x8F, 0x42, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x8F, 0x84, 0x3F, 0x3F, 0x91, 0x83, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x8D, 0x48, 0x8D, 0x00, 0x8D, 0x49, /* 0xE4-0xE7 */ + 0x8B, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x8C, 0x00, 0x9B, 0x00, 0x96, 0x00, /* 0xF0-0xF3 */ + 0x94, 0x62, 0x9B, 0x00, 0x3F, 0x3F, 0x8D, 0x4A, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x92, 0x46, 0x8B, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x73, 0x95, 0x7A, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x08-0x0B */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x9F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x9B, 0x00, 0x9B, 0x00, 0x9B, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x90, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x74, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x91, 0x00, /* 0x2C-0x2F */ + 0x8B, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, 0x9B, 0x00, /* 0x34-0x37 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x96, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x40-0x43 */ + 0x9B, 0x00, 0x95, 0x9D, 0x3F, 0x3F, 0x9B, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x96, 0x79, 0x3F, 0x3F, 0x9B, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x9B, 0x00, 0x96, 0x8B, 0x3F, 0x3F, 0x9B, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x94, 0x00, 0x9B, 0x00, 0x95, 0x00, /* 0x60-0x63 */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x95, 0x00, /* 0x70-0x73 */ + 0x94, 0x4E, 0x9B, 0x00, 0x9B, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x8D, 0x4B, 0x8A, 0x00, 0x9B, 0x00, 0x8C, 0x00, /* 0x78-0x7B */ + 0x97, 0x63, 0x97, 0x48, 0x8A, 0x00, 0x9B, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x8D, 0x4C, /* 0x80-0x83 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x98, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x92, 0x00, 0x95, 0x00, 0x93, 0x58, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x4D, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x95, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x78, 0x8D, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x88, 0x00, 0x8F, 0x8E, 0x8D, 0x4E, /* 0xB4-0xB7 */ + 0x97, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x9B, 0x00, 0x9B, 0x00, 0x94, 0x70, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x9B, 0x00, 0x97, 0x00, 0x98, 0x4C, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9B, 0x00, /* 0xCC-0xCF */ + 0x9B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x66, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x40, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x43, 0x9C, 0x44, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x9C, 0x42, 0x3F, 0x3F, 0x95, 0x5F, /* 0xDC-0xDF */ + 0x8F, 0x00, 0x9C, 0x46, 0x9C, 0x45, 0x9C, 0x41, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x9C, 0x47, 0x9C, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x9C, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x9C, 0x4C, 0x9C, 0x4A, 0x3F, 0x3F, 0x9C, 0x4B, /* 0xF0-0xF3 */ + 0x9C, 0x4D, 0x3F, 0x3F, 0x89, 0x84, 0x92, 0x00, /* 0xF4-0xF7 */ + 0x9C, 0x4E, 0x3F, 0x3F, 0x8C, 0x9A, 0x89, 0x00, /* 0xF8-0xFB */ + 0x94, 0x55, 0x3F, 0x3F, 0x9C, 0x4F, 0x93, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x9C, 0x50, /* 0x00-0x03 */ + 0x98, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x9C, 0x51, 0x95, 0x00, 0x9C, 0x54, /* 0x08-0x0B */ + 0x98, 0x9F, 0x98, 0x00, 0x3F, 0x3F, 0x8E, 0x00, /* 0x0C-0x0F */ + 0x93, 0x00, 0x9C, 0x55, 0x3F, 0x3F, 0x8B, 0x7C, /* 0x10-0x13 */ + 0x92, 0x00, 0x88, 0x00, 0x9C, 0x56, 0x95, 0x00, /* 0x14-0x17 */ + 0x8D, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x6F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x96, 0x00, 0x8C, 0x00, 0x8C, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x9C, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x9C, 0x58, 0x3F, 0x3F, 0x9C, 0x5E, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x00, 0x00, 0x92, 0x00, 0x3F, 0x3F, 0x8B, 0x00, /* 0x34-0x37 */ + 0x9C, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x95, 0x4A, 0x3F, 0x3F, 0x92, 0x65, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x9C, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x9C, 0x5B, 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x9C, 0x5C, 0x3F, 0x3F, 0x9C, 0x5D, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x9C, 0x5F, 0x3F, 0x3F, 0x93, 0x96, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x60, 0x9C, 0x61, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9C, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x9C, 0x53, 0x9C, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x9C, 0x63, 0x8C, 0x60, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x46, 0x00, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x8D, 0x00, 0x95, 0x56, 0x92, 0x00, /* 0x68-0x6B */ + 0x95, 0x6A, 0x9C, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x8F, 0x00, 0x89, 0x65, 0x3F, 0x3F, 0x9C, 0x65, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x66, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x69, /* 0x7C-0x7F */ + + 0x89, 0x9D, 0x90, 0x00, 0x9C, 0x68, 0x9C, 0x67, /* 0x80-0x83 */ + 0x8C, 0x61, 0x91, 0x00, 0x3F, 0x3F, 0x9C, 0x6D, /* 0x84-0x87 */ + 0x9C, 0x6B, 0x3F, 0x3F, 0x9C, 0x6A, 0x97, 0x00, /* 0x88-0x8B */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x8F, 0x99, 0x9C, 0x6C, 0x93, 0x6B, 0x8F, 0x5D, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0x94-0x97 */ + 0x9C, 0x70, 0x9C, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x6E, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x9C, 0x71, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x9C, 0x72, 0x95, 0x9C, 0x8F, 0x7A, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x9C, 0x73, 0x94, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xB0-0xB3 */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x93, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x9C, 0x74, 0x8B, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x53, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x95, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x8A, 0x00, 0x94, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x75, 0x8E, 0x75, /* 0xD4-0xD7 */ + 0x96, 0x59, 0x96, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x89, 0x9E, 0x9C, 0x7A, 0x00, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x92, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x9C, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x9C, 0x00, 0x9C, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x94, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x9C, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x76, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x8D, 0x9A, 0x3F, 0x3F, 0x9C, 0x7C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x83, 0x9C, 0x89, /* 0x0C-0x0F */ + 0x9C, 0x81, 0x3F, 0x3F, 0x93, 0x7B, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x9C, 0x86, 0x95, 0x7C, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x9C, 0x80, 0x3F, 0x3F, 0x9C, 0x85, /* 0x18-0x1B */ + 0x97, 0x00, 0x8E, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x91, 0x00, 0x9C, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x8B, 0x7D, 0x9C, 0x88, 0x90, 0x00, /* 0x24-0x27 */ + 0x89, 0x85, 0x9C, 0x82, 0x89, 0x00, 0x9C, 0x87, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x9C, 0x84, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x8A, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x9C, 0x8C, 0x9C, 0x96, 0x9C, 0x94, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x91, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x90, 0x97, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x9C, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8B, 0x00, 0x3F, 0x3F, 0x8D, 0x50, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x8F, 0x9A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9C, 0x99, 0x9C, 0x8B, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x9C, 0x8F, /* 0x5C-0x5F */ + 0x9C, 0x7E, 0x3F, 0x3F, 0x89, 0x00, 0x9C, 0x93, /* 0x60-0x63 */ + 0x9C, 0x95, 0x92, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x8D, 0x00, 0x89, 0x00, 0x9C, 0x8D, 0x9C, 0x98, /* 0x68-0x6B */ + 0x9C, 0x97, 0x8B, 0x00, 0x3F, 0x3F, 0x91, 0x00, /* 0x6C-0x6F */ + 0x8A, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x8C, 0x62, 0x3F, 0x3F, 0x9C, 0x8E, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x9C, 0x9A, 0x3F, 0x3F, 0x9C, 0x9D, /* 0x80-0x83 */ + 0x9C, 0x9F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x00, 0x00, 0x9C, 0x00, /* 0x88-0x8B */ + 0x92, 0x00, 0x9C, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x89, 0x00, 0x3F, 0x3F, 0x9C, 0x00, 0x9C, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x9E, 0x9C, 0x00, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x9C-0x9F */ + 0x97, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x78, 0x9C, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x94, 0x59, 0x88, 0x00, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x9C, 0x7B, /* 0xB0-0xB3 */ + 0x9C, 0x00, 0x9C, 0x00, 0x96, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x93, 0x89, 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x8F, 0x00, 0x9C, 0x00, 0x93, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x98, 0x66, 0x3F, 0x3F, 0x9C, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x8D, 0x9B, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x90, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x88, 0x00, /* 0xDC-0xDF */ + 0x9C, 0x00, 0x9C, 0x00, 0x3F, 0x3F, 0x91, 0x79, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x9C, /* 0xE4-0xE7 */ + 0x8E, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x91, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x91, 0x7A, /* 0xF0-0xF3 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x9C, 0x00, 0x9C, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x9C, 0x00, 0x9C, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_61[512] = { + 0x9C, 0x00, 0x8F, 0x44, 0x3F, 0x3F, 0x9C, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x96, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x9C, 0x00, 0x9C, 0x00, 0x88, 0x00, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x88, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0x24-0x27 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0x44-0x47 */ + 0x8E, 0x9C, 0x3F, 0x3F, 0x9C, 0x00, 0x91, 0x00, /* 0x48-0x4B */ + 0x8D, 0x51, 0x9C, 0x00, 0x90, 0x54, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, 0x9C, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x9D, 0x8A, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, 0x8C, 0x64, /* 0x64-0x67 */ + 0x8A, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x9C, 0x00, /* 0x6C-0x6F */ + 0x88, 0x00, 0x9C, 0x00, 0x3F, 0x3F, 0x9C, 0x00, /* 0x70-0x73 */ + 0x9C, 0x00, 0x9C, 0x00, 0x8C, 0x63, 0x9C, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x7C, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x4A, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x9E, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x97, 0x00, 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x00, 0x00, 0x9C, 0x00, 0x9C, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x8C, 0x65, 0x3F, 0x3F, 0x9C, 0x00, /* 0xA8-0xAB */ + 0x9C, 0x00, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x9B, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x8D, 0x00, /* 0xC4-0xC7 */ + 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, /* 0xC8-0xCB */ + 0x9C, 0x00, 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x9C, 0x00, 0x9C, 0x00, /* 0xF4-0xF7 */ + 0x8C, 0x9C, 0x3F, 0x3F, 0x9C, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, 0x9C, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x9C, 0x00, 0x9C, 0x00, 0x95, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x9C, 0x00, 0x9C, 0x00, 0x8F, 0x5E, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x90, 0x00, 0x89, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x9C, 0x00, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x9C, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x00, 0x00, 0x9D, 0x40, 0x8C, 0x81, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x9D, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x42, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x43, 0x8B, 0x59, /* 0x2C-0x2F */ + 0x9D, 0x44, 0x3F, 0x3F, 0x9D, 0x45, 0x9D, 0x46, /* 0x30-0x33 */ + 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x5B, /* 0x3C-0x3F */ + 0x8F, 0x8A, 0x9D, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x94, 0x00, 0x3F, 0x3F, 0x8E, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x8D, 0x00, 0x9D, 0x48, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x4B, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x49, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x9D, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x4A, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x9D, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x7D, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x9D, 0x4E, 0x3F, 0x3F, 0x9D, 0x51, 0x8F, 0x00, /* 0x7C-0x7F */ + + 0x8B, 0x5A, 0x3F, 0x3F, 0x9D, 0x4F, 0x9D, 0x56, /* 0x80-0x83 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x9D, 0x50, 0x94, 0x63, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x97, 0x7D, 0x9D, 0x52, 0x9D, 0x53, /* 0x90-0x93 */ + 0x9D, 0x57, 0x93, 0x8A, 0x9D, 0x54, 0x8D, 0x52, /* 0x94-0x97 */ + 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x65, /* 0x98-0x9B */ + 0x94, 0x00, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0xA8-0xAB */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x96, 0x95, 0x3F, 0x3F, 0x9D, 0x5A, /* 0xB8-0xBB */ + 0x89, 0x9F, 0x92, 0x8A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x63, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x92, 0x53, 0x9D, 0x5D, 0x9D, 0x64, /* 0xC4-0xC7 */ + 0x9D, 0x5F, 0x9D, 0x66, 0x9D, 0x62, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x9D, 0x61, 0x94, 0x8F, 0x3F, 0x3F, 0x9D, 0x5B, /* 0xCC-0xCF */ + 0x89, 0x00, 0x9D, 0x59, 0x8B, 0x91, 0x91, 0x00, /* 0xD0-0xD3 */ + 0x9D, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x58, /* 0xD4-0xD7 */ + 0x8D, 0x53, 0x90, 0x00, 0x3F, 0x3F, 0x8F, 0x00, /* 0xD8-0xDB */ + 0x9D, 0x60, 0x94, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x8B, 0x92, 0x8A, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x8A, 0x87, 0x90, 0x40, 0x9D, 0x68, 0x9D, 0x6D, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x9D, 0x69, 0x3F, 0x3F, 0x8C, 0x9D, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x9D, 0x6E, 0x8E, 0x41, 0x8D, 0x89, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x45, 0x9D, 0x5C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0x3F, 0x3F, 0x8E, 0x9D, 0x9D, 0x6B, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x77, /* 0x04-0x07 */ + 0x9D, 0x6C, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x9D, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x8B, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x6A, /* 0x24-0x27 */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x55, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x94, 0x00, 0x9D, 0x70, 0x91, 0x7D, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x8E, 0x4A, 0x9D, 0x71, 0x3F, 0x3F, 0x9D, 0x73, /* 0x4C-0x4F */ + 0x9D, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x92, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x91, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x64-0x67 */ + 0x8E, 0x00, 0x9D, 0x80, 0x3F, 0x3F, 0x9D, 0x7E, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x98, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x9E, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x78, 0x8F, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, 0x94, 0x50, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x9D, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x7C, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x8E, 0x00, 0x9D, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x8F, 0x00, 0x3F, 0x3F, 0x9D, 0x75, 0x9D, 0x7A, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x72, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x74, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x8C, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x7C, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x7C, /* 0x9C-0x9F */ + 0x97, 0x00, 0x8D, 0x00, 0x92, 0x54, 0x9D, 0x79, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x8D, 0x54, /* 0xA4-0xA7 */ + 0x90, 0x84, 0x89, 0x86, 0x91, 0x5B, 0x9D, 0x77, /* 0xA8-0xAB */ + 0x8B, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x66, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x92, 0x00, 0x9D, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x7E, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x81, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x9D, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0xC0-0xC3 */ + 0x9D, 0x89, 0x3F, 0x3F, 0x9D, 0x84, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x9D, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x60, /* 0xCC-0xCF */ + 0x92, 0x00, 0x3F, 0x3F, 0x9D, 0x87, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x4B, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x67, 0x8A, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x9D, 0x85, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x9D, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x89, 0x87, 0x00, 0x00, 0x9D, 0x88, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x68, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_64[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x8C, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x9D, 0x93, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x8D, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x8A, 0x9D, 0x91, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x9D, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x8E, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x9D, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x94, 0x00, 0x93, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x9D, 0x8B, 0x3F, 0x3F, 0x9D, 0x8F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x67, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x97, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x93, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x94, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x96, 0x80, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x95, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x96, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x96, 0x00, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x82, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x9D, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x54, 0x9D, 0x9A, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x9D, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x51, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x00, 0x00, 0x93, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x93, 0x50, 0x9D, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x9D, 0x9C, 0x3F, 0x3F, 0x95, 0x8F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x94, 0x64, 0x8E, 0x42, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x90, 0x00, 0x3F, 0x3F, 0x96, 0x6F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x8A, 0x68, 0x3F, 0x3F, 0x9D, 0x00, /* 0xB8-0xBB */ + 0x9D, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x97, 0x69, 0x9D, 0x00, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x9D, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x91, 0x80, 0x00, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x9D, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x9D, 0x9F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x9D, 0x00, 0x9D, 0x00, 0x93, 0x46, 0x9D, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x43, 0x9D, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x8B, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x9D, 0x00, 0x9D, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x9D, 0x00, 0x8F, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x9D, 0x00, 0x9D, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, /* 0x20-0x23 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x98, 0x9D, 0x00, /* 0x28-0x2B */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x78, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x9D, 0x00, 0x9D, 0x00, 0x9D, 0x00, 0x9D, 0x00, /* 0x34-0x37 */ + 0x9D, 0x00, 0x89, 0x00, 0x3F, 0x3F, 0x8D, 0x55, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x90, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x9D, 0x00, 0x00, 0x00, 0x95, 0x71, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x8B, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x9D, 0x00, 0x9D, 0x00, 0x94, 0x73, /* 0x54-0x57 */ + 0x9D, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x9D, 0x00, 0x9D, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x8E, 0x55, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x8C, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x90, 0x94, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x90, 0x00, 0x93, 0x47, 0x3F, 0x3F, 0x95, 0x7E, /* 0x74-0x77 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x9D, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x84-0x87 */ + 0x9B, 0x7C, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x95, 0x6B, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x94, 0x00, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x6C, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x9D, 0x00, /* 0x98-0x9B */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x8B, 0x00, 0x90, 0x00, 0x3F, 0x3F, 0x95, 0x80, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, /* 0xA8-0xAB */ + 0x8E, 0x61, 0x92, 0x66, 0x3F, 0x3F, 0x8E, 0x7A, /* 0xAC-0xAF */ + 0x90, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x89, 0x97, 0x8E, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x9D, 0x00, /* 0xC0-0xC3 */ + 0x9D, 0x00, 0x97, 0x00, 0x9D, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0xC8-0xCB */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x9D, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x9D, 0x00, 0x9D, 0x00, 0x8A, 0x00, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x93, 0x00, 0x92, 0x55, 0x8B, 0x8C, /* 0xE4-0xE7 */ + 0x8E, 0x7C, 0x91, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x8F, 0x7B, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x9D, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0x00, 0x00, 0x3F, 0x3F, 0x8D, 0x56, 0x9D, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x8F, 0x00, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x00, 0x9D, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x8F, 0x00, 0x3F, 0x3F, 0x96, 0x00, 0x8D, 0x00, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0x10-0x13 */ + 0x90, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x9D, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x90, 0x00, /* 0x1C-0x1F */ + 0x89, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x00, 0x8F, 0x74, 0x3F, 0x3F, 0x96, 0x86, /* 0x24-0x27 */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x8F, 0x00, 0x00, 0x00, 0x90, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x9D, 0x00, 0x9D, 0x00, 0x9D, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x38-0x3B */ + 0x92, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x45, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x9D, 0x00, 0x8E, 0x9E, 0x8D, 0x57, /* 0x40-0x43 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x90, 0x57, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x4E, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x9D, 0x00, 0x9D, 0x00, 0x9D, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x9D, 0x00, 0x00, 0x00, 0x8A, 0x41, 0x9D, 0x00, /* 0x64-0x67 */ + 0x9D, 0x00, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x81, 0x8C, 0x69, /* 0x6C-0x6F */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x70-0x73 */ + 0x90, 0x00, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x71, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x9D, 0x00, /* 0x80-0x83 */ + 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0x84-0x87 */ + 0x9D, 0x00, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x8F, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x67, 0x88, 0x00, /* 0x94-0x97 */ + 0x9D, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x00, 0x00, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x62, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x96, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x9E, 0x41, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x9D, 0x00, 0x3F, 0x3F, 0x9D, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x9E, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x42, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x8F, 0x8C, 0x9E, 0x43, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x97, 0x6A, 0x94, 0x98, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x9E, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x46, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x9E, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x9E, 0x48, 0x3F, 0x3F, 0x8B, 0x00, 0x89, 0x67, /* 0xF0-0xF3 */ + 0x8D, 0x58, 0x9E, 0x49, 0x3F, 0x3F, 0x9E, 0x4A, /* 0xF4-0xF7 */ + 0x8F, 0x91, 0x91, 0x82, 0x00, 0x00, 0x00, 0x66, /* 0xF8-0xFB */ + 0x99, 0x00, 0x91, 0x5D, 0x91, 0x5C, 0x91, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x8C, 0x8E, 0x97, 0x4C, 0x3F, 0x3F, 0x95, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x95, 0x9E, 0x00, 0x00, 0x9E, 0x4B, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x8D, 0x00, 0x92, 0x00, 0x9E, 0x4C, 0x98, 0x4E, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x5D, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x92, 0x00, 0x9E, 0x4D, 0x8A, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x4E, 0x9E, 0x4F, /* 0x24-0x27 */ + 0x96, 0x00, 0x3F, 0x3F, 0x96, 0x00, 0x96, 0x96, /* 0x28-0x2B */ + 0x96, 0x7B, 0x8E, 0x44, 0x9E, 0x51, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x96, 0x70, 0x3F, 0x3F, 0x9E, 0x53, 0x9E, 0x56, /* 0x34-0x37 */ + 0x9E, 0x55, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x8B, 0x80, 0x3F, 0x3F, 0x9E, 0x52, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x9E, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x57, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x90, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x9B, 0x88, 0x00, /* 0x4C-0x4F */ + 0x8D, 0x00, 0x91, 0x00, 0x3F, 0x3F, 0x8E, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9E, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x93, 0x6D, 0x3F, 0x3F, 0x9E, 0x58, 0x91, 0x00, /* 0x5C-0x5F */ + 0x9E, 0x59, 0x8F, 0x00, 0x96, 0x00, 0x9E, 0x5B, /* 0x60-0x63 */ + 0x9E, 0x5C, 0x97, 0x88, 0x00, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x61, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x8D, 0x59, 0x3F, 0x3F, 0x94, 0x74, /* 0x6C-0x6F */ + 0x9E, 0x5E, 0x93, 0x8C, 0x9D, 0x00, 0x9D, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x8B, 0x6E, 0x3F, 0x3F, 0x94, 0x66, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x9E, 0x60, 0x3F, 0x3F, 0x8F, 0x00, 0x94, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x9E, 0x66, 0x3F, 0x3F, 0x94, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x9E, 0x5D, 0x3F, 0x3F, 0x9E, 0x63, /* 0x88-0x8B */ + 0x9E, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x96, 0x8D, 0x3F, 0x3F, 0x97, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x87, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x89, 0x00, 0x8E, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x98, 0x67, 0x9E, 0x65, 0x90, 0x95, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x64, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x9E, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x6B, /* 0xB0-0xB3 */ + 0x9E, 0x69, 0x3F, 0x3F, 0x89, 0x00, 0x9E, 0x67, /* 0xB4-0xB7 */ + 0x9E, 0x6D, 0x9E, 0x73, 0x3F, 0x3F, 0x00, 0x00, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x95, 0x00, 0x3F, 0x3F, 0x9E, 0x75, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x41, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x74, 0x94, 0x90, /* 0xCC-0xCF */ + 0x96, 0x5E, 0x8A, 0x00, 0x3F, 0x3F, 0x90, 0x00, /* 0xD0-0xD3 */ + 0x8F, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x92, 0x00, 0x3F, 0x3F, 0x97, 0x4D, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x9E, 0x70, 0x9E, 0x6F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x71, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x9E, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x76, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x9E, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x9E, 0x6A, 0x3F, 0x3F, 0x9E, 0x72, 0x9E, 0x68, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x92, 0x8C, 0x3F, 0x3F, 0x96, 0x00, /* 0xF0-0xF3 */ + 0x8E, 0x00, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x8F, 0x8A, 0x60, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0x3F, 0x3F, 0x00, 0x00, 0x92, 0x00, 0x93, 0x00, /* 0x00-0x03 */ + 0x89, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x8C, 0x49, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x78, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x8D, 0x5A, 0x8A, 0x9C, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x9E, 0x7A, 0x8A, 0x94, 0x9E, 0x81, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x7D, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x8A, 0x6A, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x8A, 0x69, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x9E, 0x7B, 0x8C, 0x85, 0x8C, 0x6A, 0x93, 0x8D, /* 0x40-0x43 */ + 0x00, 0x00, 0x3F, 0x3F, 0x9E, 0x79, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x9E, 0x7C, 0x9E, 0x7E, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8B, 0x00, 0x8C, 0x4B, 0x00, 0x00, 0x8A, 0x00, /* 0x50-0x53 */ + 0x8B, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9E, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x8D, 0x00, 0x96, 0x91, 0x3F, 0x3F, 0x8E, 0x56, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x83, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x4F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x9E, 0x8F, 0x3F, 0x3F, 0x89, 0x00, 0x9E, 0x84, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x95, 0x9E, 0x85, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x9E, 0x8C, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x94, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x9E, 0x94, 0x3F, 0x3F, 0x9E, 0x87, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0x90-0x93 */ + 0x9E, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x5B, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x8B, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x9E, 0x8A, 0x3F, 0x3F, 0x9E, 0x86, /* 0x9C-0x9F */ + 0x9E, 0x91, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x00, 0x8C, 0x00, /* 0xA4-0xA7 */ + 0x97, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x9E, 0x88, 0x3F, 0x3F, 0x92, 0x00, /* 0xAC-0xAF */ + 0x8A, 0x42, 0x8D, 0x00, 0x3F, 0x3F, 0x9E, 0x80, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x9E, 0x90, 0x8A, 0x81, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x9E, 0x8E, 0x9E, 0x92, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x93, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x00, 0x64, 0x96, 0x00, 0x9E, 0x97, 0x8A, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x9E, 0x9E, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x5F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x9E, 0x9F, 0x9E, 0x00, 0x3F, 0x3F, 0x9E, 0x00, /* 0xD4-0xD7 */ + 0x9E, 0x99, 0x3F, 0x3F, 0x92, 0x49, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x8F, /* 0xDC-0xDF */ + 0x9E, 0x00, 0x9E, 0x9C, 0x3F, 0x3F, 0x9E, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x58, 0x9E, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x9E, 0x00, 0x8A, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_69[512] = { + 0x98, 0x6F, 0x9E, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x9E, 0x00, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x9E, 0x98, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0x08-0x0B */ + 0x9E, 0x9D, 0x90, 0x41, 0x92, 0x00, 0x9E, 0x93, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x90, 0x9A, 0x9E, 0x00, 0x8A, 0x91, /* 0x18-0x1B */ + 0x8C, 0x9F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x9A, 0x9E, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x9B, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x93, 0x00, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x92, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x6B, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x96, /* 0x50-0x53 */ + 0x9E, 0x00, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9E, 0x00, 0x91, 0x5E, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x9E, 0x00, 0x9E, 0x00, 0x9E, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x93, 0x00, 0x9E, 0x00, 0x93, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x00, 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x8B, 0x00, 0x9E, 0x00, 0x8F, 0x7C, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x80, /* 0x70-0x73 */ + 0x9E, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x9E, 0x00, /* 0x74-0x77 */ + 0x9E, 0x00, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x98, 0x4F, 0x8A, 0x79, 0x9E, 0x00, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x9E, 0x00, 0x8A, 0x54, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x7C, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x98, 0x50, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x59, /* 0x98-0x9B */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x9E, 0x00, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x8D, 0x5C, /* 0xC8-0xCB */ + 0x92, 0x00, 0x91, 0x84, 0x9E, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x97, 0x6C, 0x96, 0x8A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, /* 0xE4-0xE7 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x92, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x91, 0x85, 0x3F, 0x3F, 0x9E, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x94, 0x00, /* 0x08-0x0B */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x00, /* 0x10-0x13 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x94, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x95, 0x57, 0x3F, 0x3F, 0x9E, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x8F, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x96, 0x00, 0x9E, 0x00, 0x9E, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x89, 0x00, 0x8A, 0x7E, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x8F, 0x00, 0x9E, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9E, 0x00, 0x8E, 0x00, 0x8A, 0x92, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x92, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x9E, 0x00, /* 0x44-0x47 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x8B, 0x6B, 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x40, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x93, 0x00, 0x9E, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x8A, 0x80, /* 0x7C-0x7F */ + + 0x92, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x9E, 0x00, 0x8C, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x9E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x40, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x9E, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x9E, 0x00, 0x3F, 0x3F, 0x9E, 0x00, 0x9E, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x4B, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x9F, 0x47, 0x3F, 0x3F, 0x9E, 0x8D, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x46, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x9F, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x42, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x9E, 0x00, 0x9F, 0x44, 0x9F, 0x43, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x9F, 0x49, 0x3F, 0x3F, 0x98, 0x45, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x4C, 0x8B, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x48, 0x9F, 0x4A, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x94, 0x00, 0x3F, 0x3F, 0x9F, 0x4D, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x51, 0x9F, 0x4E, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x97, 0x93, 0x9F, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9E, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x52, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x53, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x89, 0x54, 0x3F, 0x3F, 0x9F, 0x55, /* 0x1C-0x1F */ + 0x8C, 0x87, 0x8E, 0x9F, 0x3F, 0x3F, 0x8B, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x7E, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x57, /* 0x34-0x37 */ + 0x9F, 0x56, 0x9F, 0x59, 0x8B, 0x5C, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x8B, 0x00, 0x8A, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x5C, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x5B, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x9F, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x89, 0x00, 0x3F, 0x3F, 0x92, 0x56, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x9F, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0x50-0x53 */ + 0x9F, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9F, 0x5F, 0x3F, 0x3F, 0x9F, 0x61, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x62, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x9F, 0x63, 0x8E, 0x7E, 0x90, 0x00, /* 0x60-0x63 */ + 0x8D, 0x9F, 0x3F, 0x3F, 0x95, 0x90, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x95, 0x00, 0x98, 0x63, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x95, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, /* 0x70-0x73 */ + 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x9F, 0x64, 0x9F, 0x65, 0x3F, 0x3F, 0x8E, 0x80, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x66, /* 0x7C-0x7F */ + + 0x9F, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x69, /* 0x80-0x83 */ + 0x9F, 0x68, 0x3F, 0x3F, 0x96, 0x77, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x8F, 0x7D, 0x8E, 0x00, 0x8E, 0x63, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x9F, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x9F, 0x6C, 0x90, 0x42, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x9F, 0x6B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x6D, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x9F, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x6F, 0x9F, 0x70, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x71, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x9F, 0x73, 0x9F, 0x72, 0x9F, 0x74, /* 0xB0-0xB3 */ + 0x89, 0x00, 0x92, 0x69, 0x3F, 0x3F, 0x9F, 0x75, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x45, 0x8A, 0x6B, /* 0xB8-0xBB */ + 0x9F, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x61, /* 0xBC-0xBF */ + 0x9A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x8B, 0x42, 0x9F, 0x77, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x78, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x95, 0x00, 0x96, 0x88, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, 0x9F, 0x79, /* 0xD0-0xD3 */ + 0x94, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x7A, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x7C, /* 0xE8-0xEB */ + 0x9F, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x7E, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x7D, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x9F, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x81, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x9F, 0x82, /* 0x10-0x13 */ + 0x9F, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x43, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x84, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x86, /* 0x20-0x23 */ + 0x9F, 0x85, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x90, 0x85, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x58, /* 0x34-0x37 */ + 0x89, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x92, 0x00, 0x8F, 0x60, 0x8B, 0x81, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x9F, 0x88, 0x3F, 0x3F, 0x8A, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x98, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x00, 0x00, 0x93, 0x00, 0x9F, 0x87, 0x8D, 0x5D, /* 0x5C-0x5F */ + 0x92, 0x72, 0x3F, 0x3F, 0x9F, 0x89, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x9F, 0x91, 0x3F, 0x3F, 0x9F, 0x8A, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x6C-0x6F */ + 0x91, 0x00, 0x3F, 0x3F, 0x8B, 0x82, 0x9F, 0x92, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x88, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x8B, 0x44, 0x9F, 0x90, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x9F, 0x8E, 0x9F, 0x8B, 0x97, 0x80, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x93, 0x00, 0x9F, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x9F, 0x94, 0x3F, 0x3F, 0x9F, 0x93, 0x8C, 0x42, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x8D, 0x00, 0x9F, 0x8D, 0x9F, 0x8F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x96, 0x76, 0x91, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x97, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x9C, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x9F, 0x9D, 0x3F, 0x3F, 0x89, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x95, 0x00, 0x96, 0x00, 0x9F, 0x9F, 0x8E, 0x00, /* 0xB8-0xBB */ + 0x8F, 0x00, 0x9F, 0x98, 0x9F, 0x9E, 0x89, 0x88, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x9F, 0x95, 0x9F, 0x9A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x90, 0x00, 0x94, 0x91, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x97, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x96, 0x40, 0x3F, 0x3F, 0x9F, 0x99, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x00, 0x00, 0x9F, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x9F, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x96, 0x41, 0x94, 0x67, 0x8B, 0x83, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x93, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x92, 0x8D, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0xEC-0xEF */ + 0x91, 0x00, 0x9F, 0x96, 0x3F, 0x3F, 0x89, 0x6A, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x6D, /* 0x08-0x0B */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x97, 0x8C, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, 0x9F, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x89, 0x6B, 0x8D, 0x5E, 0x9F, 0x00, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x46, 0x9F, 0x00, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x9F, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x88, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x9F, 0x00, 0x94, 0x68, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x8F, 0x00, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x9F, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x95, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0x60-0x63 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x89, 0x59, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x8D, 0x5F, 0x98, 0x51, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x8A, 0x5C, 0x3F, 0x3F, 0x95, 0x82, 0x00, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x97, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x43, /* 0x74-0x77 */ + 0x90, 0x5A, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x84-0x87 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x97, 0x4F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x00, 0x40, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x93, 0x93, /* 0x98-0x9B */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x00, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x55, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x74, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x97, 0x84, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x9F, 0x00, 0x9F, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0xC8-0xCB */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x42, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x8F, 0x69, 0x9F, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x93, 0x91, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x92, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x9F, 0x00, 0x88, 0x00, /* 0xE8-0xEB */ + 0x9F, 0x00, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x90, 0x5B, 0x00, 0x44, 0x8F, 0x7E, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x8D, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x43, 0x9F, 0x00, 0x9F, 0x00, 0x93, 0x59, /* 0xF8-0xFB */ + 0x00, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x8A, 0x89, /* 0x04-0x07 */ + 0x8D, 0x00, 0x8F, 0x00, 0x9F, 0x00, 0x8F, 0x61, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x6B, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x8F, 0x8D, 0x8C, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x9F, 0x00, /* 0x1C-0x1F */ + 0x8B, 0x94, 0x93, 0x6E, 0x3F, 0x3F, 0x9F, 0x00, /* 0x20-0x23 */ + 0x9F, 0x00, 0x88, 0x00, 0x89, 0x51, 0x00, 0x48, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x9F, 0x00, /* 0x28-0x2B */ + 0x91, 0x00, 0x9F, 0x00, 0x9F, 0x00, 0x8D, 0x60, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9F, 0x00, 0x00, 0x46, 0x9F, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x00, 0x49, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x9F, 0x00, 0x9F, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x58, /* 0x58-0x5B */ + 0x00, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x4E, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x93, 0x92, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x70, 0x8E, 0x00, /* 0x7C-0x7F */ + + 0x96, 0x9E, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0x8C-0x8F */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x80, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x97, 0x00, 0x8D, 0x61, 0x3F, 0x3F, 0x9F, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x6E, 0x9F, 0x00, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x4D, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x00, 0x4A, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x9F, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x8E, 0x00, /* 0xC8-0xCB */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x8A, 0x8A, 0x3F, 0x3F, 0x9F, 0x00, /* 0xD0-0xD3 */ + 0x9F, 0x00, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x91, 0x00, 0x91, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x93, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x42, /* 0xF4-0xF7 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x00, 0x9F, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0x3F, 0x3F, 0x8B, 0x99, 0x95, 0x59, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x8D, 0x97, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x52, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x00, 0x41, /* 0x10-0x13 */ + 0x89, 0x89, 0x91, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x94, 0x99, 0x3F, 0x3F, 0x8A, 0x00, 0x97, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x9F, /* 0x28-0x2B */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x9F, 0x00, 0x9F, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x91, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x40, 0x9F, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x8C, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x49, /* 0x58-0x5B */ + 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x83, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x8F, 0x81, 0x3F, 0x3F, 0x00, 0x52, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x00, 0x4B, 0x92, 0x00, 0x00, 0x48, /* 0x6C-0x6F */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x6B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x00, 0x45, 0x3F, 0x3F, 0x00, 0x44, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x00, 0x47, 0x00, 0x46, 0x00, 0x4C, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x90, 0x9F, 0x3F, 0x3F, 0x00, 0x43, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x00, 0x55, 0x3F, 0x3F, 0x00, 0x54, /* 0xA0-0xA3 */ + 0x00, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x59, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x93, 0x62, 0x3F, 0x3F, 0x00, 0x53, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x00, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x8C, 0x83, 0x91, 0x00, 0x00, 0x51, 0x94, 0x5A, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x58, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x5D, 0x00, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x61, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5A, /* 0xDC-0xDF */ + 0x8D, 0x8A, 0x94, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x94, /* 0xE8-0xEB */ + 0x00, 0x5C, 0x3F, 0x3F, 0x00, 0x60, 0x91, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x5F, 0x3F, 0x3F, 0x00, 0x4A, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x00, 0x4D, 0x00, 0x89, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x64, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x68, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0x3F, 0x3F, 0x00, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x4E, 0x3F, 0x3F, 0x00, 0x4F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x62, 0x3F, 0x3F, 0x00, 0x63, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x67, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x95, 0x6D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x00, 0x6D, 0x3F, 0x3F, 0x00, 0x6A, 0x00, 0x69, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x00, 0x6C, 0x93, 0x00, 0x00, 0x6E, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x95, 0x91, 0x00, /* 0x24-0x27 */ + 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x6F, 0x3F, 0x3F, 0x00, 0x71, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x70, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x00, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x73, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x94, /* 0x6C-0x6F */ + 0x8A, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x8B, 0x84, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x8E, 0x00, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x00, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x98, 0x46, 0x90, 0x86, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x8A, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x75, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x52, /* 0xA8-0xAB */ + 0x00, 0x78, 0x92, 0x59, 0x00, 0x7B, 0x00, 0x76, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7A, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x00, 0x79, 0x93, 0x5F, 0x88, 0x00, 0x00, 0x62, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7D, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x47, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x80, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x00, 0x7E, 0x3F, 0x3F, 0x00, 0x7C, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x96, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x00, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x53, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x89, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x84, 0x95, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x00, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x52, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x56, 0x00, 0x57, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x8A, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x86, 0x00, 0x8B, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x89, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x00, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x89, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x94, 0x81, 0x00, 0x85, 0x00, 0x88, 0x8F, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x00, 0x8C, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x00, 0x8F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x87, 0x3F, 0x3F, 0x8C, 0x46, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8D, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x97, 0x6F, 0x00, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x6E, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x00, 0x91, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x00, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x94, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x94, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x95, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x00, 0x59, 0x3F, 0x3F, 0x94, 0x52, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x93, 0x95, 0x00, 0x97, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x99, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x97, 0x00, 0x3F, 0x3F, 0x00, 0x96, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x98, 0x89, 0x8D, 0x3F, 0x3F, 0x00, 0x93, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x9A, 0x7A, /* 0xDC-0xDF */ + 0x00, 0x9A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x91, 0x87, 0x8E, 0x57, 0x00, 0x9C, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x00, 0x9B, 0x90, 0x43, 0x99, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x00, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x00, 0x9F, 0x3F, 0x3F, 0x00, 0x8E, /* 0xF8-0xFB */ + 0x00, 0x9E, 0x3F, 0x3F, 0x00, 0x5A, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x9A, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x00, 0x00, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x95, 0x83, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x91, 0x75, 0x8E, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x95, 0x00, /* 0x44-0x47 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x48-0x4B */ + 0x94, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x89, 0x00, 0x3F, 0x3F, 0x8B, 0x8D, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x96, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x89, 0x00, 0x98, 0x53, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x71, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x8C, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x8B, 0x5D, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5C, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x8C, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x91, 0x5F, 0x3F, 0x3F, 0x8D, 0x9D, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x93, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x92, 0x4B, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x98, 0x54, 0x94, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x97, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x5D, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x00, 0x92, 0x96, 0x94, 0x4C, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x00, 0x00, 0x3F, 0x3F, 0x97, 0x50, 0x97, 0x51, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x89, 0x8E, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x8D, 0x96, 0x8E, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x62, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x00, 0x3F, 0x3F, 0x8A, 0x6C, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x5F, /* 0x74-0x77 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x89, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x61, 0x8E, 0x58, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x92, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x64, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x62, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x63, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x5D, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x94, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x00, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x85, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x00, 0x97, 0x9D, 0x00, 0x65, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x67, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x69, 0x00, 0x68, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6A, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x97, 0x00, /* 0x30-0x33 */ + 0x8B, 0x00, 0x94, 0x00, 0x94, 0x69, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x00, 0x8C, 0x00, 0x89, 0x6C, /* 0x58-0x5B */ + 0x00, 0x00, 0x3F, 0x3F, 0x90, 0x90, 0x00, 0x00, /* 0x5C-0x5F */ + 0x97, 0x00, 0x3F, 0x3F, 0x00, 0x6B, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x9E, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, 0x00, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x6D, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x89, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x00, 0x40, 0x3F, 0x3F, 0x95, 0x5A, 0x00, 0x41, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x00, 0x42, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x00, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x44, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x00, 0x46, 0x00, 0x47, 0x00, 0x45, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x72, 0x00, 0x49, /* 0xF4-0xF7 */ + 0x00, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_75[512] = { + 0x3F, 0x3F, 0x00, 0x6E, 0x3F, 0x3F, 0x00, 0x4B, /* 0x00-0x03 */ + 0x00, 0x4A, 0x00, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x4E, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x8D, 0x99, 0x3F, 0x3F, 0x00, 0x51, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x90, 0x72, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x93, 0x5B, 0x3F, 0x3F, 0x00, 0x52, 0x90, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x59, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x89, 0x99, 0x00, 0x53, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x97, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x28-0x2B */ + 0x00, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x2C-0x2F */ + 0x93, 0x63, 0x97, 0x52, 0x8D, 0x62, 0x90, 0x5C, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x6A, /* 0x34-0x37 */ + 0x99, 0x00, 0x3F, 0x3F, 0x92, 0x00, 0x89, 0x00, /* 0x38-0x3B */ + 0x00, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x00, 0x56, 0x3F, 0x3F, 0x00, 0x5B, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x00, 0x59, 0x00, 0x58, 0x9D, 0x00, /* 0x48-0x4B */ + 0x8A, 0x45, 0x00, 0x57, 0x3F, 0x3F, 0x88, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x97, 0x00, 0x00, 0x5C, 0x00, 0x5A, /* 0x58-0x5B */ + 0x92, 0x7B, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x94, 0x00, 0x3F, 0x3F, 0x95, 0x4C, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x5E, 0x97, 0x00, 0x8C, 0x6C, 0x00, 0x5F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x5D, 0x94, 0x00, 0x00, 0x60, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x00, 0x61, 0x3F, 0x3F, 0x00, 0x6F, /* 0x6C-0x6F */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, /* 0x70-0x73 */ + 0x00, 0x66, 0x3F, 0x3F, 0x00, 0x63, 0x93, 0x00, /* 0x74-0x77 */ + 0x00, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x45, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x69, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x64, 0x00, 0x65, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x68, 0x00, 0x67, 0x95, 0x44, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x61, 0x91, 0x60, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x8B, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6B, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6E, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x00, 0x6D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x75, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x00, 0x76, 0x94, 0x00, 0x00, 0x70, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x00, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x00, 0x74, 0x90, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x00, 0x75, 0x00, 0x73, 0x8E, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6F, 0x00, 0x71, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x95, 0x61, 0x3F, 0x3F, 0x8F, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x78, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x79, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x8E, 0x00, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x93, 0x97, 0x00, 0x7A, 0x3F, 0x3F, 0x92, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7C, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x9F, 0x00, 0x7B, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x91, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x00, 0x82, 0x3F, 0x3F, 0x00, 0x84, 0x00, 0x85, /* 0xF0-0xF3 */ + 0x92, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x83, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x80, 0x3F, 0x3F, 0x00, 0x7D, 0x00, 0x7E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0x3F, 0x3F, 0x00, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x88, 0x3F, 0x3F, 0x00, 0x86, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x87, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x89, /* 0x1C-0x1F */ + 0x00, 0x8B, 0x00, 0x8C, 0x00, 0x8D, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8A, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x00, 0x8F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x91, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x94, 0x00, 0x92, /* 0x44-0x47 */ + 0x00, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x00, 0x95, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x00, 0x97, 0x00, 0x98, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9C, /* 0x64-0x67 */ + 0x00, 0x99, 0x00, 0x9A, 0x00, 0x9B, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x00, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x9E, 0x3F, 0x3F, 0x00, 0x9F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x00, 0x00, 0x3F, 0x3F, 0x94, 0x00, 0x93, 0x6F, /* 0x78-0x7B */ + 0x00, 0x00, 0x94, 0x92, 0x95, 0x53, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x70, 0x00, 0x00, /* 0x80-0x83 */ + 0x93, 0x49, 0x3F, 0x3F, 0x8A, 0x46, 0x8D, 0x63, /* 0x84-0x87 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x8E, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, /* 0x98-0x9B */ + 0x00, 0x71, 0x3F, 0x3F, 0x00, 0x72, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x74, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x89, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x4D, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x94, 0x75, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x7E, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x89, 0x6D, 0x3F, 0x3F, 0x89, 0x76, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x93, 0x90, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0xD8-0xDB */ + 0x9F, 0x58, 0x3F, 0x3F, 0x00, 0x00, 0x96, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x8A, 0x00, /* 0xE0-0xE3 */ + 0x94, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x91, 0x8A, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x82, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x94, 0x00, 0x3F, 0x3F, 0x8A, 0x00, /* 0x08-0x0B */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x90, 0x5E, /* 0x1C-0x1F */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x92, 0x85, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x76, 0x00, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x90, 0x87, 0x3F, 0x3F, 0x93, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x00, 0x00, 0x96, 0x72, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x8F, 0x75, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x96, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x92, 0x6D, 0x3F, 0x3F, 0x94, 0x8A, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x92, 0x5A, 0x00, 0x00, 0x8B, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x8C, 0x00, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x93, 0x75, 0x8D, 0x00, 0x8B, 0x6D, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x43, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x94, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x76, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x7B, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x79, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0x68-0x6B */ + 0x8D, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7B, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x92, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x00, 0x00, 0x8A, 0x56, 0x00, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x89, 0x4F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, 0x98, 0x71, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x90, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x6D, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x94, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x41, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x40, /* 0xE4-0xE7 */ + 0x96, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x00, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x44, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x62, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x46, 0x00, 0x45, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x49, /* 0x28-0x2B */ + 0x00, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x97, 0x00, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x00, 0x4A, 0x8C, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x5F, /* 0x44-0x47 */ + 0x8B, 0x46, 0x8E, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x97, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x50, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x4F, 0x91, 0x63, 0x00, 0x4C, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4E, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x8F, 0x6A, 0x90, 0x5F, 0x00, 0x4D, /* 0x5C-0x5F */ + 0x00, 0x4B, 0x3F, 0x3F, 0x94, 0x49, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x95, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x98, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x51, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x52, /* 0x7C-0x7F */ + + 0x00, 0x68, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x98, 0x5C, 0x91, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x53, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x89, 0x00, 0x92, 0x00, 0x95, 0x9F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x83, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x00, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x9A, 0x00, 0x55, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x57, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x58, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x94, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x59, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x5A, 0x00, 0x5B, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x8B, 0x00, 0x89, 0x00, 0x93, 0x00, /* 0xBC-0xBF */ + 0x8F, 0x47, 0x8E, 0x84, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x00, 0x5C, 0x3F, 0x3F, 0x8F, 0x48, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x89, 0x00, 0x95, 0x62, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x64, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x60, 0x3F, 0x3F, 0x00, 0x61, /* 0xE0-0xE3 */ + 0x94, 0x89, 0x3F, 0x3F, 0x90, 0x60, 0x00, 0x5E, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x92, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x00, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7A[512] = { + 0x8B, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x00, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x63, 0x90, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x42, /* 0x14-0x17 */ + 0x00, 0x64, 0x00, 0x65, 0x92, 0x74, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x67, /* 0x1C-0x1F */ + 0x00, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x69, 0x88, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6C, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6A, /* 0x38-0x3B */ + 0x89, 0x00, 0x8C, 0x6D, 0x00, 0x6B, 0x8D, 0x65, /* 0x3C-0x3F */ + 0x8D, 0x92, 0x3F, 0x3F, 0x95, 0x00, 0x00, 0x6D, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x73, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x00, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x90, 0x00, 0x89, 0x6E, 0x89, 0x00, /* 0x4C-0x4F */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6E, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x00, 0x70, 0x00, 0x71, 0x8F, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x72, 0x3F, 0x3F, 0x8A, 0x6E, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x8C, 0x8A, 0x3F, 0x3F, 0x8B, 0x86, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x75, 0x8B, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x00, 0x76, 0x3F, 0x3F, 0x90, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x90, 0x00, /* 0x80-0x83 */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x82, 0x91, 0x8B, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x00, 0x79, 0x00, 0x7B, 0x00, 0x78, /* 0x94-0x97 */ + 0x00, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x41, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x00, 0x7C, 0x8C, 0x45, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x87, 0x97, 0x71, /* 0xAC-0xAF */ + 0x00, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x80, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x4D, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x83, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x96, /* 0xC0-0xC3 */ + 0x00, 0x82, 0x00, 0x81, 0x3F, 0x3F, 0x00, 0x85, /* 0xC4-0xC7 */ + 0x00, 0x7D, 0x3F, 0x3F, 0x00, 0x86, 0x97, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x87, 0x3F, 0x3F, 0x00, 0x88, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x00, 0x84, 0x9A, 0x00, 0x00, 0x8A, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x8B, 0x00, 0x8C, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x97, 0x00, 0x00, 0x8D, 0x3F, 0x3F, 0x00, 0x00, /* 0xDC-0xDF */ + 0x8F, 0x00, 0x00, 0x8E, 0x00, 0x8F, 0x8F, 0x76, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x93, 0x00, 0x00, 0x90, 0x00, 0x85, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x47, 0x00, 0x87, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x00, 0x91, 0x3F, 0x3F, 0x92, 0x5B, /* 0xEC-0xEF */ + 0x00, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x99, 0x5E, 0x92, 0x7C, 0x8E, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x93, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x96, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x8B, 0x88, 0x3F, 0x3F, 0x00, 0x95, 0x00, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x94, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x00, 0x98, 0x00, 0x99, 0x3F, 0x3F, 0x93, 0x4A, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9A, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x8A, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x90, 0x79, 0x95, 0x84, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x00, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x97, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x9B, 0x00, 0x9D, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x00, 0x95, 0x4D, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x94, 0x00, 0x93, 0x99, 0x3F, 0x3F, 0x8B, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x94, 0x00, /* 0x4C-0x4F */ + 0x00, 0x9E, 0x92, 0x7D, 0x93, 0x9B, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x93, 0x9A, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x89, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x94, 0x93, 0x96, 0x00, 0x3F, 0x3F, 0x8E, 0x5A, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x5C, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x90, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x94, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x95, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x92, 0x7A, 0x3F, 0x3F, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x98, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7C[512] = { + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x34-0x37 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x00, 0x00, 0x97, 0x00, 0x95, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x00, 0x90, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x8B, 0x00, 0x8C, 0x48, 0x00, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x90, 0x88, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x00, 0x00, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x94, 0x94, 0x3F, 0x3F, 0x91, 0x65, /* 0x94-0x97 */ + 0x94, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x6C, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x8A, 0x9F, 0x3F, 0x3F, 0x8F, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x00, 0x90, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x57, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x9C, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x00, 0x3F, 0x3F, 0x95, 0x00, 0x91, 0x8C, /* 0xDC-0xDF */ + 0x8D, 0x66, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x8E, 0x85, 0x3F, 0x3F, 0x00, 0x00, 0x8C, 0x6E, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x8A, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0x8B, 0x49, 0x3F, 0x3F, 0x00, 0x40, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x96, 0x00, 0x8D, 0x67, 0x00, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x43, 0x96, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x94, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x95, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x8F, 0x83, 0x00, 0x42, 0x3F, 0x3F, 0x8E, 0x00, /* 0x14-0x17 */ + 0x8D, 0x68, 0x8E, 0x86, 0x8B, 0x89, 0x95, 0x00, /* 0x18-0x1B */ + 0x00, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x91, 0x66, 0x96, 0x61, 0x8D, 0x00, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x87, /* 0x28-0x2B */ + 0x92, 0x00, 0x3F, 0x3F, 0x00, 0x46, 0x97, 0x00, /* 0x2C-0x2F */ + 0x8D, 0x00, 0x3F, 0x3F, 0x00, 0x47, 0x90, 0x61, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x8F, 0x00, 0x8D, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x48, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x49, 0x8C, 0x00, /* 0x40-0x43 */ + 0x91, 0x67, 0x00, 0x44, 0x00, 0x4A, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x8A, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x45, /* 0x48-0x4B */ + 0x8C, 0x6F, 0x3F, 0x3F, 0x00, 0x4D, 0x00, 0x51, /* 0x4C-0x4F */ + 0x8C, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4C, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x55, /* 0x58-0x5B */ + 0x00, 0x8B, 0x3F, 0x3F, 0x8D, 0x69, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x97, 0x8D, 0x88, 0x00, 0x00, 0x52, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x8B, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x50, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x93, 0x9D, 0x00, 0x4E, 0x00, 0x4B, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x8A, 0x47, 0x90, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x00, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x56, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x53, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x8C, 0x70, 0x91, 0x00, 0x00, 0x58, /* 0x98-0x9B */ + 0x91, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x65, /* 0x9C-0x9F */ + 0x00, 0x8D, 0x3F, 0x3F, 0x00, 0x61, 0x00, 0x5B, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5F, /* 0xA8-0xAB */ + 0x8E, 0x00, 0x88, 0x00, 0x00, 0x5A, 0x00, 0x62, /* 0xAC-0xAF */ + 0x00, 0x66, 0x8D, 0x6A, 0x96, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x92, 0x00, 0x00, 0x5C, 0x3F, 0x3F, 0x00, 0x8C, /* 0xB4-0xB7 */ + 0x00, 0x64, 0x3F, 0x3F, 0x00, 0x59, 0x92, 0x5D, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x5E, 0x88, 0x00, 0x96, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5D, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x94, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x8D, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x97, 0x00, 0x8F, 0x8F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x8E, 0x00, 0x8E, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x67, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6A, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x92, 0x00, 0x00, 0x6D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x00, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x95, 0x00, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6B, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7E[512] = { + 0x3F, 0x3F, 0x89, 0x8F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x93, 0x00, 0x00, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x76, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x72, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x9B, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x00, 0x74, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x71, 0x00, 0x77, 0x00, 0x70, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x63, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x44, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x6B, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x73, 0x00, 0x80, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x7B, 0x3F, 0x3F, 0x00, 0x7E, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x00, 0x7C, 0x00, 0x81, 0x00, 0x7A, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x00, 0x60, 0x90, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x00, 0x7D, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x78, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x40, 0x8C, 0x71, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x8F, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x90, 0x44, 0x91, 0x55, 0x00, 0x84, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x86, 0x00, 0x87, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x00, 0x83, 0x00, 0x85, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x79, 0x00, 0x82, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x8A, 0x00, 0x89, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x96, 0x9A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x8C, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x88, 0x3F, 0x3F, 0x00, 0x8C, /* 0x78-0x7B */ + 0x00, 0x8B, 0x00, 0x8F, 0x3F, 0x3F, 0x00, 0x91, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x5B, 0x00, 0x8D, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x92, 0x00, 0x93, 0x00, 0x5C, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x00, 0x94, 0x3F, 0x3F, 0x00, 0x9A, 0x93, 0x5A, /* 0x8C-0x8F */ + 0x00, 0x96, 0x3F, 0x3F, 0x00, 0x95, 0x00, 0x97, /* 0x90-0x93 */ + 0x00, 0x98, 0x3F, 0x3F, 0x00, 0x99, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9B, /* 0x98-0x9B */ + 0x00, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x00, 0x9D, 0x3F, 0x3F, 0x00, 0x9E, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x9F, 0x3F, 0x3F, 0x00, 0x90, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x8C, 0x72, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x75, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x94, 0x00, 0x3F, 0x3F, 0x8F, 0x90, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x94, 0x6C, 0x3F, 0x3F, 0x94, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x9C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x97, 0x85, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x3F, 0x3F, 0x97, 0x72, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x00, 0x00, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x00, 0x91, 0x3F, 0x3F, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x8C, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x91, 0x41, 0x8B, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x89, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x97, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x4B, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x90, 0x89, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x8A, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x96, 0x7C, /* 0xF8-0xFB */ + 0x97, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0x97, 0x73, 0x98, 0x56, 0x3F, 0x3F, 0x8D, 0x6C, /* 0x00-0x03 */ + 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x08-0x0B */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x91, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x8D, 0x6B, 0x3F, 0x3F, 0x96, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x92, 0x5E, 0x3F, 0x3F, 0x00, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x91, 0x8F, 0x00, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x92, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x90, 0x45, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x00, 0x00, 0x98, 0x57, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x98, 0x5D, /* 0x88-0x8B */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x95, 0x49, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x8C, 0x00, 0x8E, 0x88, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x96, 0x62, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x8D, 0x6D, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x8D, 0x6E, 0x88, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x78, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x92, 0x5F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x94, 0x77, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x00, 0x00, 0x96, 0x45, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x88, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x45, 0x94, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x89, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x8B, 0x00, 0x90, 0x00, 0x98, 0x65, /* 0x04-0x07 */ + 0x96, 0x00, 0x00, 0x00, 0x90, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x72, 0x00, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x92, 0x45, 0x3F, 0x3F, 0x94, 0x5D, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x42, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x41, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x74, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x95, 0x85, 0x00, 0x44, 0x3F, 0x3F, 0x00, 0x43, /* 0x50-0x53 */ + 0x8D, 0x6F, 0x98, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x54, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x00, 0x48, 0x00, 0x49, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x47, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x8D, 0x98, 0x00, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x92, 0x00, 0x95, 0x00, 0x91, 0x42, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x4E, 0x3F, 0x3F, 0x00, 0x4F, 0x00, 0x4B, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x4C, 0x3F, 0x3F, 0x00, 0x4D, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x70, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x55, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x00, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x86, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x96, 0x8C, 0x95, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x53, /* 0xA0-0xA3 */ + 0x00, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x96, 0x63, 0x00, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x00, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x56, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x00, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x00, 0x5A, 0x3F, 0x3F, 0x00, 0x5E, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x5B, 0x00, 0x59, 0x94, 0x5E, /* 0xBC-0xBF */ + 0x00, 0x5C, 0x3F, 0x3F, 0x00, 0x5D, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x00, 0x64, 0x00, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x00, 0x61, 0x3F, 0x3F, 0x91, 0x9F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x63, 0x00, 0x62, 0x00, 0x65, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x66, /* 0xDC-0xDF */ + 0x00, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x62, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x00, 0x68, /* 0xE4-0xE7 */ + 0x97, 0x00, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x8F, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x8A, /* 0xF0-0xF3 */ + 0x92, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x69, 0x00, 0x6A, /* 0xF8-0xFB */ + 0x89, 0x50, 0x3F, 0x3F, 0x00, 0x6B, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0x3F, 0x3F, 0x00, 0x6C, 0x00, 0x6D, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x6E, 0x3F, 0x3F, 0x00, 0x6F, /* 0x04-0x07 */ + 0x8B, 0x00, 0x9D, 0x00, 0x00, 0x70, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x90, 0x00, 0x00, 0x71, 0x8E, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x00, 0x72, 0x3F, 0x3F, 0x98, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x73, 0x95, 0x00, /* 0x14-0x17 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x43, /* 0x18-0x1B */ + 0x8F, 0x77, 0x3F, 0x3F, 0x95, 0x91, 0x8F, 0x4D, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x74, 0x8D, 0x71, 0x00, 0x75, /* 0x28-0x2B */ + 0x94, 0x00, 0x3F, 0x3F, 0x00, 0x84, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x77, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x91, 0x00, 0x94, 0x95, 0x8C, 0x00, /* 0x34-0x37 */ + 0x00, 0x76, 0x91, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x00, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x7A, 0x00, 0x79, 0x00, 0x7C, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x00, 0x7B, 0x3F, 0x3F, 0x00, 0x7D, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x80, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x7E, 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x81, 0x3F, 0x3F, 0x00, 0x82, 0x00, 0x83, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x00, 0x97, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x00, 0x85, 0x90, 0x46, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x90, 0x00, 0x86, /* 0x74-0x77 */ + 0x00, 0x87, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x88, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x00, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8A, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x95, 0x87, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x00, 0x8C, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x8A, 0x48, 0x88, 0x00, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8B, /* 0xA8-0xAB */ + 0x00, 0x8E, 0x94, 0x6D, 0x3F, 0x3F, 0x90, 0x63, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x96, 0x46, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x8C, 0x7C, 0x8B, 0x00, 0x3F, 0x3F, 0x00, 0x8D, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x89, 0x91, 0x00, 0x92, 0x97, 0x00, /* 0xD0-0xD3 */ + 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x63, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x9E, 0x3F, 0x3F, 0x89, 0x00, /* 0xD8-0xDB */ + 0x00, 0x9C, 0x3F, 0x3F, 0x00, 0x9A, 0x00, 0x91, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x8F, 0x3F, 0x3F, 0x00, 0x90, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x8E, 0x00, 0x8B, 0x00, 0x92, 0x97, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x89, 0x70, 0x3F, 0x3F, 0x00, 0x94, /* 0xF0-0xF3 */ + 0x00, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x00, 0x99, 0x00, 0x95, 0x00, 0x98, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0x3F, 0x3F, 0x00, 0x93, 0x96, 0x00, 0x00, 0x97, /* 0x00-0x03 */ + 0x89, 0x00, 0x8A, 0x9D, 0x00, 0x9B, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x73, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x9F, 0x92, 0x83, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x91, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x91, 0x90, 0x8C, 0x74, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x60, /* 0x4C-0x4F */ + 0x00, 0x00, 0x3F, 0x3F, 0x8D, 0x72, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x91, 0x91, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x94, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x89, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x95, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x96, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x94, 0x9C, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x97, 0x89, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x90, 0x9B, 0x3F, 0x3F, 0x00, 0x96, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x65, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x8B, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x8D, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x70, /* 0xDC-0xDF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0xEC-0xEF */ + 0x8C, 0x00, 0x95, 0x48, 0x00, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x97, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x00-0x03 */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x08-0x0B */ + 0x96, 0x47, 0x00, 0x00, 0x88, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x94, 0x8B, 0x00, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8A, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x00, 0x00, 0x97, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x98, 0x97, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x98, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x8B, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x95, 0x92, 0x00, 0x00, 0x93, 0x9F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x68-0x6B */ + 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x94, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x00, 0x95, 0x98, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x8F, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x95, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x97, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x00, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x8F, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xB8-0xBB */ + 0x91, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x92, 0x7E, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x97, 0x75, 0x00, 0x00, 0x8A, 0x57, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x00, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x96, 0x48, 0x3F, 0x3F, 0x98, 0x40, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x96, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x3F, 0x3F, 0x89, 0x55, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x00, 0x00, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x40, 0x3F, 0x3F, 0x94, 0x00, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x00, 0x8F, 0x00, 0x8E, 0x00, 0x00, 0x42, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9A, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x43, 0x3F, 0x3F, 0x95, 0x99, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x98, 0x6E, 0x93, 0x00, 0x95, 0x93, 0x00, 0x9C, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x00, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x50, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x51, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x00, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x94, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4E, /* 0x84-0x87 */ + 0x00, 0x46, 0x3F, 0x3F, 0x00, 0x48, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x00, 0x52, 0x00, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x92, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x00, 0x4C, /* 0x98-0x9B */ + 0x00, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x00, 0x45, 0x3F, 0x3F, 0x91, 0x45, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x00, 0x49, 0x8E, 0x46, 0x90, 0x64, 0x8C, 0x4F, /* 0xA8-0xAB */ + 0x96, 0x00, 0x3F, 0x3F, 0x96, 0x00, 0x8F, 0x92, /* 0xAC-0xAF */ + 0x00, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x56, 0x00, 0x54, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x98, 0x6D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x00, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x97, 0x95, 0x3F, 0x3F, 0x00, 0x55, /* 0xCC-0xCF */ + 0x00, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x5B, 0x00, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x93, 0x00, 0x00, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x94, 0x00, 0x00, 0x4D, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x93, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x00, 0x5C, 0x00, 0x61, 0x91, 0x94, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x60, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x41, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x62, 0x91, 0x68, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5D, 0x00, 0x5F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5E, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9F, 0x50, 0x9F, 0x41, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x64, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x63, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x97, 0x96, 0x3F, 0x3F, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x66, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x00, 0x67, 0x8C, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8B, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x00, 0x69, 0x99, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x95, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x97, 0x00, 0x3F, 0x3F, 0x8B, 0x00, 0x00, 0x6A, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6B, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x8E, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x88, 0x00, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x00, 0x71, /* 0x88-0x8B */ + 0x00, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6D, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x8E, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6E, /* 0xA0-0xA3 */ + 0x94, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x7A, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x74, /* 0xAC-0xAF */ + 0x00, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x73, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x00, 0x75, 0x3F, 0x3F, 0x00, 0x76, 0x8E, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x00, 0x78, 0x3F, 0x3F, 0x92, 0x60, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x8C, 0x75, 0x8A, 0x61, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x8A, 0x5E, 0x3F, 0x3F, 0x00, 0x81, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7C, 0x00, 0x80, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x00, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x00, 0x7E, 0x95, 0x67, 0x94, 0x00, 0x00, 0x82, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x91, 0x00, 0x00, 0x8C, 0x3F, 0x3F, 0x00, 0x88, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0x00, 0x86, 0x3F, 0x3F, 0x96, 0x49, 0x00, 0x87, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x84, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x00, 0x85, 0x00, 0x8A, 0x00, 0x8D, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x89, 0x00, 0x83, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x92, 0x77, 0x3F, 0x3F, 0x00, 0x94, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x00, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x00, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x90, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x91, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x98, 0x58, /* 0x48-0x4B */ + 0x00, 0x98, 0x3F, 0x3F, 0x00, 0x99, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x90, 0x49, 0x3F, 0x3F, 0x00, 0x9B, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x96, /* 0x5C-0x5F */ + 0x00, 0x95, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x9C, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9D, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x9A, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x00, 0x97, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x88, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x97, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x86, 0x00, 0x00, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x8A, 0x49, 0x3F, 0x3F, 0x8B, 0x61, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x8C, 0x8C, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x00, 0x00, 0x3F, 0x3F, 0x8F, 0x4F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x8D, 0x73, 0x9F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x8F, 0x70, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x58, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x89, 0x71, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x8F, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x8D, 0x74, 0x00, 0x00, 0x88, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x95, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x90, 0x8A, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x92, 0x8F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x8C, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x8C, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x88, 0x00, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x8D, 0x00, 0x97, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x91, 0x95, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x97, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x95, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x8D, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x8F, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x97, 0x87, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x00, 0x90, 0x00, 0x90, 0x9E, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x8A, 0x8C, 0x3F, 0x3F, 0x96, 0x4A, 0x00, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x00, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x8B, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x41, 0x3F, 0x3F, 0x00, 0x40, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x43, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x00, 0x42, 0x3F, 0x3F, 0x00, 0x44, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x50, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x46, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x47, 0x90, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x97, 0x76, 0x3F, 0x3F, 0x00, 0x48, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x94, 0x65, /* 0x84-0x87 */ + 0x00, 0x49, 0x3F, 0x3F, 0x00, 0x4A, 0x8C, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x4B, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4B, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x8B, 0x94, 0x60, /* 0x94-0x97 */ + 0x00, 0x4C, 0x3F, 0x3F, 0x8A, 0x6F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x00, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4F, 0x97, 0x97, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x00, 0x4E, 0x90, 0x65, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x51, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x52, 0x8A, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x53, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x00, 0x54, 0x3F, 0x3F, 0x00, 0x55, /* 0xBC-0xBF */ + 0x00, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x70, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x57, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x58, 0x00, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x47, 0x00, 0x5A, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x00, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8A[512] = { + 0x8C, 0x00, 0x3F, 0x3F, 0x92, 0x00, 0x00, 0x5D, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x8C, 0x76, 0x3F, 0x3F, 0x90, 0x75, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x60, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x00, 0x5F, 0x3F, 0x3F, 0x00, 0x00, 0x8C, 0x50, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5E, 0x91, 0x00, /* 0x14-0x17 */ + 0x8B, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x61, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x00, 0x62, 0x3F, 0x3F, 0x8F, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x8D, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x00, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x4B, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8B, 0x96, 0x3F, 0x3F, 0x96, 0x00, /* 0x30-0x33 */ + 0x91, 0x69, 0x3F, 0x3F, 0x00, 0x64, 0x00, 0x00, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x66, 0x92, 0x90, /* 0x38-0x3B */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x68, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x8D, 0x00, 0x91, 0x00, 0x00, 0x67, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x8F, 0x00, 0x95, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x66, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x8C, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x89, 0x72, 0x3F, 0x3F, 0x00, 0x6D, 0x8C, 0x77, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x8E, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x8E, 0x8D, 0x3F, 0x3F, 0x98, 0x6C, /* 0x68-0x6B */ + 0x00, 0x6C, 0x00, 0x6B, 0x91, 0x46, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x8B, 0x6C, 0x98, 0x62, 0x8A, 0x59, 0x8F, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x00, 0x70, 0x00, 0x6E, 0x3F, 0x3F, 0x8C, 0x00, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x97, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x8E, 0x8F, 0x94, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x00, 0x73, 0x3F, 0x3F, 0x90, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x92, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x97, 0x55, 0x3F, 0x3F, 0x00, 0x76, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x90, 0x00, 0x00, 0x72, 0x3F, 0x3F, 0x00, 0x77, /* 0xA0-0xA3 */ + 0x8C, 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x90, 0x00, 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x92, 0x4E, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x8B, 0x62, 0x3F, 0x3F, 0x00, 0x00, 0x92, 0x00, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7A, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x00, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x6B, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0xC8-0xCB */ + 0x8A, 0x00, 0x00, 0x79, 0x3F, 0x3F, 0x90, 0x7A, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x5F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7B, 0x00, 0x87, /* 0xD8-0xDB */ + 0x92, 0x00, 0x3F, 0x3F, 0x00, 0x86, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x83, 0x00, 0x8B, 0x00, 0x84, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x00, 0x80, 0x3F, 0x3F, 0x92, 0x00, 0x00, 0x7E, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7C, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x97, 0x40, 0x8E, 0x90, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x81, 0x3F, 0x3F, 0x00, 0x7D, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x85, /* 0xF4-0xF7 */ + 0x8F, 0x94, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0x96, 0x64, 0x89, 0x79, 0x88, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x89, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x88, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x00, 0x8D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x00, 0x82, 0x3F, 0x3F, 0x00, 0x8C, 0x00, 0x8E, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x00, 0x8A, 0x8D, 0x75, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x00, 0x8F, 0x97, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x92, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x00, 0x95, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x93, /* 0x28-0x2B */ + 0x95, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x90, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x94, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x00, 0x9A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x97, 0x3F, 0x3F, 0x00, 0x99, 0x00, 0x98, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9B, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x8E, 0x00, 0x3F, 0x3F, 0x00, 0x9D, 0x00, 0x9C, /* 0x58-0x5B */ + 0x95, 0x88, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x78, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9E, /* 0x68-0x6B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x6C-0x6F */ + 0x8B, 0x63, 0x00, 0x00, 0x8F, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x5D, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x9D, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x8F, 0x51, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x4A, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x00, 0x3F, 0x3F, 0x96, 0x4C, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x8F, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x8B, 0x98, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x00, 0x00, 0x95, 0x5E, 0x00, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x96, 0x65, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x8A, 0x4C, 0x92, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x95, 0x89, 0x8D, 0x00, 0x8D, 0x76, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x6E, /* 0xA4-0xA7 */ + 0x89, 0x00, 0x94, 0x00, 0x00, 0x00, 0x8A, 0x00, /* 0xA8-0xAB */ + 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x99, /* 0xAC-0xAF */ + 0x96, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x8B, 0x4D, 0x3F, 0x3F, 0x00, 0x00, 0x94, 0x83, /* 0xB4-0xB7 */ + 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0xB8-0xBB */ + 0x93, 0x5C, 0x00, 0x00, 0x3F, 0x3F, 0x96, 0x66, /* 0xBC-0xBF */ + 0x89, 0x00, 0x00, 0x00, 0x98, 0x47, 0x92, 0x00, /* 0xC0-0xC3 */ + 0x98, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x91, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x00, 0x00, 0x91, 0x47, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x95, 0x6F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x8E, 0x5E, /* 0xD8-0xDB */ + 0x8E, 0x92, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x94, 0x85, 0x3F, 0x3F, 0x8C, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x95, 0x8A, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x93, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x8D, 0x77, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x04-0x07 */ + 0x91, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x8A, 0x00, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x90, 0x00, 0x3F, 0x3F, 0x8E, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x71, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x91, 0x96, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x70-0x73 */ + 0x95, 0x8B, 0x3F, 0x3F, 0x00, 0x00, 0x8B, 0x4E, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x7A, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x90, 0x96, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x8B, 0x97, 0x3F, 0x3F, 0x00, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x8C, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x48, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x91, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x78, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x48, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x40, /* 0x44-0x47 */ + 0x00, 0x44, 0x00, 0x41, 0x00, 0x00, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x00, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x00, /* 0x5C-0x5F */ + 0x00, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x49, /* 0x60-0x63 */ + 0x00, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4C, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x8F, 0x52, 0x3F, 0x3F, 0x00, 0x4B, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x00, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x00, 0x51, 0x00, 0x50, 0x3F, 0x3F, 0x00, 0x4F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x53, 0x00, 0x52, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x00, 0x55, 0x3F, 0x3F, 0x00, 0x54, /* 0x90-0x93 */ + 0x00, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x00, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x00, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x58, 0x90, 0x67, /* 0xA8-0xAB */ + 0x00, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0xAC-0xAF */ + 0x00, 0x5B, 0x00, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5E, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x00, 0x5F, 0x00, 0x5C, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x00, 0x60, 0x3F, 0x3F, 0x8E, 0x00, 0x00, 0x61, /* 0xC8-0xCB */ + 0x8B, 0x4F, 0x8C, 0x52, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x62, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x5D, 0x00, 0x63, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x66, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x65, /* 0xF8-0xFB */ + 0x00, 0x64, 0x8C, 0x79, 0x00, 0x67, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x72, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x8D, 0x00, 0x00, 0x68, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6B, 0x00, 0x6D, /* 0x10-0x13 */ + 0x95, 0x00, 0x00, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, 0x00, 0x70, /* 0x18-0x1B */ + 0x00, 0x6E, 0x8B, 0x50, 0x3F, 0x3F, 0x00, 0x6F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x72, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x94, 0x79, 0x97, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x53, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x73, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x97, 0x41, 0x00, 0x75, 0x3F, 0x3F, 0x00, 0x74, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x78, 0x97, 0x60, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x77, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x8A, 0x8D, 0x00, 0x76, 0x00, 0x7B, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x00, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x00, 0x79, 0x93, 0x51, 0x00, 0x7C, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7D, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x00, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x8C, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x8C, 0x44, 0x00, 0x80, 0x00, 0x81, /* 0x60-0x63 */ + 0x00, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x68, /* 0x98-0x9B */ + 0x00, 0x83, 0x3F, 0x3F, 0x8E, 0x00, 0x00, 0x84, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x85, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x99, 0x9F, /* 0xA4-0xA7 */ + 0x99, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x00, 0x86, 0x00, 0x90, 0x00, 0x87, /* 0xAC-0xAF */ + 0x92, 0x43, 0x90, 0x4A, 0x94, 0x5F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x88, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, 0x92, 0x00, /* 0xB8-0xBB */ + 0x8D, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x48, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x49, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x96, 0x98, 0x90, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x7D, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x89, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8B, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x00, 0x8A, 0x89, 0x00, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x93, 0x00, 0x00, 0x8C, 0x94, 0x97, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x93, 0x52, 0x3F, 0x3F, 0x00, 0x8D, /* 0xEC-0xEF */ + 0x8F, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x8F, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x9E, 0x00, 0x91, 0x00, 0x92, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0x91, 0x00, 0x91, 0x97, 0x3F, 0x3F, 0x93, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x90, 0x8B, 0x74, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x99, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x96, 0x00, 0x00, 0x93, 0x00, /* 0x0C-0x0F */ + 0x92, 0x80, 0x00, 0x93, 0x3F, 0x3F, 0x92, 0x00, /* 0x10-0x13 */ + 0x93, 0x72, 0x00, 0x94, 0x00, 0x98, 0x90, 0x80, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x94, 0x87, 0x92, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x90, 0x00, 0x00, 0x97, 0x91, 0x00, /* 0x1C-0x1F */ + 0x91, 0x00, 0x00, 0x95, 0x88, 0x00, 0x98, 0x41, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9A, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x8F, 0x54, 0x90, 0x69, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x9C, 0x00, 0x9B, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x88, 0x00, 0x00, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x95, 0x4E, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x93, 0x00, 0x90, 0x8B, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x92, 0x78, 0x3F, 0x3F, 0x8B, 0x00, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x00, 0x00, 0x97, 0x56, 0x89, 0x5E, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x95, 0x00, 0x89, 0x00, 0x00, 0x9F, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x00, /* 0x50-0x53 */ + 0x92, 0x42, 0x88, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x91, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x89, 0x93, 0x91, 0x6B, 0x3F, 0x3F, 0x8C, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x97, 0x79, 0x3F, 0x3F, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x93, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x91, 0x98, 0x8E, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x8F, 0x85, 0x00, 0x00, 0x91, 0x4A, /* 0x74-0x77 */ + 0x91, 0x49, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x97, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x94, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, /* 0x80-0x83 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8E, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x97, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x4D, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x93, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x78, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x59, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x8C, 0x53, 0x00, 0x00, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x95, 0x94, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x8A, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x97, 0x58, 0x3F, 0x3F, 0x8B, 0x00, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x93, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x93, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x93, 0x00, 0x00, 0x00, 0x8F, 0x55, /* 0x48-0x4B */ + 0x8E, 0x00, 0x94, 0x7A, 0x92, 0x91, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x90, 0x8C, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x7C, 0x00, 0x00, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x00, 0x97, 0x8F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x8F, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x8D, 0x79, 0x3F, 0x3F, 0x8D, 0x93, /* 0x74-0x77 */ + 0x8E, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x86, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x8C, 0x00, 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x8F, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x8D, 0x00, /* 0xC4-0xC7 */ + 0x8E, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xC8-0xCB */ + 0x97, 0x00, 0x8F, 0x64, 0x96, 0x00, 0x97, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x93, 0x42, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x8A, 0x98, 0x90, 0x6A, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x92, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x74, 0x8B, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x93, 0x00, 0x8A, 0x62, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x93, 0x53, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x89, 0x94, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x00, 0x3F, 0x3F, 0x8F, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x8D, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x67, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x65, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x91, 0x4C, 0x3F, 0x3F, 0x00, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x96, 0x00, 0x3F, 0x3F, 0x92, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x91, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x3F, 0x3F, 0x96, 0x4E, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x8F, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x95, 0x00, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x89, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x65, 0x92, 0x92, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x8B, 0x98, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x8D, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x4B, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x0C-0x0F */ + 0x90, 0x8D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x90, 0x8E, 0x00, 0x40, 0x00, 0x42, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x8F, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x43, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x00, 0x00, 0x8B, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x95, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, /* 0x28-0x2B */ + 0x98, 0x42, 0x3F, 0x3F, 0x00, 0x00, 0x8D, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x5E, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x44, 0x00, 0x46, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x00, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x93, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x92, 0x00, 0x3F, 0x3F, 0x00, 0x4B, 0x00, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x62, /* 0x58-0x5B */ + 0x00, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x00, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x8C, 0x4C, 0x3F, 0x3F, 0x00, 0x4A, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x49, 0x3F, 0x3F, 0x8F, 0x00, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x8A, 0x99, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x00, 0x4F, 0x3F, 0x3F, 0x8D, 0x00, 0x91, 0x99, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x5A, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x00, 0x4D, 0x00, 0x4E, 0x92, 0x00, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x00, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x56, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x00, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x00, 0x58, 0x93, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x51, 0x00, 0x52, /* 0xD4-0xD7 */ + 0x00, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x00, 0x5A, 0x00, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x00, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_94[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5E, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x00, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5D, /* 0x10-0x13 */ + 0x00, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x8F, 0x00, 0x93, 0x00, 0x00, 0x5B, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x62, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x00, 0x63, 0x00, 0x61, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x91, 0x00, 0x3F, 0x3F, 0x00, 0x65, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x00, 0x68, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x8A, 0x00, 0x00, 0x67, 0x96, 0x00, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x73, 0x00, 0x69, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x00, 0x6A, 0x3F, 0x3F, 0x00, 0x6B, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6D, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x00, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x00, 0x70, 0x3F, 0x3F, 0x00, 0x71, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x74, 0x00, 0x72, 0x00, 0x75, 0x00, 0x77, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x00, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_95[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x00, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x96, 0x00, 0x3F, 0x3F, 0x00, 0x78, 0x91, 0x4D, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x79, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x95, 0x00, 0x00, 0x7A, 0x8A, 0x4A, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x5B, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x8A, 0x00, 0x00, 0x00, 0x8A, 0x00, /* 0x90-0x93 */ + 0x00, 0x7B, 0x3F, 0x3F, 0x00, 0x7C, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x00, 0x7D, 0x00, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x00, 0x80, 0x3F, 0x3F, 0x8A, 0x00, 0x8A, 0x74, /* 0xA0-0xA3 */ + 0x8D, 0x7D, 0x94, 0x00, 0x3F, 0x3F, 0x00, 0x82, /* 0xA4-0xA7 */ + 0x00, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x00, 0x83, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x7B, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x86, 0x3F, 0x3F, 0x00, 0x85, /* 0xB8-0xBB */ + 0x00, 0x84, 0x3F, 0x3F, 0x00, 0x87, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8A, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x88, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x00, 0x8C, 0x00, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x8E, 0x00, 0x8D, 0x00, 0x8F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x91, 0x00, 0x93, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x00, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_96[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x95, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x94, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x00, 0x95, 0x3F, 0x3F, 0x8D, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x96, 0x00, 0x97, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x68, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x6A, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, /* 0x3C-0x3F */ + 0x91, 0x00, 0x3F, 0x3F, 0x00, 0x98, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x95, 0x8D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9B, /* 0x48-0x4B */ + 0x00, 0x99, 0x8D, 0x7E, 0x3F, 0x3F, 0x00, 0x9A, /* 0x4C-0x4F */ + 0x8C, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x00, /* 0x58-0x5B */ + 0x00, 0x9D, 0x00, 0x9F, 0x00, 0x9E, 0x00, 0x00, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x40, 0x90, 0x77, /* 0x60-0x63 */ + 0x8F, 0x9C, 0x8A, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x86, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x89, 0x41, 0x3F, 0x3F, 0x00, 0x00, 0x92, 0x00, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x97, 0x00, 0x93, 0x00, 0x00, 0x9C, /* 0x74-0x77 */ + 0x97, 0x00, 0x3F, 0x3F, 0x8C, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x97, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x8B, 0x00, 0x97, 0x00, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x8C, 0x47, 0x3F, 0x3F, 0x91, 0x00, 0x00, 0x40, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x00, 0x00, 0x8A, 0x4B, 0x90, 0x8F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x8A, 0x75, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x8C, 0x84, 0x3F, 0x3F, 0x8D, 0x00, /* 0x98-0x9B */ + 0x8F, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x89, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x97, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x90, 0x00, /* 0xB8-0xBB */ + 0x94, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x90, 0x9D, 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x97, 0x59, 0x89, 0x00, 0x8F, 0x57, 0x8C, 0x00, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xC8-0xCB */ + 0x8E, 0x93, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x8E, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x99, 0x00, 0x3F, 0x3F, 0x90, 0x97, /* 0xD8-0xDB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x93, 0x00, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x89, 0x4A, 0x3F, 0x3F, 0x90, 0x00, 0x8E, 0x00, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x95, 0x00, 0x3F, 0x3F, 0x89, 0x5F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x97, 0x8B, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x93, 0x64, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_97[512] = { + 0x8E, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x90, 0x6B, /* 0x04-0x07 */ + 0x00, 0x00, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x91, 0x9A, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x00, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x98, 0x49, 0x00, 0x00, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x9E, 0x50, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x00, 0x00, 0x90, 0x00, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x00, 0x96, 0x00, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x90, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x00, 0x00, 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x72, 0x96, 0x00, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x00, 0x00, 0x8A, 0x76, 0x3F, 0x3F, 0x00, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x90, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x8C, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x8A, 0x93, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x8F, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x8B, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x91, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x95, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8A, 0x00, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x00, 0x00, 0x94, 0x42, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x89, 0x00, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x43, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0x3F, 0x3F, 0x95, 0x00, 0x92, 0x00, 0x8D, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x8D, 0x80, 0x8F, 0x87, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x90, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x0C-0x0F */ + 0x97, 0x61, 0x8A, 0x00, 0x94, 0x00, 0x93, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x9C, /* 0x14-0x17 */ + 0x97, 0x00, 0x3F, 0x3F, 0x8C, 0x7A, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x96, 0x6A, 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x89, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x70, /* 0x38-0x3B */ + 0x97, 0x8A, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x48-0x4B */ + 0x91, 0x00, 0x8A, 0x7A, 0x8A, 0x7B, 0x00, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x8A, 0x00, 0x8C, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x54-0x57 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x5E, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x8C, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x40, 0x3F, 0x3F, 0x00, 0x42, /* 0x70-0x73 */ + 0x00, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x95, 0x97, 0x3F, 0x3F, 0x00, 0x43, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x44, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x00, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x46, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x48, /* 0xC0-0xC3 */ + 0x00, 0x47, 0x3F, 0x3F, 0x00, 0x49, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x90, 0x48, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x51, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x00, 0x4A, 0x3F, 0x3F, 0x00, 0x4B, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x99, 0x00, 0x9F, 0x5A, 0x94, 0x00, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x8E, 0x94, 0x96, 0x4F, 0x8F, 0x00, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4C, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x00, 0x4D, 0x97, 0x7B, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x89, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x8E, 0x60, 0x3F, 0x3F, 0x00, 0x4E, 0x89, 0x00, /* 0x10-0x13 */ + 0x00, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x00, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x00, 0x52, 0x00, 0x53, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x00, 0x55, 0x00, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x24-0x27 */ + 0x8A, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x00, 0x56, 0x3F, 0x3F, 0x00, 0x57, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x00, 0x58, 0x00, 0x59, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5A, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x00, 0x5B, 0x3F, 0x3F, 0x00, 0x5E, /* 0x48-0x4B */ + 0x00, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x00, 0x5D, 0x00, 0x5F, 0x00, 0x60, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x62, 0x3F, 0x3F, 0x8B, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8E, 0x00, 0x00, 0x63, /* 0x94-0x97 */ + 0x00, 0x64, 0x8D, 0x81, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x00, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x8A, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x94, 0x6E, 0x00, 0x66, 0x00, 0x67, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x92, 0x79, /* 0xB0-0xB3 */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x00, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x94, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x91, 0x00, 0x89, 0x77, 0x8B, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x8B, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x92, 0x93, 0x00, 0x6D, 0x8B, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x6A, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x00, 0x6B, 0x3F, 0x3F, 0x00, 0x69, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x77, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x00, 0x6E, 0x00, 0x6F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x70, 0x00, 0x71, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x00, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x72, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8F, 0x78, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0x3F, 0x3F, 0x00, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x00, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x52, 0x00, 0x75, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x9B, 0x8C, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x91, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x79, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x93, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7A, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x80, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x00, 0x7D, 0x3F, 0x3F, 0x00, 0x7C, 0x00, 0x7E, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x00, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x00, 0x82, 0x00, 0x00, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x00, 0x81, 0x3F, 0x3F, 0x00, 0x84, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x8B, 0x00, 0x00, 0x83, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x85, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x86, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x88, 0x00, 0x87, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x00, 0x89, 0x00, 0x8B, 0x00, 0x8A, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x8D, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x00, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x00, 0x8D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x8A, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x00, 0x8E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x8F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x90, 0x91, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x90, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x00, 0x91, 0x3F, 0x3F, 0x00, 0x92, /* 0xD0-0xD3 */ + 0x00, 0x93, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x8D, 0x82, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x40, 0x3F, 0x3F, 0x00, 0x94, 0x00, 0x95, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x96, 0x00, 0x97, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x98, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x94, 0x00, 0x00, 0x9A, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x95, 0x45, 0x00, 0x9B, 0x00, 0x99, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x00, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9E, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x9F, 0x54, 0x00, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x38-0x3B */ + 0x8B, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x8A, 0x40, 0x8D, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x96, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x00, 0x00, 0x3F, 0x3F, 0x8B, 0x9B, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x44, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x42, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x88, 0x00, 0x00, 0x43, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x3F, 0x3F, 0x96, 0x8E, 0x8E, 0x4C, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x8D, 0x00, 0x91, 0x4E, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x00, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x45, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x8C, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x8E, 0x49, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x91, 0x00, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x8C, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x88, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9C[512] = { + 0x00, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x00, 0x00, 0x8A, 0x82, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x98, 0x6B, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x95, 0x68, 0x00, 0x00, 0x88, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x8A, 0x8F, 0x00, 0x00, 0x89, 0x56, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x92, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x90, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x97, 0x00, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x92, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x94, 0x00, 0x3F, 0x3F, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x96, 0x50, /* 0xF0-0xF3 */ + 0x96, 0x00, 0x3F, 0x3F, 0x93, 0x00, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x93, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x00, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x89, 0x95, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x8A, 0x9B, 0x3F, 0x3F, 0x00, 0x00, 0x8E, 0x00, /* 0x28-0x2B */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8D, 0x83, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x00, 0x44, 0x00, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x00, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x89, 0x4C, 0x00, 0x40, 0x00, 0x41, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x8D, 0x94, 0x96, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x00, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x48, /* 0x68-0x6B */ + 0x96, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4A, /* 0x6C-0x6F */ + 0x00, 0x47, 0x3F, 0x3F, 0x00, 0x46, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4B, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x48, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x00, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x7B, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4C, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x00, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x00, 0x4E, 0x3F, 0x3F, 0x00, 0x49, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x4F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x92, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x00, 0x53, 0x3F, 0x3F, 0x00, 0x54, 0x00, 0x52, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x00, 0x51, 0x00, 0x57, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x00, 0x50, 0x3F, 0x3F, 0x00, 0x55, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x56, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x59, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x00, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x5B, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x00, 0x5C, 0x3F, 0x3F, 0x00, 0x5D, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x98, 0x68, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x00, 0x5A, 0x91, 0x00, 0x8D, 0x00, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x00, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x00, 0x4A, 0x00, 0x5F, 0x00, 0x60, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x61, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x00, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x8C, 0x00, 0x00, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x00, 0x64, 0x3F, 0x3F, 0x8E, 0x00, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x00, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x00, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x67, /* 0x88-0x8B */ + 0x00, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x00, 0x6B, 0x00, 0x69, 0x98, 0x5B, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x00, 0x6A, 0x3F, 0x3F, 0x97, 0x00, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x00, 0x6C, 0x3F, 0x3F, 0x97, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x00, 0x6D, 0x94, 0x9E, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x00, 0x6E, 0x00, 0x70, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x00, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x00, 0x6F, 0x8D, 0x8D, 0x96, 0x00, 0x96, 0x83, /* 0xB8-0xBB */ + 0x9B, 0x00, 0x3F, 0x3F, 0x9F, 0x80, 0x96, 0x9B, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x89, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x00, 0x73, 0x8B, 0x6F, 0x00, 0x74, 0x00, 0x75, /* 0xCC-0xCF */ + 0x00, 0x76, 0x00, 0x4B, 0x8D, 0x95, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x00, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x96, 0x00, 0x3F, 0x3F, 0x91, 0x00, /* 0xD8-0xDB */ + 0x00, 0x78, 0x00, 0x7A, 0x00, 0x79, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x00, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x00, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x00, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x7E, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x00, 0x80, 0x3F, 0x3F, 0x00, 0x81, 0x00, 0x82, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x00, 0x83, 0x3F, 0x3F, 0x00, 0x84, /* 0xF8-0xFB */ + 0x00, 0x85, 0x00, 0x86, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x87, /* 0x04-0x07 */ + 0x00, 0x88, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x93, 0x43, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x8C, 0x00, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x00, 0x8A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x91, 0x6C, 0x00, 0x8B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x00, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x95, 0x40, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8D, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8E, 0x00, 0x56, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x8F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x00, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x92, /* 0x5C-0x5F */ + 0x00, 0x93, 0x00, 0x94, 0x97, 0x00, 0x00, 0x91, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x95, 0x00, 0x96, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x98, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x00, 0x97, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9A, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x9B, 0x00, 0x99, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x97, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x00, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x00, 0x9D, 0x00, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x00, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_F9[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x90, 0x00, 0x9B, /* 0x0C-0x0F */ + 0x00, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x75, /* 0x14-0x17 */ + 0x00, 0x7D, 0x00, 0x7E, 0x00, 0x80, 0x00, 0x82, /* 0x18-0x1B */ + 0x00, 0x86, 0x00, 0x89, 0x00, 0x92, 0x00, 0x9D, /* 0x1C-0x1F */ + 0x00, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FF[512] = { + 0x3F, 0x3F, 0x81, 0x49, 0x00, 0x57, 0x81, 0x94, /* 0x00-0x03 */ + 0x81, 0x90, 0x81, 0x93, 0x81, 0x95, 0x00, 0x56, /* 0x04-0x07 */ + 0x81, 0x69, 0x81, 0x6A, 0x81, 0x96, 0x81, 0x7B, /* 0x08-0x0B */ + 0x81, 0x43, 0x81, 0x7C, 0x81, 0x44, 0x81, 0x5E, /* 0x0C-0x0F */ + 0x82, 0x4F, 0x82, 0x50, 0x82, 0x51, 0x82, 0x52, /* 0x10-0x13 */ + 0x82, 0x53, 0x82, 0x54, 0x82, 0x55, 0x82, 0x56, /* 0x14-0x17 */ + 0x82, 0x57, 0x82, 0x58, 0x81, 0x46, 0x81, 0x47, /* 0x18-0x1B */ + 0x81, 0x83, 0x81, 0x81, 0x81, 0x84, 0x81, 0x48, /* 0x1C-0x1F */ + 0x81, 0x97, 0x82, 0x60, 0x82, 0x61, 0x82, 0x62, /* 0x20-0x23 */ + 0x82, 0x63, 0x82, 0x64, 0x82, 0x65, 0x82, 0x66, /* 0x24-0x27 */ + 0x82, 0x67, 0x82, 0x68, 0x82, 0x69, 0x82, 0x6A, /* 0x28-0x2B */ + 0x82, 0x6B, 0x82, 0x6C, 0x82, 0x6D, 0x82, 0x6E, /* 0x2C-0x2F */ + 0x82, 0x6F, 0x82, 0x70, 0x82, 0x71, 0x82, 0x72, /* 0x30-0x33 */ + 0x82, 0x73, 0x82, 0x74, 0x82, 0x75, 0x82, 0x76, /* 0x34-0x37 */ + 0x82, 0x77, 0x82, 0x78, 0x82, 0x79, 0x81, 0x6D, /* 0x38-0x3B */ + 0x81, 0x5F, 0x81, 0x6E, 0x81, 0x4F, 0x81, 0x51, /* 0x3C-0x3F */ + 0x81, 0x4D, 0x82, 0x81, 0x82, 0x82, 0x82, 0x83, /* 0x40-0x43 */ + 0x82, 0x84, 0x82, 0x85, 0x82, 0x86, 0x82, 0x87, /* 0x44-0x47 */ + 0x82, 0x88, 0x82, 0x89, 0x82, 0x8A, 0x82, 0x8B, /* 0x48-0x4B */ + 0x82, 0x8C, 0x82, 0x8D, 0x82, 0x8E, 0x82, 0x8F, /* 0x4C-0x4F */ + 0x82, 0x90, 0x82, 0x91, 0x82, 0x92, 0x82, 0x93, /* 0x50-0x53 */ + 0x82, 0x94, 0x82, 0x95, 0x82, 0x96, 0x82, 0x97, /* 0x54-0x57 */ + 0x82, 0x98, 0x82, 0x99, 0x82, 0x9A, 0x81, 0x6F, /* 0x58-0x5B */ + 0x81, 0x62, 0x81, 0x70, 0x81, 0x60, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x81, 0x91, 0x81, 0x92, 0x00, 0x54, 0x81, 0x50, /* 0xE0-0xE3 */ + 0x00, 0x55, 0x81, 0x8F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, NULL, NULL, u2c_03, u2c_04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, u2c_24, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, NULL, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, NULL, u2c_FF, }; + +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + if (ch == 0xFF && 0x60 < cl && cl < 0xA0){ + out[0] = cl + 0x40; + *outlen = 1; + return; + } + + uni2charset = page_uni2charset[ch]; + *outlen = 0; + if (uni2charset){ + if (boundlen <= 1) + return; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + *outlen = 1; + } else if (ch==0 && cl) + out[0] = cl; + else + out[0] = '?'; + (*outlen)++; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + unsigned char ch, cl; + struct nls_unicode *charset2uni; + + ch = rawstring[0]; + cl = rawstring[1]; + if (0xA0 < ch && ch < 0xE0){ + *uni1 = 0xFF; + *uni2 = ch - 0x40; + *offset = 1; + return; + } + + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl){ + *uni1 = charset2uni[cl].uni2; + *uni2 = charset2uni[cl].uni1; + *offset = 2; + } else{ + *uni1 = ch; + *uni2 = 0x00; + *offset = 1; + } + return; +} + +static void inc_use_count(void) +{ + MOD_INC_USE_COUNT; +} + +static void dec_use_count(void) +{ + MOD_DEC_USE_COUNT; +} + +static struct nls_table table = { + "cp932", + uni2char, + char2uni, + inc_use_count, + dec_use_count, + NULL +}; + +int init_nls_cp932(void) +{ + return register_nls(&table); +} + +#ifdef MODULE +int init_module(void) +{ + return init_nls_cp932(); +} + + +void cleanup_module(void) +{ + unregister_nls(&table); + return; +} +#endif + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp936.c linux.16p3/fs/nls/nls_cp936.c --- linux.vanilla/fs/nls/nls_cp936.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/fs/nls/nls_cp936.c Wed Apr 19 13:58:55 2000 @@ -0,0 +1,15614 @@ +/* + * linux/fs/nls_cp936.c + * + * Charset cp936 translation tables. + * Generated automatically from the Microsoft + */ + +#include +#include +#include +#include + +static struct nls_unicode c2u_81[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x4E, 0x02}, {0x4E, 0x04}, {0x4E, 0x05}, {0x4E, 0x06}, /* 0x40-0x43 */ + {0x4E, 0x0F}, {0x4E, 0x12}, {0x4E, 0x17}, {0x4E, 0x1F}, /* 0x44-0x47 */ + {0x4E, 0x20}, {0x4E, 0x21}, {0x4E, 0x23}, {0x4E, 0x26}, /* 0x48-0x4B */ + {0x4E, 0x29}, {0x4E, 0x2E}, {0x4E, 0x2F}, {0x4E, 0x31}, /* 0x4C-0x4F */ + {0x4E, 0x33}, {0x4E, 0x35}, {0x4E, 0x37}, {0x4E, 0x3C}, /* 0x50-0x53 */ + {0x4E, 0x40}, {0x4E, 0x41}, {0x4E, 0x42}, {0x4E, 0x44}, /* 0x54-0x57 */ + {0x4E, 0x46}, {0x4E, 0x4A}, {0x4E, 0x51}, {0x4E, 0x55}, /* 0x58-0x5B */ + {0x4E, 0x57}, {0x4E, 0x5A}, {0x4E, 0x5B}, {0x4E, 0x62}, /* 0x5C-0x5F */ + {0x4E, 0x63}, {0x4E, 0x64}, {0x4E, 0x65}, {0x4E, 0x67}, /* 0x60-0x63 */ + {0x4E, 0x68}, {0x4E, 0x6A}, {0x4E, 0x6B}, {0x4E, 0x6C}, /* 0x64-0x67 */ + {0x4E, 0x6D}, {0x4E, 0x6E}, {0x4E, 0x6F}, {0x4E, 0x72}, /* 0x68-0x6B */ + {0x4E, 0x74}, {0x4E, 0x75}, {0x4E, 0x76}, {0x4E, 0x77}, /* 0x6C-0x6F */ + {0x4E, 0x78}, {0x4E, 0x79}, {0x4E, 0x7A}, {0x4E, 0x7B}, /* 0x70-0x73 */ + {0x4E, 0x7C}, {0x4E, 0x7D}, {0x4E, 0x7F}, {0x4E, 0x80}, /* 0x74-0x77 */ + {0x4E, 0x81}, {0x4E, 0x82}, {0x4E, 0x83}, {0x4E, 0x84}, /* 0x78-0x7B */ + {0x4E, 0x85}, {0x4E, 0x87}, {0x4E, 0x8A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x4E, 0x90}, {0x4E, 0x96}, {0x4E, 0x97}, {0x4E, 0x99}, /* 0x80-0x83 */ + {0x4E, 0x9C}, {0x4E, 0x9D}, {0x4E, 0x9E}, {0x4E, 0xA3}, /* 0x84-0x87 */ + {0x4E, 0xAA}, {0x4E, 0xAF}, {0x4E, 0xB0}, {0x4E, 0xB1}, /* 0x88-0x8B */ + {0x4E, 0xB4}, {0x4E, 0xB6}, {0x4E, 0xB7}, {0x4E, 0xB8}, /* 0x8C-0x8F */ + {0x4E, 0xB9}, {0x4E, 0xBC}, {0x4E, 0xBD}, {0x4E, 0xBE}, /* 0x90-0x93 */ + {0x4E, 0xC8}, {0x4E, 0xCC}, {0x4E, 0xCF}, {0x4E, 0xD0}, /* 0x94-0x97 */ + {0x4E, 0xD2}, {0x4E, 0xDA}, {0x4E, 0xDB}, {0x4E, 0xDC}, /* 0x98-0x9B */ + {0x4E, 0xE0}, {0x4E, 0xE2}, {0x4E, 0xE6}, {0x4E, 0xE7}, /* 0x9C-0x9F */ + {0x4E, 0xE9}, {0x4E, 0xED}, {0x4E, 0xEE}, {0x4E, 0xEF}, /* 0xA0-0xA3 */ + {0x4E, 0xF1}, {0x4E, 0xF4}, {0x4E, 0xF8}, {0x4E, 0xF9}, /* 0xA4-0xA7 */ + {0x4E, 0xFA}, {0x4E, 0xFC}, {0x4E, 0xFE}, {0x4F, 0x00}, /* 0xA8-0xAB */ + {0x4F, 0x02}, {0x4F, 0x03}, {0x4F, 0x04}, {0x4F, 0x05}, /* 0xAC-0xAF */ + {0x4F, 0x06}, {0x4F, 0x07}, {0x4F, 0x08}, {0x4F, 0x0B}, /* 0xB0-0xB3 */ + {0x4F, 0x0C}, {0x4F, 0x12}, {0x4F, 0x13}, {0x4F, 0x14}, /* 0xB4-0xB7 */ + {0x4F, 0x15}, {0x4F, 0x16}, {0x4F, 0x1C}, {0x4F, 0x1D}, /* 0xB8-0xBB */ + {0x4F, 0x21}, {0x4F, 0x23}, {0x4F, 0x28}, {0x4F, 0x29}, /* 0xBC-0xBF */ + {0x4F, 0x2C}, {0x4F, 0x2D}, {0x4F, 0x2E}, {0x4F, 0x31}, /* 0xC0-0xC3 */ + {0x4F, 0x33}, {0x4F, 0x35}, {0x4F, 0x37}, {0x4F, 0x39}, /* 0xC4-0xC7 */ + {0x4F, 0x3B}, {0x4F, 0x3E}, {0x4F, 0x3F}, {0x4F, 0x40}, /* 0xC8-0xCB */ + {0x4F, 0x41}, {0x4F, 0x42}, {0x4F, 0x44}, {0x4F, 0x45}, /* 0xCC-0xCF */ + {0x4F, 0x47}, {0x4F, 0x48}, {0x4F, 0x49}, {0x4F, 0x4A}, /* 0xD0-0xD3 */ + {0x4F, 0x4B}, {0x4F, 0x4C}, {0x4F, 0x52}, {0x4F, 0x54}, /* 0xD4-0xD7 */ + {0x4F, 0x56}, {0x4F, 0x61}, {0x4F, 0x62}, {0x4F, 0x66}, /* 0xD8-0xDB */ + {0x4F, 0x68}, {0x4F, 0x6A}, {0x4F, 0x6B}, {0x4F, 0x6D}, /* 0xDC-0xDF */ + {0x4F, 0x6E}, {0x4F, 0x71}, {0x4F, 0x72}, {0x4F, 0x75}, /* 0xE0-0xE3 */ + {0x4F, 0x77}, {0x4F, 0x78}, {0x4F, 0x79}, {0x4F, 0x7A}, /* 0xE4-0xE7 */ + {0x4F, 0x7D}, {0x4F, 0x80}, {0x4F, 0x81}, {0x4F, 0x82}, /* 0xE8-0xEB */ + {0x4F, 0x85}, {0x4F, 0x86}, {0x4F, 0x87}, {0x4F, 0x8A}, /* 0xEC-0xEF */ + {0x4F, 0x8C}, {0x4F, 0x8E}, {0x4F, 0x90}, {0x4F, 0x92}, /* 0xF0-0xF3 */ + {0x4F, 0x93}, {0x4F, 0x95}, {0x4F, 0x96}, {0x4F, 0x98}, /* 0xF4-0xF7 */ + {0x4F, 0x99}, {0x4F, 0x9A}, {0x4F, 0x9C}, {0x4F, 0x9E}, /* 0xF8-0xFB */ + {0x4F, 0x9F}, {0x4F, 0xA1}, {0x4F, 0xA2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_82[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x4F, 0xA4}, {0x4F, 0xAB}, {0x4F, 0xAD}, {0x4F, 0xB0}, /* 0x40-0x43 */ + {0x4F, 0xB1}, {0x4F, 0xB2}, {0x4F, 0xB3}, {0x4F, 0xB4}, /* 0x44-0x47 */ + {0x4F, 0xB6}, {0x4F, 0xB7}, {0x4F, 0xB8}, {0x4F, 0xB9}, /* 0x48-0x4B */ + {0x4F, 0xBA}, {0x4F, 0xBB}, {0x4F, 0xBC}, {0x4F, 0xBD}, /* 0x4C-0x4F */ + {0x4F, 0xBE}, {0x4F, 0xC0}, {0x4F, 0xC1}, {0x4F, 0xC2}, /* 0x50-0x53 */ + {0x4F, 0xC6}, {0x4F, 0xC7}, {0x4F, 0xC8}, {0x4F, 0xC9}, /* 0x54-0x57 */ + {0x4F, 0xCB}, {0x4F, 0xCC}, {0x4F, 0xCD}, {0x4F, 0xD2}, /* 0x58-0x5B */ + {0x4F, 0xD3}, {0x4F, 0xD4}, {0x4F, 0xD5}, {0x4F, 0xD6}, /* 0x5C-0x5F */ + {0x4F, 0xD9}, {0x4F, 0xDB}, {0x4F, 0xE0}, {0x4F, 0xE2}, /* 0x60-0x63 */ + {0x4F, 0xE4}, {0x4F, 0xE5}, {0x4F, 0xE7}, {0x4F, 0xEB}, /* 0x64-0x67 */ + {0x4F, 0xEC}, {0x4F, 0xF0}, {0x4F, 0xF2}, {0x4F, 0xF4}, /* 0x68-0x6B */ + {0x4F, 0xF5}, {0x4F, 0xF6}, {0x4F, 0xF7}, {0x4F, 0xF9}, /* 0x6C-0x6F */ + {0x4F, 0xFB}, {0x4F, 0xFC}, {0x4F, 0xFD}, {0x4F, 0xFF}, /* 0x70-0x73 */ + {0x50, 0x00}, {0x50, 0x01}, {0x50, 0x02}, {0x50, 0x03}, /* 0x74-0x77 */ + {0x50, 0x04}, {0x50, 0x05}, {0x50, 0x06}, {0x50, 0x07}, /* 0x78-0x7B */ + {0x50, 0x08}, {0x50, 0x09}, {0x50, 0x0A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x50, 0x0B}, {0x50, 0x0E}, {0x50, 0x10}, {0x50, 0x11}, /* 0x80-0x83 */ + {0x50, 0x13}, {0x50, 0x15}, {0x50, 0x16}, {0x50, 0x17}, /* 0x84-0x87 */ + {0x50, 0x1B}, {0x50, 0x1D}, {0x50, 0x1E}, {0x50, 0x20}, /* 0x88-0x8B */ + {0x50, 0x22}, {0x50, 0x23}, {0x50, 0x24}, {0x50, 0x27}, /* 0x8C-0x8F */ + {0x50, 0x2B}, {0x50, 0x2F}, {0x50, 0x30}, {0x50, 0x31}, /* 0x90-0x93 */ + {0x50, 0x32}, {0x50, 0x33}, {0x50, 0x34}, {0x50, 0x35}, /* 0x94-0x97 */ + {0x50, 0x36}, {0x50, 0x37}, {0x50, 0x38}, {0x50, 0x39}, /* 0x98-0x9B */ + {0x50, 0x3B}, {0x50, 0x3D}, {0x50, 0x3F}, {0x50, 0x40}, /* 0x9C-0x9F */ + {0x50, 0x41}, {0x50, 0x42}, {0x50, 0x44}, {0x50, 0x45}, /* 0xA0-0xA3 */ + {0x50, 0x46}, {0x50, 0x49}, {0x50, 0x4A}, {0x50, 0x4B}, /* 0xA4-0xA7 */ + {0x50, 0x4D}, {0x50, 0x50}, {0x50, 0x51}, {0x50, 0x52}, /* 0xA8-0xAB */ + {0x50, 0x53}, {0x50, 0x54}, {0x50, 0x56}, {0x50, 0x57}, /* 0xAC-0xAF */ + {0x50, 0x58}, {0x50, 0x59}, {0x50, 0x5B}, {0x50, 0x5D}, /* 0xB0-0xB3 */ + {0x50, 0x5E}, {0x50, 0x5F}, {0x50, 0x60}, {0x50, 0x61}, /* 0xB4-0xB7 */ + {0x50, 0x62}, {0x50, 0x63}, {0x50, 0x64}, {0x50, 0x66}, /* 0xB8-0xBB */ + {0x50, 0x67}, {0x50, 0x68}, {0x50, 0x69}, {0x50, 0x6A}, /* 0xBC-0xBF */ + {0x50, 0x6B}, {0x50, 0x6D}, {0x50, 0x6E}, {0x50, 0x6F}, /* 0xC0-0xC3 */ + {0x50, 0x70}, {0x50, 0x71}, {0x50, 0x72}, {0x50, 0x73}, /* 0xC4-0xC7 */ + {0x50, 0x74}, {0x50, 0x75}, {0x50, 0x78}, {0x50, 0x79}, /* 0xC8-0xCB */ + {0x50, 0x7A}, {0x50, 0x7C}, {0x50, 0x7D}, {0x50, 0x81}, /* 0xCC-0xCF */ + {0x50, 0x82}, {0x50, 0x83}, {0x50, 0x84}, {0x50, 0x86}, /* 0xD0-0xD3 */ + {0x50, 0x87}, {0x50, 0x89}, {0x50, 0x8A}, {0x50, 0x8B}, /* 0xD4-0xD7 */ + {0x50, 0x8C}, {0x50, 0x8E}, {0x50, 0x8F}, {0x50, 0x90}, /* 0xD8-0xDB */ + {0x50, 0x91}, {0x50, 0x92}, {0x50, 0x93}, {0x50, 0x94}, /* 0xDC-0xDF */ + {0x50, 0x95}, {0x50, 0x96}, {0x50, 0x97}, {0x50, 0x98}, /* 0xE0-0xE3 */ + {0x50, 0x99}, {0x50, 0x9A}, {0x50, 0x9B}, {0x50, 0x9C}, /* 0xE4-0xE7 */ + {0x50, 0x9D}, {0x50, 0x9E}, {0x50, 0x9F}, {0x50, 0xA0}, /* 0xE8-0xEB */ + {0x50, 0xA1}, {0x50, 0xA2}, {0x50, 0xA4}, {0x50, 0xA6}, /* 0xEC-0xEF */ + {0x50, 0xAA}, {0x50, 0xAB}, {0x50, 0xAD}, {0x50, 0xAE}, /* 0xF0-0xF3 */ + {0x50, 0xAF}, {0x50, 0xB0}, {0x50, 0xB1}, {0x50, 0xB3}, /* 0xF4-0xF7 */ + {0x50, 0xB4}, {0x50, 0xB5}, {0x50, 0xB6}, {0x50, 0xB7}, /* 0xF8-0xFB */ + {0x50, 0xB8}, {0x50, 0xB9}, {0x50, 0xBC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_83[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x50, 0xBD}, {0x50, 0xBE}, {0x50, 0xBF}, {0x50, 0xC0}, /* 0x40-0x43 */ + {0x50, 0xC1}, {0x50, 0xC2}, {0x50, 0xC3}, {0x50, 0xC4}, /* 0x44-0x47 */ + {0x50, 0xC5}, {0x50, 0xC6}, {0x50, 0xC7}, {0x50, 0xC8}, /* 0x48-0x4B */ + {0x50, 0xC9}, {0x50, 0xCA}, {0x50, 0xCB}, {0x50, 0xCC}, /* 0x4C-0x4F */ + {0x50, 0xCD}, {0x50, 0xCE}, {0x50, 0xD0}, {0x50, 0xD1}, /* 0x50-0x53 */ + {0x50, 0xD2}, {0x50, 0xD3}, {0x50, 0xD4}, {0x50, 0xD5}, /* 0x54-0x57 */ + {0x50, 0xD7}, {0x50, 0xD8}, {0x50, 0xD9}, {0x50, 0xDB}, /* 0x58-0x5B */ + {0x50, 0xDC}, {0x50, 0xDD}, {0x50, 0xDE}, {0x50, 0xDF}, /* 0x5C-0x5F */ + {0x50, 0xE0}, {0x50, 0xE1}, {0x50, 0xE2}, {0x50, 0xE3}, /* 0x60-0x63 */ + {0x50, 0xE4}, {0x50, 0xE5}, {0x50, 0xE8}, {0x50, 0xE9}, /* 0x64-0x67 */ + {0x50, 0xEA}, {0x50, 0xEB}, {0x50, 0xEF}, {0x50, 0xF0}, /* 0x68-0x6B */ + {0x50, 0xF1}, {0x50, 0xF2}, {0x50, 0xF4}, {0x50, 0xF6}, /* 0x6C-0x6F */ + {0x50, 0xF7}, {0x50, 0xF8}, {0x50, 0xF9}, {0x50, 0xFA}, /* 0x70-0x73 */ + {0x50, 0xFC}, {0x50, 0xFD}, {0x50, 0xFE}, {0x50, 0xFF}, /* 0x74-0x77 */ + {0x51, 0x00}, {0x51, 0x01}, {0x51, 0x02}, {0x51, 0x03}, /* 0x78-0x7B */ + {0x51, 0x04}, {0x51, 0x05}, {0x51, 0x08}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x51, 0x09}, {0x51, 0x0A}, {0x51, 0x0C}, {0x51, 0x0D}, /* 0x80-0x83 */ + {0x51, 0x0E}, {0x51, 0x0F}, {0x51, 0x10}, {0x51, 0x11}, /* 0x84-0x87 */ + {0x51, 0x13}, {0x51, 0x14}, {0x51, 0x15}, {0x51, 0x16}, /* 0x88-0x8B */ + {0x51, 0x17}, {0x51, 0x18}, {0x51, 0x19}, {0x51, 0x1A}, /* 0x8C-0x8F */ + {0x51, 0x1B}, {0x51, 0x1C}, {0x51, 0x1D}, {0x51, 0x1E}, /* 0x90-0x93 */ + {0x51, 0x1F}, {0x51, 0x20}, {0x51, 0x22}, {0x51, 0x23}, /* 0x94-0x97 */ + {0x51, 0x24}, {0x51, 0x25}, {0x51, 0x26}, {0x51, 0x27}, /* 0x98-0x9B */ + {0x51, 0x28}, {0x51, 0x29}, {0x51, 0x2A}, {0x51, 0x2B}, /* 0x9C-0x9F */ + {0x51, 0x2C}, {0x51, 0x2D}, {0x51, 0x2E}, {0x51, 0x2F}, /* 0xA0-0xA3 */ + {0x51, 0x30}, {0x51, 0x31}, {0x51, 0x32}, {0x51, 0x33}, /* 0xA4-0xA7 */ + {0x51, 0x34}, {0x51, 0x35}, {0x51, 0x36}, {0x51, 0x37}, /* 0xA8-0xAB */ + {0x51, 0x38}, {0x51, 0x39}, {0x51, 0x3A}, {0x51, 0x3B}, /* 0xAC-0xAF */ + {0x51, 0x3C}, {0x51, 0x3D}, {0x51, 0x3E}, {0x51, 0x42}, /* 0xB0-0xB3 */ + {0x51, 0x47}, {0x51, 0x4A}, {0x51, 0x4C}, {0x51, 0x4E}, /* 0xB4-0xB7 */ + {0x51, 0x4F}, {0x51, 0x50}, {0x51, 0x52}, {0x51, 0x53}, /* 0xB8-0xBB */ + {0x51, 0x57}, {0x51, 0x58}, {0x51, 0x59}, {0x51, 0x5B}, /* 0xBC-0xBF */ + {0x51, 0x5D}, {0x51, 0x5E}, {0x51, 0x5F}, {0x51, 0x60}, /* 0xC0-0xC3 */ + {0x51, 0x61}, {0x51, 0x63}, {0x51, 0x64}, {0x51, 0x66}, /* 0xC4-0xC7 */ + {0x51, 0x67}, {0x51, 0x69}, {0x51, 0x6A}, {0x51, 0x6F}, /* 0xC8-0xCB */ + {0x51, 0x72}, {0x51, 0x7A}, {0x51, 0x7E}, {0x51, 0x7F}, /* 0xCC-0xCF */ + {0x51, 0x83}, {0x51, 0x84}, {0x51, 0x86}, {0x51, 0x87}, /* 0xD0-0xD3 */ + {0x51, 0x8A}, {0x51, 0x8B}, {0x51, 0x8E}, {0x51, 0x8F}, /* 0xD4-0xD7 */ + {0x51, 0x90}, {0x51, 0x91}, {0x51, 0x93}, {0x51, 0x94}, /* 0xD8-0xDB */ + {0x51, 0x98}, {0x51, 0x9A}, {0x51, 0x9D}, {0x51, 0x9E}, /* 0xDC-0xDF */ + {0x51, 0x9F}, {0x51, 0xA1}, {0x51, 0xA3}, {0x51, 0xA6}, /* 0xE0-0xE3 */ + {0x51, 0xA7}, {0x51, 0xA8}, {0x51, 0xA9}, {0x51, 0xAA}, /* 0xE4-0xE7 */ + {0x51, 0xAD}, {0x51, 0xAE}, {0x51, 0xB4}, {0x51, 0xB8}, /* 0xE8-0xEB */ + {0x51, 0xB9}, {0x51, 0xBA}, {0x51, 0xBE}, {0x51, 0xBF}, /* 0xEC-0xEF */ + {0x51, 0xC1}, {0x51, 0xC2}, {0x51, 0xC3}, {0x51, 0xC5}, /* 0xF0-0xF3 */ + {0x51, 0xC8}, {0x51, 0xCA}, {0x51, 0xCD}, {0x51, 0xCE}, /* 0xF4-0xF7 */ + {0x51, 0xD0}, {0x51, 0xD2}, {0x51, 0xD3}, {0x51, 0xD4}, /* 0xF8-0xFB */ + {0x51, 0xD5}, {0x51, 0xD6}, {0x51, 0xD7}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_84[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x51, 0xD8}, {0x51, 0xD9}, {0x51, 0xDA}, {0x51, 0xDC}, /* 0x40-0x43 */ + {0x51, 0xDE}, {0x51, 0xDF}, {0x51, 0xE2}, {0x51, 0xE3}, /* 0x44-0x47 */ + {0x51, 0xE5}, {0x51, 0xE6}, {0x51, 0xE7}, {0x51, 0xE8}, /* 0x48-0x4B */ + {0x51, 0xE9}, {0x51, 0xEA}, {0x51, 0xEC}, {0x51, 0xEE}, /* 0x4C-0x4F */ + {0x51, 0xF1}, {0x51, 0xF2}, {0x51, 0xF4}, {0x51, 0xF7}, /* 0x50-0x53 */ + {0x51, 0xFE}, {0x52, 0x04}, {0x52, 0x05}, {0x52, 0x09}, /* 0x54-0x57 */ + {0x52, 0x0B}, {0x52, 0x0C}, {0x52, 0x0F}, {0x52, 0x10}, /* 0x58-0x5B */ + {0x52, 0x13}, {0x52, 0x14}, {0x52, 0x15}, {0x52, 0x1C}, /* 0x5C-0x5F */ + {0x52, 0x1E}, {0x52, 0x1F}, {0x52, 0x21}, {0x52, 0x22}, /* 0x60-0x63 */ + {0x52, 0x23}, {0x52, 0x25}, {0x52, 0x26}, {0x52, 0x27}, /* 0x64-0x67 */ + {0x52, 0x2A}, {0x52, 0x2C}, {0x52, 0x2F}, {0x52, 0x31}, /* 0x68-0x6B */ + {0x52, 0x32}, {0x52, 0x34}, {0x52, 0x35}, {0x52, 0x3C}, /* 0x6C-0x6F */ + {0x52, 0x3E}, {0x52, 0x44}, {0x52, 0x45}, {0x52, 0x46}, /* 0x70-0x73 */ + {0x52, 0x47}, {0x52, 0x48}, {0x52, 0x49}, {0x52, 0x4B}, /* 0x74-0x77 */ + {0x52, 0x4E}, {0x52, 0x4F}, {0x52, 0x52}, {0x52, 0x53}, /* 0x78-0x7B */ + {0x52, 0x55}, {0x52, 0x57}, {0x52, 0x58}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x52, 0x59}, {0x52, 0x5A}, {0x52, 0x5B}, {0x52, 0x5D}, /* 0x80-0x83 */ + {0x52, 0x5F}, {0x52, 0x60}, {0x52, 0x62}, {0x52, 0x63}, /* 0x84-0x87 */ + {0x52, 0x64}, {0x52, 0x66}, {0x52, 0x68}, {0x52, 0x6B}, /* 0x88-0x8B */ + {0x52, 0x6C}, {0x52, 0x6D}, {0x52, 0x6E}, {0x52, 0x70}, /* 0x8C-0x8F */ + {0x52, 0x71}, {0x52, 0x73}, {0x52, 0x74}, {0x52, 0x75}, /* 0x90-0x93 */ + {0x52, 0x76}, {0x52, 0x77}, {0x52, 0x78}, {0x52, 0x79}, /* 0x94-0x97 */ + {0x52, 0x7A}, {0x52, 0x7B}, {0x52, 0x7C}, {0x52, 0x7E}, /* 0x98-0x9B */ + {0x52, 0x80}, {0x52, 0x83}, {0x52, 0x84}, {0x52, 0x85}, /* 0x9C-0x9F */ + {0x52, 0x86}, {0x52, 0x87}, {0x52, 0x89}, {0x52, 0x8A}, /* 0xA0-0xA3 */ + {0x52, 0x8B}, {0x52, 0x8C}, {0x52, 0x8D}, {0x52, 0x8E}, /* 0xA4-0xA7 */ + {0x52, 0x8F}, {0x52, 0x91}, {0x52, 0x92}, {0x52, 0x94}, /* 0xA8-0xAB */ + {0x52, 0x95}, {0x52, 0x96}, {0x52, 0x97}, {0x52, 0x98}, /* 0xAC-0xAF */ + {0x52, 0x99}, {0x52, 0x9A}, {0x52, 0x9C}, {0x52, 0xA4}, /* 0xB0-0xB3 */ + {0x52, 0xA5}, {0x52, 0xA6}, {0x52, 0xA7}, {0x52, 0xAE}, /* 0xB4-0xB7 */ + {0x52, 0xAF}, {0x52, 0xB0}, {0x52, 0xB4}, {0x52, 0xB5}, /* 0xB8-0xBB */ + {0x52, 0xB6}, {0x52, 0xB7}, {0x52, 0xB8}, {0x52, 0xB9}, /* 0xBC-0xBF */ + {0x52, 0xBA}, {0x52, 0xBB}, {0x52, 0xBC}, {0x52, 0xBD}, /* 0xC0-0xC3 */ + {0x52, 0xC0}, {0x52, 0xC1}, {0x52, 0xC2}, {0x52, 0xC4}, /* 0xC4-0xC7 */ + {0x52, 0xC5}, {0x52, 0xC6}, {0x52, 0xC8}, {0x52, 0xCA}, /* 0xC8-0xCB */ + {0x52, 0xCC}, {0x52, 0xCD}, {0x52, 0xCE}, {0x52, 0xCF}, /* 0xCC-0xCF */ + {0x52, 0xD1}, {0x52, 0xD3}, {0x52, 0xD4}, {0x52, 0xD5}, /* 0xD0-0xD3 */ + {0x52, 0xD7}, {0x52, 0xD9}, {0x52, 0xDA}, {0x52, 0xDB}, /* 0xD4-0xD7 */ + {0x52, 0xDC}, {0x52, 0xDD}, {0x52, 0xDE}, {0x52, 0xE0}, /* 0xD8-0xDB */ + {0x52, 0xE1}, {0x52, 0xE2}, {0x52, 0xE3}, {0x52, 0xE5}, /* 0xDC-0xDF */ + {0x52, 0xE6}, {0x52, 0xE7}, {0x52, 0xE8}, {0x52, 0xE9}, /* 0xE0-0xE3 */ + {0x52, 0xEA}, {0x52, 0xEB}, {0x52, 0xEC}, {0x52, 0xED}, /* 0xE4-0xE7 */ + {0x52, 0xEE}, {0x52, 0xEF}, {0x52, 0xF1}, {0x52, 0xF2}, /* 0xE8-0xEB */ + {0x52, 0xF3}, {0x52, 0xF4}, {0x52, 0xF5}, {0x52, 0xF6}, /* 0xEC-0xEF */ + {0x52, 0xF7}, {0x52, 0xF8}, {0x52, 0xFB}, {0x52, 0xFC}, /* 0xF0-0xF3 */ + {0x52, 0xFD}, {0x53, 0x01}, {0x53, 0x02}, {0x53, 0x03}, /* 0xF4-0xF7 */ + {0x53, 0x04}, {0x53, 0x07}, {0x53, 0x09}, {0x53, 0x0A}, /* 0xF8-0xFB */ + {0x53, 0x0B}, {0x53, 0x0C}, {0x53, 0x0E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_85[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x53, 0x11}, {0x53, 0x12}, {0x53, 0x13}, {0x53, 0x14}, /* 0x40-0x43 */ + {0x53, 0x18}, {0x53, 0x1B}, {0x53, 0x1C}, {0x53, 0x1E}, /* 0x44-0x47 */ + {0x53, 0x1F}, {0x53, 0x22}, {0x53, 0x24}, {0x53, 0x25}, /* 0x48-0x4B */ + {0x53, 0x27}, {0x53, 0x28}, {0x53, 0x29}, {0x53, 0x2B}, /* 0x4C-0x4F */ + {0x53, 0x2C}, {0x53, 0x2D}, {0x53, 0x2F}, {0x53, 0x30}, /* 0x50-0x53 */ + {0x53, 0x31}, {0x53, 0x32}, {0x53, 0x33}, {0x53, 0x34}, /* 0x54-0x57 */ + {0x53, 0x35}, {0x53, 0x36}, {0x53, 0x37}, {0x53, 0x38}, /* 0x58-0x5B */ + {0x53, 0x3C}, {0x53, 0x3D}, {0x53, 0x40}, {0x53, 0x42}, /* 0x5C-0x5F */ + {0x53, 0x44}, {0x53, 0x46}, {0x53, 0x4B}, {0x53, 0x4C}, /* 0x60-0x63 */ + {0x53, 0x4D}, {0x53, 0x50}, {0x53, 0x54}, {0x53, 0x58}, /* 0x64-0x67 */ + {0x53, 0x59}, {0x53, 0x5B}, {0x53, 0x5D}, {0x53, 0x65}, /* 0x68-0x6B */ + {0x53, 0x68}, {0x53, 0x6A}, {0x53, 0x6C}, {0x53, 0x6D}, /* 0x6C-0x6F */ + {0x53, 0x72}, {0x53, 0x76}, {0x53, 0x79}, {0x53, 0x7B}, /* 0x70-0x73 */ + {0x53, 0x7C}, {0x53, 0x7D}, {0x53, 0x7E}, {0x53, 0x80}, /* 0x74-0x77 */ + {0x53, 0x81}, {0x53, 0x83}, {0x53, 0x87}, {0x53, 0x88}, /* 0x78-0x7B */ + {0x53, 0x8A}, {0x53, 0x8E}, {0x53, 0x8F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x53, 0x90}, {0x53, 0x91}, {0x53, 0x92}, {0x53, 0x93}, /* 0x80-0x83 */ + {0x53, 0x94}, {0x53, 0x96}, {0x53, 0x97}, {0x53, 0x99}, /* 0x84-0x87 */ + {0x53, 0x9B}, {0x53, 0x9C}, {0x53, 0x9E}, {0x53, 0xA0}, /* 0x88-0x8B */ + {0x53, 0xA1}, {0x53, 0xA4}, {0x53, 0xA7}, {0x53, 0xAA}, /* 0x8C-0x8F */ + {0x53, 0xAB}, {0x53, 0xAC}, {0x53, 0xAD}, {0x53, 0xAF}, /* 0x90-0x93 */ + {0x53, 0xB0}, {0x53, 0xB1}, {0x53, 0xB2}, {0x53, 0xB3}, /* 0x94-0x97 */ + {0x53, 0xB4}, {0x53, 0xB5}, {0x53, 0xB7}, {0x53, 0xB8}, /* 0x98-0x9B */ + {0x53, 0xB9}, {0x53, 0xBA}, {0x53, 0xBC}, {0x53, 0xBD}, /* 0x9C-0x9F */ + {0x53, 0xBE}, {0x53, 0xC0}, {0x53, 0xC3}, {0x53, 0xC4}, /* 0xA0-0xA3 */ + {0x53, 0xC5}, {0x53, 0xC6}, {0x53, 0xC7}, {0x53, 0xCE}, /* 0xA4-0xA7 */ + {0x53, 0xCF}, {0x53, 0xD0}, {0x53, 0xD2}, {0x53, 0xD3}, /* 0xA8-0xAB */ + {0x53, 0xD5}, {0x53, 0xDA}, {0x53, 0xDC}, {0x53, 0xDD}, /* 0xAC-0xAF */ + {0x53, 0xDE}, {0x53, 0xE1}, {0x53, 0xE2}, {0x53, 0xE7}, /* 0xB0-0xB3 */ + {0x53, 0xF4}, {0x53, 0xFA}, {0x53, 0xFE}, {0x53, 0xFF}, /* 0xB4-0xB7 */ + {0x54, 0x00}, {0x54, 0x02}, {0x54, 0x05}, {0x54, 0x07}, /* 0xB8-0xBB */ + {0x54, 0x0B}, {0x54, 0x14}, {0x54, 0x18}, {0x54, 0x19}, /* 0xBC-0xBF */ + {0x54, 0x1A}, {0x54, 0x1C}, {0x54, 0x22}, {0x54, 0x24}, /* 0xC0-0xC3 */ + {0x54, 0x25}, {0x54, 0x2A}, {0x54, 0x30}, {0x54, 0x33}, /* 0xC4-0xC7 */ + {0x54, 0x36}, {0x54, 0x37}, {0x54, 0x3A}, {0x54, 0x3D}, /* 0xC8-0xCB */ + {0x54, 0x3F}, {0x54, 0x41}, {0x54, 0x42}, {0x54, 0x44}, /* 0xCC-0xCF */ + {0x54, 0x45}, {0x54, 0x47}, {0x54, 0x49}, {0x54, 0x4C}, /* 0xD0-0xD3 */ + {0x54, 0x4D}, {0x54, 0x4E}, {0x54, 0x4F}, {0x54, 0x51}, /* 0xD4-0xD7 */ + {0x54, 0x5A}, {0x54, 0x5D}, {0x54, 0x5E}, {0x54, 0x5F}, /* 0xD8-0xDB */ + {0x54, 0x60}, {0x54, 0x61}, {0x54, 0x63}, {0x54, 0x65}, /* 0xDC-0xDF */ + {0x54, 0x67}, {0x54, 0x69}, {0x54, 0x6A}, {0x54, 0x6B}, /* 0xE0-0xE3 */ + {0x54, 0x6C}, {0x54, 0x6D}, {0x54, 0x6E}, {0x54, 0x6F}, /* 0xE4-0xE7 */ + {0x54, 0x70}, {0x54, 0x74}, {0x54, 0x79}, {0x54, 0x7A}, /* 0xE8-0xEB */ + {0x54, 0x7E}, {0x54, 0x7F}, {0x54, 0x81}, {0x54, 0x83}, /* 0xEC-0xEF */ + {0x54, 0x85}, {0x54, 0x87}, {0x54, 0x88}, {0x54, 0x89}, /* 0xF0-0xF3 */ + {0x54, 0x8A}, {0x54, 0x8D}, {0x54, 0x91}, {0x54, 0x93}, /* 0xF4-0xF7 */ + {0x54, 0x97}, {0x54, 0x98}, {0x54, 0x9C}, {0x54, 0x9E}, /* 0xF8-0xFB */ + {0x54, 0x9F}, {0x54, 0xA0}, {0x54, 0xA1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_86[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x54, 0xA2}, {0x54, 0xA5}, {0x54, 0xAE}, {0x54, 0xB0}, /* 0x40-0x43 */ + {0x54, 0xB2}, {0x54, 0xB5}, {0x54, 0xB6}, {0x54, 0xB7}, /* 0x44-0x47 */ + {0x54, 0xB9}, {0x54, 0xBA}, {0x54, 0xBC}, {0x54, 0xBE}, /* 0x48-0x4B */ + {0x54, 0xC3}, {0x54, 0xC5}, {0x54, 0xCA}, {0x54, 0xCB}, /* 0x4C-0x4F */ + {0x54, 0xD6}, {0x54, 0xD8}, {0x54, 0xDB}, {0x54, 0xE0}, /* 0x50-0x53 */ + {0x54, 0xE1}, {0x54, 0xE2}, {0x54, 0xE3}, {0x54, 0xE4}, /* 0x54-0x57 */ + {0x54, 0xEB}, {0x54, 0xEC}, {0x54, 0xEF}, {0x54, 0xF0}, /* 0x58-0x5B */ + {0x54, 0xF1}, {0x54, 0xF4}, {0x54, 0xF5}, {0x54, 0xF6}, /* 0x5C-0x5F */ + {0x54, 0xF7}, {0x54, 0xF8}, {0x54, 0xF9}, {0x54, 0xFB}, /* 0x60-0x63 */ + {0x54, 0xFE}, {0x55, 0x00}, {0x55, 0x02}, {0x55, 0x03}, /* 0x64-0x67 */ + {0x55, 0x04}, {0x55, 0x05}, {0x55, 0x08}, {0x55, 0x0A}, /* 0x68-0x6B */ + {0x55, 0x0B}, {0x55, 0x0C}, {0x55, 0x0D}, {0x55, 0x0E}, /* 0x6C-0x6F */ + {0x55, 0x12}, {0x55, 0x13}, {0x55, 0x15}, {0x55, 0x16}, /* 0x70-0x73 */ + {0x55, 0x17}, {0x55, 0x18}, {0x55, 0x19}, {0x55, 0x1A}, /* 0x74-0x77 */ + {0x55, 0x1C}, {0x55, 0x1D}, {0x55, 0x1E}, {0x55, 0x1F}, /* 0x78-0x7B */ + {0x55, 0x21}, {0x55, 0x25}, {0x55, 0x26}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x55, 0x28}, {0x55, 0x29}, {0x55, 0x2B}, {0x55, 0x2D}, /* 0x80-0x83 */ + {0x55, 0x32}, {0x55, 0x34}, {0x55, 0x35}, {0x55, 0x36}, /* 0x84-0x87 */ + {0x55, 0x38}, {0x55, 0x39}, {0x55, 0x3A}, {0x55, 0x3B}, /* 0x88-0x8B */ + {0x55, 0x3D}, {0x55, 0x40}, {0x55, 0x42}, {0x55, 0x45}, /* 0x8C-0x8F */ + {0x55, 0x47}, {0x55, 0x48}, {0x55, 0x4B}, {0x55, 0x4C}, /* 0x90-0x93 */ + {0x55, 0x4D}, {0x55, 0x4E}, {0x55, 0x4F}, {0x55, 0x51}, /* 0x94-0x97 */ + {0x55, 0x52}, {0x55, 0x53}, {0x55, 0x54}, {0x55, 0x57}, /* 0x98-0x9B */ + {0x55, 0x58}, {0x55, 0x59}, {0x55, 0x5A}, {0x55, 0x5B}, /* 0x9C-0x9F */ + {0x55, 0x5D}, {0x55, 0x5E}, {0x55, 0x5F}, {0x55, 0x60}, /* 0xA0-0xA3 */ + {0x55, 0x62}, {0x55, 0x63}, {0x55, 0x68}, {0x55, 0x69}, /* 0xA4-0xA7 */ + {0x55, 0x6B}, {0x55, 0x6F}, {0x55, 0x70}, {0x55, 0x71}, /* 0xA8-0xAB */ + {0x55, 0x72}, {0x55, 0x73}, {0x55, 0x74}, {0x55, 0x79}, /* 0xAC-0xAF */ + {0x55, 0x7A}, {0x55, 0x7D}, {0x55, 0x7F}, {0x55, 0x85}, /* 0xB0-0xB3 */ + {0x55, 0x86}, {0x55, 0x8C}, {0x55, 0x8D}, {0x55, 0x8E}, /* 0xB4-0xB7 */ + {0x55, 0x90}, {0x55, 0x92}, {0x55, 0x93}, {0x55, 0x95}, /* 0xB8-0xBB */ + {0x55, 0x96}, {0x55, 0x97}, {0x55, 0x9A}, {0x55, 0x9B}, /* 0xBC-0xBF */ + {0x55, 0x9E}, {0x55, 0xA0}, {0x55, 0xA1}, {0x55, 0xA2}, /* 0xC0-0xC3 */ + {0x55, 0xA3}, {0x55, 0xA4}, {0x55, 0xA5}, {0x55, 0xA6}, /* 0xC4-0xC7 */ + {0x55, 0xA8}, {0x55, 0xA9}, {0x55, 0xAA}, {0x55, 0xAB}, /* 0xC8-0xCB */ + {0x55, 0xAC}, {0x55, 0xAD}, {0x55, 0xAE}, {0x55, 0xAF}, /* 0xCC-0xCF */ + {0x55, 0xB0}, {0x55, 0xB2}, {0x55, 0xB4}, {0x55, 0xB6}, /* 0xD0-0xD3 */ + {0x55, 0xB8}, {0x55, 0xBA}, {0x55, 0xBC}, {0x55, 0xBF}, /* 0xD4-0xD7 */ + {0x55, 0xC0}, {0x55, 0xC1}, {0x55, 0xC2}, {0x55, 0xC3}, /* 0xD8-0xDB */ + {0x55, 0xC6}, {0x55, 0xC7}, {0x55, 0xC8}, {0x55, 0xCA}, /* 0xDC-0xDF */ + {0x55, 0xCB}, {0x55, 0xCE}, {0x55, 0xCF}, {0x55, 0xD0}, /* 0xE0-0xE3 */ + {0x55, 0xD5}, {0x55, 0xD7}, {0x55, 0xD8}, {0x55, 0xD9}, /* 0xE4-0xE7 */ + {0x55, 0xDA}, {0x55, 0xDB}, {0x55, 0xDE}, {0x55, 0xE0}, /* 0xE8-0xEB */ + {0x55, 0xE2}, {0x55, 0xE7}, {0x55, 0xE9}, {0x55, 0xED}, /* 0xEC-0xEF */ + {0x55, 0xEE}, {0x55, 0xF0}, {0x55, 0xF1}, {0x55, 0xF4}, /* 0xF0-0xF3 */ + {0x55, 0xF6}, {0x55, 0xF8}, {0x55, 0xF9}, {0x55, 0xFA}, /* 0xF4-0xF7 */ + {0x55, 0xFB}, {0x55, 0xFC}, {0x55, 0xFF}, {0x56, 0x02}, /* 0xF8-0xFB */ + {0x56, 0x03}, {0x56, 0x04}, {0x56, 0x05}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_87[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x56, 0x06}, {0x56, 0x07}, {0x56, 0x0A}, {0x56, 0x0B}, /* 0x40-0x43 */ + {0x56, 0x0D}, {0x56, 0x10}, {0x56, 0x11}, {0x56, 0x12}, /* 0x44-0x47 */ + {0x56, 0x13}, {0x56, 0x14}, {0x56, 0x15}, {0x56, 0x16}, /* 0x48-0x4B */ + {0x56, 0x17}, {0x56, 0x19}, {0x56, 0x1A}, {0x56, 0x1C}, /* 0x4C-0x4F */ + {0x56, 0x1D}, {0x56, 0x20}, {0x56, 0x21}, {0x56, 0x22}, /* 0x50-0x53 */ + {0x56, 0x25}, {0x56, 0x26}, {0x56, 0x28}, {0x56, 0x29}, /* 0x54-0x57 */ + {0x56, 0x2A}, {0x56, 0x2B}, {0x56, 0x2E}, {0x56, 0x2F}, /* 0x58-0x5B */ + {0x56, 0x30}, {0x56, 0x33}, {0x56, 0x35}, {0x56, 0x37}, /* 0x5C-0x5F */ + {0x56, 0x38}, {0x56, 0x3A}, {0x56, 0x3C}, {0x56, 0x3D}, /* 0x60-0x63 */ + {0x56, 0x3E}, {0x56, 0x40}, {0x56, 0x41}, {0x56, 0x42}, /* 0x64-0x67 */ + {0x56, 0x43}, {0x56, 0x44}, {0x56, 0x45}, {0x56, 0x46}, /* 0x68-0x6B */ + {0x56, 0x47}, {0x56, 0x48}, {0x56, 0x49}, {0x56, 0x4A}, /* 0x6C-0x6F */ + {0x56, 0x4B}, {0x56, 0x4F}, {0x56, 0x50}, {0x56, 0x51}, /* 0x70-0x73 */ + {0x56, 0x52}, {0x56, 0x53}, {0x56, 0x55}, {0x56, 0x56}, /* 0x74-0x77 */ + {0x56, 0x5A}, {0x56, 0x5B}, {0x56, 0x5D}, {0x56, 0x5E}, /* 0x78-0x7B */ + {0x56, 0x5F}, {0x56, 0x60}, {0x56, 0x61}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x56, 0x63}, {0x56, 0x65}, {0x56, 0x66}, {0x56, 0x67}, /* 0x80-0x83 */ + {0x56, 0x6D}, {0x56, 0x6E}, {0x56, 0x6F}, {0x56, 0x70}, /* 0x84-0x87 */ + {0x56, 0x72}, {0x56, 0x73}, {0x56, 0x74}, {0x56, 0x75}, /* 0x88-0x8B */ + {0x56, 0x77}, {0x56, 0x78}, {0x56, 0x79}, {0x56, 0x7A}, /* 0x8C-0x8F */ + {0x56, 0x7D}, {0x56, 0x7E}, {0x56, 0x7F}, {0x56, 0x80}, /* 0x90-0x93 */ + {0x56, 0x81}, {0x56, 0x82}, {0x56, 0x83}, {0x56, 0x84}, /* 0x94-0x97 */ + {0x56, 0x87}, {0x56, 0x88}, {0x56, 0x89}, {0x56, 0x8A}, /* 0x98-0x9B */ + {0x56, 0x8B}, {0x56, 0x8C}, {0x56, 0x8D}, {0x56, 0x90}, /* 0x9C-0x9F */ + {0x56, 0x91}, {0x56, 0x92}, {0x56, 0x94}, {0x56, 0x95}, /* 0xA0-0xA3 */ + {0x56, 0x96}, {0x56, 0x97}, {0x56, 0x98}, {0x56, 0x99}, /* 0xA4-0xA7 */ + {0x56, 0x9A}, {0x56, 0x9B}, {0x56, 0x9C}, {0x56, 0x9D}, /* 0xA8-0xAB */ + {0x56, 0x9E}, {0x56, 0x9F}, {0x56, 0xA0}, {0x56, 0xA1}, /* 0xAC-0xAF */ + {0x56, 0xA2}, {0x56, 0xA4}, {0x56, 0xA5}, {0x56, 0xA6}, /* 0xB0-0xB3 */ + {0x56, 0xA7}, {0x56, 0xA8}, {0x56, 0xA9}, {0x56, 0xAA}, /* 0xB4-0xB7 */ + {0x56, 0xAB}, {0x56, 0xAC}, {0x56, 0xAD}, {0x56, 0xAE}, /* 0xB8-0xBB */ + {0x56, 0xB0}, {0x56, 0xB1}, {0x56, 0xB2}, {0x56, 0xB3}, /* 0xBC-0xBF */ + {0x56, 0xB4}, {0x56, 0xB5}, {0x56, 0xB6}, {0x56, 0xB8}, /* 0xC0-0xC3 */ + {0x56, 0xB9}, {0x56, 0xBA}, {0x56, 0xBB}, {0x56, 0xBD}, /* 0xC4-0xC7 */ + {0x56, 0xBE}, {0x56, 0xBF}, {0x56, 0xC0}, {0x56, 0xC1}, /* 0xC8-0xCB */ + {0x56, 0xC2}, {0x56, 0xC3}, {0x56, 0xC4}, {0x56, 0xC5}, /* 0xCC-0xCF */ + {0x56, 0xC6}, {0x56, 0xC7}, {0x56, 0xC8}, {0x56, 0xC9}, /* 0xD0-0xD3 */ + {0x56, 0xCB}, {0x56, 0xCC}, {0x56, 0xCD}, {0x56, 0xCE}, /* 0xD4-0xD7 */ + {0x56, 0xCF}, {0x56, 0xD0}, {0x56, 0xD1}, {0x56, 0xD2}, /* 0xD8-0xDB */ + {0x56, 0xD3}, {0x56, 0xD5}, {0x56, 0xD6}, {0x56, 0xD8}, /* 0xDC-0xDF */ + {0x56, 0xD9}, {0x56, 0xDC}, {0x56, 0xE3}, {0x56, 0xE5}, /* 0xE0-0xE3 */ + {0x56, 0xE6}, {0x56, 0xE7}, {0x56, 0xE8}, {0x56, 0xE9}, /* 0xE4-0xE7 */ + {0x56, 0xEA}, {0x56, 0xEC}, {0x56, 0xEE}, {0x56, 0xEF}, /* 0xE8-0xEB */ + {0x56, 0xF2}, {0x56, 0xF3}, {0x56, 0xF6}, {0x56, 0xF7}, /* 0xEC-0xEF */ + {0x56, 0xF8}, {0x56, 0xFB}, {0x56, 0xFC}, {0x57, 0x00}, /* 0xF0-0xF3 */ + {0x57, 0x01}, {0x57, 0x02}, {0x57, 0x05}, {0x57, 0x07}, /* 0xF4-0xF7 */ + {0x57, 0x0B}, {0x57, 0x0C}, {0x57, 0x0D}, {0x57, 0x0E}, /* 0xF8-0xFB */ + {0x57, 0x0F}, {0x57, 0x10}, {0x57, 0x11}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_88[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x57, 0x12}, {0x57, 0x13}, {0x57, 0x14}, {0x57, 0x15}, /* 0x40-0x43 */ + {0x57, 0x16}, {0x57, 0x17}, {0x57, 0x18}, {0x57, 0x19}, /* 0x44-0x47 */ + {0x57, 0x1A}, {0x57, 0x1B}, {0x57, 0x1D}, {0x57, 0x1E}, /* 0x48-0x4B */ + {0x57, 0x20}, {0x57, 0x21}, {0x57, 0x22}, {0x57, 0x24}, /* 0x4C-0x4F */ + {0x57, 0x25}, {0x57, 0x26}, {0x57, 0x27}, {0x57, 0x2B}, /* 0x50-0x53 */ + {0x57, 0x31}, {0x57, 0x32}, {0x57, 0x34}, {0x57, 0x35}, /* 0x54-0x57 */ + {0x57, 0x36}, {0x57, 0x37}, {0x57, 0x38}, {0x57, 0x3C}, /* 0x58-0x5B */ + {0x57, 0x3D}, {0x57, 0x3F}, {0x57, 0x41}, {0x57, 0x43}, /* 0x5C-0x5F */ + {0x57, 0x44}, {0x57, 0x45}, {0x57, 0x46}, {0x57, 0x48}, /* 0x60-0x63 */ + {0x57, 0x49}, {0x57, 0x4B}, {0x57, 0x52}, {0x57, 0x53}, /* 0x64-0x67 */ + {0x57, 0x54}, {0x57, 0x55}, {0x57, 0x56}, {0x57, 0x58}, /* 0x68-0x6B */ + {0x57, 0x59}, {0x57, 0x62}, {0x57, 0x63}, {0x57, 0x65}, /* 0x6C-0x6F */ + {0x57, 0x67}, {0x57, 0x6C}, {0x57, 0x6E}, {0x57, 0x70}, /* 0x70-0x73 */ + {0x57, 0x71}, {0x57, 0x72}, {0x57, 0x74}, {0x57, 0x75}, /* 0x74-0x77 */ + {0x57, 0x78}, {0x57, 0x79}, {0x57, 0x7A}, {0x57, 0x7D}, /* 0x78-0x7B */ + {0x57, 0x7E}, {0x57, 0x7F}, {0x57, 0x80}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x57, 0x81}, {0x57, 0x87}, {0x57, 0x88}, {0x57, 0x89}, /* 0x80-0x83 */ + {0x57, 0x8A}, {0x57, 0x8D}, {0x57, 0x8E}, {0x57, 0x8F}, /* 0x84-0x87 */ + {0x57, 0x90}, {0x57, 0x91}, {0x57, 0x94}, {0x57, 0x95}, /* 0x88-0x8B */ + {0x57, 0x96}, {0x57, 0x97}, {0x57, 0x98}, {0x57, 0x99}, /* 0x8C-0x8F */ + {0x57, 0x9A}, {0x57, 0x9C}, {0x57, 0x9D}, {0x57, 0x9E}, /* 0x90-0x93 */ + {0x57, 0x9F}, {0x57, 0xA5}, {0x57, 0xA8}, {0x57, 0xAA}, /* 0x94-0x97 */ + {0x57, 0xAC}, {0x57, 0xAF}, {0x57, 0xB0}, {0x57, 0xB1}, /* 0x98-0x9B */ + {0x57, 0xB3}, {0x57, 0xB5}, {0x57, 0xB6}, {0x57, 0xB7}, /* 0x9C-0x9F */ + {0x57, 0xB9}, {0x57, 0xBA}, {0x57, 0xBB}, {0x57, 0xBC}, /* 0xA0-0xA3 */ + {0x57, 0xBD}, {0x57, 0xBE}, {0x57, 0xBF}, {0x57, 0xC0}, /* 0xA4-0xA7 */ + {0x57, 0xC1}, {0x57, 0xC4}, {0x57, 0xC5}, {0x57, 0xC6}, /* 0xA8-0xAB */ + {0x57, 0xC7}, {0x57, 0xC8}, {0x57, 0xC9}, {0x57, 0xCA}, /* 0xAC-0xAF */ + {0x57, 0xCC}, {0x57, 0xCD}, {0x57, 0xD0}, {0x57, 0xD1}, /* 0xB0-0xB3 */ + {0x57, 0xD3}, {0x57, 0xD6}, {0x57, 0xD7}, {0x57, 0xDB}, /* 0xB4-0xB7 */ + {0x57, 0xDC}, {0x57, 0xDE}, {0x57, 0xE1}, {0x57, 0xE2}, /* 0xB8-0xBB */ + {0x57, 0xE3}, {0x57, 0xE5}, {0x57, 0xE6}, {0x57, 0xE7}, /* 0xBC-0xBF */ + {0x57, 0xE8}, {0x57, 0xE9}, {0x57, 0xEA}, {0x57, 0xEB}, /* 0xC0-0xC3 */ + {0x57, 0xEC}, {0x57, 0xEE}, {0x57, 0xF0}, {0x57, 0xF1}, /* 0xC4-0xC7 */ + {0x57, 0xF2}, {0x57, 0xF3}, {0x57, 0xF5}, {0x57, 0xF6}, /* 0xC8-0xCB */ + {0x57, 0xF7}, {0x57, 0xFB}, {0x57, 0xFC}, {0x57, 0xFE}, /* 0xCC-0xCF */ + {0x57, 0xFF}, {0x58, 0x01}, {0x58, 0x03}, {0x58, 0x04}, /* 0xD0-0xD3 */ + {0x58, 0x05}, {0x58, 0x08}, {0x58, 0x09}, {0x58, 0x0A}, /* 0xD4-0xD7 */ + {0x58, 0x0C}, {0x58, 0x0E}, {0x58, 0x0F}, {0x58, 0x10}, /* 0xD8-0xDB */ + {0x58, 0x12}, {0x58, 0x13}, {0x58, 0x14}, {0x58, 0x16}, /* 0xDC-0xDF */ + {0x58, 0x17}, {0x58, 0x18}, {0x58, 0x1A}, {0x58, 0x1B}, /* 0xE0-0xE3 */ + {0x58, 0x1C}, {0x58, 0x1D}, {0x58, 0x1F}, {0x58, 0x22}, /* 0xE4-0xE7 */ + {0x58, 0x23}, {0x58, 0x25}, {0x58, 0x26}, {0x58, 0x27}, /* 0xE8-0xEB */ + {0x58, 0x28}, {0x58, 0x29}, {0x58, 0x2B}, {0x58, 0x2C}, /* 0xEC-0xEF */ + {0x58, 0x2D}, {0x58, 0x2E}, {0x58, 0x2F}, {0x58, 0x31}, /* 0xF0-0xF3 */ + {0x58, 0x32}, {0x58, 0x33}, {0x58, 0x34}, {0x58, 0x36}, /* 0xF4-0xF7 */ + {0x58, 0x37}, {0x58, 0x38}, {0x58, 0x39}, {0x58, 0x3A}, /* 0xF8-0xFB */ + {0x58, 0x3B}, {0x58, 0x3C}, {0x58, 0x3D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_89[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x58, 0x3E}, {0x58, 0x3F}, {0x58, 0x40}, {0x58, 0x41}, /* 0x40-0x43 */ + {0x58, 0x42}, {0x58, 0x43}, {0x58, 0x45}, {0x58, 0x46}, /* 0x44-0x47 */ + {0x58, 0x47}, {0x58, 0x48}, {0x58, 0x49}, {0x58, 0x4A}, /* 0x48-0x4B */ + {0x58, 0x4B}, {0x58, 0x4E}, {0x58, 0x4F}, {0x58, 0x50}, /* 0x4C-0x4F */ + {0x58, 0x52}, {0x58, 0x53}, {0x58, 0x55}, {0x58, 0x56}, /* 0x50-0x53 */ + {0x58, 0x57}, {0x58, 0x59}, {0x58, 0x5A}, {0x58, 0x5B}, /* 0x54-0x57 */ + {0x58, 0x5C}, {0x58, 0x5D}, {0x58, 0x5F}, {0x58, 0x60}, /* 0x58-0x5B */ + {0x58, 0x61}, {0x58, 0x62}, {0x58, 0x63}, {0x58, 0x64}, /* 0x5C-0x5F */ + {0x58, 0x66}, {0x58, 0x67}, {0x58, 0x68}, {0x58, 0x69}, /* 0x60-0x63 */ + {0x58, 0x6A}, {0x58, 0x6D}, {0x58, 0x6E}, {0x58, 0x6F}, /* 0x64-0x67 */ + {0x58, 0x70}, {0x58, 0x71}, {0x58, 0x72}, {0x58, 0x73}, /* 0x68-0x6B */ + {0x58, 0x74}, {0x58, 0x75}, {0x58, 0x76}, {0x58, 0x77}, /* 0x6C-0x6F */ + {0x58, 0x78}, {0x58, 0x79}, {0x58, 0x7A}, {0x58, 0x7B}, /* 0x70-0x73 */ + {0x58, 0x7C}, {0x58, 0x7D}, {0x58, 0x7F}, {0x58, 0x82}, /* 0x74-0x77 */ + {0x58, 0x84}, {0x58, 0x86}, {0x58, 0x87}, {0x58, 0x88}, /* 0x78-0x7B */ + {0x58, 0x8A}, {0x58, 0x8B}, {0x58, 0x8C}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x58, 0x8D}, {0x58, 0x8E}, {0x58, 0x8F}, {0x58, 0x90}, /* 0x80-0x83 */ + {0x58, 0x91}, {0x58, 0x94}, {0x58, 0x95}, {0x58, 0x96}, /* 0x84-0x87 */ + {0x58, 0x97}, {0x58, 0x98}, {0x58, 0x9B}, {0x58, 0x9C}, /* 0x88-0x8B */ + {0x58, 0x9D}, {0x58, 0xA0}, {0x58, 0xA1}, {0x58, 0xA2}, /* 0x8C-0x8F */ + {0x58, 0xA3}, {0x58, 0xA4}, {0x58, 0xA5}, {0x58, 0xA6}, /* 0x90-0x93 */ + {0x58, 0xA7}, {0x58, 0xAA}, {0x58, 0xAB}, {0x58, 0xAC}, /* 0x94-0x97 */ + {0x58, 0xAD}, {0x58, 0xAE}, {0x58, 0xAF}, {0x58, 0xB0}, /* 0x98-0x9B */ + {0x58, 0xB1}, {0x58, 0xB2}, {0x58, 0xB3}, {0x58, 0xB4}, /* 0x9C-0x9F */ + {0x58, 0xB5}, {0x58, 0xB6}, {0x58, 0xB7}, {0x58, 0xB8}, /* 0xA0-0xA3 */ + {0x58, 0xB9}, {0x58, 0xBA}, {0x58, 0xBB}, {0x58, 0xBD}, /* 0xA4-0xA7 */ + {0x58, 0xBE}, {0x58, 0xBF}, {0x58, 0xC0}, {0x58, 0xC2}, /* 0xA8-0xAB */ + {0x58, 0xC3}, {0x58, 0xC4}, {0x58, 0xC6}, {0x58, 0xC7}, /* 0xAC-0xAF */ + {0x58, 0xC8}, {0x58, 0xC9}, {0x58, 0xCA}, {0x58, 0xCB}, /* 0xB0-0xB3 */ + {0x58, 0xCC}, {0x58, 0xCD}, {0x58, 0xCE}, {0x58, 0xCF}, /* 0xB4-0xB7 */ + {0x58, 0xD0}, {0x58, 0xD2}, {0x58, 0xD3}, {0x58, 0xD4}, /* 0xB8-0xBB */ + {0x58, 0xD6}, {0x58, 0xD7}, {0x58, 0xD8}, {0x58, 0xD9}, /* 0xBC-0xBF */ + {0x58, 0xDA}, {0x58, 0xDB}, {0x58, 0xDC}, {0x58, 0xDD}, /* 0xC0-0xC3 */ + {0x58, 0xDE}, {0x58, 0xDF}, {0x58, 0xE0}, {0x58, 0xE1}, /* 0xC4-0xC7 */ + {0x58, 0xE2}, {0x58, 0xE3}, {0x58, 0xE5}, {0x58, 0xE6}, /* 0xC8-0xCB */ + {0x58, 0xE7}, {0x58, 0xE8}, {0x58, 0xE9}, {0x58, 0xEA}, /* 0xCC-0xCF */ + {0x58, 0xED}, {0x58, 0xEF}, {0x58, 0xF1}, {0x58, 0xF2}, /* 0xD0-0xD3 */ + {0x58, 0xF4}, {0x58, 0xF5}, {0x58, 0xF7}, {0x58, 0xF8}, /* 0xD4-0xD7 */ + {0x58, 0xFA}, {0x58, 0xFB}, {0x58, 0xFC}, {0x58, 0xFD}, /* 0xD8-0xDB */ + {0x58, 0xFE}, {0x58, 0xFF}, {0x59, 0x00}, {0x59, 0x01}, /* 0xDC-0xDF */ + {0x59, 0x03}, {0x59, 0x05}, {0x59, 0x06}, {0x59, 0x08}, /* 0xE0-0xE3 */ + {0x59, 0x09}, {0x59, 0x0A}, {0x59, 0x0B}, {0x59, 0x0C}, /* 0xE4-0xE7 */ + {0x59, 0x0E}, {0x59, 0x10}, {0x59, 0x11}, {0x59, 0x12}, /* 0xE8-0xEB */ + {0x59, 0x13}, {0x59, 0x17}, {0x59, 0x18}, {0x59, 0x1B}, /* 0xEC-0xEF */ + {0x59, 0x1D}, {0x59, 0x1E}, {0x59, 0x20}, {0x59, 0x21}, /* 0xF0-0xF3 */ + {0x59, 0x22}, {0x59, 0x23}, {0x59, 0x26}, {0x59, 0x28}, /* 0xF4-0xF7 */ + {0x59, 0x2C}, {0x59, 0x30}, {0x59, 0x32}, {0x59, 0x33}, /* 0xF8-0xFB */ + {0x59, 0x35}, {0x59, 0x36}, {0x59, 0x3B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8A[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x59, 0x3D}, {0x59, 0x3E}, {0x59, 0x3F}, {0x59, 0x40}, /* 0x40-0x43 */ + {0x59, 0x43}, {0x59, 0x45}, {0x59, 0x46}, {0x59, 0x4A}, /* 0x44-0x47 */ + {0x59, 0x4C}, {0x59, 0x4D}, {0x59, 0x50}, {0x59, 0x52}, /* 0x48-0x4B */ + {0x59, 0x53}, {0x59, 0x59}, {0x59, 0x5B}, {0x59, 0x5C}, /* 0x4C-0x4F */ + {0x59, 0x5D}, {0x59, 0x5E}, {0x59, 0x5F}, {0x59, 0x61}, /* 0x50-0x53 */ + {0x59, 0x63}, {0x59, 0x64}, {0x59, 0x66}, {0x59, 0x67}, /* 0x54-0x57 */ + {0x59, 0x68}, {0x59, 0x69}, {0x59, 0x6A}, {0x59, 0x6B}, /* 0x58-0x5B */ + {0x59, 0x6C}, {0x59, 0x6D}, {0x59, 0x6E}, {0x59, 0x6F}, /* 0x5C-0x5F */ + {0x59, 0x70}, {0x59, 0x71}, {0x59, 0x72}, {0x59, 0x75}, /* 0x60-0x63 */ + {0x59, 0x77}, {0x59, 0x7A}, {0x59, 0x7B}, {0x59, 0x7C}, /* 0x64-0x67 */ + {0x59, 0x7E}, {0x59, 0x7F}, {0x59, 0x80}, {0x59, 0x85}, /* 0x68-0x6B */ + {0x59, 0x89}, {0x59, 0x8B}, {0x59, 0x8C}, {0x59, 0x8E}, /* 0x6C-0x6F */ + {0x59, 0x8F}, {0x59, 0x90}, {0x59, 0x91}, {0x59, 0x94}, /* 0x70-0x73 */ + {0x59, 0x95}, {0x59, 0x98}, {0x59, 0x9A}, {0x59, 0x9B}, /* 0x74-0x77 */ + {0x59, 0x9C}, {0x59, 0x9D}, {0x59, 0x9F}, {0x59, 0xA0}, /* 0x78-0x7B */ + {0x59, 0xA1}, {0x59, 0xA2}, {0x59, 0xA6}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x59, 0xA7}, {0x59, 0xAC}, {0x59, 0xAD}, {0x59, 0xB0}, /* 0x80-0x83 */ + {0x59, 0xB1}, {0x59, 0xB3}, {0x59, 0xB4}, {0x59, 0xB5}, /* 0x84-0x87 */ + {0x59, 0xB6}, {0x59, 0xB7}, {0x59, 0xB8}, {0x59, 0xBA}, /* 0x88-0x8B */ + {0x59, 0xBC}, {0x59, 0xBD}, {0x59, 0xBF}, {0x59, 0xC0}, /* 0x8C-0x8F */ + {0x59, 0xC1}, {0x59, 0xC2}, {0x59, 0xC3}, {0x59, 0xC4}, /* 0x90-0x93 */ + {0x59, 0xC5}, {0x59, 0xC7}, {0x59, 0xC8}, {0x59, 0xC9}, /* 0x94-0x97 */ + {0x59, 0xCC}, {0x59, 0xCD}, {0x59, 0xCE}, {0x59, 0xCF}, /* 0x98-0x9B */ + {0x59, 0xD5}, {0x59, 0xD6}, {0x59, 0xD9}, {0x59, 0xDB}, /* 0x9C-0x9F */ + {0x59, 0xDE}, {0x59, 0xDF}, {0x59, 0xE0}, {0x59, 0xE1}, /* 0xA0-0xA3 */ + {0x59, 0xE2}, {0x59, 0xE4}, {0x59, 0xE6}, {0x59, 0xE7}, /* 0xA4-0xA7 */ + {0x59, 0xE9}, {0x59, 0xEA}, {0x59, 0xEB}, {0x59, 0xED}, /* 0xA8-0xAB */ + {0x59, 0xEE}, {0x59, 0xEF}, {0x59, 0xF0}, {0x59, 0xF1}, /* 0xAC-0xAF */ + {0x59, 0xF2}, {0x59, 0xF3}, {0x59, 0xF4}, {0x59, 0xF5}, /* 0xB0-0xB3 */ + {0x59, 0xF6}, {0x59, 0xF7}, {0x59, 0xF8}, {0x59, 0xFA}, /* 0xB4-0xB7 */ + {0x59, 0xFC}, {0x59, 0xFD}, {0x59, 0xFE}, {0x5A, 0x00}, /* 0xB8-0xBB */ + {0x5A, 0x02}, {0x5A, 0x0A}, {0x5A, 0x0B}, {0x5A, 0x0D}, /* 0xBC-0xBF */ + {0x5A, 0x0E}, {0x5A, 0x0F}, {0x5A, 0x10}, {0x5A, 0x12}, /* 0xC0-0xC3 */ + {0x5A, 0x14}, {0x5A, 0x15}, {0x5A, 0x16}, {0x5A, 0x17}, /* 0xC4-0xC7 */ + {0x5A, 0x19}, {0x5A, 0x1A}, {0x5A, 0x1B}, {0x5A, 0x1D}, /* 0xC8-0xCB */ + {0x5A, 0x1E}, {0x5A, 0x21}, {0x5A, 0x22}, {0x5A, 0x24}, /* 0xCC-0xCF */ + {0x5A, 0x26}, {0x5A, 0x27}, {0x5A, 0x28}, {0x5A, 0x2A}, /* 0xD0-0xD3 */ + {0x5A, 0x2B}, {0x5A, 0x2C}, {0x5A, 0x2D}, {0x5A, 0x2E}, /* 0xD4-0xD7 */ + {0x5A, 0x2F}, {0x5A, 0x30}, {0x5A, 0x33}, {0x5A, 0x35}, /* 0xD8-0xDB */ + {0x5A, 0x37}, {0x5A, 0x38}, {0x5A, 0x39}, {0x5A, 0x3A}, /* 0xDC-0xDF */ + {0x5A, 0x3B}, {0x5A, 0x3D}, {0x5A, 0x3E}, {0x5A, 0x3F}, /* 0xE0-0xE3 */ + {0x5A, 0x41}, {0x5A, 0x42}, {0x5A, 0x43}, {0x5A, 0x44}, /* 0xE4-0xE7 */ + {0x5A, 0x45}, {0x5A, 0x47}, {0x5A, 0x48}, {0x5A, 0x4B}, /* 0xE8-0xEB */ + {0x5A, 0x4C}, {0x5A, 0x4D}, {0x5A, 0x4E}, {0x5A, 0x4F}, /* 0xEC-0xEF */ + {0x5A, 0x50}, {0x5A, 0x51}, {0x5A, 0x52}, {0x5A, 0x53}, /* 0xF0-0xF3 */ + {0x5A, 0x54}, {0x5A, 0x56}, {0x5A, 0x57}, {0x5A, 0x58}, /* 0xF4-0xF7 */ + {0x5A, 0x59}, {0x5A, 0x5B}, {0x5A, 0x5C}, {0x5A, 0x5D}, /* 0xF8-0xFB */ + {0x5A, 0x5E}, {0x5A, 0x5F}, {0x5A, 0x60}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8B[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5A, 0x61}, {0x5A, 0x63}, {0x5A, 0x64}, {0x5A, 0x65}, /* 0x40-0x43 */ + {0x5A, 0x66}, {0x5A, 0x68}, {0x5A, 0x69}, {0x5A, 0x6B}, /* 0x44-0x47 */ + {0x5A, 0x6C}, {0x5A, 0x6D}, {0x5A, 0x6E}, {0x5A, 0x6F}, /* 0x48-0x4B */ + {0x5A, 0x70}, {0x5A, 0x71}, {0x5A, 0x72}, {0x5A, 0x73}, /* 0x4C-0x4F */ + {0x5A, 0x78}, {0x5A, 0x79}, {0x5A, 0x7B}, {0x5A, 0x7C}, /* 0x50-0x53 */ + {0x5A, 0x7D}, {0x5A, 0x7E}, {0x5A, 0x80}, {0x5A, 0x81}, /* 0x54-0x57 */ + {0x5A, 0x82}, {0x5A, 0x83}, {0x5A, 0x84}, {0x5A, 0x85}, /* 0x58-0x5B */ + {0x5A, 0x86}, {0x5A, 0x87}, {0x5A, 0x88}, {0x5A, 0x89}, /* 0x5C-0x5F */ + {0x5A, 0x8A}, {0x5A, 0x8B}, {0x5A, 0x8C}, {0x5A, 0x8D}, /* 0x60-0x63 */ + {0x5A, 0x8E}, {0x5A, 0x8F}, {0x5A, 0x90}, {0x5A, 0x91}, /* 0x64-0x67 */ + {0x5A, 0x93}, {0x5A, 0x94}, {0x5A, 0x95}, {0x5A, 0x96}, /* 0x68-0x6B */ + {0x5A, 0x97}, {0x5A, 0x98}, {0x5A, 0x99}, {0x5A, 0x9C}, /* 0x6C-0x6F */ + {0x5A, 0x9D}, {0x5A, 0x9E}, {0x5A, 0x9F}, {0x5A, 0xA0}, /* 0x70-0x73 */ + {0x5A, 0xA1}, {0x5A, 0xA2}, {0x5A, 0xA3}, {0x5A, 0xA4}, /* 0x74-0x77 */ + {0x5A, 0xA5}, {0x5A, 0xA6}, {0x5A, 0xA7}, {0x5A, 0xA8}, /* 0x78-0x7B */ + {0x5A, 0xA9}, {0x5A, 0xAB}, {0x5A, 0xAC}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x5A, 0xAD}, {0x5A, 0xAE}, {0x5A, 0xAF}, {0x5A, 0xB0}, /* 0x80-0x83 */ + {0x5A, 0xB1}, {0x5A, 0xB4}, {0x5A, 0xB6}, {0x5A, 0xB7}, /* 0x84-0x87 */ + {0x5A, 0xB9}, {0x5A, 0xBA}, {0x5A, 0xBB}, {0x5A, 0xBC}, /* 0x88-0x8B */ + {0x5A, 0xBD}, {0x5A, 0xBF}, {0x5A, 0xC0}, {0x5A, 0xC3}, /* 0x8C-0x8F */ + {0x5A, 0xC4}, {0x5A, 0xC5}, {0x5A, 0xC6}, {0x5A, 0xC7}, /* 0x90-0x93 */ + {0x5A, 0xC8}, {0x5A, 0xCA}, {0x5A, 0xCB}, {0x5A, 0xCD}, /* 0x94-0x97 */ + {0x5A, 0xCE}, {0x5A, 0xCF}, {0x5A, 0xD0}, {0x5A, 0xD1}, /* 0x98-0x9B */ + {0x5A, 0xD3}, {0x5A, 0xD5}, {0x5A, 0xD7}, {0x5A, 0xD9}, /* 0x9C-0x9F */ + {0x5A, 0xDA}, {0x5A, 0xDB}, {0x5A, 0xDD}, {0x5A, 0xDE}, /* 0xA0-0xA3 */ + {0x5A, 0xDF}, {0x5A, 0xE2}, {0x5A, 0xE4}, {0x5A, 0xE5}, /* 0xA4-0xA7 */ + {0x5A, 0xE7}, {0x5A, 0xE8}, {0x5A, 0xEA}, {0x5A, 0xEC}, /* 0xA8-0xAB */ + {0x5A, 0xED}, {0x5A, 0xEE}, {0x5A, 0xEF}, {0x5A, 0xF0}, /* 0xAC-0xAF */ + {0x5A, 0xF2}, {0x5A, 0xF3}, {0x5A, 0xF4}, {0x5A, 0xF5}, /* 0xB0-0xB3 */ + {0x5A, 0xF6}, {0x5A, 0xF7}, {0x5A, 0xF8}, {0x5A, 0xF9}, /* 0xB4-0xB7 */ + {0x5A, 0xFA}, {0x5A, 0xFB}, {0x5A, 0xFC}, {0x5A, 0xFD}, /* 0xB8-0xBB */ + {0x5A, 0xFE}, {0x5A, 0xFF}, {0x5B, 0x00}, {0x5B, 0x01}, /* 0xBC-0xBF */ + {0x5B, 0x02}, {0x5B, 0x03}, {0x5B, 0x04}, {0x5B, 0x05}, /* 0xC0-0xC3 */ + {0x5B, 0x06}, {0x5B, 0x07}, {0x5B, 0x08}, {0x5B, 0x0A}, /* 0xC4-0xC7 */ + {0x5B, 0x0B}, {0x5B, 0x0C}, {0x5B, 0x0D}, {0x5B, 0x0E}, /* 0xC8-0xCB */ + {0x5B, 0x0F}, {0x5B, 0x10}, {0x5B, 0x11}, {0x5B, 0x12}, /* 0xCC-0xCF */ + {0x5B, 0x13}, {0x5B, 0x14}, {0x5B, 0x15}, {0x5B, 0x18}, /* 0xD0-0xD3 */ + {0x5B, 0x19}, {0x5B, 0x1A}, {0x5B, 0x1B}, {0x5B, 0x1C}, /* 0xD4-0xD7 */ + {0x5B, 0x1D}, {0x5B, 0x1E}, {0x5B, 0x1F}, {0x5B, 0x20}, /* 0xD8-0xDB */ + {0x5B, 0x21}, {0x5B, 0x22}, {0x5B, 0x23}, {0x5B, 0x24}, /* 0xDC-0xDF */ + {0x5B, 0x25}, {0x5B, 0x26}, {0x5B, 0x27}, {0x5B, 0x28}, /* 0xE0-0xE3 */ + {0x5B, 0x29}, {0x5B, 0x2A}, {0x5B, 0x2B}, {0x5B, 0x2C}, /* 0xE4-0xE7 */ + {0x5B, 0x2D}, {0x5B, 0x2E}, {0x5B, 0x2F}, {0x5B, 0x30}, /* 0xE8-0xEB */ + {0x5B, 0x31}, {0x5B, 0x33}, {0x5B, 0x35}, {0x5B, 0x36}, /* 0xEC-0xEF */ + {0x5B, 0x38}, {0x5B, 0x39}, {0x5B, 0x3A}, {0x5B, 0x3B}, /* 0xF0-0xF3 */ + {0x5B, 0x3C}, {0x5B, 0x3D}, {0x5B, 0x3E}, {0x5B, 0x3F}, /* 0xF4-0xF7 */ + {0x5B, 0x41}, {0x5B, 0x42}, {0x5B, 0x43}, {0x5B, 0x44}, /* 0xF8-0xFB */ + {0x5B, 0x45}, {0x5B, 0x46}, {0x5B, 0x47}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8C[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5B, 0x48}, {0x5B, 0x49}, {0x5B, 0x4A}, {0x5B, 0x4B}, /* 0x40-0x43 */ + {0x5B, 0x4C}, {0x5B, 0x4D}, {0x5B, 0x4E}, {0x5B, 0x4F}, /* 0x44-0x47 */ + {0x5B, 0x52}, {0x5B, 0x56}, {0x5B, 0x5E}, {0x5B, 0x60}, /* 0x48-0x4B */ + {0x5B, 0x61}, {0x5B, 0x67}, {0x5B, 0x68}, {0x5B, 0x6B}, /* 0x4C-0x4F */ + {0x5B, 0x6D}, {0x5B, 0x6E}, {0x5B, 0x6F}, {0x5B, 0x72}, /* 0x50-0x53 */ + {0x5B, 0x74}, {0x5B, 0x76}, {0x5B, 0x77}, {0x5B, 0x78}, /* 0x54-0x57 */ + {0x5B, 0x79}, {0x5B, 0x7B}, {0x5B, 0x7C}, {0x5B, 0x7E}, /* 0x58-0x5B */ + {0x5B, 0x7F}, {0x5B, 0x82}, {0x5B, 0x86}, {0x5B, 0x8A}, /* 0x5C-0x5F */ + {0x5B, 0x8D}, {0x5B, 0x8E}, {0x5B, 0x90}, {0x5B, 0x91}, /* 0x60-0x63 */ + {0x5B, 0x92}, {0x5B, 0x94}, {0x5B, 0x96}, {0x5B, 0x9F}, /* 0x64-0x67 */ + {0x5B, 0xA7}, {0x5B, 0xA8}, {0x5B, 0xA9}, {0x5B, 0xAC}, /* 0x68-0x6B */ + {0x5B, 0xAD}, {0x5B, 0xAE}, {0x5B, 0xAF}, {0x5B, 0xB1}, /* 0x6C-0x6F */ + {0x5B, 0xB2}, {0x5B, 0xB7}, {0x5B, 0xBA}, {0x5B, 0xBB}, /* 0x70-0x73 */ + {0x5B, 0xBC}, {0x5B, 0xC0}, {0x5B, 0xC1}, {0x5B, 0xC3}, /* 0x74-0x77 */ + {0x5B, 0xC8}, {0x5B, 0xC9}, {0x5B, 0xCA}, {0x5B, 0xCB}, /* 0x78-0x7B */ + {0x5B, 0xCD}, {0x5B, 0xCE}, {0x5B, 0xCF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x5B, 0xD1}, {0x5B, 0xD4}, {0x5B, 0xD5}, {0x5B, 0xD6}, /* 0x80-0x83 */ + {0x5B, 0xD7}, {0x5B, 0xD8}, {0x5B, 0xD9}, {0x5B, 0xDA}, /* 0x84-0x87 */ + {0x5B, 0xDB}, {0x5B, 0xDC}, {0x5B, 0xE0}, {0x5B, 0xE2}, /* 0x88-0x8B */ + {0x5B, 0xE3}, {0x5B, 0xE6}, {0x5B, 0xE7}, {0x5B, 0xE9}, /* 0x8C-0x8F */ + {0x5B, 0xEA}, {0x5B, 0xEB}, {0x5B, 0xEC}, {0x5B, 0xED}, /* 0x90-0x93 */ + {0x5B, 0xEF}, {0x5B, 0xF1}, {0x5B, 0xF2}, {0x5B, 0xF3}, /* 0x94-0x97 */ + {0x5B, 0xF4}, {0x5B, 0xF5}, {0x5B, 0xF6}, {0x5B, 0xF7}, /* 0x98-0x9B */ + {0x5B, 0xFD}, {0x5B, 0xFE}, {0x5C, 0x00}, {0x5C, 0x02}, /* 0x9C-0x9F */ + {0x5C, 0x03}, {0x5C, 0x05}, {0x5C, 0x07}, {0x5C, 0x08}, /* 0xA0-0xA3 */ + {0x5C, 0x0B}, {0x5C, 0x0C}, {0x5C, 0x0D}, {0x5C, 0x0E}, /* 0xA4-0xA7 */ + {0x5C, 0x10}, {0x5C, 0x12}, {0x5C, 0x13}, {0x5C, 0x17}, /* 0xA8-0xAB */ + {0x5C, 0x19}, {0x5C, 0x1B}, {0x5C, 0x1E}, {0x5C, 0x1F}, /* 0xAC-0xAF */ + {0x5C, 0x20}, {0x5C, 0x21}, {0x5C, 0x23}, {0x5C, 0x26}, /* 0xB0-0xB3 */ + {0x5C, 0x28}, {0x5C, 0x29}, {0x5C, 0x2A}, {0x5C, 0x2B}, /* 0xB4-0xB7 */ + {0x5C, 0x2D}, {0x5C, 0x2E}, {0x5C, 0x2F}, {0x5C, 0x30}, /* 0xB8-0xBB */ + {0x5C, 0x32}, {0x5C, 0x33}, {0x5C, 0x35}, {0x5C, 0x36}, /* 0xBC-0xBF */ + {0x5C, 0x37}, {0x5C, 0x43}, {0x5C, 0x44}, {0x5C, 0x46}, /* 0xC0-0xC3 */ + {0x5C, 0x47}, {0x5C, 0x4C}, {0x5C, 0x4D}, {0x5C, 0x52}, /* 0xC4-0xC7 */ + {0x5C, 0x53}, {0x5C, 0x54}, {0x5C, 0x56}, {0x5C, 0x57}, /* 0xC8-0xCB */ + {0x5C, 0x58}, {0x5C, 0x5A}, {0x5C, 0x5B}, {0x5C, 0x5C}, /* 0xCC-0xCF */ + {0x5C, 0x5D}, {0x5C, 0x5F}, {0x5C, 0x62}, {0x5C, 0x64}, /* 0xD0-0xD3 */ + {0x5C, 0x67}, {0x5C, 0x68}, {0x5C, 0x69}, {0x5C, 0x6A}, /* 0xD4-0xD7 */ + {0x5C, 0x6B}, {0x5C, 0x6C}, {0x5C, 0x6D}, {0x5C, 0x70}, /* 0xD8-0xDB */ + {0x5C, 0x72}, {0x5C, 0x73}, {0x5C, 0x74}, {0x5C, 0x75}, /* 0xDC-0xDF */ + {0x5C, 0x76}, {0x5C, 0x77}, {0x5C, 0x78}, {0x5C, 0x7B}, /* 0xE0-0xE3 */ + {0x5C, 0x7C}, {0x5C, 0x7D}, {0x5C, 0x7E}, {0x5C, 0x80}, /* 0xE4-0xE7 */ + {0x5C, 0x83}, {0x5C, 0x84}, {0x5C, 0x85}, {0x5C, 0x86}, /* 0xE8-0xEB */ + {0x5C, 0x87}, {0x5C, 0x89}, {0x5C, 0x8A}, {0x5C, 0x8B}, /* 0xEC-0xEF */ + {0x5C, 0x8E}, {0x5C, 0x8F}, {0x5C, 0x92}, {0x5C, 0x93}, /* 0xF0-0xF3 */ + {0x5C, 0x95}, {0x5C, 0x9D}, {0x5C, 0x9E}, {0x5C, 0x9F}, /* 0xF4-0xF7 */ + {0x5C, 0xA0}, {0x5C, 0xA1}, {0x5C, 0xA4}, {0x5C, 0xA5}, /* 0xF8-0xFB */ + {0x5C, 0xA6}, {0x5C, 0xA7}, {0x5C, 0xA8}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8D[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5C, 0xAA}, {0x5C, 0xAE}, {0x5C, 0xAF}, {0x5C, 0xB0}, /* 0x40-0x43 */ + {0x5C, 0xB2}, {0x5C, 0xB4}, {0x5C, 0xB6}, {0x5C, 0xB9}, /* 0x44-0x47 */ + {0x5C, 0xBA}, {0x5C, 0xBB}, {0x5C, 0xBC}, {0x5C, 0xBE}, /* 0x48-0x4B */ + {0x5C, 0xC0}, {0x5C, 0xC2}, {0x5C, 0xC3}, {0x5C, 0xC5}, /* 0x4C-0x4F */ + {0x5C, 0xC6}, {0x5C, 0xC7}, {0x5C, 0xC8}, {0x5C, 0xC9}, /* 0x50-0x53 */ + {0x5C, 0xCA}, {0x5C, 0xCC}, {0x5C, 0xCD}, {0x5C, 0xCE}, /* 0x54-0x57 */ + {0x5C, 0xCF}, {0x5C, 0xD0}, {0x5C, 0xD1}, {0x5C, 0xD3}, /* 0x58-0x5B */ + {0x5C, 0xD4}, {0x5C, 0xD5}, {0x5C, 0xD6}, {0x5C, 0xD7}, /* 0x5C-0x5F */ + {0x5C, 0xD8}, {0x5C, 0xDA}, {0x5C, 0xDB}, {0x5C, 0xDC}, /* 0x60-0x63 */ + {0x5C, 0xDD}, {0x5C, 0xDE}, {0x5C, 0xDF}, {0x5C, 0xE0}, /* 0x64-0x67 */ + {0x5C, 0xE2}, {0x5C, 0xE3}, {0x5C, 0xE7}, {0x5C, 0xE9}, /* 0x68-0x6B */ + {0x5C, 0xEB}, {0x5C, 0xEC}, {0x5C, 0xEE}, {0x5C, 0xEF}, /* 0x6C-0x6F */ + {0x5C, 0xF1}, {0x5C, 0xF2}, {0x5C, 0xF3}, {0x5C, 0xF4}, /* 0x70-0x73 */ + {0x5C, 0xF5}, {0x5C, 0xF6}, {0x5C, 0xF7}, {0x5C, 0xF8}, /* 0x74-0x77 */ + {0x5C, 0xF9}, {0x5C, 0xFA}, {0x5C, 0xFC}, {0x5C, 0xFD}, /* 0x78-0x7B */ + {0x5C, 0xFE}, {0x5C, 0xFF}, {0x5D, 0x00}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x5D, 0x01}, {0x5D, 0x04}, {0x5D, 0x05}, {0x5D, 0x08}, /* 0x80-0x83 */ + {0x5D, 0x09}, {0x5D, 0x0A}, {0x5D, 0x0B}, {0x5D, 0x0C}, /* 0x84-0x87 */ + {0x5D, 0x0D}, {0x5D, 0x0F}, {0x5D, 0x10}, {0x5D, 0x11}, /* 0x88-0x8B */ + {0x5D, 0x12}, {0x5D, 0x13}, {0x5D, 0x15}, {0x5D, 0x17}, /* 0x8C-0x8F */ + {0x5D, 0x18}, {0x5D, 0x19}, {0x5D, 0x1A}, {0x5D, 0x1C}, /* 0x90-0x93 */ + {0x5D, 0x1D}, {0x5D, 0x1F}, {0x5D, 0x20}, {0x5D, 0x21}, /* 0x94-0x97 */ + {0x5D, 0x22}, {0x5D, 0x23}, {0x5D, 0x25}, {0x5D, 0x28}, /* 0x98-0x9B */ + {0x5D, 0x2A}, {0x5D, 0x2B}, {0x5D, 0x2C}, {0x5D, 0x2F}, /* 0x9C-0x9F */ + {0x5D, 0x30}, {0x5D, 0x31}, {0x5D, 0x32}, {0x5D, 0x33}, /* 0xA0-0xA3 */ + {0x5D, 0x35}, {0x5D, 0x36}, {0x5D, 0x37}, {0x5D, 0x38}, /* 0xA4-0xA7 */ + {0x5D, 0x39}, {0x5D, 0x3A}, {0x5D, 0x3B}, {0x5D, 0x3C}, /* 0xA8-0xAB */ + {0x5D, 0x3F}, {0x5D, 0x40}, {0x5D, 0x41}, {0x5D, 0x42}, /* 0xAC-0xAF */ + {0x5D, 0x43}, {0x5D, 0x44}, {0x5D, 0x45}, {0x5D, 0x46}, /* 0xB0-0xB3 */ + {0x5D, 0x48}, {0x5D, 0x49}, {0x5D, 0x4D}, {0x5D, 0x4E}, /* 0xB4-0xB7 */ + {0x5D, 0x4F}, {0x5D, 0x50}, {0x5D, 0x51}, {0x5D, 0x52}, /* 0xB8-0xBB */ + {0x5D, 0x53}, {0x5D, 0x54}, {0x5D, 0x55}, {0x5D, 0x56}, /* 0xBC-0xBF */ + {0x5D, 0x57}, {0x5D, 0x59}, {0x5D, 0x5A}, {0x5D, 0x5C}, /* 0xC0-0xC3 */ + {0x5D, 0x5E}, {0x5D, 0x5F}, {0x5D, 0x60}, {0x5D, 0x61}, /* 0xC4-0xC7 */ + {0x5D, 0x62}, {0x5D, 0x63}, {0x5D, 0x64}, {0x5D, 0x65}, /* 0xC8-0xCB */ + {0x5D, 0x66}, {0x5D, 0x67}, {0x5D, 0x68}, {0x5D, 0x6A}, /* 0xCC-0xCF */ + {0x5D, 0x6D}, {0x5D, 0x6E}, {0x5D, 0x70}, {0x5D, 0x71}, /* 0xD0-0xD3 */ + {0x5D, 0x72}, {0x5D, 0x73}, {0x5D, 0x75}, {0x5D, 0x76}, /* 0xD4-0xD7 */ + {0x5D, 0x77}, {0x5D, 0x78}, {0x5D, 0x79}, {0x5D, 0x7A}, /* 0xD8-0xDB */ + {0x5D, 0x7B}, {0x5D, 0x7C}, {0x5D, 0x7D}, {0x5D, 0x7E}, /* 0xDC-0xDF */ + {0x5D, 0x7F}, {0x5D, 0x80}, {0x5D, 0x81}, {0x5D, 0x83}, /* 0xE0-0xE3 */ + {0x5D, 0x84}, {0x5D, 0x85}, {0x5D, 0x86}, {0x5D, 0x87}, /* 0xE4-0xE7 */ + {0x5D, 0x88}, {0x5D, 0x89}, {0x5D, 0x8A}, {0x5D, 0x8B}, /* 0xE8-0xEB */ + {0x5D, 0x8C}, {0x5D, 0x8D}, {0x5D, 0x8E}, {0x5D, 0x8F}, /* 0xEC-0xEF */ + {0x5D, 0x90}, {0x5D, 0x91}, {0x5D, 0x92}, {0x5D, 0x93}, /* 0xF0-0xF3 */ + {0x5D, 0x94}, {0x5D, 0x95}, {0x5D, 0x96}, {0x5D, 0x97}, /* 0xF4-0xF7 */ + {0x5D, 0x98}, {0x5D, 0x9A}, {0x5D, 0x9B}, {0x5D, 0x9C}, /* 0xF8-0xFB */ + {0x5D, 0x9E}, {0x5D, 0x9F}, {0x5D, 0xA0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8E[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5D, 0xA1}, {0x5D, 0xA2}, {0x5D, 0xA3}, {0x5D, 0xA4}, /* 0x40-0x43 */ + {0x5D, 0xA5}, {0x5D, 0xA6}, {0x5D, 0xA7}, {0x5D, 0xA8}, /* 0x44-0x47 */ + {0x5D, 0xA9}, {0x5D, 0xAA}, {0x5D, 0xAB}, {0x5D, 0xAC}, /* 0x48-0x4B */ + {0x5D, 0xAD}, {0x5D, 0xAE}, {0x5D, 0xAF}, {0x5D, 0xB0}, /* 0x4C-0x4F */ + {0x5D, 0xB1}, {0x5D, 0xB2}, {0x5D, 0xB3}, {0x5D, 0xB4}, /* 0x50-0x53 */ + {0x5D, 0xB5}, {0x5D, 0xB6}, {0x5D, 0xB8}, {0x5D, 0xB9}, /* 0x54-0x57 */ + {0x5D, 0xBA}, {0x5D, 0xBB}, {0x5D, 0xBC}, {0x5D, 0xBD}, /* 0x58-0x5B */ + {0x5D, 0xBE}, {0x5D, 0xBF}, {0x5D, 0xC0}, {0x5D, 0xC1}, /* 0x5C-0x5F */ + {0x5D, 0xC2}, {0x5D, 0xC3}, {0x5D, 0xC4}, {0x5D, 0xC6}, /* 0x60-0x63 */ + {0x5D, 0xC7}, {0x5D, 0xC8}, {0x5D, 0xC9}, {0x5D, 0xCA}, /* 0x64-0x67 */ + {0x5D, 0xCB}, {0x5D, 0xCC}, {0x5D, 0xCE}, {0x5D, 0xCF}, /* 0x68-0x6B */ + {0x5D, 0xD0}, {0x5D, 0xD1}, {0x5D, 0xD2}, {0x5D, 0xD3}, /* 0x6C-0x6F */ + {0x5D, 0xD4}, {0x5D, 0xD5}, {0x5D, 0xD6}, {0x5D, 0xD7}, /* 0x70-0x73 */ + {0x5D, 0xD8}, {0x5D, 0xD9}, {0x5D, 0xDA}, {0x5D, 0xDC}, /* 0x74-0x77 */ + {0x5D, 0xDF}, {0x5D, 0xE0}, {0x5D, 0xE3}, {0x5D, 0xE4}, /* 0x78-0x7B */ + {0x5D, 0xEA}, {0x5D, 0xEC}, {0x5D, 0xED}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x5D, 0xF0}, {0x5D, 0xF5}, {0x5D, 0xF6}, {0x5D, 0xF8}, /* 0x80-0x83 */ + {0x5D, 0xF9}, {0x5D, 0xFA}, {0x5D, 0xFB}, {0x5D, 0xFC}, /* 0x84-0x87 */ + {0x5D, 0xFF}, {0x5E, 0x00}, {0x5E, 0x04}, {0x5E, 0x07}, /* 0x88-0x8B */ + {0x5E, 0x09}, {0x5E, 0x0A}, {0x5E, 0x0B}, {0x5E, 0x0D}, /* 0x8C-0x8F */ + {0x5E, 0x0E}, {0x5E, 0x12}, {0x5E, 0x13}, {0x5E, 0x17}, /* 0x90-0x93 */ + {0x5E, 0x1E}, {0x5E, 0x1F}, {0x5E, 0x20}, {0x5E, 0x21}, /* 0x94-0x97 */ + {0x5E, 0x22}, {0x5E, 0x23}, {0x5E, 0x24}, {0x5E, 0x25}, /* 0x98-0x9B */ + {0x5E, 0x28}, {0x5E, 0x29}, {0x5E, 0x2A}, {0x5E, 0x2B}, /* 0x9C-0x9F */ + {0x5E, 0x2C}, {0x5E, 0x2F}, {0x5E, 0x30}, {0x5E, 0x32}, /* 0xA0-0xA3 */ + {0x5E, 0x33}, {0x5E, 0x34}, {0x5E, 0x35}, {0x5E, 0x36}, /* 0xA4-0xA7 */ + {0x5E, 0x39}, {0x5E, 0x3A}, {0x5E, 0x3E}, {0x5E, 0x3F}, /* 0xA8-0xAB */ + {0x5E, 0x40}, {0x5E, 0x41}, {0x5E, 0x43}, {0x5E, 0x46}, /* 0xAC-0xAF */ + {0x5E, 0x47}, {0x5E, 0x48}, {0x5E, 0x49}, {0x5E, 0x4A}, /* 0xB0-0xB3 */ + {0x5E, 0x4B}, {0x5E, 0x4D}, {0x5E, 0x4E}, {0x5E, 0x4F}, /* 0xB4-0xB7 */ + {0x5E, 0x50}, {0x5E, 0x51}, {0x5E, 0x52}, {0x5E, 0x53}, /* 0xB8-0xBB */ + {0x5E, 0x56}, {0x5E, 0x57}, {0x5E, 0x58}, {0x5E, 0x59}, /* 0xBC-0xBF */ + {0x5E, 0x5A}, {0x5E, 0x5C}, {0x5E, 0x5D}, {0x5E, 0x5F}, /* 0xC0-0xC3 */ + {0x5E, 0x60}, {0x5E, 0x63}, {0x5E, 0x64}, {0x5E, 0x65}, /* 0xC4-0xC7 */ + {0x5E, 0x66}, {0x5E, 0x67}, {0x5E, 0x68}, {0x5E, 0x69}, /* 0xC8-0xCB */ + {0x5E, 0x6A}, {0x5E, 0x6B}, {0x5E, 0x6C}, {0x5E, 0x6D}, /* 0xCC-0xCF */ + {0x5E, 0x6E}, {0x5E, 0x6F}, {0x5E, 0x70}, {0x5E, 0x71}, /* 0xD0-0xD3 */ + {0x5E, 0x75}, {0x5E, 0x77}, {0x5E, 0x79}, {0x5E, 0x7E}, /* 0xD4-0xD7 */ + {0x5E, 0x81}, {0x5E, 0x82}, {0x5E, 0x83}, {0x5E, 0x85}, /* 0xD8-0xDB */ + {0x5E, 0x88}, {0x5E, 0x89}, {0x5E, 0x8C}, {0x5E, 0x8D}, /* 0xDC-0xDF */ + {0x5E, 0x8E}, {0x5E, 0x92}, {0x5E, 0x98}, {0x5E, 0x9B}, /* 0xE0-0xE3 */ + {0x5E, 0x9D}, {0x5E, 0xA1}, {0x5E, 0xA2}, {0x5E, 0xA3}, /* 0xE4-0xE7 */ + {0x5E, 0xA4}, {0x5E, 0xA8}, {0x5E, 0xA9}, {0x5E, 0xAA}, /* 0xE8-0xEB */ + {0x5E, 0xAB}, {0x5E, 0xAC}, {0x5E, 0xAE}, {0x5E, 0xAF}, /* 0xEC-0xEF */ + {0x5E, 0xB0}, {0x5E, 0xB1}, {0x5E, 0xB2}, {0x5E, 0xB4}, /* 0xF0-0xF3 */ + {0x5E, 0xBA}, {0x5E, 0xBB}, {0x5E, 0xBC}, {0x5E, 0xBD}, /* 0xF4-0xF7 */ + {0x5E, 0xBF}, {0x5E, 0xC0}, {0x5E, 0xC1}, {0x5E, 0xC2}, /* 0xF8-0xFB */ + {0x5E, 0xC3}, {0x5E, 0xC4}, {0x5E, 0xC5}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8F[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5E, 0xC6}, {0x5E, 0xC7}, {0x5E, 0xC8}, {0x5E, 0xCB}, /* 0x40-0x43 */ + {0x5E, 0xCC}, {0x5E, 0xCD}, {0x5E, 0xCE}, {0x5E, 0xCF}, /* 0x44-0x47 */ + {0x5E, 0xD0}, {0x5E, 0xD4}, {0x5E, 0xD5}, {0x5E, 0xD7}, /* 0x48-0x4B */ + {0x5E, 0xD8}, {0x5E, 0xD9}, {0x5E, 0xDA}, {0x5E, 0xDC}, /* 0x4C-0x4F */ + {0x5E, 0xDD}, {0x5E, 0xDE}, {0x5E, 0xDF}, {0x5E, 0xE0}, /* 0x50-0x53 */ + {0x5E, 0xE1}, {0x5E, 0xE2}, {0x5E, 0xE3}, {0x5E, 0xE4}, /* 0x54-0x57 */ + {0x5E, 0xE5}, {0x5E, 0xE6}, {0x5E, 0xE7}, {0x5E, 0xE9}, /* 0x58-0x5B */ + {0x5E, 0xEB}, {0x5E, 0xEC}, {0x5E, 0xED}, {0x5E, 0xEE}, /* 0x5C-0x5F */ + {0x5E, 0xEF}, {0x5E, 0xF0}, {0x5E, 0xF1}, {0x5E, 0xF2}, /* 0x60-0x63 */ + {0x5E, 0xF3}, {0x5E, 0xF5}, {0x5E, 0xF8}, {0x5E, 0xF9}, /* 0x64-0x67 */ + {0x5E, 0xFB}, {0x5E, 0xFC}, {0x5E, 0xFD}, {0x5F, 0x05}, /* 0x68-0x6B */ + {0x5F, 0x06}, {0x5F, 0x07}, {0x5F, 0x09}, {0x5F, 0x0C}, /* 0x6C-0x6F */ + {0x5F, 0x0D}, {0x5F, 0x0E}, {0x5F, 0x10}, {0x5F, 0x12}, /* 0x70-0x73 */ + {0x5F, 0x14}, {0x5F, 0x16}, {0x5F, 0x19}, {0x5F, 0x1A}, /* 0x74-0x77 */ + {0x5F, 0x1C}, {0x5F, 0x1D}, {0x5F, 0x1E}, {0x5F, 0x21}, /* 0x78-0x7B */ + {0x5F, 0x22}, {0x5F, 0x23}, {0x5F, 0x24}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x5F, 0x28}, {0x5F, 0x2B}, {0x5F, 0x2C}, {0x5F, 0x2E}, /* 0x80-0x83 */ + {0x5F, 0x30}, {0x5F, 0x32}, {0x5F, 0x33}, {0x5F, 0x34}, /* 0x84-0x87 */ + {0x5F, 0x35}, {0x5F, 0x36}, {0x5F, 0x37}, {0x5F, 0x38}, /* 0x88-0x8B */ + {0x5F, 0x3B}, {0x5F, 0x3D}, {0x5F, 0x3E}, {0x5F, 0x3F}, /* 0x8C-0x8F */ + {0x5F, 0x41}, {0x5F, 0x42}, {0x5F, 0x43}, {0x5F, 0x44}, /* 0x90-0x93 */ + {0x5F, 0x45}, {0x5F, 0x46}, {0x5F, 0x47}, {0x5F, 0x48}, /* 0x94-0x97 */ + {0x5F, 0x49}, {0x5F, 0x4A}, {0x5F, 0x4B}, {0x5F, 0x4C}, /* 0x98-0x9B */ + {0x5F, 0x4D}, {0x5F, 0x4E}, {0x5F, 0x4F}, {0x5F, 0x51}, /* 0x9C-0x9F */ + {0x5F, 0x54}, {0x5F, 0x59}, {0x5F, 0x5A}, {0x5F, 0x5B}, /* 0xA0-0xA3 */ + {0x5F, 0x5C}, {0x5F, 0x5E}, {0x5F, 0x5F}, {0x5F, 0x60}, /* 0xA4-0xA7 */ + {0x5F, 0x63}, {0x5F, 0x65}, {0x5F, 0x67}, {0x5F, 0x68}, /* 0xA8-0xAB */ + {0x5F, 0x6B}, {0x5F, 0x6E}, {0x5F, 0x6F}, {0x5F, 0x72}, /* 0xAC-0xAF */ + {0x5F, 0x74}, {0x5F, 0x75}, {0x5F, 0x76}, {0x5F, 0x78}, /* 0xB0-0xB3 */ + {0x5F, 0x7A}, {0x5F, 0x7D}, {0x5F, 0x7E}, {0x5F, 0x7F}, /* 0xB4-0xB7 */ + {0x5F, 0x83}, {0x5F, 0x86}, {0x5F, 0x8D}, {0x5F, 0x8E}, /* 0xB8-0xBB */ + {0x5F, 0x8F}, {0x5F, 0x91}, {0x5F, 0x93}, {0x5F, 0x94}, /* 0xBC-0xBF */ + {0x5F, 0x96}, {0x5F, 0x9A}, {0x5F, 0x9B}, {0x5F, 0x9D}, /* 0xC0-0xC3 */ + {0x5F, 0x9E}, {0x5F, 0x9F}, {0x5F, 0xA0}, {0x5F, 0xA2}, /* 0xC4-0xC7 */ + {0x5F, 0xA3}, {0x5F, 0xA4}, {0x5F, 0xA5}, {0x5F, 0xA6}, /* 0xC8-0xCB */ + {0x5F, 0xA7}, {0x5F, 0xA9}, {0x5F, 0xAB}, {0x5F, 0xAC}, /* 0xCC-0xCF */ + {0x5F, 0xAF}, {0x5F, 0xB0}, {0x5F, 0xB1}, {0x5F, 0xB2}, /* 0xD0-0xD3 */ + {0x5F, 0xB3}, {0x5F, 0xB4}, {0x5F, 0xB6}, {0x5F, 0xB8}, /* 0xD4-0xD7 */ + {0x5F, 0xB9}, {0x5F, 0xBA}, {0x5F, 0xBB}, {0x5F, 0xBE}, /* 0xD8-0xDB */ + {0x5F, 0xBF}, {0x5F, 0xC0}, {0x5F, 0xC1}, {0x5F, 0xC2}, /* 0xDC-0xDF */ + {0x5F, 0xC7}, {0x5F, 0xC8}, {0x5F, 0xCA}, {0x5F, 0xCB}, /* 0xE0-0xE3 */ + {0x5F, 0xCE}, {0x5F, 0xD3}, {0x5F, 0xD4}, {0x5F, 0xD5}, /* 0xE4-0xE7 */ + {0x5F, 0xDA}, {0x5F, 0xDB}, {0x5F, 0xDC}, {0x5F, 0xDE}, /* 0xE8-0xEB */ + {0x5F, 0xDF}, {0x5F, 0xE2}, {0x5F, 0xE3}, {0x5F, 0xE5}, /* 0xEC-0xEF */ + {0x5F, 0xE6}, {0x5F, 0xE8}, {0x5F, 0xE9}, {0x5F, 0xEC}, /* 0xF0-0xF3 */ + {0x5F, 0xEF}, {0x5F, 0xF0}, {0x5F, 0xF2}, {0x5F, 0xF3}, /* 0xF4-0xF7 */ + {0x5F, 0xF4}, {0x5F, 0xF6}, {0x5F, 0xF7}, {0x5F, 0xF9}, /* 0xF8-0xFB */ + {0x5F, 0xFA}, {0x5F, 0xFC}, {0x60, 0x07}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_90[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x60, 0x08}, {0x60, 0x09}, {0x60, 0x0B}, {0x60, 0x0C}, /* 0x40-0x43 */ + {0x60, 0x10}, {0x60, 0x11}, {0x60, 0x13}, {0x60, 0x17}, /* 0x44-0x47 */ + {0x60, 0x18}, {0x60, 0x1A}, {0x60, 0x1E}, {0x60, 0x1F}, /* 0x48-0x4B */ + {0x60, 0x22}, {0x60, 0x23}, {0x60, 0x24}, {0x60, 0x2C}, /* 0x4C-0x4F */ + {0x60, 0x2D}, {0x60, 0x2E}, {0x60, 0x30}, {0x60, 0x31}, /* 0x50-0x53 */ + {0x60, 0x32}, {0x60, 0x33}, {0x60, 0x34}, {0x60, 0x36}, /* 0x54-0x57 */ + {0x60, 0x37}, {0x60, 0x38}, {0x60, 0x39}, {0x60, 0x3A}, /* 0x58-0x5B */ + {0x60, 0x3D}, {0x60, 0x3E}, {0x60, 0x40}, {0x60, 0x44}, /* 0x5C-0x5F */ + {0x60, 0x45}, {0x60, 0x46}, {0x60, 0x47}, {0x60, 0x48}, /* 0x60-0x63 */ + {0x60, 0x49}, {0x60, 0x4A}, {0x60, 0x4C}, {0x60, 0x4E}, /* 0x64-0x67 */ + {0x60, 0x4F}, {0x60, 0x51}, {0x60, 0x53}, {0x60, 0x54}, /* 0x68-0x6B */ + {0x60, 0x56}, {0x60, 0x57}, {0x60, 0x58}, {0x60, 0x5B}, /* 0x6C-0x6F */ + {0x60, 0x5C}, {0x60, 0x5E}, {0x60, 0x5F}, {0x60, 0x60}, /* 0x70-0x73 */ + {0x60, 0x61}, {0x60, 0x65}, {0x60, 0x66}, {0x60, 0x6E}, /* 0x74-0x77 */ + {0x60, 0x71}, {0x60, 0x72}, {0x60, 0x74}, {0x60, 0x75}, /* 0x78-0x7B */ + {0x60, 0x77}, {0x60, 0x7E}, {0x60, 0x80}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x60, 0x81}, {0x60, 0x82}, {0x60, 0x85}, {0x60, 0x86}, /* 0x80-0x83 */ + {0x60, 0x87}, {0x60, 0x88}, {0x60, 0x8A}, {0x60, 0x8B}, /* 0x84-0x87 */ + {0x60, 0x8E}, {0x60, 0x8F}, {0x60, 0x90}, {0x60, 0x91}, /* 0x88-0x8B */ + {0x60, 0x93}, {0x60, 0x95}, {0x60, 0x97}, {0x60, 0x98}, /* 0x8C-0x8F */ + {0x60, 0x99}, {0x60, 0x9C}, {0x60, 0x9E}, {0x60, 0xA1}, /* 0x90-0x93 */ + {0x60, 0xA2}, {0x60, 0xA4}, {0x60, 0xA5}, {0x60, 0xA7}, /* 0x94-0x97 */ + {0x60, 0xA9}, {0x60, 0xAA}, {0x60, 0xAE}, {0x60, 0xB0}, /* 0x98-0x9B */ + {0x60, 0xB3}, {0x60, 0xB5}, {0x60, 0xB6}, {0x60, 0xB7}, /* 0x9C-0x9F */ + {0x60, 0xB9}, {0x60, 0xBA}, {0x60, 0xBD}, {0x60, 0xBE}, /* 0xA0-0xA3 */ + {0x60, 0xBF}, {0x60, 0xC0}, {0x60, 0xC1}, {0x60, 0xC2}, /* 0xA4-0xA7 */ + {0x60, 0xC3}, {0x60, 0xC4}, {0x60, 0xC7}, {0x60, 0xC8}, /* 0xA8-0xAB */ + {0x60, 0xC9}, {0x60, 0xCC}, {0x60, 0xCD}, {0x60, 0xCE}, /* 0xAC-0xAF */ + {0x60, 0xCF}, {0x60, 0xD0}, {0x60, 0xD2}, {0x60, 0xD3}, /* 0xB0-0xB3 */ + {0x60, 0xD4}, {0x60, 0xD6}, {0x60, 0xD7}, {0x60, 0xD9}, /* 0xB4-0xB7 */ + {0x60, 0xDB}, {0x60, 0xDE}, {0x60, 0xE1}, {0x60, 0xE2}, /* 0xB8-0xBB */ + {0x60, 0xE3}, {0x60, 0xE4}, {0x60, 0xE5}, {0x60, 0xEA}, /* 0xBC-0xBF */ + {0x60, 0xF1}, {0x60, 0xF2}, {0x60, 0xF5}, {0x60, 0xF7}, /* 0xC0-0xC3 */ + {0x60, 0xF8}, {0x60, 0xFB}, {0x60, 0xFC}, {0x60, 0xFD}, /* 0xC4-0xC7 */ + {0x60, 0xFE}, {0x60, 0xFF}, {0x61, 0x02}, {0x61, 0x03}, /* 0xC8-0xCB */ + {0x61, 0x04}, {0x61, 0x05}, {0x61, 0x07}, {0x61, 0x0A}, /* 0xCC-0xCF */ + {0x61, 0x0B}, {0x61, 0x0C}, {0x61, 0x10}, {0x61, 0x11}, /* 0xD0-0xD3 */ + {0x61, 0x12}, {0x61, 0x13}, {0x61, 0x14}, {0x61, 0x16}, /* 0xD4-0xD7 */ + {0x61, 0x17}, {0x61, 0x18}, {0x61, 0x19}, {0x61, 0x1B}, /* 0xD8-0xDB */ + {0x61, 0x1C}, {0x61, 0x1D}, {0x61, 0x1E}, {0x61, 0x21}, /* 0xDC-0xDF */ + {0x61, 0x22}, {0x61, 0x25}, {0x61, 0x28}, {0x61, 0x29}, /* 0xE0-0xE3 */ + {0x61, 0x2A}, {0x61, 0x2C}, {0x61, 0x2D}, {0x61, 0x2E}, /* 0xE4-0xE7 */ + {0x61, 0x2F}, {0x61, 0x30}, {0x61, 0x31}, {0x61, 0x32}, /* 0xE8-0xEB */ + {0x61, 0x33}, {0x61, 0x34}, {0x61, 0x35}, {0x61, 0x36}, /* 0xEC-0xEF */ + {0x61, 0x37}, {0x61, 0x38}, {0x61, 0x39}, {0x61, 0x3A}, /* 0xF0-0xF3 */ + {0x61, 0x3B}, {0x61, 0x3C}, {0x61, 0x3D}, {0x61, 0x3E}, /* 0xF4-0xF7 */ + {0x61, 0x40}, {0x61, 0x41}, {0x61, 0x42}, {0x61, 0x43}, /* 0xF8-0xFB */ + {0x61, 0x44}, {0x61, 0x45}, {0x61, 0x46}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_91[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x61, 0x47}, {0x61, 0x49}, {0x61, 0x4B}, {0x61, 0x4D}, /* 0x40-0x43 */ + {0x61, 0x4F}, {0x61, 0x50}, {0x61, 0x52}, {0x61, 0x53}, /* 0x44-0x47 */ + {0x61, 0x54}, {0x61, 0x56}, {0x61, 0x57}, {0x61, 0x58}, /* 0x48-0x4B */ + {0x61, 0x59}, {0x61, 0x5A}, {0x61, 0x5B}, {0x61, 0x5C}, /* 0x4C-0x4F */ + {0x61, 0x5E}, {0x61, 0x5F}, {0x61, 0x60}, {0x61, 0x61}, /* 0x50-0x53 */ + {0x61, 0x63}, {0x61, 0x64}, {0x61, 0x65}, {0x61, 0x66}, /* 0x54-0x57 */ + {0x61, 0x69}, {0x61, 0x6A}, {0x61, 0x6B}, {0x61, 0x6C}, /* 0x58-0x5B */ + {0x61, 0x6D}, {0x61, 0x6E}, {0x61, 0x6F}, {0x61, 0x71}, /* 0x5C-0x5F */ + {0x61, 0x72}, {0x61, 0x73}, {0x61, 0x74}, {0x61, 0x76}, /* 0x60-0x63 */ + {0x61, 0x78}, {0x61, 0x79}, {0x61, 0x7A}, {0x61, 0x7B}, /* 0x64-0x67 */ + {0x61, 0x7C}, {0x61, 0x7D}, {0x61, 0x7E}, {0x61, 0x7F}, /* 0x68-0x6B */ + {0x61, 0x80}, {0x61, 0x81}, {0x61, 0x82}, {0x61, 0x83}, /* 0x6C-0x6F */ + {0x61, 0x84}, {0x61, 0x85}, {0x61, 0x86}, {0x61, 0x87}, /* 0x70-0x73 */ + {0x61, 0x88}, {0x61, 0x89}, {0x61, 0x8A}, {0x61, 0x8C}, /* 0x74-0x77 */ + {0x61, 0x8D}, {0x61, 0x8F}, {0x61, 0x90}, {0x61, 0x91}, /* 0x78-0x7B */ + {0x61, 0x92}, {0x61, 0x93}, {0x61, 0x95}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x61, 0x96}, {0x61, 0x97}, {0x61, 0x98}, {0x61, 0x99}, /* 0x80-0x83 */ + {0x61, 0x9A}, {0x61, 0x9B}, {0x61, 0x9C}, {0x61, 0x9E}, /* 0x84-0x87 */ + {0x61, 0x9F}, {0x61, 0xA0}, {0x61, 0xA1}, {0x61, 0xA2}, /* 0x88-0x8B */ + {0x61, 0xA3}, {0x61, 0xA4}, {0x61, 0xA5}, {0x61, 0xA6}, /* 0x8C-0x8F */ + {0x61, 0xAA}, {0x61, 0xAB}, {0x61, 0xAD}, {0x61, 0xAE}, /* 0x90-0x93 */ + {0x61, 0xAF}, {0x61, 0xB0}, {0x61, 0xB1}, {0x61, 0xB2}, /* 0x94-0x97 */ + {0x61, 0xB3}, {0x61, 0xB4}, {0x61, 0xB5}, {0x61, 0xB6}, /* 0x98-0x9B */ + {0x61, 0xB8}, {0x61, 0xB9}, {0x61, 0xBA}, {0x61, 0xBB}, /* 0x9C-0x9F */ + {0x61, 0xBC}, {0x61, 0xBD}, {0x61, 0xBF}, {0x61, 0xC0}, /* 0xA0-0xA3 */ + {0x61, 0xC1}, {0x61, 0xC3}, {0x61, 0xC4}, {0x61, 0xC5}, /* 0xA4-0xA7 */ + {0x61, 0xC6}, {0x61, 0xC7}, {0x61, 0xC9}, {0x61, 0xCC}, /* 0xA8-0xAB */ + {0x61, 0xCD}, {0x61, 0xCE}, {0x61, 0xCF}, {0x61, 0xD0}, /* 0xAC-0xAF */ + {0x61, 0xD3}, {0x61, 0xD5}, {0x61, 0xD6}, {0x61, 0xD7}, /* 0xB0-0xB3 */ + {0x61, 0xD8}, {0x61, 0xD9}, {0x61, 0xDA}, {0x61, 0xDB}, /* 0xB4-0xB7 */ + {0x61, 0xDC}, {0x61, 0xDD}, {0x61, 0xDE}, {0x61, 0xDF}, /* 0xB8-0xBB */ + {0x61, 0xE0}, {0x61, 0xE1}, {0x61, 0xE2}, {0x61, 0xE3}, /* 0xBC-0xBF */ + {0x61, 0xE4}, {0x61, 0xE5}, {0x61, 0xE7}, {0x61, 0xE8}, /* 0xC0-0xC3 */ + {0x61, 0xE9}, {0x61, 0xEA}, {0x61, 0xEB}, {0x61, 0xEC}, /* 0xC4-0xC7 */ + {0x61, 0xED}, {0x61, 0xEE}, {0x61, 0xEF}, {0x61, 0xF0}, /* 0xC8-0xCB */ + {0x61, 0xF1}, {0x61, 0xF2}, {0x61, 0xF3}, {0x61, 0xF4}, /* 0xCC-0xCF */ + {0x61, 0xF6}, {0x61, 0xF7}, {0x61, 0xF8}, {0x61, 0xF9}, /* 0xD0-0xD3 */ + {0x61, 0xFA}, {0x61, 0xFB}, {0x61, 0xFC}, {0x61, 0xFD}, /* 0xD4-0xD7 */ + {0x61, 0xFE}, {0x62, 0x00}, {0x62, 0x01}, {0x62, 0x02}, /* 0xD8-0xDB */ + {0x62, 0x03}, {0x62, 0x04}, {0x62, 0x05}, {0x62, 0x07}, /* 0xDC-0xDF */ + {0x62, 0x09}, {0x62, 0x13}, {0x62, 0x14}, {0x62, 0x19}, /* 0xE0-0xE3 */ + {0x62, 0x1C}, {0x62, 0x1D}, {0x62, 0x1E}, {0x62, 0x20}, /* 0xE4-0xE7 */ + {0x62, 0x23}, {0x62, 0x26}, {0x62, 0x27}, {0x62, 0x28}, /* 0xE8-0xEB */ + {0x62, 0x29}, {0x62, 0x2B}, {0x62, 0x2D}, {0x62, 0x2F}, /* 0xEC-0xEF */ + {0x62, 0x30}, {0x62, 0x31}, {0x62, 0x32}, {0x62, 0x35}, /* 0xF0-0xF3 */ + {0x62, 0x36}, {0x62, 0x38}, {0x62, 0x39}, {0x62, 0x3A}, /* 0xF4-0xF7 */ + {0x62, 0x3B}, {0x62, 0x3C}, {0x62, 0x42}, {0x62, 0x44}, /* 0xF8-0xFB */ + {0x62, 0x45}, {0x62, 0x46}, {0x62, 0x4A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_92[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x62, 0x4F}, {0x62, 0x50}, {0x62, 0x55}, {0x62, 0x56}, /* 0x40-0x43 */ + {0x62, 0x57}, {0x62, 0x59}, {0x62, 0x5A}, {0x62, 0x5C}, /* 0x44-0x47 */ + {0x62, 0x5D}, {0x62, 0x5E}, {0x62, 0x5F}, {0x62, 0x60}, /* 0x48-0x4B */ + {0x62, 0x61}, {0x62, 0x62}, {0x62, 0x64}, {0x62, 0x65}, /* 0x4C-0x4F */ + {0x62, 0x68}, {0x62, 0x71}, {0x62, 0x72}, {0x62, 0x74}, /* 0x50-0x53 */ + {0x62, 0x75}, {0x62, 0x77}, {0x62, 0x78}, {0x62, 0x7A}, /* 0x54-0x57 */ + {0x62, 0x7B}, {0x62, 0x7D}, {0x62, 0x81}, {0x62, 0x82}, /* 0x58-0x5B */ + {0x62, 0x83}, {0x62, 0x85}, {0x62, 0x86}, {0x62, 0x87}, /* 0x5C-0x5F */ + {0x62, 0x88}, {0x62, 0x8B}, {0x62, 0x8C}, {0x62, 0x8D}, /* 0x60-0x63 */ + {0x62, 0x8E}, {0x62, 0x8F}, {0x62, 0x90}, {0x62, 0x94}, /* 0x64-0x67 */ + {0x62, 0x99}, {0x62, 0x9C}, {0x62, 0x9D}, {0x62, 0x9E}, /* 0x68-0x6B */ + {0x62, 0xA3}, {0x62, 0xA6}, {0x62, 0xA7}, {0x62, 0xA9}, /* 0x6C-0x6F */ + {0x62, 0xAA}, {0x62, 0xAD}, {0x62, 0xAE}, {0x62, 0xAF}, /* 0x70-0x73 */ + {0x62, 0xB0}, {0x62, 0xB2}, {0x62, 0xB3}, {0x62, 0xB4}, /* 0x74-0x77 */ + {0x62, 0xB6}, {0x62, 0xB7}, {0x62, 0xB8}, {0x62, 0xBA}, /* 0x78-0x7B */ + {0x62, 0xBE}, {0x62, 0xC0}, {0x62, 0xC1}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x62, 0xC3}, {0x62, 0xCB}, {0x62, 0xCF}, {0x62, 0xD1}, /* 0x80-0x83 */ + {0x62, 0xD5}, {0x62, 0xDD}, {0x62, 0xDE}, {0x62, 0xE0}, /* 0x84-0x87 */ + {0x62, 0xE1}, {0x62, 0xE4}, {0x62, 0xEA}, {0x62, 0xEB}, /* 0x88-0x8B */ + {0x62, 0xF0}, {0x62, 0xF2}, {0x62, 0xF5}, {0x62, 0xF8}, /* 0x8C-0x8F */ + {0x62, 0xF9}, {0x62, 0xFA}, {0x62, 0xFB}, {0x63, 0x00}, /* 0x90-0x93 */ + {0x63, 0x03}, {0x63, 0x04}, {0x63, 0x05}, {0x63, 0x06}, /* 0x94-0x97 */ + {0x63, 0x0A}, {0x63, 0x0B}, {0x63, 0x0C}, {0x63, 0x0D}, /* 0x98-0x9B */ + {0x63, 0x0F}, {0x63, 0x10}, {0x63, 0x12}, {0x63, 0x13}, /* 0x9C-0x9F */ + {0x63, 0x14}, {0x63, 0x15}, {0x63, 0x17}, {0x63, 0x18}, /* 0xA0-0xA3 */ + {0x63, 0x19}, {0x63, 0x1C}, {0x63, 0x26}, {0x63, 0x27}, /* 0xA4-0xA7 */ + {0x63, 0x29}, {0x63, 0x2C}, {0x63, 0x2D}, {0x63, 0x2E}, /* 0xA8-0xAB */ + {0x63, 0x30}, {0x63, 0x31}, {0x63, 0x33}, {0x63, 0x34}, /* 0xAC-0xAF */ + {0x63, 0x35}, {0x63, 0x36}, {0x63, 0x37}, {0x63, 0x38}, /* 0xB0-0xB3 */ + {0x63, 0x3B}, {0x63, 0x3C}, {0x63, 0x3E}, {0x63, 0x3F}, /* 0xB4-0xB7 */ + {0x63, 0x40}, {0x63, 0x41}, {0x63, 0x44}, {0x63, 0x47}, /* 0xB8-0xBB */ + {0x63, 0x48}, {0x63, 0x4A}, {0x63, 0x51}, {0x63, 0x52}, /* 0xBC-0xBF */ + {0x63, 0x53}, {0x63, 0x54}, {0x63, 0x56}, {0x63, 0x57}, /* 0xC0-0xC3 */ + {0x63, 0x58}, {0x63, 0x59}, {0x63, 0x5A}, {0x63, 0x5B}, /* 0xC4-0xC7 */ + {0x63, 0x5C}, {0x63, 0x5D}, {0x63, 0x60}, {0x63, 0x64}, /* 0xC8-0xCB */ + {0x63, 0x65}, {0x63, 0x66}, {0x63, 0x68}, {0x63, 0x6A}, /* 0xCC-0xCF */ + {0x63, 0x6B}, {0x63, 0x6C}, {0x63, 0x6F}, {0x63, 0x70}, /* 0xD0-0xD3 */ + {0x63, 0x72}, {0x63, 0x73}, {0x63, 0x74}, {0x63, 0x75}, /* 0xD4-0xD7 */ + {0x63, 0x78}, {0x63, 0x79}, {0x63, 0x7C}, {0x63, 0x7D}, /* 0xD8-0xDB */ + {0x63, 0x7E}, {0x63, 0x7F}, {0x63, 0x81}, {0x63, 0x83}, /* 0xDC-0xDF */ + {0x63, 0x84}, {0x63, 0x85}, {0x63, 0x86}, {0x63, 0x8B}, /* 0xE0-0xE3 */ + {0x63, 0x8D}, {0x63, 0x91}, {0x63, 0x93}, {0x63, 0x94}, /* 0xE4-0xE7 */ + {0x63, 0x95}, {0x63, 0x97}, {0x63, 0x99}, {0x63, 0x9A}, /* 0xE8-0xEB */ + {0x63, 0x9B}, {0x63, 0x9C}, {0x63, 0x9D}, {0x63, 0x9E}, /* 0xEC-0xEF */ + {0x63, 0x9F}, {0x63, 0xA1}, {0x63, 0xA4}, {0x63, 0xA6}, /* 0xF0-0xF3 */ + {0x63, 0xAB}, {0x63, 0xAF}, {0x63, 0xB1}, {0x63, 0xB2}, /* 0xF4-0xF7 */ + {0x63, 0xB5}, {0x63, 0xB6}, {0x63, 0xB9}, {0x63, 0xBB}, /* 0xF8-0xFB */ + {0x63, 0xBD}, {0x63, 0xBF}, {0x63, 0xC0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_93[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x63, 0xC1}, {0x63, 0xC2}, {0x63, 0xC3}, {0x63, 0xC5}, /* 0x40-0x43 */ + {0x63, 0xC7}, {0x63, 0xC8}, {0x63, 0xCA}, {0x63, 0xCB}, /* 0x44-0x47 */ + {0x63, 0xCC}, {0x63, 0xD1}, {0x63, 0xD3}, {0x63, 0xD4}, /* 0x48-0x4B */ + {0x63, 0xD5}, {0x63, 0xD7}, {0x63, 0xD8}, {0x63, 0xD9}, /* 0x4C-0x4F */ + {0x63, 0xDA}, {0x63, 0xDB}, {0x63, 0xDC}, {0x63, 0xDD}, /* 0x50-0x53 */ + {0x63, 0xDF}, {0x63, 0xE2}, {0x63, 0xE4}, {0x63, 0xE5}, /* 0x54-0x57 */ + {0x63, 0xE6}, {0x63, 0xE7}, {0x63, 0xE8}, {0x63, 0xEB}, /* 0x58-0x5B */ + {0x63, 0xEC}, {0x63, 0xEE}, {0x63, 0xEF}, {0x63, 0xF0}, /* 0x5C-0x5F */ + {0x63, 0xF1}, {0x63, 0xF3}, {0x63, 0xF5}, {0x63, 0xF7}, /* 0x60-0x63 */ + {0x63, 0xF9}, {0x63, 0xFA}, {0x63, 0xFB}, {0x63, 0xFC}, /* 0x64-0x67 */ + {0x63, 0xFE}, {0x64, 0x03}, {0x64, 0x04}, {0x64, 0x06}, /* 0x68-0x6B */ + {0x64, 0x07}, {0x64, 0x08}, {0x64, 0x09}, {0x64, 0x0A}, /* 0x6C-0x6F */ + {0x64, 0x0D}, {0x64, 0x0E}, {0x64, 0x11}, {0x64, 0x12}, /* 0x70-0x73 */ + {0x64, 0x15}, {0x64, 0x16}, {0x64, 0x17}, {0x64, 0x18}, /* 0x74-0x77 */ + {0x64, 0x19}, {0x64, 0x1A}, {0x64, 0x1D}, {0x64, 0x1F}, /* 0x78-0x7B */ + {0x64, 0x22}, {0x64, 0x23}, {0x64, 0x24}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x64, 0x25}, {0x64, 0x27}, {0x64, 0x28}, {0x64, 0x29}, /* 0x80-0x83 */ + {0x64, 0x2B}, {0x64, 0x2E}, {0x64, 0x2F}, {0x64, 0x30}, /* 0x84-0x87 */ + {0x64, 0x31}, {0x64, 0x32}, {0x64, 0x33}, {0x64, 0x35}, /* 0x88-0x8B */ + {0x64, 0x36}, {0x64, 0x37}, {0x64, 0x38}, {0x64, 0x39}, /* 0x8C-0x8F */ + {0x64, 0x3B}, {0x64, 0x3C}, {0x64, 0x3E}, {0x64, 0x40}, /* 0x90-0x93 */ + {0x64, 0x42}, {0x64, 0x43}, {0x64, 0x49}, {0x64, 0x4B}, /* 0x94-0x97 */ + {0x64, 0x4C}, {0x64, 0x4D}, {0x64, 0x4E}, {0x64, 0x4F}, /* 0x98-0x9B */ + {0x64, 0x50}, {0x64, 0x51}, {0x64, 0x53}, {0x64, 0x55}, /* 0x9C-0x9F */ + {0x64, 0x56}, {0x64, 0x57}, {0x64, 0x59}, {0x64, 0x5A}, /* 0xA0-0xA3 */ + {0x64, 0x5B}, {0x64, 0x5C}, {0x64, 0x5D}, {0x64, 0x5F}, /* 0xA4-0xA7 */ + {0x64, 0x60}, {0x64, 0x61}, {0x64, 0x62}, {0x64, 0x63}, /* 0xA8-0xAB */ + {0x64, 0x64}, {0x64, 0x65}, {0x64, 0x66}, {0x64, 0x68}, /* 0xAC-0xAF */ + {0x64, 0x6A}, {0x64, 0x6B}, {0x64, 0x6C}, {0x64, 0x6E}, /* 0xB0-0xB3 */ + {0x64, 0x6F}, {0x64, 0x70}, {0x64, 0x71}, {0x64, 0x72}, /* 0xB4-0xB7 */ + {0x64, 0x73}, {0x64, 0x74}, {0x64, 0x75}, {0x64, 0x76}, /* 0xB8-0xBB */ + {0x64, 0x77}, {0x64, 0x7B}, {0x64, 0x7C}, {0x64, 0x7D}, /* 0xBC-0xBF */ + {0x64, 0x7E}, {0x64, 0x7F}, {0x64, 0x80}, {0x64, 0x81}, /* 0xC0-0xC3 */ + {0x64, 0x83}, {0x64, 0x86}, {0x64, 0x88}, {0x64, 0x89}, /* 0xC4-0xC7 */ + {0x64, 0x8A}, {0x64, 0x8B}, {0x64, 0x8C}, {0x64, 0x8D}, /* 0xC8-0xCB */ + {0x64, 0x8E}, {0x64, 0x8F}, {0x64, 0x90}, {0x64, 0x93}, /* 0xCC-0xCF */ + {0x64, 0x94}, {0x64, 0x97}, {0x64, 0x98}, {0x64, 0x9A}, /* 0xD0-0xD3 */ + {0x64, 0x9B}, {0x64, 0x9C}, {0x64, 0x9D}, {0x64, 0x9F}, /* 0xD4-0xD7 */ + {0x64, 0xA0}, {0x64, 0xA1}, {0x64, 0xA2}, {0x64, 0xA3}, /* 0xD8-0xDB */ + {0x64, 0xA5}, {0x64, 0xA6}, {0x64, 0xA7}, {0x64, 0xA8}, /* 0xDC-0xDF */ + {0x64, 0xAA}, {0x64, 0xAB}, {0x64, 0xAF}, {0x64, 0xB1}, /* 0xE0-0xE3 */ + {0x64, 0xB2}, {0x64, 0xB3}, {0x64, 0xB4}, {0x64, 0xB6}, /* 0xE4-0xE7 */ + {0x64, 0xB9}, {0x64, 0xBB}, {0x64, 0xBD}, {0x64, 0xBE}, /* 0xE8-0xEB */ + {0x64, 0xBF}, {0x64, 0xC1}, {0x64, 0xC3}, {0x64, 0xC4}, /* 0xEC-0xEF */ + {0x64, 0xC6}, {0x64, 0xC7}, {0x64, 0xC8}, {0x64, 0xC9}, /* 0xF0-0xF3 */ + {0x64, 0xCA}, {0x64, 0xCB}, {0x64, 0xCC}, {0x64, 0xCF}, /* 0xF4-0xF7 */ + {0x64, 0xD1}, {0x64, 0xD3}, {0x64, 0xD4}, {0x64, 0xD5}, /* 0xF8-0xFB */ + {0x64, 0xD6}, {0x64, 0xD9}, {0x64, 0xDA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_94[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x64, 0xDB}, {0x64, 0xDC}, {0x64, 0xDD}, {0x64, 0xDF}, /* 0x40-0x43 */ + {0x64, 0xE0}, {0x64, 0xE1}, {0x64, 0xE3}, {0x64, 0xE5}, /* 0x44-0x47 */ + {0x64, 0xE7}, {0x64, 0xE8}, {0x64, 0xE9}, {0x64, 0xEA}, /* 0x48-0x4B */ + {0x64, 0xEB}, {0x64, 0xEC}, {0x64, 0xED}, {0x64, 0xEE}, /* 0x4C-0x4F */ + {0x64, 0xEF}, {0x64, 0xF0}, {0x64, 0xF1}, {0x64, 0xF2}, /* 0x50-0x53 */ + {0x64, 0xF3}, {0x64, 0xF4}, {0x64, 0xF5}, {0x64, 0xF6}, /* 0x54-0x57 */ + {0x64, 0xF7}, {0x64, 0xF8}, {0x64, 0xF9}, {0x64, 0xFA}, /* 0x58-0x5B */ + {0x64, 0xFB}, {0x64, 0xFC}, {0x64, 0xFD}, {0x64, 0xFE}, /* 0x5C-0x5F */ + {0x64, 0xFF}, {0x65, 0x01}, {0x65, 0x02}, {0x65, 0x03}, /* 0x60-0x63 */ + {0x65, 0x04}, {0x65, 0x05}, {0x65, 0x06}, {0x65, 0x07}, /* 0x64-0x67 */ + {0x65, 0x08}, {0x65, 0x0A}, {0x65, 0x0B}, {0x65, 0x0C}, /* 0x68-0x6B */ + {0x65, 0x0D}, {0x65, 0x0E}, {0x65, 0x0F}, {0x65, 0x10}, /* 0x6C-0x6F */ + {0x65, 0x11}, {0x65, 0x13}, {0x65, 0x14}, {0x65, 0x15}, /* 0x70-0x73 */ + {0x65, 0x16}, {0x65, 0x17}, {0x65, 0x19}, {0x65, 0x1A}, /* 0x74-0x77 */ + {0x65, 0x1B}, {0x65, 0x1C}, {0x65, 0x1D}, {0x65, 0x1E}, /* 0x78-0x7B */ + {0x65, 0x1F}, {0x65, 0x20}, {0x65, 0x21}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x65, 0x22}, {0x65, 0x23}, {0x65, 0x24}, {0x65, 0x26}, /* 0x80-0x83 */ + {0x65, 0x27}, {0x65, 0x28}, {0x65, 0x29}, {0x65, 0x2A}, /* 0x84-0x87 */ + {0x65, 0x2C}, {0x65, 0x2D}, {0x65, 0x30}, {0x65, 0x31}, /* 0x88-0x8B */ + {0x65, 0x32}, {0x65, 0x33}, {0x65, 0x37}, {0x65, 0x3A}, /* 0x8C-0x8F */ + {0x65, 0x3C}, {0x65, 0x3D}, {0x65, 0x40}, {0x65, 0x41}, /* 0x90-0x93 */ + {0x65, 0x42}, {0x65, 0x43}, {0x65, 0x44}, {0x65, 0x46}, /* 0x94-0x97 */ + {0x65, 0x47}, {0x65, 0x4A}, {0x65, 0x4B}, {0x65, 0x4D}, /* 0x98-0x9B */ + {0x65, 0x4E}, {0x65, 0x50}, {0x65, 0x52}, {0x65, 0x53}, /* 0x9C-0x9F */ + {0x65, 0x54}, {0x65, 0x57}, {0x65, 0x58}, {0x65, 0x5A}, /* 0xA0-0xA3 */ + {0x65, 0x5C}, {0x65, 0x5F}, {0x65, 0x60}, {0x65, 0x61}, /* 0xA4-0xA7 */ + {0x65, 0x64}, {0x65, 0x65}, {0x65, 0x67}, {0x65, 0x68}, /* 0xA8-0xAB */ + {0x65, 0x69}, {0x65, 0x6A}, {0x65, 0x6D}, {0x65, 0x6E}, /* 0xAC-0xAF */ + {0x65, 0x6F}, {0x65, 0x71}, {0x65, 0x73}, {0x65, 0x75}, /* 0xB0-0xB3 */ + {0x65, 0x76}, {0x65, 0x78}, {0x65, 0x79}, {0x65, 0x7A}, /* 0xB4-0xB7 */ + {0x65, 0x7B}, {0x65, 0x7C}, {0x65, 0x7D}, {0x65, 0x7E}, /* 0xB8-0xBB */ + {0x65, 0x7F}, {0x65, 0x80}, {0x65, 0x81}, {0x65, 0x82}, /* 0xBC-0xBF */ + {0x65, 0x83}, {0x65, 0x84}, {0x65, 0x85}, {0x65, 0x86}, /* 0xC0-0xC3 */ + {0x65, 0x88}, {0x65, 0x89}, {0x65, 0x8A}, {0x65, 0x8D}, /* 0xC4-0xC7 */ + {0x65, 0x8E}, {0x65, 0x8F}, {0x65, 0x92}, {0x65, 0x94}, /* 0xC8-0xCB */ + {0x65, 0x95}, {0x65, 0x96}, {0x65, 0x98}, {0x65, 0x9A}, /* 0xCC-0xCF */ + {0x65, 0x9D}, {0x65, 0x9E}, {0x65, 0xA0}, {0x65, 0xA2}, /* 0xD0-0xD3 */ + {0x65, 0xA3}, {0x65, 0xA6}, {0x65, 0xA8}, {0x65, 0xAA}, /* 0xD4-0xD7 */ + {0x65, 0xAC}, {0x65, 0xAE}, {0x65, 0xB1}, {0x65, 0xB2}, /* 0xD8-0xDB */ + {0x65, 0xB3}, {0x65, 0xB4}, {0x65, 0xB5}, {0x65, 0xB6}, /* 0xDC-0xDF */ + {0x65, 0xB7}, {0x65, 0xB8}, {0x65, 0xBA}, {0x65, 0xBB}, /* 0xE0-0xE3 */ + {0x65, 0xBE}, {0x65, 0xBF}, {0x65, 0xC0}, {0x65, 0xC2}, /* 0xE4-0xE7 */ + {0x65, 0xC7}, {0x65, 0xC8}, {0x65, 0xC9}, {0x65, 0xCA}, /* 0xE8-0xEB */ + {0x65, 0xCD}, {0x65, 0xD0}, {0x65, 0xD1}, {0x65, 0xD3}, /* 0xEC-0xEF */ + {0x65, 0xD4}, {0x65, 0xD5}, {0x65, 0xD8}, {0x65, 0xD9}, /* 0xF0-0xF3 */ + {0x65, 0xDA}, {0x65, 0xDB}, {0x65, 0xDC}, {0x65, 0xDD}, /* 0xF4-0xF7 */ + {0x65, 0xDE}, {0x65, 0xDF}, {0x65, 0xE1}, {0x65, 0xE3}, /* 0xF8-0xFB */ + {0x65, 0xE4}, {0x65, 0xEA}, {0x65, 0xEB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_95[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x65, 0xF2}, {0x65, 0xF3}, {0x65, 0xF4}, {0x65, 0xF5}, /* 0x40-0x43 */ + {0x65, 0xF8}, {0x65, 0xF9}, {0x65, 0xFB}, {0x65, 0xFC}, /* 0x44-0x47 */ + {0x65, 0xFD}, {0x65, 0xFE}, {0x65, 0xFF}, {0x66, 0x01}, /* 0x48-0x4B */ + {0x66, 0x04}, {0x66, 0x05}, {0x66, 0x07}, {0x66, 0x08}, /* 0x4C-0x4F */ + {0x66, 0x09}, {0x66, 0x0B}, {0x66, 0x0D}, {0x66, 0x10}, /* 0x50-0x53 */ + {0x66, 0x11}, {0x66, 0x12}, {0x66, 0x16}, {0x66, 0x17}, /* 0x54-0x57 */ + {0x66, 0x18}, {0x66, 0x1A}, {0x66, 0x1B}, {0x66, 0x1C}, /* 0x58-0x5B */ + {0x66, 0x1E}, {0x66, 0x21}, {0x66, 0x22}, {0x66, 0x23}, /* 0x5C-0x5F */ + {0x66, 0x24}, {0x66, 0x26}, {0x66, 0x29}, {0x66, 0x2A}, /* 0x60-0x63 */ + {0x66, 0x2B}, {0x66, 0x2C}, {0x66, 0x2E}, {0x66, 0x30}, /* 0x64-0x67 */ + {0x66, 0x32}, {0x66, 0x33}, {0x66, 0x37}, {0x66, 0x38}, /* 0x68-0x6B */ + {0x66, 0x39}, {0x66, 0x3A}, {0x66, 0x3B}, {0x66, 0x3D}, /* 0x6C-0x6F */ + {0x66, 0x3F}, {0x66, 0x40}, {0x66, 0x42}, {0x66, 0x44}, /* 0x70-0x73 */ + {0x66, 0x45}, {0x66, 0x46}, {0x66, 0x47}, {0x66, 0x48}, /* 0x74-0x77 */ + {0x66, 0x49}, {0x66, 0x4A}, {0x66, 0x4D}, {0x66, 0x4E}, /* 0x78-0x7B */ + {0x66, 0x50}, {0x66, 0x51}, {0x66, 0x58}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x66, 0x59}, {0x66, 0x5B}, {0x66, 0x5C}, {0x66, 0x5D}, /* 0x80-0x83 */ + {0x66, 0x5E}, {0x66, 0x60}, {0x66, 0x62}, {0x66, 0x63}, /* 0x84-0x87 */ + {0x66, 0x65}, {0x66, 0x67}, {0x66, 0x69}, {0x66, 0x6A}, /* 0x88-0x8B */ + {0x66, 0x6B}, {0x66, 0x6C}, {0x66, 0x6D}, {0x66, 0x71}, /* 0x8C-0x8F */ + {0x66, 0x72}, {0x66, 0x73}, {0x66, 0x75}, {0x66, 0x78}, /* 0x90-0x93 */ + {0x66, 0x79}, {0x66, 0x7B}, {0x66, 0x7C}, {0x66, 0x7D}, /* 0x94-0x97 */ + {0x66, 0x7F}, {0x66, 0x80}, {0x66, 0x81}, {0x66, 0x83}, /* 0x98-0x9B */ + {0x66, 0x85}, {0x66, 0x86}, {0x66, 0x88}, {0x66, 0x89}, /* 0x9C-0x9F */ + {0x66, 0x8A}, {0x66, 0x8B}, {0x66, 0x8D}, {0x66, 0x8E}, /* 0xA0-0xA3 */ + {0x66, 0x8F}, {0x66, 0x90}, {0x66, 0x92}, {0x66, 0x93}, /* 0xA4-0xA7 */ + {0x66, 0x94}, {0x66, 0x95}, {0x66, 0x98}, {0x66, 0x99}, /* 0xA8-0xAB */ + {0x66, 0x9A}, {0x66, 0x9B}, {0x66, 0x9C}, {0x66, 0x9E}, /* 0xAC-0xAF */ + {0x66, 0x9F}, {0x66, 0xA0}, {0x66, 0xA1}, {0x66, 0xA2}, /* 0xB0-0xB3 */ + {0x66, 0xA3}, {0x66, 0xA4}, {0x66, 0xA5}, {0x66, 0xA6}, /* 0xB4-0xB7 */ + {0x66, 0xA9}, {0x66, 0xAA}, {0x66, 0xAB}, {0x66, 0xAC}, /* 0xB8-0xBB */ + {0x66, 0xAD}, {0x66, 0xAF}, {0x66, 0xB0}, {0x66, 0xB1}, /* 0xBC-0xBF */ + {0x66, 0xB2}, {0x66, 0xB3}, {0x66, 0xB5}, {0x66, 0xB6}, /* 0xC0-0xC3 */ + {0x66, 0xB7}, {0x66, 0xB8}, {0x66, 0xBA}, {0x66, 0xBB}, /* 0xC4-0xC7 */ + {0x66, 0xBC}, {0x66, 0xBD}, {0x66, 0xBF}, {0x66, 0xC0}, /* 0xC8-0xCB */ + {0x66, 0xC1}, {0x66, 0xC2}, {0x66, 0xC3}, {0x66, 0xC4}, /* 0xCC-0xCF */ + {0x66, 0xC5}, {0x66, 0xC6}, {0x66, 0xC7}, {0x66, 0xC8}, /* 0xD0-0xD3 */ + {0x66, 0xC9}, {0x66, 0xCA}, {0x66, 0xCB}, {0x66, 0xCC}, /* 0xD4-0xD7 */ + {0x66, 0xCD}, {0x66, 0xCE}, {0x66, 0xCF}, {0x66, 0xD0}, /* 0xD8-0xDB */ + {0x66, 0xD1}, {0x66, 0xD2}, {0x66, 0xD3}, {0x66, 0xD4}, /* 0xDC-0xDF */ + {0x66, 0xD5}, {0x66, 0xD6}, {0x66, 0xD7}, {0x66, 0xD8}, /* 0xE0-0xE3 */ + {0x66, 0xDA}, {0x66, 0xDE}, {0x66, 0xDF}, {0x66, 0xE0}, /* 0xE4-0xE7 */ + {0x66, 0xE1}, {0x66, 0xE2}, {0x66, 0xE3}, {0x66, 0xE4}, /* 0xE8-0xEB */ + {0x66, 0xE5}, {0x66, 0xE7}, {0x66, 0xE8}, {0x66, 0xEA}, /* 0xEC-0xEF */ + {0x66, 0xEB}, {0x66, 0xEC}, {0x66, 0xED}, {0x66, 0xEE}, /* 0xF0-0xF3 */ + {0x66, 0xEF}, {0x66, 0xF1}, {0x66, 0xF5}, {0x66, 0xF6}, /* 0xF4-0xF7 */ + {0x66, 0xF8}, {0x66, 0xFA}, {0x66, 0xFB}, {0x66, 0xFD}, /* 0xF8-0xFB */ + {0x67, 0x01}, {0x67, 0x02}, {0x67, 0x03}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_96[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x67, 0x04}, {0x67, 0x05}, {0x67, 0x06}, {0x67, 0x07}, /* 0x40-0x43 */ + {0x67, 0x0C}, {0x67, 0x0E}, {0x67, 0x0F}, {0x67, 0x11}, /* 0x44-0x47 */ + {0x67, 0x12}, {0x67, 0x13}, {0x67, 0x16}, {0x67, 0x18}, /* 0x48-0x4B */ + {0x67, 0x19}, {0x67, 0x1A}, {0x67, 0x1C}, {0x67, 0x1E}, /* 0x4C-0x4F */ + {0x67, 0x20}, {0x67, 0x21}, {0x67, 0x22}, {0x67, 0x23}, /* 0x50-0x53 */ + {0x67, 0x24}, {0x67, 0x25}, {0x67, 0x27}, {0x67, 0x29}, /* 0x54-0x57 */ + {0x67, 0x2E}, {0x67, 0x30}, {0x67, 0x32}, {0x67, 0x33}, /* 0x58-0x5B */ + {0x67, 0x36}, {0x67, 0x37}, {0x67, 0x38}, {0x67, 0x39}, /* 0x5C-0x5F */ + {0x67, 0x3B}, {0x67, 0x3C}, {0x67, 0x3E}, {0x67, 0x3F}, /* 0x60-0x63 */ + {0x67, 0x41}, {0x67, 0x44}, {0x67, 0x45}, {0x67, 0x47}, /* 0x64-0x67 */ + {0x67, 0x4A}, {0x67, 0x4B}, {0x67, 0x4D}, {0x67, 0x52}, /* 0x68-0x6B */ + {0x67, 0x54}, {0x67, 0x55}, {0x67, 0x57}, {0x67, 0x58}, /* 0x6C-0x6F */ + {0x67, 0x59}, {0x67, 0x5A}, {0x67, 0x5B}, {0x67, 0x5D}, /* 0x70-0x73 */ + {0x67, 0x62}, {0x67, 0x63}, {0x67, 0x64}, {0x67, 0x66}, /* 0x74-0x77 */ + {0x67, 0x67}, {0x67, 0x6B}, {0x67, 0x6C}, {0x67, 0x6E}, /* 0x78-0x7B */ + {0x67, 0x71}, {0x67, 0x74}, {0x67, 0x76}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x67, 0x78}, {0x67, 0x79}, {0x67, 0x7A}, {0x67, 0x7B}, /* 0x80-0x83 */ + {0x67, 0x7D}, {0x67, 0x80}, {0x67, 0x82}, {0x67, 0x83}, /* 0x84-0x87 */ + {0x67, 0x85}, {0x67, 0x86}, {0x67, 0x88}, {0x67, 0x8A}, /* 0x88-0x8B */ + {0x67, 0x8C}, {0x67, 0x8D}, {0x67, 0x8E}, {0x67, 0x8F}, /* 0x8C-0x8F */ + {0x67, 0x91}, {0x67, 0x92}, {0x67, 0x93}, {0x67, 0x94}, /* 0x90-0x93 */ + {0x67, 0x96}, {0x67, 0x99}, {0x67, 0x9B}, {0x67, 0x9F}, /* 0x94-0x97 */ + {0x67, 0xA0}, {0x67, 0xA1}, {0x67, 0xA4}, {0x67, 0xA6}, /* 0x98-0x9B */ + {0x67, 0xA9}, {0x67, 0xAC}, {0x67, 0xAE}, {0x67, 0xB1}, /* 0x9C-0x9F */ + {0x67, 0xB2}, {0x67, 0xB4}, {0x67, 0xB9}, {0x67, 0xBA}, /* 0xA0-0xA3 */ + {0x67, 0xBB}, {0x67, 0xBC}, {0x67, 0xBD}, {0x67, 0xBE}, /* 0xA4-0xA7 */ + {0x67, 0xBF}, {0x67, 0xC0}, {0x67, 0xC2}, {0x67, 0xC5}, /* 0xA8-0xAB */ + {0x67, 0xC6}, {0x67, 0xC7}, {0x67, 0xC8}, {0x67, 0xC9}, /* 0xAC-0xAF */ + {0x67, 0xCA}, {0x67, 0xCB}, {0x67, 0xCC}, {0x67, 0xCD}, /* 0xB0-0xB3 */ + {0x67, 0xCE}, {0x67, 0xD5}, {0x67, 0xD6}, {0x67, 0xD7}, /* 0xB4-0xB7 */ + {0x67, 0xDB}, {0x67, 0xDF}, {0x67, 0xE1}, {0x67, 0xE3}, /* 0xB8-0xBB */ + {0x67, 0xE4}, {0x67, 0xE6}, {0x67, 0xE7}, {0x67, 0xE8}, /* 0xBC-0xBF */ + {0x67, 0xEA}, {0x67, 0xEB}, {0x67, 0xED}, {0x67, 0xEE}, /* 0xC0-0xC3 */ + {0x67, 0xF2}, {0x67, 0xF5}, {0x67, 0xF6}, {0x67, 0xF7}, /* 0xC4-0xC7 */ + {0x67, 0xF8}, {0x67, 0xF9}, {0x67, 0xFA}, {0x67, 0xFB}, /* 0xC8-0xCB */ + {0x67, 0xFC}, {0x67, 0xFE}, {0x68, 0x01}, {0x68, 0x02}, /* 0xCC-0xCF */ + {0x68, 0x03}, {0x68, 0x04}, {0x68, 0x06}, {0x68, 0x0D}, /* 0xD0-0xD3 */ + {0x68, 0x10}, {0x68, 0x12}, {0x68, 0x14}, {0x68, 0x15}, /* 0xD4-0xD7 */ + {0x68, 0x18}, {0x68, 0x19}, {0x68, 0x1A}, {0x68, 0x1B}, /* 0xD8-0xDB */ + {0x68, 0x1C}, {0x68, 0x1E}, {0x68, 0x1F}, {0x68, 0x20}, /* 0xDC-0xDF */ + {0x68, 0x22}, {0x68, 0x23}, {0x68, 0x24}, {0x68, 0x25}, /* 0xE0-0xE3 */ + {0x68, 0x26}, {0x68, 0x27}, {0x68, 0x28}, {0x68, 0x2B}, /* 0xE4-0xE7 */ + {0x68, 0x2C}, {0x68, 0x2D}, {0x68, 0x2E}, {0x68, 0x2F}, /* 0xE8-0xEB */ + {0x68, 0x30}, {0x68, 0x31}, {0x68, 0x34}, {0x68, 0x35}, /* 0xEC-0xEF */ + {0x68, 0x36}, {0x68, 0x3A}, {0x68, 0x3B}, {0x68, 0x3F}, /* 0xF0-0xF3 */ + {0x68, 0x47}, {0x68, 0x4B}, {0x68, 0x4D}, {0x68, 0x4F}, /* 0xF4-0xF7 */ + {0x68, 0x52}, {0x68, 0x56}, {0x68, 0x57}, {0x68, 0x58}, /* 0xF8-0xFB */ + {0x68, 0x59}, {0x68, 0x5A}, {0x68, 0x5B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_97[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x68, 0x5C}, {0x68, 0x5D}, {0x68, 0x5E}, {0x68, 0x5F}, /* 0x40-0x43 */ + {0x68, 0x6A}, {0x68, 0x6C}, {0x68, 0x6D}, {0x68, 0x6E}, /* 0x44-0x47 */ + {0x68, 0x6F}, {0x68, 0x70}, {0x68, 0x71}, {0x68, 0x72}, /* 0x48-0x4B */ + {0x68, 0x73}, {0x68, 0x75}, {0x68, 0x78}, {0x68, 0x79}, /* 0x4C-0x4F */ + {0x68, 0x7A}, {0x68, 0x7B}, {0x68, 0x7C}, {0x68, 0x7D}, /* 0x50-0x53 */ + {0x68, 0x7E}, {0x68, 0x7F}, {0x68, 0x80}, {0x68, 0x82}, /* 0x54-0x57 */ + {0x68, 0x84}, {0x68, 0x87}, {0x68, 0x88}, {0x68, 0x89}, /* 0x58-0x5B */ + {0x68, 0x8A}, {0x68, 0x8B}, {0x68, 0x8C}, {0x68, 0x8D}, /* 0x5C-0x5F */ + {0x68, 0x8E}, {0x68, 0x90}, {0x68, 0x91}, {0x68, 0x92}, /* 0x60-0x63 */ + {0x68, 0x94}, {0x68, 0x95}, {0x68, 0x96}, {0x68, 0x98}, /* 0x64-0x67 */ + {0x68, 0x99}, {0x68, 0x9A}, {0x68, 0x9B}, {0x68, 0x9C}, /* 0x68-0x6B */ + {0x68, 0x9D}, {0x68, 0x9E}, {0x68, 0x9F}, {0x68, 0xA0}, /* 0x6C-0x6F */ + {0x68, 0xA1}, {0x68, 0xA3}, {0x68, 0xA4}, {0x68, 0xA5}, /* 0x70-0x73 */ + {0x68, 0xA9}, {0x68, 0xAA}, {0x68, 0xAB}, {0x68, 0xAC}, /* 0x74-0x77 */ + {0x68, 0xAE}, {0x68, 0xB1}, {0x68, 0xB2}, {0x68, 0xB4}, /* 0x78-0x7B */ + {0x68, 0xB6}, {0x68, 0xB7}, {0x68, 0xB8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x68, 0xB9}, {0x68, 0xBA}, {0x68, 0xBB}, {0x68, 0xBC}, /* 0x80-0x83 */ + {0x68, 0xBD}, {0x68, 0xBE}, {0x68, 0xBF}, {0x68, 0xC1}, /* 0x84-0x87 */ + {0x68, 0xC3}, {0x68, 0xC4}, {0x68, 0xC5}, {0x68, 0xC6}, /* 0x88-0x8B */ + {0x68, 0xC7}, {0x68, 0xC8}, {0x68, 0xCA}, {0x68, 0xCC}, /* 0x8C-0x8F */ + {0x68, 0xCE}, {0x68, 0xCF}, {0x68, 0xD0}, {0x68, 0xD1}, /* 0x90-0x93 */ + {0x68, 0xD3}, {0x68, 0xD4}, {0x68, 0xD6}, {0x68, 0xD7}, /* 0x94-0x97 */ + {0x68, 0xD9}, {0x68, 0xDB}, {0x68, 0xDC}, {0x68, 0xDD}, /* 0x98-0x9B */ + {0x68, 0xDE}, {0x68, 0xDF}, {0x68, 0xE1}, {0x68, 0xE2}, /* 0x9C-0x9F */ + {0x68, 0xE4}, {0x68, 0xE5}, {0x68, 0xE6}, {0x68, 0xE7}, /* 0xA0-0xA3 */ + {0x68, 0xE8}, {0x68, 0xE9}, {0x68, 0xEA}, {0x68, 0xEB}, /* 0xA4-0xA7 */ + {0x68, 0xEC}, {0x68, 0xED}, {0x68, 0xEF}, {0x68, 0xF2}, /* 0xA8-0xAB */ + {0x68, 0xF3}, {0x68, 0xF4}, {0x68, 0xF6}, {0x68, 0xF7}, /* 0xAC-0xAF */ + {0x68, 0xF8}, {0x68, 0xFB}, {0x68, 0xFD}, {0x68, 0xFE}, /* 0xB0-0xB3 */ + {0x68, 0xFF}, {0x69, 0x00}, {0x69, 0x02}, {0x69, 0x03}, /* 0xB4-0xB7 */ + {0x69, 0x04}, {0x69, 0x06}, {0x69, 0x07}, {0x69, 0x08}, /* 0xB8-0xBB */ + {0x69, 0x09}, {0x69, 0x0A}, {0x69, 0x0C}, {0x69, 0x0F}, /* 0xBC-0xBF */ + {0x69, 0x11}, {0x69, 0x13}, {0x69, 0x14}, {0x69, 0x15}, /* 0xC0-0xC3 */ + {0x69, 0x16}, {0x69, 0x17}, {0x69, 0x18}, {0x69, 0x19}, /* 0xC4-0xC7 */ + {0x69, 0x1A}, {0x69, 0x1B}, {0x69, 0x1C}, {0x69, 0x1D}, /* 0xC8-0xCB */ + {0x69, 0x1E}, {0x69, 0x21}, {0x69, 0x22}, {0x69, 0x23}, /* 0xCC-0xCF */ + {0x69, 0x25}, {0x69, 0x26}, {0x69, 0x27}, {0x69, 0x28}, /* 0xD0-0xD3 */ + {0x69, 0x29}, {0x69, 0x2A}, {0x69, 0x2B}, {0x69, 0x2C}, /* 0xD4-0xD7 */ + {0x69, 0x2E}, {0x69, 0x2F}, {0x69, 0x31}, {0x69, 0x32}, /* 0xD8-0xDB */ + {0x69, 0x33}, {0x69, 0x35}, {0x69, 0x36}, {0x69, 0x37}, /* 0xDC-0xDF */ + {0x69, 0x38}, {0x69, 0x3A}, {0x69, 0x3B}, {0x69, 0x3C}, /* 0xE0-0xE3 */ + {0x69, 0x3E}, {0x69, 0x40}, {0x69, 0x41}, {0x69, 0x43}, /* 0xE4-0xE7 */ + {0x69, 0x44}, {0x69, 0x45}, {0x69, 0x46}, {0x69, 0x47}, /* 0xE8-0xEB */ + {0x69, 0x48}, {0x69, 0x49}, {0x69, 0x4A}, {0x69, 0x4B}, /* 0xEC-0xEF */ + {0x69, 0x4C}, {0x69, 0x4D}, {0x69, 0x4E}, {0x69, 0x4F}, /* 0xF0-0xF3 */ + {0x69, 0x50}, {0x69, 0x51}, {0x69, 0x52}, {0x69, 0x53}, /* 0xF4-0xF7 */ + {0x69, 0x55}, {0x69, 0x56}, {0x69, 0x58}, {0x69, 0x59}, /* 0xF8-0xFB */ + {0x69, 0x5B}, {0x69, 0x5C}, {0x69, 0x5F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_98[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x69, 0x61}, {0x69, 0x62}, {0x69, 0x64}, {0x69, 0x65}, /* 0x40-0x43 */ + {0x69, 0x67}, {0x69, 0x68}, {0x69, 0x69}, {0x69, 0x6A}, /* 0x44-0x47 */ + {0x69, 0x6C}, {0x69, 0x6D}, {0x69, 0x6F}, {0x69, 0x70}, /* 0x48-0x4B */ + {0x69, 0x72}, {0x69, 0x73}, {0x69, 0x74}, {0x69, 0x75}, /* 0x4C-0x4F */ + {0x69, 0x76}, {0x69, 0x7A}, {0x69, 0x7B}, {0x69, 0x7D}, /* 0x50-0x53 */ + {0x69, 0x7E}, {0x69, 0x7F}, {0x69, 0x81}, {0x69, 0x83}, /* 0x54-0x57 */ + {0x69, 0x85}, {0x69, 0x8A}, {0x69, 0x8B}, {0x69, 0x8C}, /* 0x58-0x5B */ + {0x69, 0x8E}, {0x69, 0x8F}, {0x69, 0x90}, {0x69, 0x91}, /* 0x5C-0x5F */ + {0x69, 0x92}, {0x69, 0x93}, {0x69, 0x96}, {0x69, 0x97}, /* 0x60-0x63 */ + {0x69, 0x99}, {0x69, 0x9A}, {0x69, 0x9D}, {0x69, 0x9E}, /* 0x64-0x67 */ + {0x69, 0x9F}, {0x69, 0xA0}, {0x69, 0xA1}, {0x69, 0xA2}, /* 0x68-0x6B */ + {0x69, 0xA3}, {0x69, 0xA4}, {0x69, 0xA5}, {0x69, 0xA6}, /* 0x6C-0x6F */ + {0x69, 0xA9}, {0x69, 0xAA}, {0x69, 0xAC}, {0x69, 0xAE}, /* 0x70-0x73 */ + {0x69, 0xAF}, {0x69, 0xB0}, {0x69, 0xB2}, {0x69, 0xB3}, /* 0x74-0x77 */ + {0x69, 0xB5}, {0x69, 0xB6}, {0x69, 0xB8}, {0x69, 0xB9}, /* 0x78-0x7B */ + {0x69, 0xBA}, {0x69, 0xBC}, {0x69, 0xBD}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x69, 0xBE}, {0x69, 0xBF}, {0x69, 0xC0}, {0x69, 0xC2}, /* 0x80-0x83 */ + {0x69, 0xC3}, {0x69, 0xC4}, {0x69, 0xC5}, {0x69, 0xC6}, /* 0x84-0x87 */ + {0x69, 0xC7}, {0x69, 0xC8}, {0x69, 0xC9}, {0x69, 0xCB}, /* 0x88-0x8B */ + {0x69, 0xCD}, {0x69, 0xCF}, {0x69, 0xD1}, {0x69, 0xD2}, /* 0x8C-0x8F */ + {0x69, 0xD3}, {0x69, 0xD5}, {0x69, 0xD6}, {0x69, 0xD7}, /* 0x90-0x93 */ + {0x69, 0xD8}, {0x69, 0xD9}, {0x69, 0xDA}, {0x69, 0xDC}, /* 0x94-0x97 */ + {0x69, 0xDD}, {0x69, 0xDE}, {0x69, 0xE1}, {0x69, 0xE2}, /* 0x98-0x9B */ + {0x69, 0xE3}, {0x69, 0xE4}, {0x69, 0xE5}, {0x69, 0xE6}, /* 0x9C-0x9F */ + {0x69, 0xE7}, {0x69, 0xE8}, {0x69, 0xE9}, {0x69, 0xEA}, /* 0xA0-0xA3 */ + {0x69, 0xEB}, {0x69, 0xEC}, {0x69, 0xEE}, {0x69, 0xEF}, /* 0xA4-0xA7 */ + {0x69, 0xF0}, {0x69, 0xF1}, {0x69, 0xF3}, {0x69, 0xF4}, /* 0xA8-0xAB */ + {0x69, 0xF5}, {0x69, 0xF6}, {0x69, 0xF7}, {0x69, 0xF8}, /* 0xAC-0xAF */ + {0x69, 0xF9}, {0x69, 0xFA}, {0x69, 0xFB}, {0x69, 0xFC}, /* 0xB0-0xB3 */ + {0x69, 0xFE}, {0x6A, 0x00}, {0x6A, 0x01}, {0x6A, 0x02}, /* 0xB4-0xB7 */ + {0x6A, 0x03}, {0x6A, 0x04}, {0x6A, 0x05}, {0x6A, 0x06}, /* 0xB8-0xBB */ + {0x6A, 0x07}, {0x6A, 0x08}, {0x6A, 0x09}, {0x6A, 0x0B}, /* 0xBC-0xBF */ + {0x6A, 0x0C}, {0x6A, 0x0D}, {0x6A, 0x0E}, {0x6A, 0x0F}, /* 0xC0-0xC3 */ + {0x6A, 0x10}, {0x6A, 0x11}, {0x6A, 0x12}, {0x6A, 0x13}, /* 0xC4-0xC7 */ + {0x6A, 0x14}, {0x6A, 0x15}, {0x6A, 0x16}, {0x6A, 0x19}, /* 0xC8-0xCB */ + {0x6A, 0x1A}, {0x6A, 0x1B}, {0x6A, 0x1C}, {0x6A, 0x1D}, /* 0xCC-0xCF */ + {0x6A, 0x1E}, {0x6A, 0x20}, {0x6A, 0x22}, {0x6A, 0x23}, /* 0xD0-0xD3 */ + {0x6A, 0x24}, {0x6A, 0x25}, {0x6A, 0x26}, {0x6A, 0x27}, /* 0xD4-0xD7 */ + {0x6A, 0x29}, {0x6A, 0x2B}, {0x6A, 0x2C}, {0x6A, 0x2D}, /* 0xD8-0xDB */ + {0x6A, 0x2E}, {0x6A, 0x30}, {0x6A, 0x32}, {0x6A, 0x33}, /* 0xDC-0xDF */ + {0x6A, 0x34}, {0x6A, 0x36}, {0x6A, 0x37}, {0x6A, 0x38}, /* 0xE0-0xE3 */ + {0x6A, 0x39}, {0x6A, 0x3A}, {0x6A, 0x3B}, {0x6A, 0x3C}, /* 0xE4-0xE7 */ + {0x6A, 0x3F}, {0x6A, 0x40}, {0x6A, 0x41}, {0x6A, 0x42}, /* 0xE8-0xEB */ + {0x6A, 0x43}, {0x6A, 0x45}, {0x6A, 0x46}, {0x6A, 0x48}, /* 0xEC-0xEF */ + {0x6A, 0x49}, {0x6A, 0x4A}, {0x6A, 0x4B}, {0x6A, 0x4C}, /* 0xF0-0xF3 */ + {0x6A, 0x4D}, {0x6A, 0x4E}, {0x6A, 0x4F}, {0x6A, 0x51}, /* 0xF4-0xF7 */ + {0x6A, 0x52}, {0x6A, 0x53}, {0x6A, 0x54}, {0x6A, 0x55}, /* 0xF8-0xFB */ + {0x6A, 0x56}, {0x6A, 0x57}, {0x6A, 0x5A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_99[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6A, 0x5C}, {0x6A, 0x5D}, {0x6A, 0x5E}, {0x6A, 0x5F}, /* 0x40-0x43 */ + {0x6A, 0x60}, {0x6A, 0x62}, {0x6A, 0x63}, {0x6A, 0x64}, /* 0x44-0x47 */ + {0x6A, 0x66}, {0x6A, 0x67}, {0x6A, 0x68}, {0x6A, 0x69}, /* 0x48-0x4B */ + {0x6A, 0x6A}, {0x6A, 0x6B}, {0x6A, 0x6C}, {0x6A, 0x6D}, /* 0x4C-0x4F */ + {0x6A, 0x6E}, {0x6A, 0x6F}, {0x6A, 0x70}, {0x6A, 0x72}, /* 0x50-0x53 */ + {0x6A, 0x73}, {0x6A, 0x74}, {0x6A, 0x75}, {0x6A, 0x76}, /* 0x54-0x57 */ + {0x6A, 0x77}, {0x6A, 0x78}, {0x6A, 0x7A}, {0x6A, 0x7B}, /* 0x58-0x5B */ + {0x6A, 0x7D}, {0x6A, 0x7E}, {0x6A, 0x7F}, {0x6A, 0x81}, /* 0x5C-0x5F */ + {0x6A, 0x82}, {0x6A, 0x83}, {0x6A, 0x85}, {0x6A, 0x86}, /* 0x60-0x63 */ + {0x6A, 0x87}, {0x6A, 0x88}, {0x6A, 0x89}, {0x6A, 0x8A}, /* 0x64-0x67 */ + {0x6A, 0x8B}, {0x6A, 0x8C}, {0x6A, 0x8D}, {0x6A, 0x8F}, /* 0x68-0x6B */ + {0x6A, 0x92}, {0x6A, 0x93}, {0x6A, 0x94}, {0x6A, 0x95}, /* 0x6C-0x6F */ + {0x6A, 0x96}, {0x6A, 0x98}, {0x6A, 0x99}, {0x6A, 0x9A}, /* 0x70-0x73 */ + {0x6A, 0x9B}, {0x6A, 0x9C}, {0x6A, 0x9D}, {0x6A, 0x9E}, /* 0x74-0x77 */ + {0x6A, 0x9F}, {0x6A, 0xA1}, {0x6A, 0xA2}, {0x6A, 0xA3}, /* 0x78-0x7B */ + {0x6A, 0xA4}, {0x6A, 0xA5}, {0x6A, 0xA6}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6A, 0xA7}, {0x6A, 0xA8}, {0x6A, 0xAA}, {0x6A, 0xAD}, /* 0x80-0x83 */ + {0x6A, 0xAE}, {0x6A, 0xAF}, {0x6A, 0xB0}, {0x6A, 0xB1}, /* 0x84-0x87 */ + {0x6A, 0xB2}, {0x6A, 0xB3}, {0x6A, 0xB4}, {0x6A, 0xB5}, /* 0x88-0x8B */ + {0x6A, 0xB6}, {0x6A, 0xB7}, {0x6A, 0xB8}, {0x6A, 0xB9}, /* 0x8C-0x8F */ + {0x6A, 0xBA}, {0x6A, 0xBB}, {0x6A, 0xBC}, {0x6A, 0xBD}, /* 0x90-0x93 */ + {0x6A, 0xBE}, {0x6A, 0xBF}, {0x6A, 0xC0}, {0x6A, 0xC1}, /* 0x94-0x97 */ + {0x6A, 0xC2}, {0x6A, 0xC3}, {0x6A, 0xC4}, {0x6A, 0xC5}, /* 0x98-0x9B */ + {0x6A, 0xC6}, {0x6A, 0xC7}, {0x6A, 0xC8}, {0x6A, 0xC9}, /* 0x9C-0x9F */ + {0x6A, 0xCA}, {0x6A, 0xCB}, {0x6A, 0xCC}, {0x6A, 0xCD}, /* 0xA0-0xA3 */ + {0x6A, 0xCE}, {0x6A, 0xCF}, {0x6A, 0xD0}, {0x6A, 0xD1}, /* 0xA4-0xA7 */ + {0x6A, 0xD2}, {0x6A, 0xD3}, {0x6A, 0xD4}, {0x6A, 0xD5}, /* 0xA8-0xAB */ + {0x6A, 0xD6}, {0x6A, 0xD7}, {0x6A, 0xD8}, {0x6A, 0xD9}, /* 0xAC-0xAF */ + {0x6A, 0xDA}, {0x6A, 0xDB}, {0x6A, 0xDC}, {0x6A, 0xDD}, /* 0xB0-0xB3 */ + {0x6A, 0xDE}, {0x6A, 0xDF}, {0x6A, 0xE0}, {0x6A, 0xE1}, /* 0xB4-0xB7 */ + {0x6A, 0xE2}, {0x6A, 0xE3}, {0x6A, 0xE4}, {0x6A, 0xE5}, /* 0xB8-0xBB */ + {0x6A, 0xE6}, {0x6A, 0xE7}, {0x6A, 0xE8}, {0x6A, 0xE9}, /* 0xBC-0xBF */ + {0x6A, 0xEA}, {0x6A, 0xEB}, {0x6A, 0xEC}, {0x6A, 0xED}, /* 0xC0-0xC3 */ + {0x6A, 0xEE}, {0x6A, 0xEF}, {0x6A, 0xF0}, {0x6A, 0xF1}, /* 0xC4-0xC7 */ + {0x6A, 0xF2}, {0x6A, 0xF3}, {0x6A, 0xF4}, {0x6A, 0xF5}, /* 0xC8-0xCB */ + {0x6A, 0xF6}, {0x6A, 0xF7}, {0x6A, 0xF8}, {0x6A, 0xF9}, /* 0xCC-0xCF */ + {0x6A, 0xFA}, {0x6A, 0xFB}, {0x6A, 0xFC}, {0x6A, 0xFD}, /* 0xD0-0xD3 */ + {0x6A, 0xFE}, {0x6A, 0xFF}, {0x6B, 0x00}, {0x6B, 0x01}, /* 0xD4-0xD7 */ + {0x6B, 0x02}, {0x6B, 0x03}, {0x6B, 0x04}, {0x6B, 0x05}, /* 0xD8-0xDB */ + {0x6B, 0x06}, {0x6B, 0x07}, {0x6B, 0x08}, {0x6B, 0x09}, /* 0xDC-0xDF */ + {0x6B, 0x0A}, {0x6B, 0x0B}, {0x6B, 0x0C}, {0x6B, 0x0D}, /* 0xE0-0xE3 */ + {0x6B, 0x0E}, {0x6B, 0x0F}, {0x6B, 0x10}, {0x6B, 0x11}, /* 0xE4-0xE7 */ + {0x6B, 0x12}, {0x6B, 0x13}, {0x6B, 0x14}, {0x6B, 0x15}, /* 0xE8-0xEB */ + {0x6B, 0x16}, {0x6B, 0x17}, {0x6B, 0x18}, {0x6B, 0x19}, /* 0xEC-0xEF */ + {0x6B, 0x1A}, {0x6B, 0x1B}, {0x6B, 0x1C}, {0x6B, 0x1D}, /* 0xF0-0xF3 */ + {0x6B, 0x1E}, {0x6B, 0x1F}, {0x6B, 0x25}, {0x6B, 0x26}, /* 0xF4-0xF7 */ + {0x6B, 0x28}, {0x6B, 0x29}, {0x6B, 0x2A}, {0x6B, 0x2B}, /* 0xF8-0xFB */ + {0x6B, 0x2C}, {0x6B, 0x2D}, {0x6B, 0x2E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9A[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6B, 0x2F}, {0x6B, 0x30}, {0x6B, 0x31}, {0x6B, 0x33}, /* 0x40-0x43 */ + {0x6B, 0x34}, {0x6B, 0x35}, {0x6B, 0x36}, {0x6B, 0x38}, /* 0x44-0x47 */ + {0x6B, 0x3B}, {0x6B, 0x3C}, {0x6B, 0x3D}, {0x6B, 0x3F}, /* 0x48-0x4B */ + {0x6B, 0x40}, {0x6B, 0x41}, {0x6B, 0x42}, {0x6B, 0x44}, /* 0x4C-0x4F */ + {0x6B, 0x45}, {0x6B, 0x48}, {0x6B, 0x4A}, {0x6B, 0x4B}, /* 0x50-0x53 */ + {0x6B, 0x4D}, {0x6B, 0x4E}, {0x6B, 0x4F}, {0x6B, 0x50}, /* 0x54-0x57 */ + {0x6B, 0x51}, {0x6B, 0x52}, {0x6B, 0x53}, {0x6B, 0x54}, /* 0x58-0x5B */ + {0x6B, 0x55}, {0x6B, 0x56}, {0x6B, 0x57}, {0x6B, 0x58}, /* 0x5C-0x5F */ + {0x6B, 0x5A}, {0x6B, 0x5B}, {0x6B, 0x5C}, {0x6B, 0x5D}, /* 0x60-0x63 */ + {0x6B, 0x5E}, {0x6B, 0x5F}, {0x6B, 0x60}, {0x6B, 0x61}, /* 0x64-0x67 */ + {0x6B, 0x68}, {0x6B, 0x69}, {0x6B, 0x6B}, {0x6B, 0x6C}, /* 0x68-0x6B */ + {0x6B, 0x6D}, {0x6B, 0x6E}, {0x6B, 0x6F}, {0x6B, 0x70}, /* 0x6C-0x6F */ + {0x6B, 0x71}, {0x6B, 0x72}, {0x6B, 0x73}, {0x6B, 0x74}, /* 0x70-0x73 */ + {0x6B, 0x75}, {0x6B, 0x76}, {0x6B, 0x77}, {0x6B, 0x78}, /* 0x74-0x77 */ + {0x6B, 0x7A}, {0x6B, 0x7D}, {0x6B, 0x7E}, {0x6B, 0x7F}, /* 0x78-0x7B */ + {0x6B, 0x80}, {0x6B, 0x85}, {0x6B, 0x88}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6B, 0x8C}, {0x6B, 0x8E}, {0x6B, 0x8F}, {0x6B, 0x90}, /* 0x80-0x83 */ + {0x6B, 0x91}, {0x6B, 0x94}, {0x6B, 0x95}, {0x6B, 0x97}, /* 0x84-0x87 */ + {0x6B, 0x98}, {0x6B, 0x99}, {0x6B, 0x9C}, {0x6B, 0x9D}, /* 0x88-0x8B */ + {0x6B, 0x9E}, {0x6B, 0x9F}, {0x6B, 0xA0}, {0x6B, 0xA2}, /* 0x8C-0x8F */ + {0x6B, 0xA3}, {0x6B, 0xA4}, {0x6B, 0xA5}, {0x6B, 0xA6}, /* 0x90-0x93 */ + {0x6B, 0xA7}, {0x6B, 0xA8}, {0x6B, 0xA9}, {0x6B, 0xAB}, /* 0x94-0x97 */ + {0x6B, 0xAC}, {0x6B, 0xAD}, {0x6B, 0xAE}, {0x6B, 0xAF}, /* 0x98-0x9B */ + {0x6B, 0xB0}, {0x6B, 0xB1}, {0x6B, 0xB2}, {0x6B, 0xB6}, /* 0x9C-0x9F */ + {0x6B, 0xB8}, {0x6B, 0xB9}, {0x6B, 0xBA}, {0x6B, 0xBB}, /* 0xA0-0xA3 */ + {0x6B, 0xBC}, {0x6B, 0xBD}, {0x6B, 0xBE}, {0x6B, 0xC0}, /* 0xA4-0xA7 */ + {0x6B, 0xC3}, {0x6B, 0xC4}, {0x6B, 0xC6}, {0x6B, 0xC7}, /* 0xA8-0xAB */ + {0x6B, 0xC8}, {0x6B, 0xC9}, {0x6B, 0xCA}, {0x6B, 0xCC}, /* 0xAC-0xAF */ + {0x6B, 0xCE}, {0x6B, 0xD0}, {0x6B, 0xD1}, {0x6B, 0xD8}, /* 0xB0-0xB3 */ + {0x6B, 0xDA}, {0x6B, 0xDC}, {0x6B, 0xDD}, {0x6B, 0xDE}, /* 0xB4-0xB7 */ + {0x6B, 0xDF}, {0x6B, 0xE0}, {0x6B, 0xE2}, {0x6B, 0xE3}, /* 0xB8-0xBB */ + {0x6B, 0xE4}, {0x6B, 0xE5}, {0x6B, 0xE6}, {0x6B, 0xE7}, /* 0xBC-0xBF */ + {0x6B, 0xE8}, {0x6B, 0xE9}, {0x6B, 0xEC}, {0x6B, 0xED}, /* 0xC0-0xC3 */ + {0x6B, 0xEE}, {0x6B, 0xF0}, {0x6B, 0xF1}, {0x6B, 0xF2}, /* 0xC4-0xC7 */ + {0x6B, 0xF4}, {0x6B, 0xF6}, {0x6B, 0xF7}, {0x6B, 0xF8}, /* 0xC8-0xCB */ + {0x6B, 0xFA}, {0x6B, 0xFB}, {0x6B, 0xFC}, {0x6B, 0xFE}, /* 0xCC-0xCF */ + {0x6B, 0xFF}, {0x6C, 0x00}, {0x6C, 0x01}, {0x6C, 0x02}, /* 0xD0-0xD3 */ + {0x6C, 0x03}, {0x6C, 0x04}, {0x6C, 0x08}, {0x6C, 0x09}, /* 0xD4-0xD7 */ + {0x6C, 0x0A}, {0x6C, 0x0B}, {0x6C, 0x0C}, {0x6C, 0x0E}, /* 0xD8-0xDB */ + {0x6C, 0x12}, {0x6C, 0x17}, {0x6C, 0x1C}, {0x6C, 0x1D}, /* 0xDC-0xDF */ + {0x6C, 0x1E}, {0x6C, 0x20}, {0x6C, 0x23}, {0x6C, 0x25}, /* 0xE0-0xE3 */ + {0x6C, 0x2B}, {0x6C, 0x2C}, {0x6C, 0x2D}, {0x6C, 0x31}, /* 0xE4-0xE7 */ + {0x6C, 0x33}, {0x6C, 0x36}, {0x6C, 0x37}, {0x6C, 0x39}, /* 0xE8-0xEB */ + {0x6C, 0x3A}, {0x6C, 0x3B}, {0x6C, 0x3C}, {0x6C, 0x3E}, /* 0xEC-0xEF */ + {0x6C, 0x3F}, {0x6C, 0x43}, {0x6C, 0x44}, {0x6C, 0x45}, /* 0xF0-0xF3 */ + {0x6C, 0x48}, {0x6C, 0x4B}, {0x6C, 0x4C}, {0x6C, 0x4D}, /* 0xF4-0xF7 */ + {0x6C, 0x4E}, {0x6C, 0x4F}, {0x6C, 0x51}, {0x6C, 0x52}, /* 0xF8-0xFB */ + {0x6C, 0x53}, {0x6C, 0x56}, {0x6C, 0x58}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9B[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6C, 0x59}, {0x6C, 0x5A}, {0x6C, 0x62}, {0x6C, 0x63}, /* 0x40-0x43 */ + {0x6C, 0x65}, {0x6C, 0x66}, {0x6C, 0x67}, {0x6C, 0x6B}, /* 0x44-0x47 */ + {0x6C, 0x6C}, {0x6C, 0x6D}, {0x6C, 0x6E}, {0x6C, 0x6F}, /* 0x48-0x4B */ + {0x6C, 0x71}, {0x6C, 0x73}, {0x6C, 0x75}, {0x6C, 0x77}, /* 0x4C-0x4F */ + {0x6C, 0x78}, {0x6C, 0x7A}, {0x6C, 0x7B}, {0x6C, 0x7C}, /* 0x50-0x53 */ + {0x6C, 0x7F}, {0x6C, 0x80}, {0x6C, 0x84}, {0x6C, 0x87}, /* 0x54-0x57 */ + {0x6C, 0x8A}, {0x6C, 0x8B}, {0x6C, 0x8D}, {0x6C, 0x8E}, /* 0x58-0x5B */ + {0x6C, 0x91}, {0x6C, 0x92}, {0x6C, 0x95}, {0x6C, 0x96}, /* 0x5C-0x5F */ + {0x6C, 0x97}, {0x6C, 0x98}, {0x6C, 0x9A}, {0x6C, 0x9C}, /* 0x60-0x63 */ + {0x6C, 0x9D}, {0x6C, 0x9E}, {0x6C, 0xA0}, {0x6C, 0xA2}, /* 0x64-0x67 */ + {0x6C, 0xA8}, {0x6C, 0xAC}, {0x6C, 0xAF}, {0x6C, 0xB0}, /* 0x68-0x6B */ + {0x6C, 0xB4}, {0x6C, 0xB5}, {0x6C, 0xB6}, {0x6C, 0xB7}, /* 0x6C-0x6F */ + {0x6C, 0xBA}, {0x6C, 0xC0}, {0x6C, 0xC1}, {0x6C, 0xC2}, /* 0x70-0x73 */ + {0x6C, 0xC3}, {0x6C, 0xC6}, {0x6C, 0xC7}, {0x6C, 0xC8}, /* 0x74-0x77 */ + {0x6C, 0xCB}, {0x6C, 0xCD}, {0x6C, 0xCE}, {0x6C, 0xCF}, /* 0x78-0x7B */ + {0x6C, 0xD1}, {0x6C, 0xD2}, {0x6C, 0xD8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6C, 0xD9}, {0x6C, 0xDA}, {0x6C, 0xDC}, {0x6C, 0xDD}, /* 0x80-0x83 */ + {0x6C, 0xDF}, {0x6C, 0xE4}, {0x6C, 0xE6}, {0x6C, 0xE7}, /* 0x84-0x87 */ + {0x6C, 0xE9}, {0x6C, 0xEC}, {0x6C, 0xED}, {0x6C, 0xF2}, /* 0x88-0x8B */ + {0x6C, 0xF4}, {0x6C, 0xF9}, {0x6C, 0xFF}, {0x6D, 0x00}, /* 0x8C-0x8F */ + {0x6D, 0x02}, {0x6D, 0x03}, {0x6D, 0x05}, {0x6D, 0x06}, /* 0x90-0x93 */ + {0x6D, 0x08}, {0x6D, 0x09}, {0x6D, 0x0A}, {0x6D, 0x0D}, /* 0x94-0x97 */ + {0x6D, 0x0F}, {0x6D, 0x10}, {0x6D, 0x11}, {0x6D, 0x13}, /* 0x98-0x9B */ + {0x6D, 0x14}, {0x6D, 0x15}, {0x6D, 0x16}, {0x6D, 0x18}, /* 0x9C-0x9F */ + {0x6D, 0x1C}, {0x6D, 0x1D}, {0x6D, 0x1F}, {0x6D, 0x20}, /* 0xA0-0xA3 */ + {0x6D, 0x21}, {0x6D, 0x22}, {0x6D, 0x23}, {0x6D, 0x24}, /* 0xA4-0xA7 */ + {0x6D, 0x26}, {0x6D, 0x28}, {0x6D, 0x29}, {0x6D, 0x2C}, /* 0xA8-0xAB */ + {0x6D, 0x2D}, {0x6D, 0x2F}, {0x6D, 0x30}, {0x6D, 0x34}, /* 0xAC-0xAF */ + {0x6D, 0x36}, {0x6D, 0x37}, {0x6D, 0x38}, {0x6D, 0x3A}, /* 0xB0-0xB3 */ + {0x6D, 0x3F}, {0x6D, 0x40}, {0x6D, 0x42}, {0x6D, 0x44}, /* 0xB4-0xB7 */ + {0x6D, 0x49}, {0x6D, 0x4C}, {0x6D, 0x50}, {0x6D, 0x55}, /* 0xB8-0xBB */ + {0x6D, 0x56}, {0x6D, 0x57}, {0x6D, 0x58}, {0x6D, 0x5B}, /* 0xBC-0xBF */ + {0x6D, 0x5D}, {0x6D, 0x5F}, {0x6D, 0x61}, {0x6D, 0x62}, /* 0xC0-0xC3 */ + {0x6D, 0x64}, {0x6D, 0x65}, {0x6D, 0x67}, {0x6D, 0x68}, /* 0xC4-0xC7 */ + {0x6D, 0x6B}, {0x6D, 0x6C}, {0x6D, 0x6D}, {0x6D, 0x70}, /* 0xC8-0xCB */ + {0x6D, 0x71}, {0x6D, 0x72}, {0x6D, 0x73}, {0x6D, 0x75}, /* 0xCC-0xCF */ + {0x6D, 0x76}, {0x6D, 0x79}, {0x6D, 0x7A}, {0x6D, 0x7B}, /* 0xD0-0xD3 */ + {0x6D, 0x7D}, {0x6D, 0x7E}, {0x6D, 0x7F}, {0x6D, 0x80}, /* 0xD4-0xD7 */ + {0x6D, 0x81}, {0x6D, 0x83}, {0x6D, 0x84}, {0x6D, 0x86}, /* 0xD8-0xDB */ + {0x6D, 0x87}, {0x6D, 0x8A}, {0x6D, 0x8B}, {0x6D, 0x8D}, /* 0xDC-0xDF */ + {0x6D, 0x8F}, {0x6D, 0x90}, {0x6D, 0x92}, {0x6D, 0x96}, /* 0xE0-0xE3 */ + {0x6D, 0x97}, {0x6D, 0x98}, {0x6D, 0x99}, {0x6D, 0x9A}, /* 0xE4-0xE7 */ + {0x6D, 0x9C}, {0x6D, 0xA2}, {0x6D, 0xA5}, {0x6D, 0xAC}, /* 0xE8-0xEB */ + {0x6D, 0xAD}, {0x6D, 0xB0}, {0x6D, 0xB1}, {0x6D, 0xB3}, /* 0xEC-0xEF */ + {0x6D, 0xB4}, {0x6D, 0xB6}, {0x6D, 0xB7}, {0x6D, 0xB9}, /* 0xF0-0xF3 */ + {0x6D, 0xBA}, {0x6D, 0xBB}, {0x6D, 0xBC}, {0x6D, 0xBD}, /* 0xF4-0xF7 */ + {0x6D, 0xBE}, {0x6D, 0xC1}, {0x6D, 0xC2}, {0x6D, 0xC3}, /* 0xF8-0xFB */ + {0x6D, 0xC8}, {0x6D, 0xC9}, {0x6D, 0xCA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9C[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6D, 0xCD}, {0x6D, 0xCE}, {0x6D, 0xCF}, {0x6D, 0xD0}, /* 0x40-0x43 */ + {0x6D, 0xD2}, {0x6D, 0xD3}, {0x6D, 0xD4}, {0x6D, 0xD5}, /* 0x44-0x47 */ + {0x6D, 0xD7}, {0x6D, 0xDA}, {0x6D, 0xDB}, {0x6D, 0xDC}, /* 0x48-0x4B */ + {0x6D, 0xDF}, {0x6D, 0xE2}, {0x6D, 0xE3}, {0x6D, 0xE5}, /* 0x4C-0x4F */ + {0x6D, 0xE7}, {0x6D, 0xE8}, {0x6D, 0xE9}, {0x6D, 0xEA}, /* 0x50-0x53 */ + {0x6D, 0xED}, {0x6D, 0xEF}, {0x6D, 0xF0}, {0x6D, 0xF2}, /* 0x54-0x57 */ + {0x6D, 0xF4}, {0x6D, 0xF5}, {0x6D, 0xF6}, {0x6D, 0xF8}, /* 0x58-0x5B */ + {0x6D, 0xFA}, {0x6D, 0xFD}, {0x6D, 0xFE}, {0x6D, 0xFF}, /* 0x5C-0x5F */ + {0x6E, 0x00}, {0x6E, 0x01}, {0x6E, 0x02}, {0x6E, 0x03}, /* 0x60-0x63 */ + {0x6E, 0x04}, {0x6E, 0x06}, {0x6E, 0x07}, {0x6E, 0x08}, /* 0x64-0x67 */ + {0x6E, 0x09}, {0x6E, 0x0B}, {0x6E, 0x0F}, {0x6E, 0x12}, /* 0x68-0x6B */ + {0x6E, 0x13}, {0x6E, 0x15}, {0x6E, 0x18}, {0x6E, 0x19}, /* 0x6C-0x6F */ + {0x6E, 0x1B}, {0x6E, 0x1C}, {0x6E, 0x1E}, {0x6E, 0x1F}, /* 0x70-0x73 */ + {0x6E, 0x22}, {0x6E, 0x26}, {0x6E, 0x27}, {0x6E, 0x28}, /* 0x74-0x77 */ + {0x6E, 0x2A}, {0x6E, 0x2C}, {0x6E, 0x2E}, {0x6E, 0x30}, /* 0x78-0x7B */ + {0x6E, 0x31}, {0x6E, 0x33}, {0x6E, 0x35}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6E, 0x36}, {0x6E, 0x37}, {0x6E, 0x39}, {0x6E, 0x3B}, /* 0x80-0x83 */ + {0x6E, 0x3C}, {0x6E, 0x3D}, {0x6E, 0x3E}, {0x6E, 0x3F}, /* 0x84-0x87 */ + {0x6E, 0x40}, {0x6E, 0x41}, {0x6E, 0x42}, {0x6E, 0x45}, /* 0x88-0x8B */ + {0x6E, 0x46}, {0x6E, 0x47}, {0x6E, 0x48}, {0x6E, 0x49}, /* 0x8C-0x8F */ + {0x6E, 0x4A}, {0x6E, 0x4B}, {0x6E, 0x4C}, {0x6E, 0x4F}, /* 0x90-0x93 */ + {0x6E, 0x50}, {0x6E, 0x51}, {0x6E, 0x52}, {0x6E, 0x55}, /* 0x94-0x97 */ + {0x6E, 0x57}, {0x6E, 0x59}, {0x6E, 0x5A}, {0x6E, 0x5C}, /* 0x98-0x9B */ + {0x6E, 0x5D}, {0x6E, 0x5E}, {0x6E, 0x60}, {0x6E, 0x61}, /* 0x9C-0x9F */ + {0x6E, 0x62}, {0x6E, 0x63}, {0x6E, 0x64}, {0x6E, 0x65}, /* 0xA0-0xA3 */ + {0x6E, 0x66}, {0x6E, 0x67}, {0x6E, 0x68}, {0x6E, 0x69}, /* 0xA4-0xA7 */ + {0x6E, 0x6A}, {0x6E, 0x6C}, {0x6E, 0x6D}, {0x6E, 0x6F}, /* 0xA8-0xAB */ + {0x6E, 0x70}, {0x6E, 0x71}, {0x6E, 0x72}, {0x6E, 0x73}, /* 0xAC-0xAF */ + {0x6E, 0x74}, {0x6E, 0x75}, {0x6E, 0x76}, {0x6E, 0x77}, /* 0xB0-0xB3 */ + {0x6E, 0x78}, {0x6E, 0x79}, {0x6E, 0x7A}, {0x6E, 0x7B}, /* 0xB4-0xB7 */ + {0x6E, 0x7C}, {0x6E, 0x7D}, {0x6E, 0x80}, {0x6E, 0x81}, /* 0xB8-0xBB */ + {0x6E, 0x82}, {0x6E, 0x84}, {0x6E, 0x87}, {0x6E, 0x88}, /* 0xBC-0xBF */ + {0x6E, 0x8A}, {0x6E, 0x8B}, {0x6E, 0x8C}, {0x6E, 0x8D}, /* 0xC0-0xC3 */ + {0x6E, 0x8E}, {0x6E, 0x91}, {0x6E, 0x92}, {0x6E, 0x93}, /* 0xC4-0xC7 */ + {0x6E, 0x94}, {0x6E, 0x95}, {0x6E, 0x96}, {0x6E, 0x97}, /* 0xC8-0xCB */ + {0x6E, 0x99}, {0x6E, 0x9A}, {0x6E, 0x9B}, {0x6E, 0x9D}, /* 0xCC-0xCF */ + {0x6E, 0x9E}, {0x6E, 0xA0}, {0x6E, 0xA1}, {0x6E, 0xA3}, /* 0xD0-0xD3 */ + {0x6E, 0xA4}, {0x6E, 0xA6}, {0x6E, 0xA8}, {0x6E, 0xA9}, /* 0xD4-0xD7 */ + {0x6E, 0xAB}, {0x6E, 0xAC}, {0x6E, 0xAD}, {0x6E, 0xAE}, /* 0xD8-0xDB */ + {0x6E, 0xB0}, {0x6E, 0xB3}, {0x6E, 0xB5}, {0x6E, 0xB8}, /* 0xDC-0xDF */ + {0x6E, 0xB9}, {0x6E, 0xBC}, {0x6E, 0xBE}, {0x6E, 0xBF}, /* 0xE0-0xE3 */ + {0x6E, 0xC0}, {0x6E, 0xC3}, {0x6E, 0xC4}, {0x6E, 0xC5}, /* 0xE4-0xE7 */ + {0x6E, 0xC6}, {0x6E, 0xC8}, {0x6E, 0xC9}, {0x6E, 0xCA}, /* 0xE8-0xEB */ + {0x6E, 0xCC}, {0x6E, 0xCD}, {0x6E, 0xCE}, {0x6E, 0xD0}, /* 0xEC-0xEF */ + {0x6E, 0xD2}, {0x6E, 0xD6}, {0x6E, 0xD8}, {0x6E, 0xD9}, /* 0xF0-0xF3 */ + {0x6E, 0xDB}, {0x6E, 0xDC}, {0x6E, 0xDD}, {0x6E, 0xE3}, /* 0xF4-0xF7 */ + {0x6E, 0xE7}, {0x6E, 0xEA}, {0x6E, 0xEB}, {0x6E, 0xEC}, /* 0xF8-0xFB */ + {0x6E, 0xED}, {0x6E, 0xEE}, {0x6E, 0xEF}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9D[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6E, 0xF0}, {0x6E, 0xF1}, {0x6E, 0xF2}, {0x6E, 0xF3}, /* 0x40-0x43 */ + {0x6E, 0xF5}, {0x6E, 0xF6}, {0x6E, 0xF7}, {0x6E, 0xF8}, /* 0x44-0x47 */ + {0x6E, 0xFA}, {0x6E, 0xFB}, {0x6E, 0xFC}, {0x6E, 0xFD}, /* 0x48-0x4B */ + {0x6E, 0xFE}, {0x6E, 0xFF}, {0x6F, 0x00}, {0x6F, 0x01}, /* 0x4C-0x4F */ + {0x6F, 0x03}, {0x6F, 0x04}, {0x6F, 0x05}, {0x6F, 0x07}, /* 0x50-0x53 */ + {0x6F, 0x08}, {0x6F, 0x0A}, {0x6F, 0x0B}, {0x6F, 0x0C}, /* 0x54-0x57 */ + {0x6F, 0x0D}, {0x6F, 0x0E}, {0x6F, 0x10}, {0x6F, 0x11}, /* 0x58-0x5B */ + {0x6F, 0x12}, {0x6F, 0x16}, {0x6F, 0x17}, {0x6F, 0x18}, /* 0x5C-0x5F */ + {0x6F, 0x19}, {0x6F, 0x1A}, {0x6F, 0x1B}, {0x6F, 0x1C}, /* 0x60-0x63 */ + {0x6F, 0x1D}, {0x6F, 0x1E}, {0x6F, 0x1F}, {0x6F, 0x21}, /* 0x64-0x67 */ + {0x6F, 0x22}, {0x6F, 0x23}, {0x6F, 0x25}, {0x6F, 0x26}, /* 0x68-0x6B */ + {0x6F, 0x27}, {0x6F, 0x28}, {0x6F, 0x2C}, {0x6F, 0x2E}, /* 0x6C-0x6F */ + {0x6F, 0x30}, {0x6F, 0x32}, {0x6F, 0x34}, {0x6F, 0x35}, /* 0x70-0x73 */ + {0x6F, 0x37}, {0x6F, 0x38}, {0x6F, 0x39}, {0x6F, 0x3A}, /* 0x74-0x77 */ + {0x6F, 0x3B}, {0x6F, 0x3C}, {0x6F, 0x3D}, {0x6F, 0x3F}, /* 0x78-0x7B */ + {0x6F, 0x40}, {0x6F, 0x41}, {0x6F, 0x42}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x6F, 0x43}, {0x6F, 0x44}, {0x6F, 0x45}, {0x6F, 0x48}, /* 0x80-0x83 */ + {0x6F, 0x49}, {0x6F, 0x4A}, {0x6F, 0x4C}, {0x6F, 0x4E}, /* 0x84-0x87 */ + {0x6F, 0x4F}, {0x6F, 0x50}, {0x6F, 0x51}, {0x6F, 0x52}, /* 0x88-0x8B */ + {0x6F, 0x53}, {0x6F, 0x54}, {0x6F, 0x55}, {0x6F, 0x56}, /* 0x8C-0x8F */ + {0x6F, 0x57}, {0x6F, 0x59}, {0x6F, 0x5A}, {0x6F, 0x5B}, /* 0x90-0x93 */ + {0x6F, 0x5D}, {0x6F, 0x5F}, {0x6F, 0x60}, {0x6F, 0x61}, /* 0x94-0x97 */ + {0x6F, 0x63}, {0x6F, 0x64}, {0x6F, 0x65}, {0x6F, 0x67}, /* 0x98-0x9B */ + {0x6F, 0x68}, {0x6F, 0x69}, {0x6F, 0x6A}, {0x6F, 0x6B}, /* 0x9C-0x9F */ + {0x6F, 0x6C}, {0x6F, 0x6F}, {0x6F, 0x70}, {0x6F, 0x71}, /* 0xA0-0xA3 */ + {0x6F, 0x73}, {0x6F, 0x75}, {0x6F, 0x76}, {0x6F, 0x77}, /* 0xA4-0xA7 */ + {0x6F, 0x79}, {0x6F, 0x7B}, {0x6F, 0x7D}, {0x6F, 0x7E}, /* 0xA8-0xAB */ + {0x6F, 0x7F}, {0x6F, 0x80}, {0x6F, 0x81}, {0x6F, 0x82}, /* 0xAC-0xAF */ + {0x6F, 0x83}, {0x6F, 0x85}, {0x6F, 0x86}, {0x6F, 0x87}, /* 0xB0-0xB3 */ + {0x6F, 0x8A}, {0x6F, 0x8B}, {0x6F, 0x8F}, {0x6F, 0x90}, /* 0xB4-0xB7 */ + {0x6F, 0x91}, {0x6F, 0x92}, {0x6F, 0x93}, {0x6F, 0x94}, /* 0xB8-0xBB */ + {0x6F, 0x95}, {0x6F, 0x96}, {0x6F, 0x97}, {0x6F, 0x98}, /* 0xBC-0xBF */ + {0x6F, 0x99}, {0x6F, 0x9A}, {0x6F, 0x9B}, {0x6F, 0x9D}, /* 0xC0-0xC3 */ + {0x6F, 0x9E}, {0x6F, 0x9F}, {0x6F, 0xA0}, {0x6F, 0xA2}, /* 0xC4-0xC7 */ + {0x6F, 0xA3}, {0x6F, 0xA4}, {0x6F, 0xA5}, {0x6F, 0xA6}, /* 0xC8-0xCB */ + {0x6F, 0xA8}, {0x6F, 0xA9}, {0x6F, 0xAA}, {0x6F, 0xAB}, /* 0xCC-0xCF */ + {0x6F, 0xAC}, {0x6F, 0xAD}, {0x6F, 0xAE}, {0x6F, 0xAF}, /* 0xD0-0xD3 */ + {0x6F, 0xB0}, {0x6F, 0xB1}, {0x6F, 0xB2}, {0x6F, 0xB4}, /* 0xD4-0xD7 */ + {0x6F, 0xB5}, {0x6F, 0xB7}, {0x6F, 0xB8}, {0x6F, 0xBA}, /* 0xD8-0xDB */ + {0x6F, 0xBB}, {0x6F, 0xBC}, {0x6F, 0xBD}, {0x6F, 0xBE}, /* 0xDC-0xDF */ + {0x6F, 0xBF}, {0x6F, 0xC1}, {0x6F, 0xC3}, {0x6F, 0xC4}, /* 0xE0-0xE3 */ + {0x6F, 0xC5}, {0x6F, 0xC6}, {0x6F, 0xC7}, {0x6F, 0xC8}, /* 0xE4-0xE7 */ + {0x6F, 0xCA}, {0x6F, 0xCB}, {0x6F, 0xCC}, {0x6F, 0xCD}, /* 0xE8-0xEB */ + {0x6F, 0xCE}, {0x6F, 0xCF}, {0x6F, 0xD0}, {0x6F, 0xD3}, /* 0xEC-0xEF */ + {0x6F, 0xD4}, {0x6F, 0xD5}, {0x6F, 0xD6}, {0x6F, 0xD7}, /* 0xF0-0xF3 */ + {0x6F, 0xD8}, {0x6F, 0xD9}, {0x6F, 0xDA}, {0x6F, 0xDB}, /* 0xF4-0xF7 */ + {0x6F, 0xDC}, {0x6F, 0xDD}, {0x6F, 0xDF}, {0x6F, 0xE2}, /* 0xF8-0xFB */ + {0x6F, 0xE3}, {0x6F, 0xE4}, {0x6F, 0xE5}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9E[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6F, 0xE6}, {0x6F, 0xE7}, {0x6F, 0xE8}, {0x6F, 0xE9}, /* 0x40-0x43 */ + {0x6F, 0xEA}, {0x6F, 0xEB}, {0x6F, 0xEC}, {0x6F, 0xED}, /* 0x44-0x47 */ + {0x6F, 0xF0}, {0x6F, 0xF1}, {0x6F, 0xF2}, {0x6F, 0xF3}, /* 0x48-0x4B */ + {0x6F, 0xF4}, {0x6F, 0xF5}, {0x6F, 0xF6}, {0x6F, 0xF7}, /* 0x4C-0x4F */ + {0x6F, 0xF8}, {0x6F, 0xF9}, {0x6F, 0xFA}, {0x6F, 0xFB}, /* 0x50-0x53 */ + {0x6F, 0xFC}, {0x6F, 0xFD}, {0x6F, 0xFE}, {0x6F, 0xFF}, /* 0x54-0x57 */ + {0x70, 0x00}, {0x70, 0x01}, {0x70, 0x02}, {0x70, 0x03}, /* 0x58-0x5B */ + {0x70, 0x04}, {0x70, 0x05}, {0x70, 0x06}, {0x70, 0x07}, /* 0x5C-0x5F */ + {0x70, 0x08}, {0x70, 0x09}, {0x70, 0x0A}, {0x70, 0x0B}, /* 0x60-0x63 */ + {0x70, 0x0C}, {0x70, 0x0D}, {0x70, 0x0E}, {0x70, 0x0F}, /* 0x64-0x67 */ + {0x70, 0x10}, {0x70, 0x12}, {0x70, 0x13}, {0x70, 0x14}, /* 0x68-0x6B */ + {0x70, 0x15}, {0x70, 0x16}, {0x70, 0x17}, {0x70, 0x18}, /* 0x6C-0x6F */ + {0x70, 0x19}, {0x70, 0x1C}, {0x70, 0x1D}, {0x70, 0x1E}, /* 0x70-0x73 */ + {0x70, 0x1F}, {0x70, 0x20}, {0x70, 0x21}, {0x70, 0x22}, /* 0x74-0x77 */ + {0x70, 0x24}, {0x70, 0x25}, {0x70, 0x26}, {0x70, 0x27}, /* 0x78-0x7B */ + {0x70, 0x28}, {0x70, 0x29}, {0x70, 0x2A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x70, 0x2B}, {0x70, 0x2C}, {0x70, 0x2D}, {0x70, 0x2E}, /* 0x80-0x83 */ + {0x70, 0x2F}, {0x70, 0x30}, {0x70, 0x31}, {0x70, 0x32}, /* 0x84-0x87 */ + {0x70, 0x33}, {0x70, 0x34}, {0x70, 0x36}, {0x70, 0x37}, /* 0x88-0x8B */ + {0x70, 0x38}, {0x70, 0x3A}, {0x70, 0x3B}, {0x70, 0x3C}, /* 0x8C-0x8F */ + {0x70, 0x3D}, {0x70, 0x3E}, {0x70, 0x3F}, {0x70, 0x40}, /* 0x90-0x93 */ + {0x70, 0x41}, {0x70, 0x42}, {0x70, 0x43}, {0x70, 0x44}, /* 0x94-0x97 */ + {0x70, 0x45}, {0x70, 0x46}, {0x70, 0x47}, {0x70, 0x48}, /* 0x98-0x9B */ + {0x70, 0x49}, {0x70, 0x4A}, {0x70, 0x4B}, {0x70, 0x4D}, /* 0x9C-0x9F */ + {0x70, 0x4E}, {0x70, 0x50}, {0x70, 0x51}, {0x70, 0x52}, /* 0xA0-0xA3 */ + {0x70, 0x53}, {0x70, 0x54}, {0x70, 0x55}, {0x70, 0x56}, /* 0xA4-0xA7 */ + {0x70, 0x57}, {0x70, 0x58}, {0x70, 0x59}, {0x70, 0x5A}, /* 0xA8-0xAB */ + {0x70, 0x5B}, {0x70, 0x5C}, {0x70, 0x5D}, {0x70, 0x5F}, /* 0xAC-0xAF */ + {0x70, 0x60}, {0x70, 0x61}, {0x70, 0x62}, {0x70, 0x63}, /* 0xB0-0xB3 */ + {0x70, 0x64}, {0x70, 0x65}, {0x70, 0x66}, {0x70, 0x67}, /* 0xB4-0xB7 */ + {0x70, 0x68}, {0x70, 0x69}, {0x70, 0x6A}, {0x70, 0x6E}, /* 0xB8-0xBB */ + {0x70, 0x71}, {0x70, 0x72}, {0x70, 0x73}, {0x70, 0x74}, /* 0xBC-0xBF */ + {0x70, 0x77}, {0x70, 0x79}, {0x70, 0x7A}, {0x70, 0x7B}, /* 0xC0-0xC3 */ + {0x70, 0x7D}, {0x70, 0x81}, {0x70, 0x82}, {0x70, 0x83}, /* 0xC4-0xC7 */ + {0x70, 0x84}, {0x70, 0x86}, {0x70, 0x87}, {0x70, 0x88}, /* 0xC8-0xCB */ + {0x70, 0x8B}, {0x70, 0x8C}, {0x70, 0x8D}, {0x70, 0x8F}, /* 0xCC-0xCF */ + {0x70, 0x90}, {0x70, 0x91}, {0x70, 0x93}, {0x70, 0x97}, /* 0xD0-0xD3 */ + {0x70, 0x98}, {0x70, 0x9A}, {0x70, 0x9B}, {0x70, 0x9E}, /* 0xD4-0xD7 */ + {0x70, 0x9F}, {0x70, 0xA0}, {0x70, 0xA1}, {0x70, 0xA2}, /* 0xD8-0xDB */ + {0x70, 0xA3}, {0x70, 0xA4}, {0x70, 0xA5}, {0x70, 0xA6}, /* 0xDC-0xDF */ + {0x70, 0xA7}, {0x70, 0xA8}, {0x70, 0xA9}, {0x70, 0xAA}, /* 0xE0-0xE3 */ + {0x70, 0xB0}, {0x70, 0xB2}, {0x70, 0xB4}, {0x70, 0xB5}, /* 0xE4-0xE7 */ + {0x70, 0xB6}, {0x70, 0xBA}, {0x70, 0xBE}, {0x70, 0xBF}, /* 0xE8-0xEB */ + {0x70, 0xC4}, {0x70, 0xC5}, {0x70, 0xC6}, {0x70, 0xC7}, /* 0xEC-0xEF */ + {0x70, 0xC9}, {0x70, 0xCB}, {0x70, 0xCC}, {0x70, 0xCD}, /* 0xF0-0xF3 */ + {0x70, 0xCE}, {0x70, 0xCF}, {0x70, 0xD0}, {0x70, 0xD1}, /* 0xF4-0xF7 */ + {0x70, 0xD2}, {0x70, 0xD3}, {0x70, 0xD4}, {0x70, 0xD5}, /* 0xF8-0xFB */ + {0x70, 0xD6}, {0x70, 0xD7}, {0x70, 0xDA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9F[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x70, 0xDC}, {0x70, 0xDD}, {0x70, 0xDE}, {0x70, 0xE0}, /* 0x40-0x43 */ + {0x70, 0xE1}, {0x70, 0xE2}, {0x70, 0xE3}, {0x70, 0xE5}, /* 0x44-0x47 */ + {0x70, 0xEA}, {0x70, 0xEE}, {0x70, 0xF0}, {0x70, 0xF1}, /* 0x48-0x4B */ + {0x70, 0xF2}, {0x70, 0xF3}, {0x70, 0xF4}, {0x70, 0xF5}, /* 0x4C-0x4F */ + {0x70, 0xF6}, {0x70, 0xF8}, {0x70, 0xFA}, {0x70, 0xFB}, /* 0x50-0x53 */ + {0x70, 0xFC}, {0x70, 0xFE}, {0x70, 0xFF}, {0x71, 0x00}, /* 0x54-0x57 */ + {0x71, 0x01}, {0x71, 0x02}, {0x71, 0x03}, {0x71, 0x04}, /* 0x58-0x5B */ + {0x71, 0x05}, {0x71, 0x06}, {0x71, 0x07}, {0x71, 0x08}, /* 0x5C-0x5F */ + {0x71, 0x0B}, {0x71, 0x0C}, {0x71, 0x0D}, {0x71, 0x0E}, /* 0x60-0x63 */ + {0x71, 0x0F}, {0x71, 0x11}, {0x71, 0x12}, {0x71, 0x14}, /* 0x64-0x67 */ + {0x71, 0x17}, {0x71, 0x1B}, {0x71, 0x1C}, {0x71, 0x1D}, /* 0x68-0x6B */ + {0x71, 0x1E}, {0x71, 0x1F}, {0x71, 0x20}, {0x71, 0x21}, /* 0x6C-0x6F */ + {0x71, 0x22}, {0x71, 0x23}, {0x71, 0x24}, {0x71, 0x25}, /* 0x70-0x73 */ + {0x71, 0x27}, {0x71, 0x28}, {0x71, 0x29}, {0x71, 0x2A}, /* 0x74-0x77 */ + {0x71, 0x2B}, {0x71, 0x2C}, {0x71, 0x2D}, {0x71, 0x2E}, /* 0x78-0x7B */ + {0x71, 0x32}, {0x71, 0x33}, {0x71, 0x34}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x71, 0x35}, {0x71, 0x37}, {0x71, 0x38}, {0x71, 0x39}, /* 0x80-0x83 */ + {0x71, 0x3A}, {0x71, 0x3B}, {0x71, 0x3C}, {0x71, 0x3D}, /* 0x84-0x87 */ + {0x71, 0x3E}, {0x71, 0x3F}, {0x71, 0x40}, {0x71, 0x41}, /* 0x88-0x8B */ + {0x71, 0x42}, {0x71, 0x43}, {0x71, 0x44}, {0x71, 0x46}, /* 0x8C-0x8F */ + {0x71, 0x47}, {0x71, 0x48}, {0x71, 0x49}, {0x71, 0x4B}, /* 0x90-0x93 */ + {0x71, 0x4D}, {0x71, 0x4F}, {0x71, 0x50}, {0x71, 0x51}, /* 0x94-0x97 */ + {0x71, 0x52}, {0x71, 0x53}, {0x71, 0x54}, {0x71, 0x55}, /* 0x98-0x9B */ + {0x71, 0x56}, {0x71, 0x57}, {0x71, 0x58}, {0x71, 0x59}, /* 0x9C-0x9F */ + {0x71, 0x5A}, {0x71, 0x5B}, {0x71, 0x5D}, {0x71, 0x5F}, /* 0xA0-0xA3 */ + {0x71, 0x60}, {0x71, 0x61}, {0x71, 0x62}, {0x71, 0x63}, /* 0xA4-0xA7 */ + {0x71, 0x65}, {0x71, 0x69}, {0x71, 0x6A}, {0x71, 0x6B}, /* 0xA8-0xAB */ + {0x71, 0x6C}, {0x71, 0x6D}, {0x71, 0x6F}, {0x71, 0x70}, /* 0xAC-0xAF */ + {0x71, 0x71}, {0x71, 0x74}, {0x71, 0x75}, {0x71, 0x76}, /* 0xB0-0xB3 */ + {0x71, 0x77}, {0x71, 0x79}, {0x71, 0x7B}, {0x71, 0x7C}, /* 0xB4-0xB7 */ + {0x71, 0x7E}, {0x71, 0x7F}, {0x71, 0x80}, {0x71, 0x81}, /* 0xB8-0xBB */ + {0x71, 0x82}, {0x71, 0x83}, {0x71, 0x85}, {0x71, 0x86}, /* 0xBC-0xBF */ + {0x71, 0x87}, {0x71, 0x88}, {0x71, 0x89}, {0x71, 0x8B}, /* 0xC0-0xC3 */ + {0x71, 0x8C}, {0x71, 0x8D}, {0x71, 0x8E}, {0x71, 0x90}, /* 0xC4-0xC7 */ + {0x71, 0x91}, {0x71, 0x92}, {0x71, 0x93}, {0x71, 0x95}, /* 0xC8-0xCB */ + {0x71, 0x96}, {0x71, 0x97}, {0x71, 0x9A}, {0x71, 0x9B}, /* 0xCC-0xCF */ + {0x71, 0x9C}, {0x71, 0x9D}, {0x71, 0x9E}, {0x71, 0xA1}, /* 0xD0-0xD3 */ + {0x71, 0xA2}, {0x71, 0xA3}, {0x71, 0xA4}, {0x71, 0xA5}, /* 0xD4-0xD7 */ + {0x71, 0xA6}, {0x71, 0xA7}, {0x71, 0xA9}, {0x71, 0xAA}, /* 0xD8-0xDB */ + {0x71, 0xAB}, {0x71, 0xAD}, {0x71, 0xAE}, {0x71, 0xAF}, /* 0xDC-0xDF */ + {0x71, 0xB0}, {0x71, 0xB1}, {0x71, 0xB2}, {0x71, 0xB4}, /* 0xE0-0xE3 */ + {0x71, 0xB6}, {0x71, 0xB7}, {0x71, 0xB8}, {0x71, 0xBA}, /* 0xE4-0xE7 */ + {0x71, 0xBB}, {0x71, 0xBC}, {0x71, 0xBD}, {0x71, 0xBE}, /* 0xE8-0xEB */ + {0x71, 0xBF}, {0x71, 0xC0}, {0x71, 0xC1}, {0x71, 0xC2}, /* 0xEC-0xEF */ + {0x71, 0xC4}, {0x71, 0xC5}, {0x71, 0xC6}, {0x71, 0xC7}, /* 0xF0-0xF3 */ + {0x71, 0xC8}, {0x71, 0xC9}, {0x71, 0xCA}, {0x71, 0xCB}, /* 0xF4-0xF7 */ + {0x71, 0xCC}, {0x71, 0xCD}, {0x71, 0xCF}, {0x71, 0xD0}, /* 0xF8-0xFB */ + {0x71, 0xD1}, {0x71, 0xD2}, {0x71, 0xD3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x71, 0xD6}, {0x71, 0xD7}, {0x71, 0xD8}, {0x71, 0xD9}, /* 0x40-0x43 */ + {0x71, 0xDA}, {0x71, 0xDB}, {0x71, 0xDC}, {0x71, 0xDD}, /* 0x44-0x47 */ + {0x71, 0xDE}, {0x71, 0xDF}, {0x71, 0xE1}, {0x71, 0xE2}, /* 0x48-0x4B */ + {0x71, 0xE3}, {0x71, 0xE4}, {0x71, 0xE6}, {0x71, 0xE8}, /* 0x4C-0x4F */ + {0x71, 0xE9}, {0x71, 0xEA}, {0x71, 0xEB}, {0x71, 0xEC}, /* 0x50-0x53 */ + {0x71, 0xED}, {0x71, 0xEF}, {0x71, 0xF0}, {0x71, 0xF1}, /* 0x54-0x57 */ + {0x71, 0xF2}, {0x71, 0xF3}, {0x71, 0xF4}, {0x71, 0xF5}, /* 0x58-0x5B */ + {0x71, 0xF6}, {0x71, 0xF7}, {0x71, 0xF8}, {0x71, 0xFA}, /* 0x5C-0x5F */ + {0x71, 0xFB}, {0x71, 0xFC}, {0x71, 0xFD}, {0x71, 0xFE}, /* 0x60-0x63 */ + {0x71, 0xFF}, {0x72, 0x00}, {0x72, 0x01}, {0x72, 0x02}, /* 0x64-0x67 */ + {0x72, 0x03}, {0x72, 0x04}, {0x72, 0x05}, {0x72, 0x07}, /* 0x68-0x6B */ + {0x72, 0x08}, {0x72, 0x09}, {0x72, 0x0A}, {0x72, 0x0B}, /* 0x6C-0x6F */ + {0x72, 0x0C}, {0x72, 0x0D}, {0x72, 0x0E}, {0x72, 0x0F}, /* 0x70-0x73 */ + {0x72, 0x10}, {0x72, 0x11}, {0x72, 0x12}, {0x72, 0x13}, /* 0x74-0x77 */ + {0x72, 0x14}, {0x72, 0x15}, {0x72, 0x16}, {0x72, 0x17}, /* 0x78-0x7B */ + {0x72, 0x18}, {0x72, 0x19}, {0x72, 0x1A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x72, 0x1B}, {0x72, 0x1C}, {0x72, 0x1E}, {0x72, 0x1F}, /* 0x80-0x83 */ + {0x72, 0x20}, {0x72, 0x21}, {0x72, 0x22}, {0x72, 0x23}, /* 0x84-0x87 */ + {0x72, 0x24}, {0x72, 0x25}, {0x72, 0x26}, {0x72, 0x27}, /* 0x88-0x8B */ + {0x72, 0x29}, {0x72, 0x2B}, {0x72, 0x2D}, {0x72, 0x2E}, /* 0x8C-0x8F */ + {0x72, 0x2F}, {0x72, 0x32}, {0x72, 0x33}, {0x72, 0x34}, /* 0x90-0x93 */ + {0x72, 0x3A}, {0x72, 0x3C}, {0x72, 0x3E}, {0x72, 0x40}, /* 0x94-0x97 */ + {0x72, 0x41}, {0x72, 0x42}, {0x72, 0x43}, {0x72, 0x44}, /* 0x98-0x9B */ + {0x72, 0x45}, {0x72, 0x46}, {0x72, 0x49}, {0x72, 0x4A}, /* 0x9C-0x9F */ + {0x72, 0x4B}, {0x72, 0x4E}, {0x72, 0x4F}, {0x72, 0x50}, /* 0xA0-0xA3 */ + {0x72, 0x51}, {0x72, 0x53}, {0x72, 0x54}, {0x72, 0x55}, /* 0xA4-0xA7 */ + {0x72, 0x57}, {0x72, 0x58}, {0x72, 0x5A}, {0x72, 0x5C}, /* 0xA8-0xAB */ + {0x72, 0x5E}, {0x72, 0x60}, {0x72, 0x63}, {0x72, 0x64}, /* 0xAC-0xAF */ + {0x72, 0x65}, {0x72, 0x68}, {0x72, 0x6A}, {0x72, 0x6B}, /* 0xB0-0xB3 */ + {0x72, 0x6C}, {0x72, 0x6D}, {0x72, 0x70}, {0x72, 0x71}, /* 0xB4-0xB7 */ + {0x72, 0x73}, {0x72, 0x74}, {0x72, 0x76}, {0x72, 0x77}, /* 0xB8-0xBB */ + {0x72, 0x78}, {0x72, 0x7B}, {0x72, 0x7C}, {0x72, 0x7D}, /* 0xBC-0xBF */ + {0x72, 0x82}, {0x72, 0x83}, {0x72, 0x85}, {0x72, 0x86}, /* 0xC0-0xC3 */ + {0x72, 0x87}, {0x72, 0x88}, {0x72, 0x89}, {0x72, 0x8C}, /* 0xC4-0xC7 */ + {0x72, 0x8E}, {0x72, 0x90}, {0x72, 0x91}, {0x72, 0x93}, /* 0xC8-0xCB */ + {0x72, 0x94}, {0x72, 0x95}, {0x72, 0x96}, {0x72, 0x97}, /* 0xCC-0xCF */ + {0x72, 0x98}, {0x72, 0x99}, {0x72, 0x9A}, {0x72, 0x9B}, /* 0xD0-0xD3 */ + {0x72, 0x9C}, {0x72, 0x9D}, {0x72, 0x9E}, {0x72, 0xA0}, /* 0xD4-0xD7 */ + {0x72, 0xA1}, {0x72, 0xA2}, {0x72, 0xA3}, {0x72, 0xA4}, /* 0xD8-0xDB */ + {0x72, 0xA5}, {0x72, 0xA6}, {0x72, 0xA7}, {0x72, 0xA8}, /* 0xDC-0xDF */ + {0x72, 0xA9}, {0x72, 0xAA}, {0x72, 0xAB}, {0x72, 0xAE}, /* 0xE0-0xE3 */ + {0x72, 0xB1}, {0x72, 0xB2}, {0x72, 0xB3}, {0x72, 0xB5}, /* 0xE4-0xE7 */ + {0x72, 0xBA}, {0x72, 0xBB}, {0x72, 0xBC}, {0x72, 0xBD}, /* 0xE8-0xEB */ + {0x72, 0xBE}, {0x72, 0xBF}, {0x72, 0xC0}, {0x72, 0xC5}, /* 0xEC-0xEF */ + {0x72, 0xC6}, {0x72, 0xC7}, {0x72, 0xC9}, {0x72, 0xCA}, /* 0xF0-0xF3 */ + {0x72, 0xCB}, {0x72, 0xCC}, {0x72, 0xCF}, {0x72, 0xD1}, /* 0xF4-0xF7 */ + {0x72, 0xD3}, {0x72, 0xD4}, {0x72, 0xD5}, {0x72, 0xD6}, /* 0xF8-0xFB */ + {0x72, 0xD8}, {0x72, 0xDA}, {0x72, 0xDB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x30, 0x00}, {0x30, 0x01}, {0x30, 0x02}, /* 0xA0-0xA3 */ + {0x00, 0xB7}, {0x02, 0xC9}, {0x02, 0xC7}, {0x00, 0xA8}, /* 0xA4-0xA7 */ + {0x30, 0x03}, {0x30, 0x05}, {0x20, 0x14}, {0xFF, 0x5E}, /* 0xA8-0xAB */ + {0x20, 0x16}, {0x20, 0x26}, {0x20, 0x18}, {0x20, 0x19}, /* 0xAC-0xAF */ + {0x20, 0x1C}, {0x20, 0x1D}, {0x30, 0x14}, {0x30, 0x15}, /* 0xB0-0xB3 */ + {0x30, 0x08}, {0x30, 0x09}, {0x30, 0x0A}, {0x30, 0x0B}, /* 0xB4-0xB7 */ + {0x30, 0x0C}, {0x30, 0x0D}, {0x30, 0x0E}, {0x30, 0x0F}, /* 0xB8-0xBB */ + {0x30, 0x16}, {0x30, 0x17}, {0x30, 0x10}, {0x30, 0x11}, /* 0xBC-0xBF */ + {0x00, 0xB1}, {0x00, 0xD7}, {0x00, 0xF7}, {0x22, 0x36}, /* 0xC0-0xC3 */ + {0x22, 0x27}, {0x22, 0x28}, {0x22, 0x11}, {0x22, 0x0F}, /* 0xC4-0xC7 */ + {0x22, 0x2A}, {0x22, 0x29}, {0x22, 0x08}, {0x22, 0x37}, /* 0xC8-0xCB */ + {0x22, 0x1A}, {0x22, 0xA5}, {0x22, 0x25}, {0x22, 0x20}, /* 0xCC-0xCF */ + {0x23, 0x12}, {0x22, 0x99}, {0x22, 0x2B}, {0x22, 0x2E}, /* 0xD0-0xD3 */ + {0x22, 0x61}, {0x22, 0x4C}, {0x22, 0x48}, {0x22, 0x3D}, /* 0xD4-0xD7 */ + {0x22, 0x1D}, {0x22, 0x60}, {0x22, 0x6E}, {0x22, 0x6F}, /* 0xD8-0xDB */ + {0x22, 0x64}, {0x22, 0x65}, {0x22, 0x1E}, {0x22, 0x35}, /* 0xDC-0xDF */ + {0x22, 0x34}, {0x26, 0x42}, {0x26, 0x40}, {0x00, 0xB0}, /* 0xE0-0xE3 */ + {0x20, 0x32}, {0x20, 0x33}, {0x21, 0x03}, {0xFF, 0x04}, /* 0xE4-0xE7 */ + {0x00, 0xA4}, {0xFF, 0xE0}, {0xFF, 0xE1}, {0x20, 0x30}, /* 0xE8-0xEB */ + {0x00, 0xA7}, {0x21, 0x16}, {0x26, 0x06}, {0x26, 0x05}, /* 0xEC-0xEF */ + {0x25, 0xCB}, {0x25, 0xCF}, {0x25, 0xCE}, {0x25, 0xC7}, /* 0xF0-0xF3 */ + {0x25, 0xC6}, {0x25, 0xA1}, {0x25, 0xA0}, {0x25, 0xB3}, /* 0xF4-0xF7 */ + {0x25, 0xB2}, {0x20, 0x3B}, {0x21, 0x92}, {0x21, 0x90}, /* 0xF8-0xFB */ + {0x21, 0x91}, {0x21, 0x93}, {0x30, 0x13}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x21, 0x70}, {0x21, 0x71}, {0x21, 0x72}, /* 0xA0-0xA3 */ + {0x21, 0x73}, {0x21, 0x74}, {0x21, 0x75}, {0x21, 0x76}, /* 0xA4-0xA7 */ + {0x21, 0x77}, {0x21, 0x78}, {0x21, 0x79}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x24, 0x88}, {0x24, 0x89}, {0x24, 0x8A}, /* 0xB0-0xB3 */ + {0x24, 0x8B}, {0x24, 0x8C}, {0x24, 0x8D}, {0x24, 0x8E}, /* 0xB4-0xB7 */ + {0x24, 0x8F}, {0x24, 0x90}, {0x24, 0x91}, {0x24, 0x92}, /* 0xB8-0xBB */ + {0x24, 0x93}, {0x24, 0x94}, {0x24, 0x95}, {0x24, 0x96}, /* 0xBC-0xBF */ + {0x24, 0x97}, {0x24, 0x98}, {0x24, 0x99}, {0x24, 0x9A}, /* 0xC0-0xC3 */ + {0x24, 0x9B}, {0x24, 0x74}, {0x24, 0x75}, {0x24, 0x76}, /* 0xC4-0xC7 */ + {0x24, 0x77}, {0x24, 0x78}, {0x24, 0x79}, {0x24, 0x7A}, /* 0xC8-0xCB */ + {0x24, 0x7B}, {0x24, 0x7C}, {0x24, 0x7D}, {0x24, 0x7E}, /* 0xCC-0xCF */ + {0x24, 0x7F}, {0x24, 0x80}, {0x24, 0x81}, {0x24, 0x82}, /* 0xD0-0xD3 */ + {0x24, 0x83}, {0x24, 0x84}, {0x24, 0x85}, {0x24, 0x86}, /* 0xD4-0xD7 */ + {0x24, 0x87}, {0x24, 0x60}, {0x24, 0x61}, {0x24, 0x62}, /* 0xD8-0xDB */ + {0x24, 0x63}, {0x24, 0x64}, {0x24, 0x65}, {0x24, 0x66}, /* 0xDC-0xDF */ + {0x24, 0x67}, {0x24, 0x68}, {0x24, 0x69}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x32, 0x20}, {0x32, 0x21}, {0x32, 0x22}, /* 0xE4-0xE7 */ + {0x32, 0x23}, {0x32, 0x24}, {0x32, 0x25}, {0x32, 0x26}, /* 0xE8-0xEB */ + {0x32, 0x27}, {0x32, 0x28}, {0x32, 0x29}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x21, 0x60}, {0x21, 0x61}, {0x21, 0x62}, /* 0xF0-0xF3 */ + {0x21, 0x63}, {0x21, 0x64}, {0x21, 0x65}, {0x21, 0x66}, /* 0xF4-0xF7 */ + {0x21, 0x67}, {0x21, 0x68}, {0x21, 0x69}, {0x21, 0x6A}, /* 0xF8-0xFB */ + {0x21, 0x6B}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xFF, 0x01}, {0xFF, 0x02}, {0xFF, 0x03}, /* 0xA0-0xA3 */ + {0xFF, 0xE5}, {0xFF, 0x05}, {0xFF, 0x06}, {0xFF, 0x07}, /* 0xA4-0xA7 */ + {0xFF, 0x08}, {0xFF, 0x09}, {0xFF, 0x0A}, {0xFF, 0x0B}, /* 0xA8-0xAB */ + {0xFF, 0x0C}, {0xFF, 0x0D}, {0xFF, 0x0E}, {0xFF, 0x0F}, /* 0xAC-0xAF */ + {0xFF, 0x10}, {0xFF, 0x11}, {0xFF, 0x12}, {0xFF, 0x13}, /* 0xB0-0xB3 */ + {0xFF, 0x14}, {0xFF, 0x15}, {0xFF, 0x16}, {0xFF, 0x17}, /* 0xB4-0xB7 */ + {0xFF, 0x18}, {0xFF, 0x19}, {0xFF, 0x1A}, {0xFF, 0x1B}, /* 0xB8-0xBB */ + {0xFF, 0x1C}, {0xFF, 0x1D}, {0xFF, 0x1E}, {0xFF, 0x1F}, /* 0xBC-0xBF */ + {0xFF, 0x20}, {0xFF, 0x21}, {0xFF, 0x22}, {0xFF, 0x23}, /* 0xC0-0xC3 */ + {0xFF, 0x24}, {0xFF, 0x25}, {0xFF, 0x26}, {0xFF, 0x27}, /* 0xC4-0xC7 */ + {0xFF, 0x28}, {0xFF, 0x29}, {0xFF, 0x2A}, {0xFF, 0x2B}, /* 0xC8-0xCB */ + {0xFF, 0x2C}, {0xFF, 0x2D}, {0xFF, 0x2E}, {0xFF, 0x2F}, /* 0xCC-0xCF */ + {0xFF, 0x30}, {0xFF, 0x31}, {0xFF, 0x32}, {0xFF, 0x33}, /* 0xD0-0xD3 */ + {0xFF, 0x34}, {0xFF, 0x35}, {0xFF, 0x36}, {0xFF, 0x37}, /* 0xD4-0xD7 */ + {0xFF, 0x38}, {0xFF, 0x39}, {0xFF, 0x3A}, {0xFF, 0x3B}, /* 0xD8-0xDB */ + {0xFF, 0x3C}, {0xFF, 0x3D}, {0xFF, 0x3E}, {0xFF, 0x3F}, /* 0xDC-0xDF */ + {0xFF, 0x40}, {0xFF, 0x41}, {0xFF, 0x42}, {0xFF, 0x43}, /* 0xE0-0xE3 */ + {0xFF, 0x44}, {0xFF, 0x45}, {0xFF, 0x46}, {0xFF, 0x47}, /* 0xE4-0xE7 */ + {0xFF, 0x48}, {0xFF, 0x49}, {0xFF, 0x4A}, {0xFF, 0x4B}, /* 0xE8-0xEB */ + {0xFF, 0x4C}, {0xFF, 0x4D}, {0xFF, 0x4E}, {0xFF, 0x4F}, /* 0xEC-0xEF */ + {0xFF, 0x50}, {0xFF, 0x51}, {0xFF, 0x52}, {0xFF, 0x53}, /* 0xF0-0xF3 */ + {0xFF, 0x54}, {0xFF, 0x55}, {0xFF, 0x56}, {0xFF, 0x57}, /* 0xF4-0xF7 */ + {0xFF, 0x58}, {0xFF, 0x59}, {0xFF, 0x5A}, {0xFF, 0x5B}, /* 0xF8-0xFB */ + {0xFF, 0x5C}, {0xFF, 0x5D}, {0xFF, 0xE3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x30, 0x41}, {0x30, 0x42}, {0x30, 0x43}, /* 0xA0-0xA3 */ + {0x30, 0x44}, {0x30, 0x45}, {0x30, 0x46}, {0x30, 0x47}, /* 0xA4-0xA7 */ + {0x30, 0x48}, {0x30, 0x49}, {0x30, 0x4A}, {0x30, 0x4B}, /* 0xA8-0xAB */ + {0x30, 0x4C}, {0x30, 0x4D}, {0x30, 0x4E}, {0x30, 0x4F}, /* 0xAC-0xAF */ + {0x30, 0x50}, {0x30, 0x51}, {0x30, 0x52}, {0x30, 0x53}, /* 0xB0-0xB3 */ + {0x30, 0x54}, {0x30, 0x55}, {0x30, 0x56}, {0x30, 0x57}, /* 0xB4-0xB7 */ + {0x30, 0x58}, {0x30, 0x59}, {0x30, 0x5A}, {0x30, 0x5B}, /* 0xB8-0xBB */ + {0x30, 0x5C}, {0x30, 0x5D}, {0x30, 0x5E}, {0x30, 0x5F}, /* 0xBC-0xBF */ + {0x30, 0x60}, {0x30, 0x61}, {0x30, 0x62}, {0x30, 0x63}, /* 0xC0-0xC3 */ + {0x30, 0x64}, {0x30, 0x65}, {0x30, 0x66}, {0x30, 0x67}, /* 0xC4-0xC7 */ + {0x30, 0x68}, {0x30, 0x69}, {0x30, 0x6A}, {0x30, 0x6B}, /* 0xC8-0xCB */ + {0x30, 0x6C}, {0x30, 0x6D}, {0x30, 0x6E}, {0x30, 0x6F}, /* 0xCC-0xCF */ + {0x30, 0x70}, {0x30, 0x71}, {0x30, 0x72}, {0x30, 0x73}, /* 0xD0-0xD3 */ + {0x30, 0x74}, {0x30, 0x75}, {0x30, 0x76}, {0x30, 0x77}, /* 0xD4-0xD7 */ + {0x30, 0x78}, {0x30, 0x79}, {0x30, 0x7A}, {0x30, 0x7B}, /* 0xD8-0xDB */ + {0x30, 0x7C}, {0x30, 0x7D}, {0x30, 0x7E}, {0x30, 0x7F}, /* 0xDC-0xDF */ + {0x30, 0x80}, {0x30, 0x81}, {0x30, 0x82}, {0x30, 0x83}, /* 0xE0-0xE3 */ + {0x30, 0x84}, {0x30, 0x85}, {0x30, 0x86}, {0x30, 0x87}, /* 0xE4-0xE7 */ + {0x30, 0x88}, {0x30, 0x89}, {0x30, 0x8A}, {0x30, 0x8B}, /* 0xE8-0xEB */ + {0x30, 0x8C}, {0x30, 0x8D}, {0x30, 0x8E}, {0x30, 0x8F}, /* 0xEC-0xEF */ + {0x30, 0x90}, {0x30, 0x91}, {0x30, 0x92}, {0x30, 0x93}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x30, 0xA1}, {0x30, 0xA2}, {0x30, 0xA3}, /* 0xA0-0xA3 */ + {0x30, 0xA4}, {0x30, 0xA5}, {0x30, 0xA6}, {0x30, 0xA7}, /* 0xA4-0xA7 */ + {0x30, 0xA8}, {0x30, 0xA9}, {0x30, 0xAA}, {0x30, 0xAB}, /* 0xA8-0xAB */ + {0x30, 0xAC}, {0x30, 0xAD}, {0x30, 0xAE}, {0x30, 0xAF}, /* 0xAC-0xAF */ + {0x30, 0xB0}, {0x30, 0xB1}, {0x30, 0xB2}, {0x30, 0xB3}, /* 0xB0-0xB3 */ + {0x30, 0xB4}, {0x30, 0xB5}, {0x30, 0xB6}, {0x30, 0xB7}, /* 0xB4-0xB7 */ + {0x30, 0xB8}, {0x30, 0xB9}, {0x30, 0xBA}, {0x30, 0xBB}, /* 0xB8-0xBB */ + {0x30, 0xBC}, {0x30, 0xBD}, {0x30, 0xBE}, {0x30, 0xBF}, /* 0xBC-0xBF */ + {0x30, 0xC0}, {0x30, 0xC1}, {0x30, 0xC2}, {0x30, 0xC3}, /* 0xC0-0xC3 */ + {0x30, 0xC4}, {0x30, 0xC5}, {0x30, 0xC6}, {0x30, 0xC7}, /* 0xC4-0xC7 */ + {0x30, 0xC8}, {0x30, 0xC9}, {0x30, 0xCA}, {0x30, 0xCB}, /* 0xC8-0xCB */ + {0x30, 0xCC}, {0x30, 0xCD}, {0x30, 0xCE}, {0x30, 0xCF}, /* 0xCC-0xCF */ + {0x30, 0xD0}, {0x30, 0xD1}, {0x30, 0xD2}, {0x30, 0xD3}, /* 0xD0-0xD3 */ + {0x30, 0xD4}, {0x30, 0xD5}, {0x30, 0xD6}, {0x30, 0xD7}, /* 0xD4-0xD7 */ + {0x30, 0xD8}, {0x30, 0xD9}, {0x30, 0xDA}, {0x30, 0xDB}, /* 0xD8-0xDB */ + {0x30, 0xDC}, {0x30, 0xDD}, {0x30, 0xDE}, {0x30, 0xDF}, /* 0xDC-0xDF */ + {0x30, 0xE0}, {0x30, 0xE1}, {0x30, 0xE2}, {0x30, 0xE3}, /* 0xE0-0xE3 */ + {0x30, 0xE4}, {0x30, 0xE5}, {0x30, 0xE6}, {0x30, 0xE7}, /* 0xE4-0xE7 */ + {0x30, 0xE8}, {0x30, 0xE9}, {0x30, 0xEA}, {0x30, 0xEB}, /* 0xE8-0xEB */ + {0x30, 0xEC}, {0x30, 0xED}, {0x30, 0xEE}, {0x30, 0xEF}, /* 0xEC-0xEF */ + {0x30, 0xF0}, {0x30, 0xF1}, {0x30, 0xF2}, {0x30, 0xF3}, /* 0xF0-0xF3 */ + {0x30, 0xF4}, {0x30, 0xF5}, {0x30, 0xF6}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x03, 0x91}, {0x03, 0x92}, {0x03, 0x93}, /* 0xA0-0xA3 */ + {0x03, 0x94}, {0x03, 0x95}, {0x03, 0x96}, {0x03, 0x97}, /* 0xA4-0xA7 */ + {0x03, 0x98}, {0x03, 0x99}, {0x03, 0x9A}, {0x03, 0x9B}, /* 0xA8-0xAB */ + {0x03, 0x9C}, {0x03, 0x9D}, {0x03, 0x9E}, {0x03, 0x9F}, /* 0xAC-0xAF */ + {0x03, 0xA0}, {0x03, 0xA1}, {0x03, 0xA3}, {0x03, 0xA4}, /* 0xB0-0xB3 */ + {0x03, 0xA5}, {0x03, 0xA6}, {0x03, 0xA7}, {0x03, 0xA8}, /* 0xB4-0xB7 */ + {0x03, 0xA9}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x03, 0xB1}, {0x03, 0xB2}, {0x03, 0xB3}, /* 0xC0-0xC3 */ + {0x03, 0xB4}, {0x03, 0xB5}, {0x03, 0xB6}, {0x03, 0xB7}, /* 0xC4-0xC7 */ + {0x03, 0xB8}, {0x03, 0xB9}, {0x03, 0xBA}, {0x03, 0xBB}, /* 0xC8-0xCB */ + {0x03, 0xBC}, {0x03, 0xBD}, {0x03, 0xBE}, {0x03, 0xBF}, /* 0xCC-0xCF */ + {0x03, 0xC0}, {0x03, 0xC1}, {0x03, 0xC3}, {0x03, 0xC4}, /* 0xD0-0xD3 */ + {0x03, 0xC5}, {0x03, 0xC6}, {0x03, 0xC7}, {0x03, 0xC8}, /* 0xD4-0xD7 */ + {0x03, 0xC9}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0xFE, 0x35}, {0xFE, 0x36}, {0xFE, 0x39}, {0xFE, 0x3A}, /* 0xE0-0xE3 */ + {0xFE, 0x3F}, {0xFE, 0x40}, {0xFE, 0x3D}, {0xFE, 0x3E}, /* 0xE4-0xE7 */ + {0xFE, 0x41}, {0xFE, 0x42}, {0xFE, 0x43}, {0xFE, 0x44}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0xFE, 0x3B}, {0xFE, 0x3C}, /* 0xEC-0xEF */ + {0xFE, 0x37}, {0xFE, 0x38}, {0xFE, 0x31}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0xFE, 0x33}, {0xFE, 0x34}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x04, 0x10}, {0x04, 0x11}, {0x04, 0x12}, /* 0xA0-0xA3 */ + {0x04, 0x13}, {0x04, 0x14}, {0x04, 0x15}, {0x04, 0x01}, /* 0xA4-0xA7 */ + {0x04, 0x16}, {0x04, 0x17}, {0x04, 0x18}, {0x04, 0x19}, /* 0xA8-0xAB */ + {0x04, 0x1A}, {0x04, 0x1B}, {0x04, 0x1C}, {0x04, 0x1D}, /* 0xAC-0xAF */ + {0x04, 0x1E}, {0x04, 0x1F}, {0x04, 0x20}, {0x04, 0x21}, /* 0xB0-0xB3 */ + {0x04, 0x22}, {0x04, 0x23}, {0x04, 0x24}, {0x04, 0x25}, /* 0xB4-0xB7 */ + {0x04, 0x26}, {0x04, 0x27}, {0x04, 0x28}, {0x04, 0x29}, /* 0xB8-0xBB */ + {0x04, 0x2A}, {0x04, 0x2B}, {0x04, 0x2C}, {0x04, 0x2D}, /* 0xBC-0xBF */ + {0x04, 0x2E}, {0x04, 0x2F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x04, 0x30}, {0x04, 0x31}, {0x04, 0x32}, /* 0xD0-0xD3 */ + {0x04, 0x33}, {0x04, 0x34}, {0x04, 0x35}, {0x04, 0x51}, /* 0xD4-0xD7 */ + {0x04, 0x36}, {0x04, 0x37}, {0x04, 0x38}, {0x04, 0x39}, /* 0xD8-0xDB */ + {0x04, 0x3A}, {0x04, 0x3B}, {0x04, 0x3C}, {0x04, 0x3D}, /* 0xDC-0xDF */ + {0x04, 0x3E}, {0x04, 0x3F}, {0x04, 0x40}, {0x04, 0x41}, /* 0xE0-0xE3 */ + {0x04, 0x42}, {0x04, 0x43}, {0x04, 0x44}, {0x04, 0x45}, /* 0xE4-0xE7 */ + {0x04, 0x46}, {0x04, 0x47}, {0x04, 0x48}, {0x04, 0x49}, /* 0xE8-0xEB */ + {0x04, 0x4A}, {0x04, 0x4B}, {0x04, 0x4C}, {0x04, 0x4D}, /* 0xEC-0xEF */ + {0x04, 0x4E}, {0x04, 0x4F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x02, 0xCA}, {0x02, 0xCB}, {0x02, 0xD9}, {0x20, 0x13}, /* 0x40-0x43 */ + {0x20, 0x15}, {0x20, 0x25}, {0x20, 0x35}, {0x21, 0x05}, /* 0x44-0x47 */ + {0x21, 0x09}, {0x21, 0x96}, {0x21, 0x97}, {0x21, 0x98}, /* 0x48-0x4B */ + {0x21, 0x99}, {0x22, 0x15}, {0x22, 0x1F}, {0x22, 0x23}, /* 0x4C-0x4F */ + {0x22, 0x52}, {0x22, 0x66}, {0x22, 0x67}, {0x22, 0xBF}, /* 0x50-0x53 */ + {0x25, 0x50}, {0x25, 0x51}, {0x25, 0x52}, {0x25, 0x53}, /* 0x54-0x57 */ + {0x25, 0x54}, {0x25, 0x55}, {0x25, 0x56}, {0x25, 0x57}, /* 0x58-0x5B */ + {0x25, 0x58}, {0x25, 0x59}, {0x25, 0x5A}, {0x25, 0x5B}, /* 0x5C-0x5F */ + {0x25, 0x5C}, {0x25, 0x5D}, {0x25, 0x5E}, {0x25, 0x5F}, /* 0x60-0x63 */ + {0x25, 0x60}, {0x25, 0x61}, {0x25, 0x62}, {0x25, 0x63}, /* 0x64-0x67 */ + {0x25, 0x64}, {0x25, 0x65}, {0x25, 0x66}, {0x25, 0x67}, /* 0x68-0x6B */ + {0x25, 0x68}, {0x25, 0x69}, {0x25, 0x6A}, {0x25, 0x6B}, /* 0x6C-0x6F */ + {0x25, 0x6C}, {0x25, 0x6D}, {0x25, 0x6E}, {0x25, 0x6F}, /* 0x70-0x73 */ + {0x25, 0x70}, {0x25, 0x71}, {0x25, 0x72}, {0x25, 0x73}, /* 0x74-0x77 */ + {0x25, 0x81}, {0x25, 0x82}, {0x25, 0x83}, {0x25, 0x84}, /* 0x78-0x7B */ + {0x25, 0x85}, {0x25, 0x86}, {0x25, 0x87}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x25, 0x88}, {0x25, 0x89}, {0x25, 0x8A}, {0x25, 0x8B}, /* 0x80-0x83 */ + {0x25, 0x8C}, {0x25, 0x8D}, {0x25, 0x8E}, {0x25, 0x8F}, /* 0x84-0x87 */ + {0x25, 0x93}, {0x25, 0x94}, {0x25, 0x95}, {0x25, 0xBC}, /* 0x88-0x8B */ + {0x25, 0xBD}, {0x25, 0xE2}, {0x25, 0xE3}, {0x25, 0xE4}, /* 0x8C-0x8F */ + {0x25, 0xE5}, {0x26, 0x09}, {0x22, 0x95}, {0x30, 0x12}, /* 0x90-0x93 */ + {0x30, 0x1D}, {0x30, 0x1E}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x01, 0x01}, {0x00, 0xE1}, {0x01, 0xCE}, /* 0xA0-0xA3 */ + {0x00, 0xE0}, {0x01, 0x13}, {0x00, 0xE9}, {0x01, 0x1B}, /* 0xA4-0xA7 */ + {0x00, 0xE8}, {0x01, 0x2B}, {0x00, 0xED}, {0x01, 0xD0}, /* 0xA8-0xAB */ + {0x00, 0xEC}, {0x01, 0x4D}, {0x00, 0xF3}, {0x01, 0xD2}, /* 0xAC-0xAF */ + {0x00, 0xF2}, {0x01, 0x6B}, {0x00, 0xFA}, {0x01, 0xD4}, /* 0xB0-0xB3 */ + {0x00, 0xF9}, {0x01, 0xD6}, {0x01, 0xD8}, {0x01, 0xDA}, /* 0xB4-0xB7 */ + {0x01, 0xDC}, {0x00, 0xFC}, {0x00, 0xEA}, {0x02, 0x51}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x01, 0x44}, {0x01, 0x48}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x02, 0x61}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x31, 0x05}, {0x31, 0x06}, {0x31, 0x07}, /* 0xC4-0xC7 */ + {0x31, 0x08}, {0x31, 0x09}, {0x31, 0x0A}, {0x31, 0x0B}, /* 0xC8-0xCB */ + {0x31, 0x0C}, {0x31, 0x0D}, {0x31, 0x0E}, {0x31, 0x0F}, /* 0xCC-0xCF */ + {0x31, 0x10}, {0x31, 0x11}, {0x31, 0x12}, {0x31, 0x13}, /* 0xD0-0xD3 */ + {0x31, 0x14}, {0x31, 0x15}, {0x31, 0x16}, {0x31, 0x17}, /* 0xD4-0xD7 */ + {0x31, 0x18}, {0x31, 0x19}, {0x31, 0x1A}, {0x31, 0x1B}, /* 0xD8-0xDB */ + {0x31, 0x1C}, {0x31, 0x1D}, {0x31, 0x1E}, {0x31, 0x1F}, /* 0xDC-0xDF */ + {0x31, 0x20}, {0x31, 0x21}, {0x31, 0x22}, {0x31, 0x23}, /* 0xE0-0xE3 */ + {0x31, 0x24}, {0x31, 0x25}, {0x31, 0x26}, {0x31, 0x27}, /* 0xE4-0xE7 */ + {0x31, 0x28}, {0x31, 0x29}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x30, 0x21}, {0x30, 0x22}, {0x30, 0x23}, {0x30, 0x24}, /* 0x40-0x43 */ + {0x30, 0x25}, {0x30, 0x26}, {0x30, 0x27}, {0x30, 0x28}, /* 0x44-0x47 */ + {0x30, 0x29}, {0x32, 0xA3}, {0x33, 0x8E}, {0x33, 0x8F}, /* 0x48-0x4B */ + {0x33, 0x9C}, {0x33, 0x9D}, {0x33, 0x9E}, {0x33, 0xA1}, /* 0x4C-0x4F */ + {0x33, 0xC4}, {0x33, 0xCE}, {0x33, 0xD1}, {0x33, 0xD2}, /* 0x50-0x53 */ + {0x33, 0xD5}, {0xFE, 0x30}, {0xFF, 0xE2}, {0xFF, 0xE4}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x21, 0x21}, {0x32, 0x31}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x20, 0x10}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x30, 0xFC}, {0x30, 0x9B}, {0x30, 0x9C}, {0x30, 0xFD}, /* 0x60-0x63 */ + {0x30, 0xFE}, {0x30, 0x06}, {0x30, 0x9D}, {0x30, 0x9E}, /* 0x64-0x67 */ + {0xFE, 0x49}, {0xFE, 0x4A}, {0xFE, 0x4B}, {0xFE, 0x4C}, /* 0x68-0x6B */ + {0xFE, 0x4D}, {0xFE, 0x4E}, {0xFE, 0x4F}, {0xFE, 0x50}, /* 0x6C-0x6F */ + {0xFE, 0x51}, {0xFE, 0x52}, {0xFE, 0x54}, {0xFE, 0x55}, /* 0x70-0x73 */ + {0xFE, 0x56}, {0xFE, 0x57}, {0xFE, 0x59}, {0xFE, 0x5A}, /* 0x74-0x77 */ + {0xFE, 0x5B}, {0xFE, 0x5C}, {0xFE, 0x5D}, {0xFE, 0x5E}, /* 0x78-0x7B */ + {0xFE, 0x5F}, {0xFE, 0x60}, {0xFE, 0x61}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0xFE, 0x62}, {0xFE, 0x63}, {0xFE, 0x64}, {0xFE, 0x65}, /* 0x80-0x83 */ + {0xFE, 0x66}, {0xFE, 0x68}, {0xFE, 0x69}, {0xFE, 0x6A}, /* 0x84-0x87 */ + {0xFE, 0x6B}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x30, 0x07}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x25, 0x00}, {0x25, 0x01}, {0x25, 0x02}, {0x25, 0x03}, /* 0xA4-0xA7 */ + {0x25, 0x04}, {0x25, 0x05}, {0x25, 0x06}, {0x25, 0x07}, /* 0xA8-0xAB */ + {0x25, 0x08}, {0x25, 0x09}, {0x25, 0x0A}, {0x25, 0x0B}, /* 0xAC-0xAF */ + {0x25, 0x0C}, {0x25, 0x0D}, {0x25, 0x0E}, {0x25, 0x0F}, /* 0xB0-0xB3 */ + {0x25, 0x10}, {0x25, 0x11}, {0x25, 0x12}, {0x25, 0x13}, /* 0xB4-0xB7 */ + {0x25, 0x14}, {0x25, 0x15}, {0x25, 0x16}, {0x25, 0x17}, /* 0xB8-0xBB */ + {0x25, 0x18}, {0x25, 0x19}, {0x25, 0x1A}, {0x25, 0x1B}, /* 0xBC-0xBF */ + {0x25, 0x1C}, {0x25, 0x1D}, {0x25, 0x1E}, {0x25, 0x1F}, /* 0xC0-0xC3 */ + {0x25, 0x20}, {0x25, 0x21}, {0x25, 0x22}, {0x25, 0x23}, /* 0xC4-0xC7 */ + {0x25, 0x24}, {0x25, 0x25}, {0x25, 0x26}, {0x25, 0x27}, /* 0xC8-0xCB */ + {0x25, 0x28}, {0x25, 0x29}, {0x25, 0x2A}, {0x25, 0x2B}, /* 0xCC-0xCF */ + {0x25, 0x2C}, {0x25, 0x2D}, {0x25, 0x2E}, {0x25, 0x2F}, /* 0xD0-0xD3 */ + {0x25, 0x30}, {0x25, 0x31}, {0x25, 0x32}, {0x25, 0x33}, /* 0xD4-0xD7 */ + {0x25, 0x34}, {0x25, 0x35}, {0x25, 0x36}, {0x25, 0x37}, /* 0xD8-0xDB */ + {0x25, 0x38}, {0x25, 0x39}, {0x25, 0x3A}, {0x25, 0x3B}, /* 0xDC-0xDF */ + {0x25, 0x3C}, {0x25, 0x3D}, {0x25, 0x3E}, {0x25, 0x3F}, /* 0xE0-0xE3 */ + {0x25, 0x40}, {0x25, 0x41}, {0x25, 0x42}, {0x25, 0x43}, /* 0xE4-0xE7 */ + {0x25, 0x44}, {0x25, 0x45}, {0x25, 0x46}, {0x25, 0x47}, /* 0xE8-0xEB */ + {0x25, 0x48}, {0x25, 0x49}, {0x25, 0x4A}, {0x25, 0x4B}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x72, 0xDC}, {0x72, 0xDD}, {0x72, 0xDF}, {0x72, 0xE2}, /* 0x40-0x43 */ + {0x72, 0xE3}, {0x72, 0xE4}, {0x72, 0xE5}, {0x72, 0xE6}, /* 0x44-0x47 */ + {0x72, 0xE7}, {0x72, 0xEA}, {0x72, 0xEB}, {0x72, 0xF5}, /* 0x48-0x4B */ + {0x72, 0xF6}, {0x72, 0xF9}, {0x72, 0xFD}, {0x72, 0xFE}, /* 0x4C-0x4F */ + {0x72, 0xFF}, {0x73, 0x00}, {0x73, 0x02}, {0x73, 0x04}, /* 0x50-0x53 */ + {0x73, 0x05}, {0x73, 0x06}, {0x73, 0x07}, {0x73, 0x08}, /* 0x54-0x57 */ + {0x73, 0x09}, {0x73, 0x0B}, {0x73, 0x0C}, {0x73, 0x0D}, /* 0x58-0x5B */ + {0x73, 0x0F}, {0x73, 0x10}, {0x73, 0x11}, {0x73, 0x12}, /* 0x5C-0x5F */ + {0x73, 0x14}, {0x73, 0x18}, {0x73, 0x19}, {0x73, 0x1A}, /* 0x60-0x63 */ + {0x73, 0x1F}, {0x73, 0x20}, {0x73, 0x23}, {0x73, 0x24}, /* 0x64-0x67 */ + {0x73, 0x26}, {0x73, 0x27}, {0x73, 0x28}, {0x73, 0x2D}, /* 0x68-0x6B */ + {0x73, 0x2F}, {0x73, 0x30}, {0x73, 0x32}, {0x73, 0x33}, /* 0x6C-0x6F */ + {0x73, 0x35}, {0x73, 0x36}, {0x73, 0x3A}, {0x73, 0x3B}, /* 0x70-0x73 */ + {0x73, 0x3C}, {0x73, 0x3D}, {0x73, 0x40}, {0x73, 0x41}, /* 0x74-0x77 */ + {0x73, 0x42}, {0x73, 0x43}, {0x73, 0x44}, {0x73, 0x45}, /* 0x78-0x7B */ + {0x73, 0x46}, {0x73, 0x47}, {0x73, 0x48}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x73, 0x49}, {0x73, 0x4A}, {0x73, 0x4B}, {0x73, 0x4C}, /* 0x80-0x83 */ + {0x73, 0x4E}, {0x73, 0x4F}, {0x73, 0x51}, {0x73, 0x53}, /* 0x84-0x87 */ + {0x73, 0x54}, {0x73, 0x55}, {0x73, 0x56}, {0x73, 0x58}, /* 0x88-0x8B */ + {0x73, 0x59}, {0x73, 0x5A}, {0x73, 0x5B}, {0x73, 0x5C}, /* 0x8C-0x8F */ + {0x73, 0x5D}, {0x73, 0x5E}, {0x73, 0x5F}, {0x73, 0x61}, /* 0x90-0x93 */ + {0x73, 0x62}, {0x73, 0x63}, {0x73, 0x64}, {0x73, 0x65}, /* 0x94-0x97 */ + {0x73, 0x66}, {0x73, 0x67}, {0x73, 0x68}, {0x73, 0x69}, /* 0x98-0x9B */ + {0x73, 0x6A}, {0x73, 0x6B}, {0x73, 0x6E}, {0x73, 0x70}, /* 0x9C-0x9F */ + {0x73, 0x71}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x73, 0x72}, {0x73, 0x73}, {0x73, 0x74}, {0x73, 0x75}, /* 0x40-0x43 */ + {0x73, 0x76}, {0x73, 0x77}, {0x73, 0x78}, {0x73, 0x79}, /* 0x44-0x47 */ + {0x73, 0x7A}, {0x73, 0x7B}, {0x73, 0x7C}, {0x73, 0x7D}, /* 0x48-0x4B */ + {0x73, 0x7F}, {0x73, 0x80}, {0x73, 0x81}, {0x73, 0x82}, /* 0x4C-0x4F */ + {0x73, 0x83}, {0x73, 0x85}, {0x73, 0x86}, {0x73, 0x88}, /* 0x50-0x53 */ + {0x73, 0x8A}, {0x73, 0x8C}, {0x73, 0x8D}, {0x73, 0x8F}, /* 0x54-0x57 */ + {0x73, 0x90}, {0x73, 0x92}, {0x73, 0x93}, {0x73, 0x94}, /* 0x58-0x5B */ + {0x73, 0x95}, {0x73, 0x97}, {0x73, 0x98}, {0x73, 0x99}, /* 0x5C-0x5F */ + {0x73, 0x9A}, {0x73, 0x9C}, {0x73, 0x9D}, {0x73, 0x9E}, /* 0x60-0x63 */ + {0x73, 0xA0}, {0x73, 0xA1}, {0x73, 0xA3}, {0x73, 0xA4}, /* 0x64-0x67 */ + {0x73, 0xA5}, {0x73, 0xA6}, {0x73, 0xA7}, {0x73, 0xA8}, /* 0x68-0x6B */ + {0x73, 0xAA}, {0x73, 0xAC}, {0x73, 0xAD}, {0x73, 0xB1}, /* 0x6C-0x6F */ + {0x73, 0xB4}, {0x73, 0xB5}, {0x73, 0xB6}, {0x73, 0xB8}, /* 0x70-0x73 */ + {0x73, 0xB9}, {0x73, 0xBC}, {0x73, 0xBD}, {0x73, 0xBE}, /* 0x74-0x77 */ + {0x73, 0xBF}, {0x73, 0xC1}, {0x73, 0xC3}, {0x73, 0xC4}, /* 0x78-0x7B */ + {0x73, 0xC5}, {0x73, 0xC6}, {0x73, 0xC7}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x73, 0xCB}, {0x73, 0xCC}, {0x73, 0xCE}, {0x73, 0xD2}, /* 0x80-0x83 */ + {0x73, 0xD3}, {0x73, 0xD4}, {0x73, 0xD5}, {0x73, 0xD6}, /* 0x84-0x87 */ + {0x73, 0xD7}, {0x73, 0xD8}, {0x73, 0xDA}, {0x73, 0xDB}, /* 0x88-0x8B */ + {0x73, 0xDC}, {0x73, 0xDD}, {0x73, 0xDF}, {0x73, 0xE1}, /* 0x8C-0x8F */ + {0x73, 0xE2}, {0x73, 0xE3}, {0x73, 0xE4}, {0x73, 0xE6}, /* 0x90-0x93 */ + {0x73, 0xE8}, {0x73, 0xEA}, {0x73, 0xEB}, {0x73, 0xEC}, /* 0x94-0x97 */ + {0x73, 0xEE}, {0x73, 0xEF}, {0x73, 0xF0}, {0x73, 0xF1}, /* 0x98-0x9B */ + {0x73, 0xF3}, {0x73, 0xF4}, {0x73, 0xF5}, {0x73, 0xF6}, /* 0x9C-0x9F */ + {0x73, 0xF7}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x73, 0xF8}, {0x73, 0xF9}, {0x73, 0xFA}, {0x73, 0xFB}, /* 0x40-0x43 */ + {0x73, 0xFC}, {0x73, 0xFD}, {0x73, 0xFE}, {0x73, 0xFF}, /* 0x44-0x47 */ + {0x74, 0x00}, {0x74, 0x01}, {0x74, 0x02}, {0x74, 0x04}, /* 0x48-0x4B */ + {0x74, 0x07}, {0x74, 0x08}, {0x74, 0x0B}, {0x74, 0x0C}, /* 0x4C-0x4F */ + {0x74, 0x0D}, {0x74, 0x0E}, {0x74, 0x11}, {0x74, 0x12}, /* 0x50-0x53 */ + {0x74, 0x13}, {0x74, 0x14}, {0x74, 0x15}, {0x74, 0x16}, /* 0x54-0x57 */ + {0x74, 0x17}, {0x74, 0x18}, {0x74, 0x19}, {0x74, 0x1C}, /* 0x58-0x5B */ + {0x74, 0x1D}, {0x74, 0x1E}, {0x74, 0x1F}, {0x74, 0x20}, /* 0x5C-0x5F */ + {0x74, 0x21}, {0x74, 0x23}, {0x74, 0x24}, {0x74, 0x27}, /* 0x60-0x63 */ + {0x74, 0x29}, {0x74, 0x2B}, {0x74, 0x2D}, {0x74, 0x2F}, /* 0x64-0x67 */ + {0x74, 0x31}, {0x74, 0x32}, {0x74, 0x37}, {0x74, 0x38}, /* 0x68-0x6B */ + {0x74, 0x39}, {0x74, 0x3A}, {0x74, 0x3B}, {0x74, 0x3D}, /* 0x6C-0x6F */ + {0x74, 0x3E}, {0x74, 0x3F}, {0x74, 0x40}, {0x74, 0x42}, /* 0x70-0x73 */ + {0x74, 0x43}, {0x74, 0x44}, {0x74, 0x45}, {0x74, 0x46}, /* 0x74-0x77 */ + {0x74, 0x47}, {0x74, 0x48}, {0x74, 0x49}, {0x74, 0x4A}, /* 0x78-0x7B */ + {0x74, 0x4B}, {0x74, 0x4C}, {0x74, 0x4D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x74, 0x4E}, {0x74, 0x4F}, {0x74, 0x50}, {0x74, 0x51}, /* 0x80-0x83 */ + {0x74, 0x52}, {0x74, 0x53}, {0x74, 0x54}, {0x74, 0x56}, /* 0x84-0x87 */ + {0x74, 0x58}, {0x74, 0x5D}, {0x74, 0x60}, {0x74, 0x61}, /* 0x88-0x8B */ + {0x74, 0x62}, {0x74, 0x63}, {0x74, 0x64}, {0x74, 0x65}, /* 0x8C-0x8F */ + {0x74, 0x66}, {0x74, 0x67}, {0x74, 0x68}, {0x74, 0x69}, /* 0x90-0x93 */ + {0x74, 0x6A}, {0x74, 0x6B}, {0x74, 0x6C}, {0x74, 0x6E}, /* 0x94-0x97 */ + {0x74, 0x6F}, {0x74, 0x71}, {0x74, 0x72}, {0x74, 0x73}, /* 0x98-0x9B */ + {0x74, 0x74}, {0x74, 0x75}, {0x74, 0x78}, {0x74, 0x79}, /* 0x9C-0x9F */ + {0x74, 0x7A}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x74, 0x7B}, {0x74, 0x7C}, {0x74, 0x7D}, {0x74, 0x7F}, /* 0x40-0x43 */ + {0x74, 0x82}, {0x74, 0x84}, {0x74, 0x85}, {0x74, 0x86}, /* 0x44-0x47 */ + {0x74, 0x88}, {0x74, 0x89}, {0x74, 0x8A}, {0x74, 0x8C}, /* 0x48-0x4B */ + {0x74, 0x8D}, {0x74, 0x8F}, {0x74, 0x91}, {0x74, 0x92}, /* 0x4C-0x4F */ + {0x74, 0x93}, {0x74, 0x94}, {0x74, 0x95}, {0x74, 0x96}, /* 0x50-0x53 */ + {0x74, 0x97}, {0x74, 0x98}, {0x74, 0x99}, {0x74, 0x9A}, /* 0x54-0x57 */ + {0x74, 0x9B}, {0x74, 0x9D}, {0x74, 0x9F}, {0x74, 0xA0}, /* 0x58-0x5B */ + {0x74, 0xA1}, {0x74, 0xA2}, {0x74, 0xA3}, {0x74, 0xA4}, /* 0x5C-0x5F */ + {0x74, 0xA5}, {0x74, 0xA6}, {0x74, 0xAA}, {0x74, 0xAB}, /* 0x60-0x63 */ + {0x74, 0xAC}, {0x74, 0xAD}, {0x74, 0xAE}, {0x74, 0xAF}, /* 0x64-0x67 */ + {0x74, 0xB0}, {0x74, 0xB1}, {0x74, 0xB2}, {0x74, 0xB3}, /* 0x68-0x6B */ + {0x74, 0xB4}, {0x74, 0xB5}, {0x74, 0xB6}, {0x74, 0xB7}, /* 0x6C-0x6F */ + {0x74, 0xB8}, {0x74, 0xB9}, {0x74, 0xBB}, {0x74, 0xBC}, /* 0x70-0x73 */ + {0x74, 0xBD}, {0x74, 0xBE}, {0x74, 0xBF}, {0x74, 0xC0}, /* 0x74-0x77 */ + {0x74, 0xC1}, {0x74, 0xC2}, {0x74, 0xC3}, {0x74, 0xC4}, /* 0x78-0x7B */ + {0x74, 0xC5}, {0x74, 0xC6}, {0x74, 0xC7}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x74, 0xC8}, {0x74, 0xC9}, {0x74, 0xCA}, {0x74, 0xCB}, /* 0x80-0x83 */ + {0x74, 0xCC}, {0x74, 0xCD}, {0x74, 0xCE}, {0x74, 0xCF}, /* 0x84-0x87 */ + {0x74, 0xD0}, {0x74, 0xD1}, {0x74, 0xD3}, {0x74, 0xD4}, /* 0x88-0x8B */ + {0x74, 0xD5}, {0x74, 0xD6}, {0x74, 0xD7}, {0x74, 0xD8}, /* 0x8C-0x8F */ + {0x74, 0xD9}, {0x74, 0xDA}, {0x74, 0xDB}, {0x74, 0xDD}, /* 0x90-0x93 */ + {0x74, 0xDF}, {0x74, 0xE1}, {0x74, 0xE5}, {0x74, 0xE7}, /* 0x94-0x97 */ + {0x74, 0xE8}, {0x74, 0xE9}, {0x74, 0xEA}, {0x74, 0xEB}, /* 0x98-0x9B */ + {0x74, 0xEC}, {0x74, 0xED}, {0x74, 0xF0}, {0x74, 0xF1}, /* 0x9C-0x9F */ + {0x74, 0xF2}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x74, 0xF3}, {0x74, 0xF5}, {0x74, 0xF8}, {0x74, 0xF9}, /* 0x40-0x43 */ + {0x74, 0xFA}, {0x74, 0xFB}, {0x74, 0xFC}, {0x74, 0xFD}, /* 0x44-0x47 */ + {0x74, 0xFE}, {0x75, 0x00}, {0x75, 0x01}, {0x75, 0x02}, /* 0x48-0x4B */ + {0x75, 0x03}, {0x75, 0x05}, {0x75, 0x06}, {0x75, 0x07}, /* 0x4C-0x4F */ + {0x75, 0x08}, {0x75, 0x09}, {0x75, 0x0A}, {0x75, 0x0B}, /* 0x50-0x53 */ + {0x75, 0x0C}, {0x75, 0x0E}, {0x75, 0x10}, {0x75, 0x12}, /* 0x54-0x57 */ + {0x75, 0x14}, {0x75, 0x15}, {0x75, 0x16}, {0x75, 0x17}, /* 0x58-0x5B */ + {0x75, 0x1B}, {0x75, 0x1D}, {0x75, 0x1E}, {0x75, 0x20}, /* 0x5C-0x5F */ + {0x75, 0x21}, {0x75, 0x22}, {0x75, 0x23}, {0x75, 0x24}, /* 0x60-0x63 */ + {0x75, 0x26}, {0x75, 0x27}, {0x75, 0x2A}, {0x75, 0x2E}, /* 0x64-0x67 */ + {0x75, 0x34}, {0x75, 0x36}, {0x75, 0x39}, {0x75, 0x3C}, /* 0x68-0x6B */ + {0x75, 0x3D}, {0x75, 0x3F}, {0x75, 0x41}, {0x75, 0x42}, /* 0x6C-0x6F */ + {0x75, 0x43}, {0x75, 0x44}, {0x75, 0x46}, {0x75, 0x47}, /* 0x70-0x73 */ + {0x75, 0x49}, {0x75, 0x4A}, {0x75, 0x4D}, {0x75, 0x50}, /* 0x74-0x77 */ + {0x75, 0x51}, {0x75, 0x52}, {0x75, 0x53}, {0x75, 0x55}, /* 0x78-0x7B */ + {0x75, 0x56}, {0x75, 0x57}, {0x75, 0x58}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x75, 0x5D}, {0x75, 0x5E}, {0x75, 0x5F}, {0x75, 0x60}, /* 0x80-0x83 */ + {0x75, 0x61}, {0x75, 0x62}, {0x75, 0x63}, {0x75, 0x64}, /* 0x84-0x87 */ + {0x75, 0x67}, {0x75, 0x68}, {0x75, 0x69}, {0x75, 0x6B}, /* 0x88-0x8B */ + {0x75, 0x6C}, {0x75, 0x6D}, {0x75, 0x6E}, {0x75, 0x6F}, /* 0x8C-0x8F */ + {0x75, 0x70}, {0x75, 0x71}, {0x75, 0x73}, {0x75, 0x75}, /* 0x90-0x93 */ + {0x75, 0x76}, {0x75, 0x77}, {0x75, 0x7A}, {0x75, 0x7B}, /* 0x94-0x97 */ + {0x75, 0x7C}, {0x75, 0x7D}, {0x75, 0x7E}, {0x75, 0x80}, /* 0x98-0x9B */ + {0x75, 0x81}, {0x75, 0x82}, {0x75, 0x84}, {0x75, 0x85}, /* 0x9C-0x9F */ + {0x75, 0x87}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x75, 0x88}, {0x75, 0x89}, {0x75, 0x8A}, {0x75, 0x8C}, /* 0x40-0x43 */ + {0x75, 0x8D}, {0x75, 0x8E}, {0x75, 0x90}, {0x75, 0x93}, /* 0x44-0x47 */ + {0x75, 0x95}, {0x75, 0x98}, {0x75, 0x9B}, {0x75, 0x9C}, /* 0x48-0x4B */ + {0x75, 0x9E}, {0x75, 0xA2}, {0x75, 0xA6}, {0x75, 0xA7}, /* 0x4C-0x4F */ + {0x75, 0xA8}, {0x75, 0xA9}, {0x75, 0xAA}, {0x75, 0xAD}, /* 0x50-0x53 */ + {0x75, 0xB6}, {0x75, 0xB7}, {0x75, 0xBA}, {0x75, 0xBB}, /* 0x54-0x57 */ + {0x75, 0xBF}, {0x75, 0xC0}, {0x75, 0xC1}, {0x75, 0xC6}, /* 0x58-0x5B */ + {0x75, 0xCB}, {0x75, 0xCC}, {0x75, 0xCE}, {0x75, 0xCF}, /* 0x5C-0x5F */ + {0x75, 0xD0}, {0x75, 0xD1}, {0x75, 0xD3}, {0x75, 0xD7}, /* 0x60-0x63 */ + {0x75, 0xD9}, {0x75, 0xDA}, {0x75, 0xDC}, {0x75, 0xDD}, /* 0x64-0x67 */ + {0x75, 0xDF}, {0x75, 0xE0}, {0x75, 0xE1}, {0x75, 0xE5}, /* 0x68-0x6B */ + {0x75, 0xE9}, {0x75, 0xEC}, {0x75, 0xED}, {0x75, 0xEE}, /* 0x6C-0x6F */ + {0x75, 0xEF}, {0x75, 0xF2}, {0x75, 0xF3}, {0x75, 0xF5}, /* 0x70-0x73 */ + {0x75, 0xF6}, {0x75, 0xF7}, {0x75, 0xF8}, {0x75, 0xFA}, /* 0x74-0x77 */ + {0x75, 0xFB}, {0x75, 0xFD}, {0x75, 0xFE}, {0x76, 0x02}, /* 0x78-0x7B */ + {0x76, 0x04}, {0x76, 0x06}, {0x76, 0x07}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x76, 0x08}, {0x76, 0x09}, {0x76, 0x0B}, {0x76, 0x0D}, /* 0x80-0x83 */ + {0x76, 0x0E}, {0x76, 0x0F}, {0x76, 0x11}, {0x76, 0x12}, /* 0x84-0x87 */ + {0x76, 0x13}, {0x76, 0x14}, {0x76, 0x16}, {0x76, 0x1A}, /* 0x88-0x8B */ + {0x76, 0x1C}, {0x76, 0x1D}, {0x76, 0x1E}, {0x76, 0x21}, /* 0x8C-0x8F */ + {0x76, 0x23}, {0x76, 0x27}, {0x76, 0x28}, {0x76, 0x2C}, /* 0x90-0x93 */ + {0x76, 0x2E}, {0x76, 0x2F}, {0x76, 0x31}, {0x76, 0x32}, /* 0x94-0x97 */ + {0x76, 0x36}, {0x76, 0x37}, {0x76, 0x39}, {0x76, 0x3A}, /* 0x98-0x9B */ + {0x76, 0x3B}, {0x76, 0x3D}, {0x76, 0x41}, {0x76, 0x42}, /* 0x9C-0x9F */ + {0x76, 0x44}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x76, 0x45}, {0x76, 0x46}, {0x76, 0x47}, {0x76, 0x48}, /* 0x40-0x43 */ + {0x76, 0x49}, {0x76, 0x4A}, {0x76, 0x4B}, {0x76, 0x4E}, /* 0x44-0x47 */ + {0x76, 0x4F}, {0x76, 0x50}, {0x76, 0x51}, {0x76, 0x52}, /* 0x48-0x4B */ + {0x76, 0x53}, {0x76, 0x55}, {0x76, 0x57}, {0x76, 0x58}, /* 0x4C-0x4F */ + {0x76, 0x59}, {0x76, 0x5A}, {0x76, 0x5B}, {0x76, 0x5D}, /* 0x50-0x53 */ + {0x76, 0x5F}, {0x76, 0x60}, {0x76, 0x61}, {0x76, 0x62}, /* 0x54-0x57 */ + {0x76, 0x64}, {0x76, 0x65}, {0x76, 0x66}, {0x76, 0x67}, /* 0x58-0x5B */ + {0x76, 0x68}, {0x76, 0x69}, {0x76, 0x6A}, {0x76, 0x6C}, /* 0x5C-0x5F */ + {0x76, 0x6D}, {0x76, 0x6E}, {0x76, 0x70}, {0x76, 0x71}, /* 0x60-0x63 */ + {0x76, 0x72}, {0x76, 0x73}, {0x76, 0x74}, {0x76, 0x75}, /* 0x64-0x67 */ + {0x76, 0x76}, {0x76, 0x77}, {0x76, 0x79}, {0x76, 0x7A}, /* 0x68-0x6B */ + {0x76, 0x7C}, {0x76, 0x7F}, {0x76, 0x80}, {0x76, 0x81}, /* 0x6C-0x6F */ + {0x76, 0x83}, {0x76, 0x85}, {0x76, 0x89}, {0x76, 0x8A}, /* 0x70-0x73 */ + {0x76, 0x8C}, {0x76, 0x8D}, {0x76, 0x8F}, {0x76, 0x90}, /* 0x74-0x77 */ + {0x76, 0x92}, {0x76, 0x94}, {0x76, 0x95}, {0x76, 0x97}, /* 0x78-0x7B */ + {0x76, 0x98}, {0x76, 0x9A}, {0x76, 0x9B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x76, 0x9C}, {0x76, 0x9D}, {0x76, 0x9E}, {0x76, 0x9F}, /* 0x80-0x83 */ + {0x76, 0xA0}, {0x76, 0xA1}, {0x76, 0xA2}, {0x76, 0xA3}, /* 0x84-0x87 */ + {0x76, 0xA5}, {0x76, 0xA6}, {0x76, 0xA7}, {0x76, 0xA8}, /* 0x88-0x8B */ + {0x76, 0xA9}, {0x76, 0xAA}, {0x76, 0xAB}, {0x76, 0xAC}, /* 0x8C-0x8F */ + {0x76, 0xAD}, {0x76, 0xAF}, {0x76, 0xB0}, {0x76, 0xB3}, /* 0x90-0x93 */ + {0x76, 0xB5}, {0x76, 0xB6}, {0x76, 0xB7}, {0x76, 0xB8}, /* 0x94-0x97 */ + {0x76, 0xB9}, {0x76, 0xBA}, {0x76, 0xBB}, {0x76, 0xBC}, /* 0x98-0x9B */ + {0x76, 0xBD}, {0x76, 0xBE}, {0x76, 0xC0}, {0x76, 0xC1}, /* 0x9C-0x9F */ + {0x76, 0xC3}, {0x55, 0x4A}, {0x96, 0x3F}, {0x57, 0xC3}, /* 0xA0-0xA3 */ + {0x63, 0x28}, {0x54, 0xCE}, {0x55, 0x09}, {0x54, 0xC0}, /* 0xA4-0xA7 */ + {0x76, 0x91}, {0x76, 0x4C}, {0x85, 0x3C}, {0x77, 0xEE}, /* 0xA8-0xAB */ + {0x82, 0x7E}, {0x78, 0x8D}, {0x72, 0x31}, {0x96, 0x98}, /* 0xAC-0xAF */ + {0x97, 0x8D}, {0x6C, 0x28}, {0x5B, 0x89}, {0x4F, 0xFA}, /* 0xB0-0xB3 */ + {0x63, 0x09}, {0x66, 0x97}, {0x5C, 0xB8}, {0x80, 0xFA}, /* 0xB4-0xB7 */ + {0x68, 0x48}, {0x80, 0xAE}, {0x66, 0x02}, {0x76, 0xCE}, /* 0xB8-0xBB */ + {0x51, 0xF9}, {0x65, 0x56}, {0x71, 0xAC}, {0x7F, 0xF1}, /* 0xBC-0xBF */ + {0x88, 0x84}, {0x50, 0xB2}, {0x59, 0x65}, {0x61, 0xCA}, /* 0xC0-0xC3 */ + {0x6F, 0xB3}, {0x82, 0xAD}, {0x63, 0x4C}, {0x62, 0x52}, /* 0xC4-0xC7 */ + {0x53, 0xED}, {0x54, 0x27}, {0x7B, 0x06}, {0x51, 0x6B}, /* 0xC8-0xCB */ + {0x75, 0xA4}, {0x5D, 0xF4}, {0x62, 0xD4}, {0x8D, 0xCB}, /* 0xCC-0xCF */ + {0x97, 0x76}, {0x62, 0x8A}, {0x80, 0x19}, {0x57, 0x5D}, /* 0xD0-0xD3 */ + {0x97, 0x38}, {0x7F, 0x62}, {0x72, 0x38}, {0x76, 0x7D}, /* 0xD4-0xD7 */ + {0x67, 0xCF}, {0x76, 0x7E}, {0x64, 0x46}, {0x4F, 0x70}, /* 0xD8-0xDB */ + {0x8D, 0x25}, {0x62, 0xDC}, {0x7A, 0x17}, {0x65, 0x91}, /* 0xDC-0xDF */ + {0x73, 0xED}, {0x64, 0x2C}, {0x62, 0x73}, {0x82, 0x2C}, /* 0xE0-0xE3 */ + {0x98, 0x81}, {0x67, 0x7F}, {0x72, 0x48}, {0x62, 0x6E}, /* 0xE4-0xE7 */ + {0x62, 0xCC}, {0x4F, 0x34}, {0x74, 0xE3}, {0x53, 0x4A}, /* 0xE8-0xEB */ + {0x52, 0x9E}, {0x7E, 0xCA}, {0x90, 0xA6}, {0x5E, 0x2E}, /* 0xEC-0xEF */ + {0x68, 0x86}, {0x69, 0x9C}, {0x81, 0x80}, {0x7E, 0xD1}, /* 0xF0-0xF3 */ + {0x68, 0xD2}, {0x78, 0xC5}, {0x86, 0x8C}, {0x95, 0x51}, /* 0xF4-0xF7 */ + {0x50, 0x8D}, {0x8C, 0x24}, {0x82, 0xDE}, {0x80, 0xDE}, /* 0xF8-0xFB */ + {0x53, 0x05}, {0x89, 0x12}, {0x52, 0x65}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x76, 0xC4}, {0x76, 0xC7}, {0x76, 0xC9}, {0x76, 0xCB}, /* 0x40-0x43 */ + {0x76, 0xCC}, {0x76, 0xD3}, {0x76, 0xD5}, {0x76, 0xD9}, /* 0x44-0x47 */ + {0x76, 0xDA}, {0x76, 0xDC}, {0x76, 0xDD}, {0x76, 0xDE}, /* 0x48-0x4B */ + {0x76, 0xE0}, {0x76, 0xE1}, {0x76, 0xE2}, {0x76, 0xE3}, /* 0x4C-0x4F */ + {0x76, 0xE4}, {0x76, 0xE6}, {0x76, 0xE7}, {0x76, 0xE8}, /* 0x50-0x53 */ + {0x76, 0xE9}, {0x76, 0xEA}, {0x76, 0xEB}, {0x76, 0xEC}, /* 0x54-0x57 */ + {0x76, 0xED}, {0x76, 0xF0}, {0x76, 0xF3}, {0x76, 0xF5}, /* 0x58-0x5B */ + {0x76, 0xF6}, {0x76, 0xF7}, {0x76, 0xFA}, {0x76, 0xFB}, /* 0x5C-0x5F */ + {0x76, 0xFD}, {0x76, 0xFF}, {0x77, 0x00}, {0x77, 0x02}, /* 0x60-0x63 */ + {0x77, 0x03}, {0x77, 0x05}, {0x77, 0x06}, {0x77, 0x0A}, /* 0x64-0x67 */ + {0x77, 0x0C}, {0x77, 0x0E}, {0x77, 0x0F}, {0x77, 0x10}, /* 0x68-0x6B */ + {0x77, 0x11}, {0x77, 0x12}, {0x77, 0x13}, {0x77, 0x14}, /* 0x6C-0x6F */ + {0x77, 0x15}, {0x77, 0x16}, {0x77, 0x17}, {0x77, 0x18}, /* 0x70-0x73 */ + {0x77, 0x1B}, {0x77, 0x1C}, {0x77, 0x1D}, {0x77, 0x1E}, /* 0x74-0x77 */ + {0x77, 0x21}, {0x77, 0x23}, {0x77, 0x24}, {0x77, 0x25}, /* 0x78-0x7B */ + {0x77, 0x27}, {0x77, 0x2A}, {0x77, 0x2B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x77, 0x2C}, {0x77, 0x2E}, {0x77, 0x30}, {0x77, 0x31}, /* 0x80-0x83 */ + {0x77, 0x32}, {0x77, 0x33}, {0x77, 0x34}, {0x77, 0x39}, /* 0x84-0x87 */ + {0x77, 0x3B}, {0x77, 0x3D}, {0x77, 0x3E}, {0x77, 0x3F}, /* 0x88-0x8B */ + {0x77, 0x42}, {0x77, 0x44}, {0x77, 0x45}, {0x77, 0x46}, /* 0x8C-0x8F */ + {0x77, 0x48}, {0x77, 0x49}, {0x77, 0x4A}, {0x77, 0x4B}, /* 0x90-0x93 */ + {0x77, 0x4C}, {0x77, 0x4D}, {0x77, 0x4E}, {0x77, 0x4F}, /* 0x94-0x97 */ + {0x77, 0x52}, {0x77, 0x53}, {0x77, 0x54}, {0x77, 0x55}, /* 0x98-0x9B */ + {0x77, 0x56}, {0x77, 0x57}, {0x77, 0x58}, {0x77, 0x59}, /* 0x9C-0x9F */ + {0x77, 0x5C}, {0x85, 0x84}, {0x96, 0xF9}, {0x4F, 0xDD}, /* 0xA0-0xA3 */ + {0x58, 0x21}, {0x99, 0x71}, {0x5B, 0x9D}, {0x62, 0xB1}, /* 0xA4-0xA7 */ + {0x62, 0xA5}, {0x66, 0xB4}, {0x8C, 0x79}, {0x9C, 0x8D}, /* 0xA8-0xAB */ + {0x72, 0x06}, {0x67, 0x6F}, {0x78, 0x91}, {0x60, 0xB2}, /* 0xAC-0xAF */ + {0x53, 0x51}, {0x53, 0x17}, {0x8F, 0x88}, {0x80, 0xCC}, /* 0xB0-0xB3 */ + {0x8D, 0x1D}, {0x94, 0xA1}, {0x50, 0x0D}, {0x72, 0xC8}, /* 0xB4-0xB7 */ + {0x59, 0x07}, {0x60, 0xEB}, {0x71, 0x19}, {0x88, 0xAB}, /* 0xB8-0xBB */ + {0x59, 0x54}, {0x82, 0xEF}, {0x67, 0x2C}, {0x7B, 0x28}, /* 0xBC-0xBF */ + {0x5D, 0x29}, {0x7E, 0xF7}, {0x75, 0x2D}, {0x6C, 0xF5}, /* 0xC0-0xC3 */ + {0x8E, 0x66}, {0x8F, 0xF8}, {0x90, 0x3C}, {0x9F, 0x3B}, /* 0xC4-0xC7 */ + {0x6B, 0xD4}, {0x91, 0x19}, {0x7B, 0x14}, {0x5F, 0x7C}, /* 0xC8-0xCB */ + {0x78, 0xA7}, {0x84, 0xD6}, {0x85, 0x3D}, {0x6B, 0xD5}, /* 0xCC-0xCF */ + {0x6B, 0xD9}, {0x6B, 0xD6}, {0x5E, 0x01}, {0x5E, 0x87}, /* 0xD0-0xD3 */ + {0x75, 0xF9}, {0x95, 0xED}, {0x65, 0x5D}, {0x5F, 0x0A}, /* 0xD4-0xD7 */ + {0x5F, 0xC5}, {0x8F, 0x9F}, {0x58, 0xC1}, {0x81, 0xC2}, /* 0xD8-0xDB */ + {0x90, 0x7F}, {0x96, 0x5B}, {0x97, 0xAD}, {0x8F, 0xB9}, /* 0xDC-0xDF */ + {0x7F, 0x16}, {0x8D, 0x2C}, {0x62, 0x41}, {0x4F, 0xBF}, /* 0xE0-0xE3 */ + {0x53, 0xD8}, {0x53, 0x5E}, {0x8F, 0xA8}, {0x8F, 0xA9}, /* 0xE4-0xE7 */ + {0x8F, 0xAB}, {0x90, 0x4D}, {0x68, 0x07}, {0x5F, 0x6A}, /* 0xE8-0xEB */ + {0x81, 0x98}, {0x88, 0x68}, {0x9C, 0xD6}, {0x61, 0x8B}, /* 0xEC-0xEF */ + {0x52, 0x2B}, {0x76, 0x2A}, {0x5F, 0x6C}, {0x65, 0x8C}, /* 0xF0-0xF3 */ + {0x6F, 0xD2}, {0x6E, 0xE8}, {0x5B, 0xBE}, {0x64, 0x48}, /* 0xF4-0xF7 */ + {0x51, 0x75}, {0x51, 0xB0}, {0x67, 0xC4}, {0x4E, 0x19}, /* 0xF8-0xFB */ + {0x79, 0xC9}, {0x99, 0x7C}, {0x70, 0xB3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x77, 0x5D}, {0x77, 0x5E}, {0x77, 0x5F}, {0x77, 0x60}, /* 0x40-0x43 */ + {0x77, 0x64}, {0x77, 0x67}, {0x77, 0x69}, {0x77, 0x6A}, /* 0x44-0x47 */ + {0x77, 0x6D}, {0x77, 0x6E}, {0x77, 0x6F}, {0x77, 0x70}, /* 0x48-0x4B */ + {0x77, 0x71}, {0x77, 0x72}, {0x77, 0x73}, {0x77, 0x74}, /* 0x4C-0x4F */ + {0x77, 0x75}, {0x77, 0x76}, {0x77, 0x77}, {0x77, 0x78}, /* 0x50-0x53 */ + {0x77, 0x7A}, {0x77, 0x7B}, {0x77, 0x7C}, {0x77, 0x81}, /* 0x54-0x57 */ + {0x77, 0x82}, {0x77, 0x83}, {0x77, 0x86}, {0x77, 0x87}, /* 0x58-0x5B */ + {0x77, 0x88}, {0x77, 0x89}, {0x77, 0x8A}, {0x77, 0x8B}, /* 0x5C-0x5F */ + {0x77, 0x8F}, {0x77, 0x90}, {0x77, 0x93}, {0x77, 0x94}, /* 0x60-0x63 */ + {0x77, 0x95}, {0x77, 0x96}, {0x77, 0x97}, {0x77, 0x98}, /* 0x64-0x67 */ + {0x77, 0x99}, {0x77, 0x9A}, {0x77, 0x9B}, {0x77, 0x9C}, /* 0x68-0x6B */ + {0x77, 0x9D}, {0x77, 0x9E}, {0x77, 0xA1}, {0x77, 0xA3}, /* 0x6C-0x6F */ + {0x77, 0xA4}, {0x77, 0xA6}, {0x77, 0xA8}, {0x77, 0xAB}, /* 0x70-0x73 */ + {0x77, 0xAD}, {0x77, 0xAE}, {0x77, 0xAF}, {0x77, 0xB1}, /* 0x74-0x77 */ + {0x77, 0xB2}, {0x77, 0xB4}, {0x77, 0xB6}, {0x77, 0xB7}, /* 0x78-0x7B */ + {0x77, 0xB8}, {0x77, 0xB9}, {0x77, 0xBA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x77, 0xBC}, {0x77, 0xBE}, {0x77, 0xC0}, {0x77, 0xC1}, /* 0x80-0x83 */ + {0x77, 0xC2}, {0x77, 0xC3}, {0x77, 0xC4}, {0x77, 0xC5}, /* 0x84-0x87 */ + {0x77, 0xC6}, {0x77, 0xC7}, {0x77, 0xC8}, {0x77, 0xC9}, /* 0x88-0x8B */ + {0x77, 0xCA}, {0x77, 0xCB}, {0x77, 0xCC}, {0x77, 0xCE}, /* 0x8C-0x8F */ + {0x77, 0xCF}, {0x77, 0xD0}, {0x77, 0xD1}, {0x77, 0xD2}, /* 0x90-0x93 */ + {0x77, 0xD3}, {0x77, 0xD4}, {0x77, 0xD5}, {0x77, 0xD6}, /* 0x94-0x97 */ + {0x77, 0xD8}, {0x77, 0xD9}, {0x77, 0xDA}, {0x77, 0xDD}, /* 0x98-0x9B */ + {0x77, 0xDE}, {0x77, 0xDF}, {0x77, 0xE0}, {0x77, 0xE1}, /* 0x9C-0x9F */ + {0x77, 0xE4}, {0x75, 0xC5}, {0x5E, 0x76}, {0x73, 0xBB}, /* 0xA0-0xA3 */ + {0x83, 0xE0}, {0x64, 0xAD}, {0x62, 0xE8}, {0x94, 0xB5}, /* 0xA4-0xA7 */ + {0x6C, 0xE2}, {0x53, 0x5A}, {0x52, 0xC3}, {0x64, 0x0F}, /* 0xA8-0xAB */ + {0x94, 0xC2}, {0x7B, 0x94}, {0x4F, 0x2F}, {0x5E, 0x1B}, /* 0xAC-0xAF */ + {0x82, 0x36}, {0x81, 0x16}, {0x81, 0x8A}, {0x6E, 0x24}, /* 0xB0-0xB3 */ + {0x6C, 0xCA}, {0x9A, 0x73}, {0x63, 0x55}, {0x53, 0x5C}, /* 0xB4-0xB7 */ + {0x54, 0xFA}, {0x88, 0x65}, {0x57, 0xE0}, {0x4E, 0x0D}, /* 0xB8-0xBB */ + {0x5E, 0x03}, {0x6B, 0x65}, {0x7C, 0x3F}, {0x90, 0xE8}, /* 0xBC-0xBF */ + {0x60, 0x16}, {0x64, 0xE6}, {0x73, 0x1C}, {0x88, 0xC1}, /* 0xC0-0xC3 */ + {0x67, 0x50}, {0x62, 0x4D}, {0x8D, 0x22}, {0x77, 0x6C}, /* 0xC4-0xC7 */ + {0x8E, 0x29}, {0x91, 0xC7}, {0x5F, 0x69}, {0x83, 0xDC}, /* 0xC8-0xCB */ + {0x85, 0x21}, {0x99, 0x10}, {0x53, 0xC2}, {0x86, 0x95}, /* 0xCC-0xCF */ + {0x6B, 0x8B}, {0x60, 0xED}, {0x60, 0xE8}, {0x70, 0x7F}, /* 0xD0-0xD3 */ + {0x82, 0xCD}, {0x82, 0x31}, {0x4E, 0xD3}, {0x6C, 0xA7}, /* 0xD4-0xD7 */ + {0x85, 0xCF}, {0x64, 0xCD}, {0x7C, 0xD9}, {0x69, 0xFD}, /* 0xD8-0xDB */ + {0x66, 0xF9}, {0x83, 0x49}, {0x53, 0x95}, {0x7B, 0x56}, /* 0xDC-0xDF */ + {0x4F, 0xA7}, {0x51, 0x8C}, {0x6D, 0x4B}, {0x5C, 0x42}, /* 0xE0-0xE3 */ + {0x8E, 0x6D}, {0x63, 0xD2}, {0x53, 0xC9}, {0x83, 0x2C}, /* 0xE4-0xE7 */ + {0x83, 0x36}, {0x67, 0xE5}, {0x78, 0xB4}, {0x64, 0x3D}, /* 0xE8-0xEB */ + {0x5B, 0xDF}, {0x5C, 0x94}, {0x5D, 0xEE}, {0x8B, 0xE7}, /* 0xEC-0xEF */ + {0x62, 0xC6}, {0x67, 0xF4}, {0x8C, 0x7A}, {0x64, 0x00}, /* 0xF0-0xF3 */ + {0x63, 0xBA}, {0x87, 0x49}, {0x99, 0x8B}, {0x8C, 0x17}, /* 0xF4-0xF7 */ + {0x7F, 0x20}, {0x94, 0xF2}, {0x4E, 0xA7}, {0x96, 0x10}, /* 0xF8-0xFB */ + {0x98, 0xA4}, {0x66, 0x0C}, {0x73, 0x16}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x77, 0xE6}, {0x77, 0xE8}, {0x77, 0xEA}, {0x77, 0xEF}, /* 0x40-0x43 */ + {0x77, 0xF0}, {0x77, 0xF1}, {0x77, 0xF2}, {0x77, 0xF4}, /* 0x44-0x47 */ + {0x77, 0xF5}, {0x77, 0xF7}, {0x77, 0xF9}, {0x77, 0xFA}, /* 0x48-0x4B */ + {0x77, 0xFB}, {0x77, 0xFC}, {0x78, 0x03}, {0x78, 0x04}, /* 0x4C-0x4F */ + {0x78, 0x05}, {0x78, 0x06}, {0x78, 0x07}, {0x78, 0x08}, /* 0x50-0x53 */ + {0x78, 0x0A}, {0x78, 0x0B}, {0x78, 0x0E}, {0x78, 0x0F}, /* 0x54-0x57 */ + {0x78, 0x10}, {0x78, 0x13}, {0x78, 0x15}, {0x78, 0x19}, /* 0x58-0x5B */ + {0x78, 0x1B}, {0x78, 0x1E}, {0x78, 0x20}, {0x78, 0x21}, /* 0x5C-0x5F */ + {0x78, 0x22}, {0x78, 0x24}, {0x78, 0x28}, {0x78, 0x2A}, /* 0x60-0x63 */ + {0x78, 0x2B}, {0x78, 0x2E}, {0x78, 0x2F}, {0x78, 0x31}, /* 0x64-0x67 */ + {0x78, 0x32}, {0x78, 0x33}, {0x78, 0x35}, {0x78, 0x36}, /* 0x68-0x6B */ + {0x78, 0x3D}, {0x78, 0x3F}, {0x78, 0x41}, {0x78, 0x42}, /* 0x6C-0x6F */ + {0x78, 0x43}, {0x78, 0x44}, {0x78, 0x46}, {0x78, 0x48}, /* 0x70-0x73 */ + {0x78, 0x49}, {0x78, 0x4A}, {0x78, 0x4B}, {0x78, 0x4D}, /* 0x74-0x77 */ + {0x78, 0x4F}, {0x78, 0x51}, {0x78, 0x53}, {0x78, 0x54}, /* 0x78-0x7B */ + {0x78, 0x58}, {0x78, 0x59}, {0x78, 0x5A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x78, 0x5B}, {0x78, 0x5C}, {0x78, 0x5E}, {0x78, 0x5F}, /* 0x80-0x83 */ + {0x78, 0x60}, {0x78, 0x61}, {0x78, 0x62}, {0x78, 0x63}, /* 0x84-0x87 */ + {0x78, 0x64}, {0x78, 0x65}, {0x78, 0x66}, {0x78, 0x67}, /* 0x88-0x8B */ + {0x78, 0x68}, {0x78, 0x69}, {0x78, 0x6F}, {0x78, 0x70}, /* 0x8C-0x8F */ + {0x78, 0x71}, {0x78, 0x72}, {0x78, 0x73}, {0x78, 0x74}, /* 0x90-0x93 */ + {0x78, 0x75}, {0x78, 0x76}, {0x78, 0x78}, {0x78, 0x79}, /* 0x94-0x97 */ + {0x78, 0x7A}, {0x78, 0x7B}, {0x78, 0x7D}, {0x78, 0x7E}, /* 0x98-0x9B */ + {0x78, 0x7F}, {0x78, 0x80}, {0x78, 0x81}, {0x78, 0x82}, /* 0x9C-0x9F */ + {0x78, 0x83}, {0x57, 0x3A}, {0x5C, 0x1D}, {0x5E, 0x38}, /* 0xA0-0xA3 */ + {0x95, 0x7F}, {0x50, 0x7F}, {0x80, 0xA0}, {0x53, 0x82}, /* 0xA4-0xA7 */ + {0x65, 0x5E}, {0x75, 0x45}, {0x55, 0x31}, {0x50, 0x21}, /* 0xA8-0xAB */ + {0x8D, 0x85}, {0x62, 0x84}, {0x94, 0x9E}, {0x67, 0x1D}, /* 0xAC-0xAF */ + {0x56, 0x32}, {0x6F, 0x6E}, {0x5D, 0xE2}, {0x54, 0x35}, /* 0xB0-0xB3 */ + {0x70, 0x92}, {0x8F, 0x66}, {0x62, 0x6F}, {0x64, 0xA4}, /* 0xB4-0xB7 */ + {0x63, 0xA3}, {0x5F, 0x7B}, {0x6F, 0x88}, {0x90, 0xF4}, /* 0xB8-0xBB */ + {0x81, 0xE3}, {0x8F, 0xB0}, {0x5C, 0x18}, {0x66, 0x68}, /* 0xBC-0xBF */ + {0x5F, 0xF1}, {0x6C, 0x89}, {0x96, 0x48}, {0x8D, 0x81}, /* 0xC0-0xC3 */ + {0x88, 0x6C}, {0x64, 0x91}, {0x79, 0xF0}, {0x57, 0xCE}, /* 0xC4-0xC7 */ + {0x6A, 0x59}, {0x62, 0x10}, {0x54, 0x48}, {0x4E, 0x58}, /* 0xC8-0xCB */ + {0x7A, 0x0B}, {0x60, 0xE9}, {0x6F, 0x84}, {0x8B, 0xDA}, /* 0xCC-0xCF */ + {0x62, 0x7F}, {0x90, 0x1E}, {0x9A, 0x8B}, {0x79, 0xE4}, /* 0xD0-0xD3 */ + {0x54, 0x03}, {0x75, 0xF4}, {0x63, 0x01}, {0x53, 0x19}, /* 0xD4-0xD7 */ + {0x6C, 0x60}, {0x8F, 0xDF}, {0x5F, 0x1B}, {0x9A, 0x70}, /* 0xD8-0xDB */ + {0x80, 0x3B}, {0x9F, 0x7F}, {0x4F, 0x88}, {0x5C, 0x3A}, /* 0xDC-0xDF */ + {0x8D, 0x64}, {0x7F, 0xC5}, {0x65, 0xA5}, {0x70, 0xBD}, /* 0xE0-0xE3 */ + {0x51, 0x45}, {0x51, 0xB2}, {0x86, 0x6B}, {0x5D, 0x07}, /* 0xE4-0xE7 */ + {0x5B, 0xA0}, {0x62, 0xBD}, {0x91, 0x6C}, {0x75, 0x74}, /* 0xE8-0xEB */ + {0x8E, 0x0C}, {0x7A, 0x20}, {0x61, 0x01}, {0x7B, 0x79}, /* 0xEC-0xEF */ + {0x4E, 0xC7}, {0x7E, 0xF8}, {0x77, 0x85}, {0x4E, 0x11}, /* 0xF0-0xF3 */ + {0x81, 0xED}, {0x52, 0x1D}, {0x51, 0xFA}, {0x6A, 0x71}, /* 0xF4-0xF7 */ + {0x53, 0xA8}, {0x8E, 0x87}, {0x95, 0x04}, {0x96, 0xCF}, /* 0xF8-0xFB */ + {0x6E, 0xC1}, {0x96, 0x64}, {0x69, 0x5A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x78, 0x84}, {0x78, 0x85}, {0x78, 0x86}, {0x78, 0x88}, /* 0x40-0x43 */ + {0x78, 0x8A}, {0x78, 0x8B}, {0x78, 0x8F}, {0x78, 0x90}, /* 0x44-0x47 */ + {0x78, 0x92}, {0x78, 0x94}, {0x78, 0x95}, {0x78, 0x96}, /* 0x48-0x4B */ + {0x78, 0x99}, {0x78, 0x9D}, {0x78, 0x9E}, {0x78, 0xA0}, /* 0x4C-0x4F */ + {0x78, 0xA2}, {0x78, 0xA4}, {0x78, 0xA6}, {0x78, 0xA8}, /* 0x50-0x53 */ + {0x78, 0xA9}, {0x78, 0xAA}, {0x78, 0xAB}, {0x78, 0xAC}, /* 0x54-0x57 */ + {0x78, 0xAD}, {0x78, 0xAE}, {0x78, 0xAF}, {0x78, 0xB5}, /* 0x58-0x5B */ + {0x78, 0xB6}, {0x78, 0xB7}, {0x78, 0xB8}, {0x78, 0xBA}, /* 0x5C-0x5F */ + {0x78, 0xBB}, {0x78, 0xBC}, {0x78, 0xBD}, {0x78, 0xBF}, /* 0x60-0x63 */ + {0x78, 0xC0}, {0x78, 0xC2}, {0x78, 0xC3}, {0x78, 0xC4}, /* 0x64-0x67 */ + {0x78, 0xC6}, {0x78, 0xC7}, {0x78, 0xC8}, {0x78, 0xCC}, /* 0x68-0x6B */ + {0x78, 0xCD}, {0x78, 0xCE}, {0x78, 0xCF}, {0x78, 0xD1}, /* 0x6C-0x6F */ + {0x78, 0xD2}, {0x78, 0xD3}, {0x78, 0xD6}, {0x78, 0xD7}, /* 0x70-0x73 */ + {0x78, 0xD8}, {0x78, 0xDA}, {0x78, 0xDB}, {0x78, 0xDC}, /* 0x74-0x77 */ + {0x78, 0xDD}, {0x78, 0xDE}, {0x78, 0xDF}, {0x78, 0xE0}, /* 0x78-0x7B */ + {0x78, 0xE1}, {0x78, 0xE2}, {0x78, 0xE3}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x78, 0xE4}, {0x78, 0xE5}, {0x78, 0xE6}, {0x78, 0xE7}, /* 0x80-0x83 */ + {0x78, 0xE9}, {0x78, 0xEA}, {0x78, 0xEB}, {0x78, 0xED}, /* 0x84-0x87 */ + {0x78, 0xEE}, {0x78, 0xEF}, {0x78, 0xF0}, {0x78, 0xF1}, /* 0x88-0x8B */ + {0x78, 0xF3}, {0x78, 0xF5}, {0x78, 0xF6}, {0x78, 0xF8}, /* 0x8C-0x8F */ + {0x78, 0xF9}, {0x78, 0xFB}, {0x78, 0xFC}, {0x78, 0xFD}, /* 0x90-0x93 */ + {0x78, 0xFE}, {0x78, 0xFF}, {0x79, 0x00}, {0x79, 0x02}, /* 0x94-0x97 */ + {0x79, 0x03}, {0x79, 0x04}, {0x79, 0x06}, {0x79, 0x07}, /* 0x98-0x9B */ + {0x79, 0x08}, {0x79, 0x09}, {0x79, 0x0A}, {0x79, 0x0B}, /* 0x9C-0x9F */ + {0x79, 0x0C}, {0x78, 0x40}, {0x50, 0xA8}, {0x77, 0xD7}, /* 0xA0-0xA3 */ + {0x64, 0x10}, {0x89, 0xE6}, {0x59, 0x04}, {0x63, 0xE3}, /* 0xA4-0xA7 */ + {0x5D, 0xDD}, {0x7A, 0x7F}, {0x69, 0x3D}, {0x4F, 0x20}, /* 0xA8-0xAB */ + {0x82, 0x39}, {0x55, 0x98}, {0x4E, 0x32}, {0x75, 0xAE}, /* 0xAC-0xAF */ + {0x7A, 0x97}, {0x5E, 0x62}, {0x5E, 0x8A}, {0x95, 0xEF}, /* 0xB0-0xB3 */ + {0x52, 0x1B}, {0x54, 0x39}, {0x70, 0x8A}, {0x63, 0x76}, /* 0xB4-0xB7 */ + {0x95, 0x24}, {0x57, 0x82}, {0x66, 0x25}, {0x69, 0x3F}, /* 0xB8-0xBB */ + {0x91, 0x87}, {0x55, 0x07}, {0x6D, 0xF3}, {0x7E, 0xAF}, /* 0xBC-0xBF */ + {0x88, 0x22}, {0x62, 0x33}, {0x7E, 0xF0}, {0x75, 0xB5}, /* 0xC0-0xC3 */ + {0x83, 0x28}, {0x78, 0xC1}, {0x96, 0xCC}, {0x8F, 0x9E}, /* 0xC4-0xC7 */ + {0x61, 0x48}, {0x74, 0xF7}, {0x8B, 0xCD}, {0x6B, 0x64}, /* 0xC8-0xCB */ + {0x52, 0x3A}, {0x8D, 0x50}, {0x6B, 0x21}, {0x80, 0x6A}, /* 0xCC-0xCF */ + {0x84, 0x71}, {0x56, 0xF1}, {0x53, 0x06}, {0x4E, 0xCE}, /* 0xD0-0xD3 */ + {0x4E, 0x1B}, {0x51, 0xD1}, {0x7C, 0x97}, {0x91, 0x8B}, /* 0xD4-0xD7 */ + {0x7C, 0x07}, {0x4F, 0xC3}, {0x8E, 0x7F}, {0x7B, 0xE1}, /* 0xD8-0xDB */ + {0x7A, 0x9C}, {0x64, 0x67}, {0x5D, 0x14}, {0x50, 0xAC}, /* 0xDC-0xDF */ + {0x81, 0x06}, {0x76, 0x01}, {0x7C, 0xB9}, {0x6D, 0xEC}, /* 0xE0-0xE3 */ + {0x7F, 0xE0}, {0x67, 0x51}, {0x5B, 0x58}, {0x5B, 0xF8}, /* 0xE4-0xE7 */ + {0x78, 0xCB}, {0x64, 0xAE}, {0x64, 0x13}, {0x63, 0xAA}, /* 0xE8-0xEB */ + {0x63, 0x2B}, {0x95, 0x19}, {0x64, 0x2D}, {0x8F, 0xBE}, /* 0xEC-0xEF */ + {0x7B, 0x54}, {0x76, 0x29}, {0x62, 0x53}, {0x59, 0x27}, /* 0xF0-0xF3 */ + {0x54, 0x46}, {0x6B, 0x79}, {0x50, 0xA3}, {0x62, 0x34}, /* 0xF4-0xF7 */ + {0x5E, 0x26}, {0x6B, 0x86}, {0x4E, 0xE3}, {0x8D, 0x37}, /* 0xF8-0xFB */ + {0x88, 0x8B}, {0x5F, 0x85}, {0x90, 0x2E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x79, 0x0D}, {0x79, 0x0E}, {0x79, 0x0F}, {0x79, 0x10}, /* 0x40-0x43 */ + {0x79, 0x11}, {0x79, 0x12}, {0x79, 0x14}, {0x79, 0x15}, /* 0x44-0x47 */ + {0x79, 0x16}, {0x79, 0x17}, {0x79, 0x18}, {0x79, 0x19}, /* 0x48-0x4B */ + {0x79, 0x1A}, {0x79, 0x1B}, {0x79, 0x1C}, {0x79, 0x1D}, /* 0x4C-0x4F */ + {0x79, 0x1F}, {0x79, 0x20}, {0x79, 0x21}, {0x79, 0x22}, /* 0x50-0x53 */ + {0x79, 0x23}, {0x79, 0x25}, {0x79, 0x26}, {0x79, 0x27}, /* 0x54-0x57 */ + {0x79, 0x28}, {0x79, 0x29}, {0x79, 0x2A}, {0x79, 0x2B}, /* 0x58-0x5B */ + {0x79, 0x2C}, {0x79, 0x2D}, {0x79, 0x2E}, {0x79, 0x2F}, /* 0x5C-0x5F */ + {0x79, 0x30}, {0x79, 0x31}, {0x79, 0x32}, {0x79, 0x33}, /* 0x60-0x63 */ + {0x79, 0x35}, {0x79, 0x36}, {0x79, 0x37}, {0x79, 0x38}, /* 0x64-0x67 */ + {0x79, 0x39}, {0x79, 0x3D}, {0x79, 0x3F}, {0x79, 0x42}, /* 0x68-0x6B */ + {0x79, 0x43}, {0x79, 0x44}, {0x79, 0x45}, {0x79, 0x47}, /* 0x6C-0x6F */ + {0x79, 0x4A}, {0x79, 0x4B}, {0x79, 0x4C}, {0x79, 0x4D}, /* 0x70-0x73 */ + {0x79, 0x4E}, {0x79, 0x4F}, {0x79, 0x50}, {0x79, 0x51}, /* 0x74-0x77 */ + {0x79, 0x52}, {0x79, 0x54}, {0x79, 0x55}, {0x79, 0x58}, /* 0x78-0x7B */ + {0x79, 0x59}, {0x79, 0x61}, {0x79, 0x63}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x79, 0x64}, {0x79, 0x66}, {0x79, 0x69}, {0x79, 0x6A}, /* 0x80-0x83 */ + {0x79, 0x6B}, {0x79, 0x6C}, {0x79, 0x6E}, {0x79, 0x70}, /* 0x84-0x87 */ + {0x79, 0x71}, {0x79, 0x72}, {0x79, 0x73}, {0x79, 0x74}, /* 0x88-0x8B */ + {0x79, 0x75}, {0x79, 0x76}, {0x79, 0x79}, {0x79, 0x7B}, /* 0x8C-0x8F */ + {0x79, 0x7C}, {0x79, 0x7D}, {0x79, 0x7E}, {0x79, 0x7F}, /* 0x90-0x93 */ + {0x79, 0x82}, {0x79, 0x83}, {0x79, 0x86}, {0x79, 0x87}, /* 0x94-0x97 */ + {0x79, 0x88}, {0x79, 0x89}, {0x79, 0x8B}, {0x79, 0x8C}, /* 0x98-0x9B */ + {0x79, 0x8D}, {0x79, 0x8E}, {0x79, 0x90}, {0x79, 0x91}, /* 0x9C-0x9F */ + {0x79, 0x92}, {0x60, 0x20}, {0x80, 0x3D}, {0x62, 0xC5}, /* 0xA0-0xA3 */ + {0x4E, 0x39}, {0x53, 0x55}, {0x90, 0xF8}, {0x63, 0xB8}, /* 0xA4-0xA7 */ + {0x80, 0xC6}, {0x65, 0xE6}, {0x6C, 0x2E}, {0x4F, 0x46}, /* 0xA8-0xAB */ + {0x60, 0xEE}, {0x6D, 0xE1}, {0x8B, 0xDE}, {0x5F, 0x39}, /* 0xAC-0xAF */ + {0x86, 0xCB}, {0x5F, 0x53}, {0x63, 0x21}, {0x51, 0x5A}, /* 0xB0-0xB3 */ + {0x83, 0x61}, {0x68, 0x63}, {0x52, 0x00}, {0x63, 0x63}, /* 0xB4-0xB7 */ + {0x8E, 0x48}, {0x50, 0x12}, {0x5C, 0x9B}, {0x79, 0x77}, /* 0xB8-0xBB */ + {0x5B, 0xFC}, {0x52, 0x30}, {0x7A, 0x3B}, {0x60, 0xBC}, /* 0xBC-0xBF */ + {0x90, 0x53}, {0x76, 0xD7}, {0x5F, 0xB7}, {0x5F, 0x97}, /* 0xC0-0xC3 */ + {0x76, 0x84}, {0x8E, 0x6C}, {0x70, 0x6F}, {0x76, 0x7B}, /* 0xC4-0xC7 */ + {0x7B, 0x49}, {0x77, 0xAA}, {0x51, 0xF3}, {0x90, 0x93}, /* 0xC8-0xCB */ + {0x58, 0x24}, {0x4F, 0x4E}, {0x6E, 0xF4}, {0x8F, 0xEA}, /* 0xCC-0xCF */ + {0x65, 0x4C}, {0x7B, 0x1B}, {0x72, 0xC4}, {0x6D, 0xA4}, /* 0xD0-0xD3 */ + {0x7F, 0xDF}, {0x5A, 0xE1}, {0x62, 0xB5}, {0x5E, 0x95}, /* 0xD4-0xD7 */ + {0x57, 0x30}, {0x84, 0x82}, {0x7B, 0x2C}, {0x5E, 0x1D}, /* 0xD8-0xDB */ + {0x5F, 0x1F}, {0x90, 0x12}, {0x7F, 0x14}, {0x98, 0xA0}, /* 0xDC-0xDF */ + {0x63, 0x82}, {0x6E, 0xC7}, {0x78, 0x98}, {0x70, 0xB9}, /* 0xE0-0xE3 */ + {0x51, 0x78}, {0x97, 0x5B}, {0x57, 0xAB}, {0x75, 0x35}, /* 0xE4-0xE7 */ + {0x4F, 0x43}, {0x75, 0x38}, {0x5E, 0x97}, {0x60, 0xE6}, /* 0xE8-0xEB */ + {0x59, 0x60}, {0x6D, 0xC0}, {0x6B, 0xBF}, {0x78, 0x89}, /* 0xEC-0xEF */ + {0x53, 0xFC}, {0x96, 0xD5}, {0x51, 0xCB}, {0x52, 0x01}, /* 0xF0-0xF3 */ + {0x63, 0x89}, {0x54, 0x0A}, {0x94, 0x93}, {0x8C, 0x03}, /* 0xF4-0xF7 */ + {0x8D, 0xCC}, {0x72, 0x39}, {0x78, 0x9F}, {0x87, 0x76}, /* 0xF8-0xFB */ + {0x8F, 0xED}, {0x8C, 0x0D}, {0x53, 0xE0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x79, 0x93}, {0x79, 0x94}, {0x79, 0x95}, {0x79, 0x96}, /* 0x40-0x43 */ + {0x79, 0x97}, {0x79, 0x98}, {0x79, 0x99}, {0x79, 0x9B}, /* 0x44-0x47 */ + {0x79, 0x9C}, {0x79, 0x9D}, {0x79, 0x9E}, {0x79, 0x9F}, /* 0x48-0x4B */ + {0x79, 0xA0}, {0x79, 0xA1}, {0x79, 0xA2}, {0x79, 0xA3}, /* 0x4C-0x4F */ + {0x79, 0xA4}, {0x79, 0xA5}, {0x79, 0xA6}, {0x79, 0xA8}, /* 0x50-0x53 */ + {0x79, 0xA9}, {0x79, 0xAA}, {0x79, 0xAB}, {0x79, 0xAC}, /* 0x54-0x57 */ + {0x79, 0xAD}, {0x79, 0xAE}, {0x79, 0xAF}, {0x79, 0xB0}, /* 0x58-0x5B */ + {0x79, 0xB1}, {0x79, 0xB2}, {0x79, 0xB4}, {0x79, 0xB5}, /* 0x5C-0x5F */ + {0x79, 0xB6}, {0x79, 0xB7}, {0x79, 0xB8}, {0x79, 0xBC}, /* 0x60-0x63 */ + {0x79, 0xBF}, {0x79, 0xC2}, {0x79, 0xC4}, {0x79, 0xC5}, /* 0x64-0x67 */ + {0x79, 0xC7}, {0x79, 0xC8}, {0x79, 0xCA}, {0x79, 0xCC}, /* 0x68-0x6B */ + {0x79, 0xCE}, {0x79, 0xCF}, {0x79, 0xD0}, {0x79, 0xD3}, /* 0x6C-0x6F */ + {0x79, 0xD4}, {0x79, 0xD6}, {0x79, 0xD7}, {0x79, 0xD9}, /* 0x70-0x73 */ + {0x79, 0xDA}, {0x79, 0xDB}, {0x79, 0xDC}, {0x79, 0xDD}, /* 0x74-0x77 */ + {0x79, 0xDE}, {0x79, 0xE0}, {0x79, 0xE1}, {0x79, 0xE2}, /* 0x78-0x7B */ + {0x79, 0xE5}, {0x79, 0xE8}, {0x79, 0xEA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x79, 0xEC}, {0x79, 0xEE}, {0x79, 0xF1}, {0x79, 0xF2}, /* 0x80-0x83 */ + {0x79, 0xF3}, {0x79, 0xF4}, {0x79, 0xF5}, {0x79, 0xF6}, /* 0x84-0x87 */ + {0x79, 0xF7}, {0x79, 0xF9}, {0x79, 0xFA}, {0x79, 0xFC}, /* 0x88-0x8B */ + {0x79, 0xFE}, {0x79, 0xFF}, {0x7A, 0x01}, {0x7A, 0x04}, /* 0x8C-0x8F */ + {0x7A, 0x05}, {0x7A, 0x07}, {0x7A, 0x08}, {0x7A, 0x09}, /* 0x90-0x93 */ + {0x7A, 0x0A}, {0x7A, 0x0C}, {0x7A, 0x0F}, {0x7A, 0x10}, /* 0x94-0x97 */ + {0x7A, 0x11}, {0x7A, 0x12}, {0x7A, 0x13}, {0x7A, 0x15}, /* 0x98-0x9B */ + {0x7A, 0x16}, {0x7A, 0x18}, {0x7A, 0x19}, {0x7A, 0x1B}, /* 0x9C-0x9F */ + {0x7A, 0x1C}, {0x4E, 0x01}, {0x76, 0xEF}, {0x53, 0xEE}, /* 0xA0-0xA3 */ + {0x94, 0x89}, {0x98, 0x76}, {0x9F, 0x0E}, {0x95, 0x2D}, /* 0xA4-0xA7 */ + {0x5B, 0x9A}, {0x8B, 0xA2}, {0x4E, 0x22}, {0x4E, 0x1C}, /* 0xA8-0xAB */ + {0x51, 0xAC}, {0x84, 0x63}, {0x61, 0xC2}, {0x52, 0xA8}, /* 0xAC-0xAF */ + {0x68, 0x0B}, {0x4F, 0x97}, {0x60, 0x6B}, {0x51, 0xBB}, /* 0xB0-0xB3 */ + {0x6D, 0x1E}, {0x51, 0x5C}, {0x62, 0x96}, {0x65, 0x97}, /* 0xB4-0xB7 */ + {0x96, 0x61}, {0x8C, 0x46}, {0x90, 0x17}, {0x75, 0xD8}, /* 0xB8-0xBB */ + {0x90, 0xFD}, {0x77, 0x63}, {0x6B, 0xD2}, {0x72, 0x8A}, /* 0xBC-0xBF */ + {0x72, 0xEC}, {0x8B, 0xFB}, {0x58, 0x35}, {0x77, 0x79}, /* 0xC0-0xC3 */ + {0x8D, 0x4C}, {0x67, 0x5C}, {0x95, 0x40}, {0x80, 0x9A}, /* 0xC4-0xC7 */ + {0x5E, 0xA6}, {0x6E, 0x21}, {0x59, 0x92}, {0x7A, 0xEF}, /* 0xC8-0xCB */ + {0x77, 0xED}, {0x95, 0x3B}, {0x6B, 0xB5}, {0x65, 0xAD}, /* 0xCC-0xCF */ + {0x7F, 0x0E}, {0x58, 0x06}, {0x51, 0x51}, {0x96, 0x1F}, /* 0xD0-0xD3 */ + {0x5B, 0xF9}, {0x58, 0xA9}, {0x54, 0x28}, {0x8E, 0x72}, /* 0xD4-0xD7 */ + {0x65, 0x66}, {0x98, 0x7F}, {0x56, 0xE4}, {0x94, 0x9D}, /* 0xD8-0xDB */ + {0x76, 0xFE}, {0x90, 0x41}, {0x63, 0x87}, {0x54, 0xC6}, /* 0xDC-0xDF */ + {0x59, 0x1A}, {0x59, 0x3A}, {0x57, 0x9B}, {0x8E, 0xB2}, /* 0xE0-0xE3 */ + {0x67, 0x35}, {0x8D, 0xFA}, {0x82, 0x35}, {0x52, 0x41}, /* 0xE4-0xE7 */ + {0x60, 0xF0}, {0x58, 0x15}, {0x86, 0xFE}, {0x5C, 0xE8}, /* 0xE8-0xEB */ + {0x9E, 0x45}, {0x4F, 0xC4}, {0x98, 0x9D}, {0x8B, 0xB9}, /* 0xEC-0xEF */ + {0x5A, 0x25}, {0x60, 0x76}, {0x53, 0x84}, {0x62, 0x7C}, /* 0xF0-0xF3 */ + {0x90, 0x4F}, {0x91, 0x02}, {0x99, 0x7F}, {0x60, 0x69}, /* 0xF4-0xF7 */ + {0x80, 0x0C}, {0x51, 0x3F}, {0x80, 0x33}, {0x5C, 0x14}, /* 0xF8-0xFB */ + {0x99, 0x75}, {0x6D, 0x31}, {0x4E, 0x8C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7A, 0x1D}, {0x7A, 0x1F}, {0x7A, 0x21}, {0x7A, 0x22}, /* 0x40-0x43 */ + {0x7A, 0x24}, {0x7A, 0x25}, {0x7A, 0x26}, {0x7A, 0x27}, /* 0x44-0x47 */ + {0x7A, 0x28}, {0x7A, 0x29}, {0x7A, 0x2A}, {0x7A, 0x2B}, /* 0x48-0x4B */ + {0x7A, 0x2C}, {0x7A, 0x2D}, {0x7A, 0x2E}, {0x7A, 0x2F}, /* 0x4C-0x4F */ + {0x7A, 0x30}, {0x7A, 0x31}, {0x7A, 0x32}, {0x7A, 0x34}, /* 0x50-0x53 */ + {0x7A, 0x35}, {0x7A, 0x36}, {0x7A, 0x38}, {0x7A, 0x3A}, /* 0x54-0x57 */ + {0x7A, 0x3E}, {0x7A, 0x40}, {0x7A, 0x41}, {0x7A, 0x42}, /* 0x58-0x5B */ + {0x7A, 0x43}, {0x7A, 0x44}, {0x7A, 0x45}, {0x7A, 0x47}, /* 0x5C-0x5F */ + {0x7A, 0x48}, {0x7A, 0x49}, {0x7A, 0x4A}, {0x7A, 0x4B}, /* 0x60-0x63 */ + {0x7A, 0x4C}, {0x7A, 0x4D}, {0x7A, 0x4E}, {0x7A, 0x4F}, /* 0x64-0x67 */ + {0x7A, 0x50}, {0x7A, 0x52}, {0x7A, 0x53}, {0x7A, 0x54}, /* 0x68-0x6B */ + {0x7A, 0x55}, {0x7A, 0x56}, {0x7A, 0x58}, {0x7A, 0x59}, /* 0x6C-0x6F */ + {0x7A, 0x5A}, {0x7A, 0x5B}, {0x7A, 0x5C}, {0x7A, 0x5D}, /* 0x70-0x73 */ + {0x7A, 0x5E}, {0x7A, 0x5F}, {0x7A, 0x60}, {0x7A, 0x61}, /* 0x74-0x77 */ + {0x7A, 0x62}, {0x7A, 0x63}, {0x7A, 0x64}, {0x7A, 0x65}, /* 0x78-0x7B */ + {0x7A, 0x66}, {0x7A, 0x67}, {0x7A, 0x68}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7A, 0x69}, {0x7A, 0x6A}, {0x7A, 0x6B}, {0x7A, 0x6C}, /* 0x80-0x83 */ + {0x7A, 0x6D}, {0x7A, 0x6E}, {0x7A, 0x6F}, {0x7A, 0x71}, /* 0x84-0x87 */ + {0x7A, 0x72}, {0x7A, 0x73}, {0x7A, 0x75}, {0x7A, 0x7B}, /* 0x88-0x8B */ + {0x7A, 0x7C}, {0x7A, 0x7D}, {0x7A, 0x7E}, {0x7A, 0x82}, /* 0x8C-0x8F */ + {0x7A, 0x85}, {0x7A, 0x87}, {0x7A, 0x89}, {0x7A, 0x8A}, /* 0x90-0x93 */ + {0x7A, 0x8B}, {0x7A, 0x8C}, {0x7A, 0x8E}, {0x7A, 0x8F}, /* 0x94-0x97 */ + {0x7A, 0x90}, {0x7A, 0x93}, {0x7A, 0x94}, {0x7A, 0x99}, /* 0x98-0x9B */ + {0x7A, 0x9A}, {0x7A, 0x9B}, {0x7A, 0x9E}, {0x7A, 0xA1}, /* 0x9C-0x9F */ + {0x7A, 0xA2}, {0x8D, 0x30}, {0x53, 0xD1}, {0x7F, 0x5A}, /* 0xA0-0xA3 */ + {0x7B, 0x4F}, {0x4F, 0x10}, {0x4E, 0x4F}, {0x96, 0x00}, /* 0xA4-0xA7 */ + {0x6C, 0xD5}, {0x73, 0xD0}, {0x85, 0xE9}, {0x5E, 0x06}, /* 0xA8-0xAB */ + {0x75, 0x6A}, {0x7F, 0xFB}, {0x6A, 0x0A}, {0x77, 0xFE}, /* 0xAC-0xAF */ + {0x94, 0x92}, {0x7E, 0x41}, {0x51, 0xE1}, {0x70, 0xE6}, /* 0xB0-0xB3 */ + {0x53, 0xCD}, {0x8F, 0xD4}, {0x83, 0x03}, {0x8D, 0x29}, /* 0xB4-0xB7 */ + {0x72, 0xAF}, {0x99, 0x6D}, {0x6C, 0xDB}, {0x57, 0x4A}, /* 0xB8-0xBB */ + {0x82, 0xB3}, {0x65, 0xB9}, {0x80, 0xAA}, {0x62, 0x3F}, /* 0xBC-0xBF */ + {0x96, 0x32}, {0x59, 0xA8}, {0x4E, 0xFF}, {0x8B, 0xBF}, /* 0xC0-0xC3 */ + {0x7E, 0xBA}, {0x65, 0x3E}, {0x83, 0xF2}, {0x97, 0x5E}, /* 0xC4-0xC7 */ + {0x55, 0x61}, {0x98, 0xDE}, {0x80, 0xA5}, {0x53, 0x2A}, /* 0xC8-0xCB */ + {0x8B, 0xFD}, {0x54, 0x20}, {0x80, 0xBA}, {0x5E, 0x9F}, /* 0xCC-0xCF */ + {0x6C, 0xB8}, {0x8D, 0x39}, {0x82, 0xAC}, {0x91, 0x5A}, /* 0xD0-0xD3 */ + {0x54, 0x29}, {0x6C, 0x1B}, {0x52, 0x06}, {0x7E, 0xB7}, /* 0xD4-0xD7 */ + {0x57, 0x5F}, {0x71, 0x1A}, {0x6C, 0x7E}, {0x7C, 0x89}, /* 0xD8-0xDB */ + {0x59, 0x4B}, {0x4E, 0xFD}, {0x5F, 0xFF}, {0x61, 0x24}, /* 0xDC-0xDF */ + {0x7C, 0xAA}, {0x4E, 0x30}, {0x5C, 0x01}, {0x67, 0xAB}, /* 0xE0-0xE3 */ + {0x87, 0x02}, {0x5C, 0xF0}, {0x95, 0x0B}, {0x98, 0xCE}, /* 0xE4-0xE7 */ + {0x75, 0xAF}, {0x70, 0xFD}, {0x90, 0x22}, {0x51, 0xAF}, /* 0xE8-0xEB */ + {0x7F, 0x1D}, {0x8B, 0xBD}, {0x59, 0x49}, {0x51, 0xE4}, /* 0xEC-0xEF */ + {0x4F, 0x5B}, {0x54, 0x26}, {0x59, 0x2B}, {0x65, 0x77}, /* 0xF0-0xF3 */ + {0x80, 0xA4}, {0x5B, 0x75}, {0x62, 0x76}, {0x62, 0xC2}, /* 0xF4-0xF7 */ + {0x8F, 0x90}, {0x5E, 0x45}, {0x6C, 0x1F}, {0x7B, 0x26}, /* 0xF8-0xFB */ + {0x4F, 0x0F}, {0x4F, 0xD8}, {0x67, 0x0D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7A, 0xA3}, {0x7A, 0xA4}, {0x7A, 0xA7}, {0x7A, 0xA9}, /* 0x40-0x43 */ + {0x7A, 0xAA}, {0x7A, 0xAB}, {0x7A, 0xAE}, {0x7A, 0xAF}, /* 0x44-0x47 */ + {0x7A, 0xB0}, {0x7A, 0xB1}, {0x7A, 0xB2}, {0x7A, 0xB4}, /* 0x48-0x4B */ + {0x7A, 0xB5}, {0x7A, 0xB6}, {0x7A, 0xB7}, {0x7A, 0xB8}, /* 0x4C-0x4F */ + {0x7A, 0xB9}, {0x7A, 0xBA}, {0x7A, 0xBB}, {0x7A, 0xBC}, /* 0x50-0x53 */ + {0x7A, 0xBD}, {0x7A, 0xBE}, {0x7A, 0xC0}, {0x7A, 0xC1}, /* 0x54-0x57 */ + {0x7A, 0xC2}, {0x7A, 0xC3}, {0x7A, 0xC4}, {0x7A, 0xC5}, /* 0x58-0x5B */ + {0x7A, 0xC6}, {0x7A, 0xC7}, {0x7A, 0xC8}, {0x7A, 0xC9}, /* 0x5C-0x5F */ + {0x7A, 0xCA}, {0x7A, 0xCC}, {0x7A, 0xCD}, {0x7A, 0xCE}, /* 0x60-0x63 */ + {0x7A, 0xCF}, {0x7A, 0xD0}, {0x7A, 0xD1}, {0x7A, 0xD2}, /* 0x64-0x67 */ + {0x7A, 0xD3}, {0x7A, 0xD4}, {0x7A, 0xD5}, {0x7A, 0xD7}, /* 0x68-0x6B */ + {0x7A, 0xD8}, {0x7A, 0xDA}, {0x7A, 0xDB}, {0x7A, 0xDC}, /* 0x6C-0x6F */ + {0x7A, 0xDD}, {0x7A, 0xE1}, {0x7A, 0xE2}, {0x7A, 0xE4}, /* 0x70-0x73 */ + {0x7A, 0xE7}, {0x7A, 0xE8}, {0x7A, 0xE9}, {0x7A, 0xEA}, /* 0x74-0x77 */ + {0x7A, 0xEB}, {0x7A, 0xEC}, {0x7A, 0xEE}, {0x7A, 0xF0}, /* 0x78-0x7B */ + {0x7A, 0xF1}, {0x7A, 0xF2}, {0x7A, 0xF3}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7A, 0xF4}, {0x7A, 0xF5}, {0x7A, 0xF6}, {0x7A, 0xF7}, /* 0x80-0x83 */ + {0x7A, 0xF8}, {0x7A, 0xFB}, {0x7A, 0xFC}, {0x7A, 0xFE}, /* 0x84-0x87 */ + {0x7B, 0x00}, {0x7B, 0x01}, {0x7B, 0x02}, {0x7B, 0x05}, /* 0x88-0x8B */ + {0x7B, 0x07}, {0x7B, 0x09}, {0x7B, 0x0C}, {0x7B, 0x0D}, /* 0x8C-0x8F */ + {0x7B, 0x0E}, {0x7B, 0x10}, {0x7B, 0x12}, {0x7B, 0x13}, /* 0x90-0x93 */ + {0x7B, 0x16}, {0x7B, 0x17}, {0x7B, 0x18}, {0x7B, 0x1A}, /* 0x94-0x97 */ + {0x7B, 0x1C}, {0x7B, 0x1D}, {0x7B, 0x1F}, {0x7B, 0x21}, /* 0x98-0x9B */ + {0x7B, 0x22}, {0x7B, 0x23}, {0x7B, 0x27}, {0x7B, 0x29}, /* 0x9C-0x9F */ + {0x7B, 0x2D}, {0x6D, 0x6E}, {0x6D, 0xAA}, {0x79, 0x8F}, /* 0xA0-0xA3 */ + {0x88, 0xB1}, {0x5F, 0x17}, {0x75, 0x2B}, {0x62, 0x9A}, /* 0xA4-0xA7 */ + {0x8F, 0x85}, {0x4F, 0xEF}, {0x91, 0xDC}, {0x65, 0xA7}, /* 0xA8-0xAB */ + {0x81, 0x2F}, {0x81, 0x51}, {0x5E, 0x9C}, {0x81, 0x50}, /* 0xAC-0xAF */ + {0x8D, 0x74}, {0x52, 0x6F}, {0x89, 0x86}, {0x8D, 0x4B}, /* 0xB0-0xB3 */ + {0x59, 0x0D}, {0x50, 0x85}, {0x4E, 0xD8}, {0x96, 0x1C}, /* 0xB4-0xB7 */ + {0x72, 0x36}, {0x81, 0x79}, {0x8D, 0x1F}, {0x5B, 0xCC}, /* 0xB8-0xBB */ + {0x8B, 0xA3}, {0x96, 0x44}, {0x59, 0x87}, {0x7F, 0x1A}, /* 0xBC-0xBF */ + {0x54, 0x90}, {0x56, 0x76}, {0x56, 0x0E}, {0x8B, 0xE5}, /* 0xC0-0xC3 */ + {0x65, 0x39}, {0x69, 0x82}, {0x94, 0x99}, {0x76, 0xD6}, /* 0xC4-0xC7 */ + {0x6E, 0x89}, {0x5E, 0x72}, {0x75, 0x18}, {0x67, 0x46}, /* 0xC8-0xCB */ + {0x67, 0xD1}, {0x7A, 0xFF}, {0x80, 0x9D}, {0x8D, 0x76}, /* 0xCC-0xCF */ + {0x61, 0x1F}, {0x79, 0xC6}, {0x65, 0x62}, {0x8D, 0x63}, /* 0xD0-0xD3 */ + {0x51, 0x88}, {0x52, 0x1A}, {0x94, 0xA2}, {0x7F, 0x38}, /* 0xD4-0xD7 */ + {0x80, 0x9B}, {0x7E, 0xB2}, {0x5C, 0x97}, {0x6E, 0x2F}, /* 0xD8-0xDB */ + {0x67, 0x60}, {0x7B, 0xD9}, {0x76, 0x8B}, {0x9A, 0xD8}, /* 0xDC-0xDF */ + {0x81, 0x8F}, {0x7F, 0x94}, {0x7C, 0xD5}, {0x64, 0x1E}, /* 0xE0-0xE3 */ + {0x95, 0x50}, {0x7A, 0x3F}, {0x54, 0x4A}, {0x54, 0xE5}, /* 0xE4-0xE7 */ + {0x6B, 0x4C}, {0x64, 0x01}, {0x62, 0x08}, {0x9E, 0x3D}, /* 0xE8-0xEB */ + {0x80, 0xF3}, {0x75, 0x99}, {0x52, 0x72}, {0x97, 0x69}, /* 0xEC-0xEF */ + {0x84, 0x5B}, {0x68, 0x3C}, {0x86, 0xE4}, {0x96, 0x01}, /* 0xF0-0xF3 */ + {0x96, 0x94}, {0x94, 0xEC}, {0x4E, 0x2A}, {0x54, 0x04}, /* 0xF4-0xF7 */ + {0x7E, 0xD9}, {0x68, 0x39}, {0x8D, 0xDF}, {0x80, 0x15}, /* 0xF8-0xFB */ + {0x66, 0xF4}, {0x5E, 0x9A}, {0x7F, 0xB9}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7B, 0x2F}, {0x7B, 0x30}, {0x7B, 0x32}, {0x7B, 0x34}, /* 0x40-0x43 */ + {0x7B, 0x35}, {0x7B, 0x36}, {0x7B, 0x37}, {0x7B, 0x39}, /* 0x44-0x47 */ + {0x7B, 0x3B}, {0x7B, 0x3D}, {0x7B, 0x3F}, {0x7B, 0x40}, /* 0x48-0x4B */ + {0x7B, 0x41}, {0x7B, 0x42}, {0x7B, 0x43}, {0x7B, 0x44}, /* 0x4C-0x4F */ + {0x7B, 0x46}, {0x7B, 0x48}, {0x7B, 0x4A}, {0x7B, 0x4D}, /* 0x50-0x53 */ + {0x7B, 0x4E}, {0x7B, 0x53}, {0x7B, 0x55}, {0x7B, 0x57}, /* 0x54-0x57 */ + {0x7B, 0x59}, {0x7B, 0x5C}, {0x7B, 0x5E}, {0x7B, 0x5F}, /* 0x58-0x5B */ + {0x7B, 0x61}, {0x7B, 0x63}, {0x7B, 0x64}, {0x7B, 0x65}, /* 0x5C-0x5F */ + {0x7B, 0x66}, {0x7B, 0x67}, {0x7B, 0x68}, {0x7B, 0x69}, /* 0x60-0x63 */ + {0x7B, 0x6A}, {0x7B, 0x6B}, {0x7B, 0x6C}, {0x7B, 0x6D}, /* 0x64-0x67 */ + {0x7B, 0x6F}, {0x7B, 0x70}, {0x7B, 0x73}, {0x7B, 0x74}, /* 0x68-0x6B */ + {0x7B, 0x76}, {0x7B, 0x78}, {0x7B, 0x7A}, {0x7B, 0x7C}, /* 0x6C-0x6F */ + {0x7B, 0x7D}, {0x7B, 0x7F}, {0x7B, 0x81}, {0x7B, 0x82}, /* 0x70-0x73 */ + {0x7B, 0x83}, {0x7B, 0x84}, {0x7B, 0x86}, {0x7B, 0x87}, /* 0x74-0x77 */ + {0x7B, 0x88}, {0x7B, 0x89}, {0x7B, 0x8A}, {0x7B, 0x8B}, /* 0x78-0x7B */ + {0x7B, 0x8C}, {0x7B, 0x8E}, {0x7B, 0x8F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7B, 0x91}, {0x7B, 0x92}, {0x7B, 0x93}, {0x7B, 0x96}, /* 0x80-0x83 */ + {0x7B, 0x98}, {0x7B, 0x99}, {0x7B, 0x9A}, {0x7B, 0x9B}, /* 0x84-0x87 */ + {0x7B, 0x9E}, {0x7B, 0x9F}, {0x7B, 0xA0}, {0x7B, 0xA3}, /* 0x88-0x8B */ + {0x7B, 0xA4}, {0x7B, 0xA5}, {0x7B, 0xAE}, {0x7B, 0xAF}, /* 0x8C-0x8F */ + {0x7B, 0xB0}, {0x7B, 0xB2}, {0x7B, 0xB3}, {0x7B, 0xB5}, /* 0x90-0x93 */ + {0x7B, 0xB6}, {0x7B, 0xB7}, {0x7B, 0xB9}, {0x7B, 0xBA}, /* 0x94-0x97 */ + {0x7B, 0xBB}, {0x7B, 0xBC}, {0x7B, 0xBD}, {0x7B, 0xBE}, /* 0x98-0x9B */ + {0x7B, 0xBF}, {0x7B, 0xC0}, {0x7B, 0xC2}, {0x7B, 0xC3}, /* 0x9C-0x9F */ + {0x7B, 0xC4}, {0x57, 0xC2}, {0x80, 0x3F}, {0x68, 0x97}, /* 0xA0-0xA3 */ + {0x5D, 0xE5}, {0x65, 0x3B}, {0x52, 0x9F}, {0x60, 0x6D}, /* 0xA4-0xA7 */ + {0x9F, 0x9A}, {0x4F, 0x9B}, {0x8E, 0xAC}, {0x51, 0x6C}, /* 0xA8-0xAB */ + {0x5B, 0xAB}, {0x5F, 0x13}, {0x5D, 0xE9}, {0x6C, 0x5E}, /* 0xAC-0xAF */ + {0x62, 0xF1}, {0x8D, 0x21}, {0x51, 0x71}, {0x94, 0xA9}, /* 0xB0-0xB3 */ + {0x52, 0xFE}, {0x6C, 0x9F}, {0x82, 0xDF}, {0x72, 0xD7}, /* 0xB4-0xB7 */ + {0x57, 0xA2}, {0x67, 0x84}, {0x8D, 0x2D}, {0x59, 0x1F}, /* 0xB8-0xBB */ + {0x8F, 0x9C}, {0x83, 0xC7}, {0x54, 0x95}, {0x7B, 0x8D}, /* 0xBC-0xBF */ + {0x4F, 0x30}, {0x6C, 0xBD}, {0x5B, 0x64}, {0x59, 0xD1}, /* 0xC0-0xC3 */ + {0x9F, 0x13}, {0x53, 0xE4}, {0x86, 0xCA}, {0x9A, 0xA8}, /* 0xC4-0xC7 */ + {0x8C, 0x37}, {0x80, 0xA1}, {0x65, 0x45}, {0x98, 0x7E}, /* 0xC8-0xCB */ + {0x56, 0xFA}, {0x96, 0xC7}, {0x52, 0x2E}, {0x74, 0xDC}, /* 0xCC-0xCF */ + {0x52, 0x50}, {0x5B, 0xE1}, {0x63, 0x02}, {0x89, 0x02}, /* 0xD0-0xD3 */ + {0x4E, 0x56}, {0x62, 0xD0}, {0x60, 0x2A}, {0x68, 0xFA}, /* 0xD4-0xD7 */ + {0x51, 0x73}, {0x5B, 0x98}, {0x51, 0xA0}, {0x89, 0xC2}, /* 0xD8-0xDB */ + {0x7B, 0xA1}, {0x99, 0x86}, {0x7F, 0x50}, {0x60, 0xEF}, /* 0xDC-0xDF */ + {0x70, 0x4C}, {0x8D, 0x2F}, {0x51, 0x49}, {0x5E, 0x7F}, /* 0xE0-0xE3 */ + {0x90, 0x1B}, {0x74, 0x70}, {0x89, 0xC4}, {0x57, 0x2D}, /* 0xE4-0xE7 */ + {0x78, 0x45}, {0x5F, 0x52}, {0x9F, 0x9F}, {0x95, 0xFA}, /* 0xE8-0xEB */ + {0x8F, 0x68}, {0x9B, 0x3C}, {0x8B, 0xE1}, {0x76, 0x78}, /* 0xEC-0xEF */ + {0x68, 0x42}, {0x67, 0xDC}, {0x8D, 0xEA}, {0x8D, 0x35}, /* 0xF0-0xF3 */ + {0x52, 0x3D}, {0x8F, 0x8A}, {0x6E, 0xDA}, {0x68, 0xCD}, /* 0xF4-0xF7 */ + {0x95, 0x05}, {0x90, 0xED}, {0x56, 0xFD}, {0x67, 0x9C}, /* 0xF8-0xFB */ + {0x88, 0xF9}, {0x8F, 0xC7}, {0x54, 0xC8}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7B, 0xC5}, {0x7B, 0xC8}, {0x7B, 0xC9}, {0x7B, 0xCA}, /* 0x40-0x43 */ + {0x7B, 0xCB}, {0x7B, 0xCD}, {0x7B, 0xCE}, {0x7B, 0xCF}, /* 0x44-0x47 */ + {0x7B, 0xD0}, {0x7B, 0xD2}, {0x7B, 0xD4}, {0x7B, 0xD5}, /* 0x48-0x4B */ + {0x7B, 0xD6}, {0x7B, 0xD7}, {0x7B, 0xD8}, {0x7B, 0xDB}, /* 0x4C-0x4F */ + {0x7B, 0xDC}, {0x7B, 0xDE}, {0x7B, 0xDF}, {0x7B, 0xE0}, /* 0x50-0x53 */ + {0x7B, 0xE2}, {0x7B, 0xE3}, {0x7B, 0xE4}, {0x7B, 0xE7}, /* 0x54-0x57 */ + {0x7B, 0xE8}, {0x7B, 0xE9}, {0x7B, 0xEB}, {0x7B, 0xEC}, /* 0x58-0x5B */ + {0x7B, 0xED}, {0x7B, 0xEF}, {0x7B, 0xF0}, {0x7B, 0xF2}, /* 0x5C-0x5F */ + {0x7B, 0xF3}, {0x7B, 0xF4}, {0x7B, 0xF5}, {0x7B, 0xF6}, /* 0x60-0x63 */ + {0x7B, 0xF8}, {0x7B, 0xF9}, {0x7B, 0xFA}, {0x7B, 0xFB}, /* 0x64-0x67 */ + {0x7B, 0xFD}, {0x7B, 0xFF}, {0x7C, 0x00}, {0x7C, 0x01}, /* 0x68-0x6B */ + {0x7C, 0x02}, {0x7C, 0x03}, {0x7C, 0x04}, {0x7C, 0x05}, /* 0x6C-0x6F */ + {0x7C, 0x06}, {0x7C, 0x08}, {0x7C, 0x09}, {0x7C, 0x0A}, /* 0x70-0x73 */ + {0x7C, 0x0D}, {0x7C, 0x0E}, {0x7C, 0x10}, {0x7C, 0x11}, /* 0x74-0x77 */ + {0x7C, 0x12}, {0x7C, 0x13}, {0x7C, 0x14}, {0x7C, 0x15}, /* 0x78-0x7B */ + {0x7C, 0x17}, {0x7C, 0x18}, {0x7C, 0x19}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7C, 0x1A}, {0x7C, 0x1B}, {0x7C, 0x1C}, {0x7C, 0x1D}, /* 0x80-0x83 */ + {0x7C, 0x1E}, {0x7C, 0x20}, {0x7C, 0x21}, {0x7C, 0x22}, /* 0x84-0x87 */ + {0x7C, 0x23}, {0x7C, 0x24}, {0x7C, 0x25}, {0x7C, 0x28}, /* 0x88-0x8B */ + {0x7C, 0x29}, {0x7C, 0x2B}, {0x7C, 0x2C}, {0x7C, 0x2D}, /* 0x8C-0x8F */ + {0x7C, 0x2E}, {0x7C, 0x2F}, {0x7C, 0x30}, {0x7C, 0x31}, /* 0x90-0x93 */ + {0x7C, 0x32}, {0x7C, 0x33}, {0x7C, 0x34}, {0x7C, 0x35}, /* 0x94-0x97 */ + {0x7C, 0x36}, {0x7C, 0x37}, {0x7C, 0x39}, {0x7C, 0x3A}, /* 0x98-0x9B */ + {0x7C, 0x3B}, {0x7C, 0x3C}, {0x7C, 0x3D}, {0x7C, 0x3E}, /* 0x9C-0x9F */ + {0x7C, 0x42}, {0x9A, 0xB8}, {0x5B, 0x69}, {0x6D, 0x77}, /* 0xA0-0xA3 */ + {0x6C, 0x26}, {0x4E, 0xA5}, {0x5B, 0xB3}, {0x9A, 0x87}, /* 0xA4-0xA7 */ + {0x91, 0x63}, {0x61, 0xA8}, {0x90, 0xAF}, {0x97, 0xE9}, /* 0xA8-0xAB */ + {0x54, 0x2B}, {0x6D, 0xB5}, {0x5B, 0xD2}, {0x51, 0xFD}, /* 0xAC-0xAF */ + {0x55, 0x8A}, {0x7F, 0x55}, {0x7F, 0xF0}, {0x64, 0xBC}, /* 0xB0-0xB3 */ + {0x63, 0x4D}, {0x65, 0xF1}, {0x61, 0xBE}, {0x60, 0x8D}, /* 0xB4-0xB7 */ + {0x71, 0x0A}, {0x6C, 0x57}, {0x6C, 0x49}, {0x59, 0x2F}, /* 0xB8-0xBB */ + {0x67, 0x6D}, {0x82, 0x2A}, {0x58, 0xD5}, {0x56, 0x8E}, /* 0xBC-0xBF */ + {0x8C, 0x6A}, {0x6B, 0xEB}, {0x90, 0xDD}, {0x59, 0x7D}, /* 0xC0-0xC3 */ + {0x80, 0x17}, {0x53, 0xF7}, {0x6D, 0x69}, {0x54, 0x75}, /* 0xC4-0xC7 */ + {0x55, 0x9D}, {0x83, 0x77}, {0x83, 0xCF}, {0x68, 0x38}, /* 0xC8-0xCB */ + {0x79, 0xBE}, {0x54, 0x8C}, {0x4F, 0x55}, {0x54, 0x08}, /* 0xCC-0xCF */ + {0x76, 0xD2}, {0x8C, 0x89}, {0x96, 0x02}, {0x6C, 0xB3}, /* 0xD0-0xD3 */ + {0x6D, 0xB8}, {0x8D, 0x6B}, {0x89, 0x10}, {0x9E, 0x64}, /* 0xD4-0xD7 */ + {0x8D, 0x3A}, {0x56, 0x3F}, {0x9E, 0xD1}, {0x75, 0xD5}, /* 0xD8-0xDB */ + {0x5F, 0x88}, {0x72, 0xE0}, {0x60, 0x68}, {0x54, 0xFC}, /* 0xDC-0xDF */ + {0x4E, 0xA8}, {0x6A, 0x2A}, {0x88, 0x61}, {0x60, 0x52}, /* 0xE0-0xE3 */ + {0x8F, 0x70}, {0x54, 0xC4}, {0x70, 0xD8}, {0x86, 0x79}, /* 0xE4-0xE7 */ + {0x9E, 0x3F}, {0x6D, 0x2A}, {0x5B, 0x8F}, {0x5F, 0x18}, /* 0xE8-0xEB */ + {0x7E, 0xA2}, {0x55, 0x89}, {0x4F, 0xAF}, {0x73, 0x34}, /* 0xEC-0xEF */ + {0x54, 0x3C}, {0x53, 0x9A}, {0x50, 0x19}, {0x54, 0x0E}, /* 0xF0-0xF3 */ + {0x54, 0x7C}, {0x4E, 0x4E}, {0x5F, 0xFD}, {0x74, 0x5A}, /* 0xF4-0xF7 */ + {0x58, 0xF6}, {0x84, 0x6B}, {0x80, 0xE1}, {0x87, 0x74}, /* 0xF8-0xFB */ + {0x72, 0xD0}, {0x7C, 0xCA}, {0x6E, 0x56}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7C, 0x43}, {0x7C, 0x44}, {0x7C, 0x45}, {0x7C, 0x46}, /* 0x40-0x43 */ + {0x7C, 0x47}, {0x7C, 0x48}, {0x7C, 0x49}, {0x7C, 0x4A}, /* 0x44-0x47 */ + {0x7C, 0x4B}, {0x7C, 0x4C}, {0x7C, 0x4E}, {0x7C, 0x4F}, /* 0x48-0x4B */ + {0x7C, 0x50}, {0x7C, 0x51}, {0x7C, 0x52}, {0x7C, 0x53}, /* 0x4C-0x4F */ + {0x7C, 0x54}, {0x7C, 0x55}, {0x7C, 0x56}, {0x7C, 0x57}, /* 0x50-0x53 */ + {0x7C, 0x58}, {0x7C, 0x59}, {0x7C, 0x5A}, {0x7C, 0x5B}, /* 0x54-0x57 */ + {0x7C, 0x5C}, {0x7C, 0x5D}, {0x7C, 0x5E}, {0x7C, 0x5F}, /* 0x58-0x5B */ + {0x7C, 0x60}, {0x7C, 0x61}, {0x7C, 0x62}, {0x7C, 0x63}, /* 0x5C-0x5F */ + {0x7C, 0x64}, {0x7C, 0x65}, {0x7C, 0x66}, {0x7C, 0x67}, /* 0x60-0x63 */ + {0x7C, 0x68}, {0x7C, 0x69}, {0x7C, 0x6A}, {0x7C, 0x6B}, /* 0x64-0x67 */ + {0x7C, 0x6C}, {0x7C, 0x6D}, {0x7C, 0x6E}, {0x7C, 0x6F}, /* 0x68-0x6B */ + {0x7C, 0x70}, {0x7C, 0x71}, {0x7C, 0x72}, {0x7C, 0x75}, /* 0x6C-0x6F */ + {0x7C, 0x76}, {0x7C, 0x77}, {0x7C, 0x78}, {0x7C, 0x79}, /* 0x70-0x73 */ + {0x7C, 0x7A}, {0x7C, 0x7E}, {0x7C, 0x7F}, {0x7C, 0x80}, /* 0x74-0x77 */ + {0x7C, 0x81}, {0x7C, 0x82}, {0x7C, 0x83}, {0x7C, 0x84}, /* 0x78-0x7B */ + {0x7C, 0x85}, {0x7C, 0x86}, {0x7C, 0x87}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7C, 0x88}, {0x7C, 0x8A}, {0x7C, 0x8B}, {0x7C, 0x8C}, /* 0x80-0x83 */ + {0x7C, 0x8D}, {0x7C, 0x8E}, {0x7C, 0x8F}, {0x7C, 0x90}, /* 0x84-0x87 */ + {0x7C, 0x93}, {0x7C, 0x94}, {0x7C, 0x96}, {0x7C, 0x99}, /* 0x88-0x8B */ + {0x7C, 0x9A}, {0x7C, 0x9B}, {0x7C, 0xA0}, {0x7C, 0xA1}, /* 0x8C-0x8F */ + {0x7C, 0xA3}, {0x7C, 0xA6}, {0x7C, 0xA7}, {0x7C, 0xA8}, /* 0x90-0x93 */ + {0x7C, 0xA9}, {0x7C, 0xAB}, {0x7C, 0xAC}, {0x7C, 0xAD}, /* 0x94-0x97 */ + {0x7C, 0xAF}, {0x7C, 0xB0}, {0x7C, 0xB4}, {0x7C, 0xB5}, /* 0x98-0x9B */ + {0x7C, 0xB6}, {0x7C, 0xB7}, {0x7C, 0xB8}, {0x7C, 0xBA}, /* 0x9C-0x9F */ + {0x7C, 0xBB}, {0x5F, 0x27}, {0x86, 0x4E}, {0x55, 0x2C}, /* 0xA0-0xA3 */ + {0x62, 0xA4}, {0x4E, 0x92}, {0x6C, 0xAA}, {0x62, 0x37}, /* 0xA4-0xA7 */ + {0x82, 0xB1}, {0x54, 0xD7}, {0x53, 0x4E}, {0x73, 0x3E}, /* 0xA8-0xAB */ + {0x6E, 0xD1}, {0x75, 0x3B}, {0x52, 0x12}, {0x53, 0x16}, /* 0xAC-0xAF */ + {0x8B, 0xDD}, {0x69, 0xD0}, {0x5F, 0x8A}, {0x60, 0x00}, /* 0xB0-0xB3 */ + {0x6D, 0xEE}, {0x57, 0x4F}, {0x6B, 0x22}, {0x73, 0xAF}, /* 0xB4-0xB7 */ + {0x68, 0x53}, {0x8F, 0xD8}, {0x7F, 0x13}, {0x63, 0x62}, /* 0xB8-0xBB */ + {0x60, 0xA3}, {0x55, 0x24}, {0x75, 0xEA}, {0x8C, 0x62}, /* 0xBC-0xBF */ + {0x71, 0x15}, {0x6D, 0xA3}, {0x5B, 0xA6}, {0x5E, 0x7B}, /* 0xC0-0xC3 */ + {0x83, 0x52}, {0x61, 0x4C}, {0x9E, 0xC4}, {0x78, 0xFA}, /* 0xC4-0xC7 */ + {0x87, 0x57}, {0x7C, 0x27}, {0x76, 0x87}, {0x51, 0xF0}, /* 0xC8-0xCB */ + {0x60, 0xF6}, {0x71, 0x4C}, {0x66, 0x43}, {0x5E, 0x4C}, /* 0xCC-0xCF */ + {0x60, 0x4D}, {0x8C, 0x0E}, {0x70, 0x70}, {0x63, 0x25}, /* 0xD0-0xD3 */ + {0x8F, 0x89}, {0x5F, 0xBD}, {0x60, 0x62}, {0x86, 0xD4}, /* 0xD4-0xD7 */ + {0x56, 0xDE}, {0x6B, 0xC1}, {0x60, 0x94}, {0x61, 0x67}, /* 0xD8-0xDB */ + {0x53, 0x49}, {0x60, 0xE0}, {0x66, 0x66}, {0x8D, 0x3F}, /* 0xDC-0xDF */ + {0x79, 0xFD}, {0x4F, 0x1A}, {0x70, 0xE9}, {0x6C, 0x47}, /* 0xE0-0xE3 */ + {0x8B, 0xB3}, {0x8B, 0xF2}, {0x7E, 0xD8}, {0x83, 0x64}, /* 0xE4-0xE7 */ + {0x66, 0x0F}, {0x5A, 0x5A}, {0x9B, 0x42}, {0x6D, 0x51}, /* 0xE8-0xEB */ + {0x6D, 0xF7}, {0x8C, 0x41}, {0x6D, 0x3B}, {0x4F, 0x19}, /* 0xEC-0xEF */ + {0x70, 0x6B}, {0x83, 0xB7}, {0x62, 0x16}, {0x60, 0xD1}, /* 0xF0-0xF3 */ + {0x97, 0x0D}, {0x8D, 0x27}, {0x79, 0x78}, {0x51, 0xFB}, /* 0xF4-0xF7 */ + {0x57, 0x3E}, {0x57, 0xFA}, {0x67, 0x3A}, {0x75, 0x78}, /* 0xF8-0xFB */ + {0x7A, 0x3D}, {0x79, 0xEF}, {0x7B, 0x95}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7C, 0xBF}, {0x7C, 0xC0}, {0x7C, 0xC2}, {0x7C, 0xC3}, /* 0x40-0x43 */ + {0x7C, 0xC4}, {0x7C, 0xC6}, {0x7C, 0xC9}, {0x7C, 0xCB}, /* 0x44-0x47 */ + {0x7C, 0xCE}, {0x7C, 0xCF}, {0x7C, 0xD0}, {0x7C, 0xD1}, /* 0x48-0x4B */ + {0x7C, 0xD2}, {0x7C, 0xD3}, {0x7C, 0xD4}, {0x7C, 0xD8}, /* 0x4C-0x4F */ + {0x7C, 0xDA}, {0x7C, 0xDB}, {0x7C, 0xDD}, {0x7C, 0xDE}, /* 0x50-0x53 */ + {0x7C, 0xE1}, {0x7C, 0xE2}, {0x7C, 0xE3}, {0x7C, 0xE4}, /* 0x54-0x57 */ + {0x7C, 0xE5}, {0x7C, 0xE6}, {0x7C, 0xE7}, {0x7C, 0xE9}, /* 0x58-0x5B */ + {0x7C, 0xEA}, {0x7C, 0xEB}, {0x7C, 0xEC}, {0x7C, 0xED}, /* 0x5C-0x5F */ + {0x7C, 0xEE}, {0x7C, 0xF0}, {0x7C, 0xF1}, {0x7C, 0xF2}, /* 0x60-0x63 */ + {0x7C, 0xF3}, {0x7C, 0xF4}, {0x7C, 0xF5}, {0x7C, 0xF6}, /* 0x64-0x67 */ + {0x7C, 0xF7}, {0x7C, 0xF9}, {0x7C, 0xFA}, {0x7C, 0xFC}, /* 0x68-0x6B */ + {0x7C, 0xFD}, {0x7C, 0xFE}, {0x7C, 0xFF}, {0x7D, 0x00}, /* 0x6C-0x6F */ + {0x7D, 0x01}, {0x7D, 0x02}, {0x7D, 0x03}, {0x7D, 0x04}, /* 0x70-0x73 */ + {0x7D, 0x05}, {0x7D, 0x06}, {0x7D, 0x07}, {0x7D, 0x08}, /* 0x74-0x77 */ + {0x7D, 0x09}, {0x7D, 0x0B}, {0x7D, 0x0C}, {0x7D, 0x0D}, /* 0x78-0x7B */ + {0x7D, 0x0E}, {0x7D, 0x0F}, {0x7D, 0x10}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7D, 0x11}, {0x7D, 0x12}, {0x7D, 0x13}, {0x7D, 0x14}, /* 0x80-0x83 */ + {0x7D, 0x15}, {0x7D, 0x16}, {0x7D, 0x17}, {0x7D, 0x18}, /* 0x84-0x87 */ + {0x7D, 0x19}, {0x7D, 0x1A}, {0x7D, 0x1B}, {0x7D, 0x1C}, /* 0x88-0x8B */ + {0x7D, 0x1D}, {0x7D, 0x1E}, {0x7D, 0x1F}, {0x7D, 0x21}, /* 0x8C-0x8F */ + {0x7D, 0x23}, {0x7D, 0x24}, {0x7D, 0x25}, {0x7D, 0x26}, /* 0x90-0x93 */ + {0x7D, 0x28}, {0x7D, 0x29}, {0x7D, 0x2A}, {0x7D, 0x2C}, /* 0x94-0x97 */ + {0x7D, 0x2D}, {0x7D, 0x2E}, {0x7D, 0x30}, {0x7D, 0x31}, /* 0x98-0x9B */ + {0x7D, 0x32}, {0x7D, 0x33}, {0x7D, 0x34}, {0x7D, 0x35}, /* 0x9C-0x9F */ + {0x7D, 0x36}, {0x80, 0x8C}, {0x99, 0x65}, {0x8F, 0xF9}, /* 0xA0-0xA3 */ + {0x6F, 0xC0}, {0x8B, 0xA5}, {0x9E, 0x21}, {0x59, 0xEC}, /* 0xA4-0xA7 */ + {0x7E, 0xE9}, {0x7F, 0x09}, {0x54, 0x09}, {0x67, 0x81}, /* 0xA8-0xAB */ + {0x68, 0xD8}, {0x8F, 0x91}, {0x7C, 0x4D}, {0x96, 0xC6}, /* 0xAC-0xAF */ + {0x53, 0xCA}, {0x60, 0x25}, {0x75, 0xBE}, {0x6C, 0x72}, /* 0xB0-0xB3 */ + {0x53, 0x73}, {0x5A, 0xC9}, {0x7E, 0xA7}, {0x63, 0x24}, /* 0xB4-0xB7 */ + {0x51, 0xE0}, {0x81, 0x0A}, {0x5D, 0xF1}, {0x84, 0xDF}, /* 0xB8-0xBB */ + {0x62, 0x80}, {0x51, 0x80}, {0x5B, 0x63}, {0x4F, 0x0E}, /* 0xBC-0xBF */ + {0x79, 0x6D}, {0x52, 0x42}, {0x60, 0xB8}, {0x6D, 0x4E}, /* 0xC0-0xC3 */ + {0x5B, 0xC4}, {0x5B, 0xC2}, {0x8B, 0xA1}, {0x8B, 0xB0}, /* 0xC4-0xC7 */ + {0x65, 0xE2}, {0x5F, 0xCC}, {0x96, 0x45}, {0x59, 0x93}, /* 0xC8-0xCB */ + {0x7E, 0xE7}, {0x7E, 0xAA}, {0x56, 0x09}, {0x67, 0xB7}, /* 0xCC-0xCF */ + {0x59, 0x39}, {0x4F, 0x73}, {0x5B, 0xB6}, {0x52, 0xA0}, /* 0xD0-0xD3 */ + {0x83, 0x5A}, {0x98, 0x8A}, {0x8D, 0x3E}, {0x75, 0x32}, /* 0xD4-0xD7 */ + {0x94, 0xBE}, {0x50, 0x47}, {0x7A, 0x3C}, {0x4E, 0xF7}, /* 0xD8-0xDB */ + {0x67, 0xB6}, {0x9A, 0x7E}, {0x5A, 0xC1}, {0x6B, 0x7C}, /* 0xDC-0xDF */ + {0x76, 0xD1}, {0x57, 0x5A}, {0x5C, 0x16}, {0x7B, 0x3A}, /* 0xE0-0xE3 */ + {0x95, 0xF4}, {0x71, 0x4E}, {0x51, 0x7C}, {0x80, 0xA9}, /* 0xE4-0xE7 */ + {0x82, 0x70}, {0x59, 0x78}, {0x7F, 0x04}, {0x83, 0x27}, /* 0xE8-0xEB */ + {0x68, 0xC0}, {0x67, 0xEC}, {0x78, 0xB1}, {0x78, 0x77}, /* 0xEC-0xEF */ + {0x62, 0xE3}, {0x63, 0x61}, {0x7B, 0x80}, {0x4F, 0xED}, /* 0xF0-0xF3 */ + {0x52, 0x6A}, {0x51, 0xCF}, {0x83, 0x50}, {0x69, 0xDB}, /* 0xF4-0xF7 */ + {0x92, 0x74}, {0x8D, 0xF5}, {0x8D, 0x31}, {0x89, 0xC1}, /* 0xF8-0xFB */ + {0x95, 0x2E}, {0x7B, 0xAD}, {0x4E, 0xF6}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7D, 0x37}, {0x7D, 0x38}, {0x7D, 0x39}, {0x7D, 0x3A}, /* 0x40-0x43 */ + {0x7D, 0x3B}, {0x7D, 0x3C}, {0x7D, 0x3D}, {0x7D, 0x3E}, /* 0x44-0x47 */ + {0x7D, 0x3F}, {0x7D, 0x40}, {0x7D, 0x41}, {0x7D, 0x42}, /* 0x48-0x4B */ + {0x7D, 0x43}, {0x7D, 0x44}, {0x7D, 0x45}, {0x7D, 0x46}, /* 0x4C-0x4F */ + {0x7D, 0x47}, {0x7D, 0x48}, {0x7D, 0x49}, {0x7D, 0x4A}, /* 0x50-0x53 */ + {0x7D, 0x4B}, {0x7D, 0x4C}, {0x7D, 0x4D}, {0x7D, 0x4E}, /* 0x54-0x57 */ + {0x7D, 0x4F}, {0x7D, 0x50}, {0x7D, 0x51}, {0x7D, 0x52}, /* 0x58-0x5B */ + {0x7D, 0x53}, {0x7D, 0x54}, {0x7D, 0x55}, {0x7D, 0x56}, /* 0x5C-0x5F */ + {0x7D, 0x57}, {0x7D, 0x58}, {0x7D, 0x59}, {0x7D, 0x5A}, /* 0x60-0x63 */ + {0x7D, 0x5B}, {0x7D, 0x5C}, {0x7D, 0x5D}, {0x7D, 0x5E}, /* 0x64-0x67 */ + {0x7D, 0x5F}, {0x7D, 0x60}, {0x7D, 0x61}, {0x7D, 0x62}, /* 0x68-0x6B */ + {0x7D, 0x63}, {0x7D, 0x64}, {0x7D, 0x65}, {0x7D, 0x66}, /* 0x6C-0x6F */ + {0x7D, 0x67}, {0x7D, 0x68}, {0x7D, 0x69}, {0x7D, 0x6A}, /* 0x70-0x73 */ + {0x7D, 0x6B}, {0x7D, 0x6C}, {0x7D, 0x6D}, {0x7D, 0x6F}, /* 0x74-0x77 */ + {0x7D, 0x70}, {0x7D, 0x71}, {0x7D, 0x72}, {0x7D, 0x73}, /* 0x78-0x7B */ + {0x7D, 0x74}, {0x7D, 0x75}, {0x7D, 0x76}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7D, 0x78}, {0x7D, 0x79}, {0x7D, 0x7A}, {0x7D, 0x7B}, /* 0x80-0x83 */ + {0x7D, 0x7C}, {0x7D, 0x7D}, {0x7D, 0x7E}, {0x7D, 0x7F}, /* 0x84-0x87 */ + {0x7D, 0x80}, {0x7D, 0x81}, {0x7D, 0x82}, {0x7D, 0x83}, /* 0x88-0x8B */ + {0x7D, 0x84}, {0x7D, 0x85}, {0x7D, 0x86}, {0x7D, 0x87}, /* 0x8C-0x8F */ + {0x7D, 0x88}, {0x7D, 0x89}, {0x7D, 0x8A}, {0x7D, 0x8B}, /* 0x90-0x93 */ + {0x7D, 0x8C}, {0x7D, 0x8D}, {0x7D, 0x8E}, {0x7D, 0x8F}, /* 0x94-0x97 */ + {0x7D, 0x90}, {0x7D, 0x91}, {0x7D, 0x92}, {0x7D, 0x93}, /* 0x98-0x9B */ + {0x7D, 0x94}, {0x7D, 0x95}, {0x7D, 0x96}, {0x7D, 0x97}, /* 0x9C-0x9F */ + {0x7D, 0x98}, {0x50, 0x65}, {0x82, 0x30}, {0x52, 0x51}, /* 0xA0-0xA3 */ + {0x99, 0x6F}, {0x6E, 0x10}, {0x6E, 0x85}, {0x6D, 0xA7}, /* 0xA4-0xA7 */ + {0x5E, 0xFA}, {0x50, 0xF5}, {0x59, 0xDC}, {0x5C, 0x06}, /* 0xA8-0xAB */ + {0x6D, 0x46}, {0x6C, 0x5F}, {0x75, 0x86}, {0x84, 0x8B}, /* 0xAC-0xAF */ + {0x68, 0x68}, {0x59, 0x56}, {0x8B, 0xB2}, {0x53, 0x20}, /* 0xB0-0xB3 */ + {0x91, 0x71}, {0x96, 0x4D}, {0x85, 0x49}, {0x69, 0x12}, /* 0xB4-0xB7 */ + {0x79, 0x01}, {0x71, 0x26}, {0x80, 0xF6}, {0x4E, 0xA4}, /* 0xB8-0xBB */ + {0x90, 0xCA}, {0x6D, 0x47}, {0x9A, 0x84}, {0x5A, 0x07}, /* 0xBC-0xBF */ + {0x56, 0xBC}, {0x64, 0x05}, {0x94, 0xF0}, {0x77, 0xEB}, /* 0xC0-0xC3 */ + {0x4F, 0xA5}, {0x81, 0x1A}, {0x72, 0xE1}, {0x89, 0xD2}, /* 0xC4-0xC7 */ + {0x99, 0x7A}, {0x7F, 0x34}, {0x7E, 0xDE}, {0x52, 0x7F}, /* 0xC8-0xCB */ + {0x65, 0x59}, {0x91, 0x75}, {0x8F, 0x7F}, {0x8F, 0x83}, /* 0xCC-0xCF */ + {0x53, 0xEB}, {0x7A, 0x96}, {0x63, 0xED}, {0x63, 0xA5}, /* 0xD0-0xD3 */ + {0x76, 0x86}, {0x79, 0xF8}, {0x88, 0x57}, {0x96, 0x36}, /* 0xD4-0xD7 */ + {0x62, 0x2A}, {0x52, 0xAB}, {0x82, 0x82}, {0x68, 0x54}, /* 0xD8-0xDB */ + {0x67, 0x70}, {0x63, 0x77}, {0x77, 0x6B}, {0x7A, 0xED}, /* 0xDC-0xDF */ + {0x6D, 0x01}, {0x7E, 0xD3}, {0x89, 0xE3}, {0x59, 0xD0}, /* 0xE0-0xE3 */ + {0x62, 0x12}, {0x85, 0xC9}, {0x82, 0xA5}, {0x75, 0x4C}, /* 0xE4-0xE7 */ + {0x50, 0x1F}, {0x4E, 0xCB}, {0x75, 0xA5}, {0x8B, 0xEB}, /* 0xE8-0xEB */ + {0x5C, 0x4A}, {0x5D, 0xFE}, {0x7B, 0x4B}, {0x65, 0xA4}, /* 0xEC-0xEF */ + {0x91, 0xD1}, {0x4E, 0xCA}, {0x6D, 0x25}, {0x89, 0x5F}, /* 0xF0-0xF3 */ + {0x7D, 0x27}, {0x95, 0x26}, {0x4E, 0xC5}, {0x8C, 0x28}, /* 0xF4-0xF7 */ + {0x8F, 0xDB}, {0x97, 0x73}, {0x66, 0x4B}, {0x79, 0x81}, /* 0xF8-0xFB */ + {0x8F, 0xD1}, {0x70, 0xEC}, {0x6D, 0x78}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7D, 0x99}, {0x7D, 0x9A}, {0x7D, 0x9B}, {0x7D, 0x9C}, /* 0x40-0x43 */ + {0x7D, 0x9D}, {0x7D, 0x9E}, {0x7D, 0x9F}, {0x7D, 0xA0}, /* 0x44-0x47 */ + {0x7D, 0xA1}, {0x7D, 0xA2}, {0x7D, 0xA3}, {0x7D, 0xA4}, /* 0x48-0x4B */ + {0x7D, 0xA5}, {0x7D, 0xA7}, {0x7D, 0xA8}, {0x7D, 0xA9}, /* 0x4C-0x4F */ + {0x7D, 0xAA}, {0x7D, 0xAB}, {0x7D, 0xAC}, {0x7D, 0xAD}, /* 0x50-0x53 */ + {0x7D, 0xAF}, {0x7D, 0xB0}, {0x7D, 0xB1}, {0x7D, 0xB2}, /* 0x54-0x57 */ + {0x7D, 0xB3}, {0x7D, 0xB4}, {0x7D, 0xB5}, {0x7D, 0xB6}, /* 0x58-0x5B */ + {0x7D, 0xB7}, {0x7D, 0xB8}, {0x7D, 0xB9}, {0x7D, 0xBA}, /* 0x5C-0x5F */ + {0x7D, 0xBB}, {0x7D, 0xBC}, {0x7D, 0xBD}, {0x7D, 0xBE}, /* 0x60-0x63 */ + {0x7D, 0xBF}, {0x7D, 0xC0}, {0x7D, 0xC1}, {0x7D, 0xC2}, /* 0x64-0x67 */ + {0x7D, 0xC3}, {0x7D, 0xC4}, {0x7D, 0xC5}, {0x7D, 0xC6}, /* 0x68-0x6B */ + {0x7D, 0xC7}, {0x7D, 0xC8}, {0x7D, 0xC9}, {0x7D, 0xCA}, /* 0x6C-0x6F */ + {0x7D, 0xCB}, {0x7D, 0xCC}, {0x7D, 0xCD}, {0x7D, 0xCE}, /* 0x70-0x73 */ + {0x7D, 0xCF}, {0x7D, 0xD0}, {0x7D, 0xD1}, {0x7D, 0xD2}, /* 0x74-0x77 */ + {0x7D, 0xD3}, {0x7D, 0xD4}, {0x7D, 0xD5}, {0x7D, 0xD6}, /* 0x78-0x7B */ + {0x7D, 0xD7}, {0x7D, 0xD8}, {0x7D, 0xD9}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7D, 0xDA}, {0x7D, 0xDB}, {0x7D, 0xDC}, {0x7D, 0xDD}, /* 0x80-0x83 */ + {0x7D, 0xDE}, {0x7D, 0xDF}, {0x7D, 0xE0}, {0x7D, 0xE1}, /* 0x84-0x87 */ + {0x7D, 0xE2}, {0x7D, 0xE3}, {0x7D, 0xE4}, {0x7D, 0xE5}, /* 0x88-0x8B */ + {0x7D, 0xE6}, {0x7D, 0xE7}, {0x7D, 0xE8}, {0x7D, 0xE9}, /* 0x8C-0x8F */ + {0x7D, 0xEA}, {0x7D, 0xEB}, {0x7D, 0xEC}, {0x7D, 0xED}, /* 0x90-0x93 */ + {0x7D, 0xEE}, {0x7D, 0xEF}, {0x7D, 0xF0}, {0x7D, 0xF1}, /* 0x94-0x97 */ + {0x7D, 0xF2}, {0x7D, 0xF3}, {0x7D, 0xF4}, {0x7D, 0xF5}, /* 0x98-0x9B */ + {0x7D, 0xF6}, {0x7D, 0xF7}, {0x7D, 0xF8}, {0x7D, 0xF9}, /* 0x9C-0x9F */ + {0x7D, 0xFA}, {0x5C, 0x3D}, {0x52, 0xB2}, {0x83, 0x46}, /* 0xA0-0xA3 */ + {0x51, 0x62}, {0x83, 0x0E}, {0x77, 0x5B}, {0x66, 0x76}, /* 0xA4-0xA7 */ + {0x9C, 0xB8}, {0x4E, 0xAC}, {0x60, 0xCA}, {0x7C, 0xBE}, /* 0xA8-0xAB */ + {0x7C, 0xB3}, {0x7E, 0xCF}, {0x4E, 0x95}, {0x8B, 0x66}, /* 0xAC-0xAF */ + {0x66, 0x6F}, {0x98, 0x88}, {0x97, 0x59}, {0x58, 0x83}, /* 0xB0-0xB3 */ + {0x65, 0x6C}, {0x95, 0x5C}, {0x5F, 0x84}, {0x75, 0xC9}, /* 0xB4-0xB7 */ + {0x97, 0x56}, {0x7A, 0xDF}, {0x7A, 0xDE}, {0x51, 0xC0}, /* 0xB8-0xBB */ + {0x70, 0xAF}, {0x7A, 0x98}, {0x63, 0xEA}, {0x7A, 0x76}, /* 0xBC-0xBF */ + {0x7E, 0xA0}, {0x73, 0x96}, {0x97, 0xED}, {0x4E, 0x45}, /* 0xC0-0xC3 */ + {0x70, 0x78}, {0x4E, 0x5D}, {0x91, 0x52}, {0x53, 0xA9}, /* 0xC4-0xC7 */ + {0x65, 0x51}, {0x65, 0xE7}, {0x81, 0xFC}, {0x82, 0x05}, /* 0xC8-0xCB */ + {0x54, 0x8E}, {0x5C, 0x31}, {0x75, 0x9A}, {0x97, 0xA0}, /* 0xCC-0xCF */ + {0x62, 0xD8}, {0x72, 0xD9}, {0x75, 0xBD}, {0x5C, 0x45}, /* 0xD0-0xD3 */ + {0x9A, 0x79}, {0x83, 0xCA}, {0x5C, 0x40}, {0x54, 0x80}, /* 0xD4-0xD7 */ + {0x77, 0xE9}, {0x4E, 0x3E}, {0x6C, 0xAE}, {0x80, 0x5A}, /* 0xD8-0xDB */ + {0x62, 0xD2}, {0x63, 0x6E}, {0x5D, 0xE8}, {0x51, 0x77}, /* 0xDC-0xDF */ + {0x8D, 0xDD}, {0x8E, 0x1E}, {0x95, 0x2F}, {0x4F, 0xF1}, /* 0xE0-0xE3 */ + {0x53, 0xE5}, {0x60, 0xE7}, {0x70, 0xAC}, {0x52, 0x67}, /* 0xE4-0xE7 */ + {0x63, 0x50}, {0x9E, 0x43}, {0x5A, 0x1F}, {0x50, 0x26}, /* 0xE8-0xEB */ + {0x77, 0x37}, {0x53, 0x77}, {0x7E, 0xE2}, {0x64, 0x85}, /* 0xEC-0xEF */ + {0x65, 0x2B}, {0x62, 0x89}, {0x63, 0x98}, {0x50, 0x14}, /* 0xF0-0xF3 */ + {0x72, 0x35}, {0x89, 0xC9}, {0x51, 0xB3}, {0x8B, 0xC0}, /* 0xF4-0xF7 */ + {0x7E, 0xDD}, {0x57, 0x47}, {0x83, 0xCC}, {0x94, 0xA7}, /* 0xF8-0xFB */ + {0x51, 0x9B}, {0x54, 0x1B}, {0x5C, 0xFB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7D, 0xFB}, {0x7D, 0xFC}, {0x7D, 0xFD}, {0x7D, 0xFE}, /* 0x40-0x43 */ + {0x7D, 0xFF}, {0x7E, 0x00}, {0x7E, 0x01}, {0x7E, 0x02}, /* 0x44-0x47 */ + {0x7E, 0x03}, {0x7E, 0x04}, {0x7E, 0x05}, {0x7E, 0x06}, /* 0x48-0x4B */ + {0x7E, 0x07}, {0x7E, 0x08}, {0x7E, 0x09}, {0x7E, 0x0A}, /* 0x4C-0x4F */ + {0x7E, 0x0B}, {0x7E, 0x0C}, {0x7E, 0x0D}, {0x7E, 0x0E}, /* 0x50-0x53 */ + {0x7E, 0x0F}, {0x7E, 0x10}, {0x7E, 0x11}, {0x7E, 0x12}, /* 0x54-0x57 */ + {0x7E, 0x13}, {0x7E, 0x14}, {0x7E, 0x15}, {0x7E, 0x16}, /* 0x58-0x5B */ + {0x7E, 0x17}, {0x7E, 0x18}, {0x7E, 0x19}, {0x7E, 0x1A}, /* 0x5C-0x5F */ + {0x7E, 0x1B}, {0x7E, 0x1C}, {0x7E, 0x1D}, {0x7E, 0x1E}, /* 0x60-0x63 */ + {0x7E, 0x1F}, {0x7E, 0x20}, {0x7E, 0x21}, {0x7E, 0x22}, /* 0x64-0x67 */ + {0x7E, 0x23}, {0x7E, 0x24}, {0x7E, 0x25}, {0x7E, 0x26}, /* 0x68-0x6B */ + {0x7E, 0x27}, {0x7E, 0x28}, {0x7E, 0x29}, {0x7E, 0x2A}, /* 0x6C-0x6F */ + {0x7E, 0x2B}, {0x7E, 0x2C}, {0x7E, 0x2D}, {0x7E, 0x2E}, /* 0x70-0x73 */ + {0x7E, 0x2F}, {0x7E, 0x30}, {0x7E, 0x31}, {0x7E, 0x32}, /* 0x74-0x77 */ + {0x7E, 0x33}, {0x7E, 0x34}, {0x7E, 0x35}, {0x7E, 0x36}, /* 0x78-0x7B */ + {0x7E, 0x37}, {0x7E, 0x38}, {0x7E, 0x39}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7E, 0x3A}, {0x7E, 0x3C}, {0x7E, 0x3D}, {0x7E, 0x3E}, /* 0x80-0x83 */ + {0x7E, 0x3F}, {0x7E, 0x40}, {0x7E, 0x42}, {0x7E, 0x43}, /* 0x84-0x87 */ + {0x7E, 0x44}, {0x7E, 0x45}, {0x7E, 0x46}, {0x7E, 0x48}, /* 0x88-0x8B */ + {0x7E, 0x49}, {0x7E, 0x4A}, {0x7E, 0x4B}, {0x7E, 0x4C}, /* 0x8C-0x8F */ + {0x7E, 0x4D}, {0x7E, 0x4E}, {0x7E, 0x4F}, {0x7E, 0x50}, /* 0x90-0x93 */ + {0x7E, 0x51}, {0x7E, 0x52}, {0x7E, 0x53}, {0x7E, 0x54}, /* 0x94-0x97 */ + {0x7E, 0x55}, {0x7E, 0x56}, {0x7E, 0x57}, {0x7E, 0x58}, /* 0x98-0x9B */ + {0x7E, 0x59}, {0x7E, 0x5A}, {0x7E, 0x5B}, {0x7E, 0x5C}, /* 0x9C-0x9F */ + {0x7E, 0x5D}, {0x4F, 0xCA}, {0x7A, 0xE3}, {0x6D, 0x5A}, /* 0xA0-0xA3 */ + {0x90, 0xE1}, {0x9A, 0x8F}, {0x55, 0x80}, {0x54, 0x96}, /* 0xA4-0xA7 */ + {0x53, 0x61}, {0x54, 0xAF}, {0x5F, 0x00}, {0x63, 0xE9}, /* 0xA8-0xAB */ + {0x69, 0x77}, {0x51, 0xEF}, {0x61, 0x68}, {0x52, 0x0A}, /* 0xAC-0xAF */ + {0x58, 0x2A}, {0x52, 0xD8}, {0x57, 0x4E}, {0x78, 0x0D}, /* 0xB0-0xB3 */ + {0x77, 0x0B}, {0x5E, 0xB7}, {0x61, 0x77}, {0x7C, 0xE0}, /* 0xB4-0xB7 */ + {0x62, 0x5B}, {0x62, 0x97}, {0x4E, 0xA2}, {0x70, 0x95}, /* 0xB8-0xBB */ + {0x80, 0x03}, {0x62, 0xF7}, {0x70, 0xE4}, {0x97, 0x60}, /* 0xBC-0xBF */ + {0x57, 0x77}, {0x82, 0xDB}, {0x67, 0xEF}, {0x68, 0xF5}, /* 0xC0-0xC3 */ + {0x78, 0xD5}, {0x98, 0x97}, {0x79, 0xD1}, {0x58, 0xF3}, /* 0xC4-0xC7 */ + {0x54, 0xB3}, {0x53, 0xEF}, {0x6E, 0x34}, {0x51, 0x4B}, /* 0xC8-0xCB */ + {0x52, 0x3B}, {0x5B, 0xA2}, {0x8B, 0xFE}, {0x80, 0xAF}, /* 0xCC-0xCF */ + {0x55, 0x43}, {0x57, 0xA6}, {0x60, 0x73}, {0x57, 0x51}, /* 0xD0-0xD3 */ + {0x54, 0x2D}, {0x7A, 0x7A}, {0x60, 0x50}, {0x5B, 0x54}, /* 0xD4-0xD7 */ + {0x63, 0xA7}, {0x62, 0xA0}, {0x53, 0xE3}, {0x62, 0x63}, /* 0xD8-0xDB */ + {0x5B, 0xC7}, {0x67, 0xAF}, {0x54, 0xED}, {0x7A, 0x9F}, /* 0xDC-0xDF */ + {0x82, 0xE6}, {0x91, 0x77}, {0x5E, 0x93}, {0x88, 0xE4}, /* 0xE0-0xE3 */ + {0x59, 0x38}, {0x57, 0xAE}, {0x63, 0x0E}, {0x8D, 0xE8}, /* 0xE4-0xE7 */ + {0x80, 0xEF}, {0x57, 0x57}, {0x7B, 0x77}, {0x4F, 0xA9}, /* 0xE8-0xEB */ + {0x5F, 0xEB}, {0x5B, 0xBD}, {0x6B, 0x3E}, {0x53, 0x21}, /* 0xEC-0xEF */ + {0x7B, 0x50}, {0x72, 0xC2}, {0x68, 0x46}, {0x77, 0xFF}, /* 0xF0-0xF3 */ + {0x77, 0x36}, {0x65, 0xF7}, {0x51, 0xB5}, {0x4E, 0x8F}, /* 0xF4-0xF7 */ + {0x76, 0xD4}, {0x5C, 0xBF}, {0x7A, 0xA5}, {0x84, 0x75}, /* 0xF8-0xFB */ + {0x59, 0x4E}, {0x9B, 0x41}, {0x50, 0x80}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7E, 0x5E}, {0x7E, 0x5F}, {0x7E, 0x60}, {0x7E, 0x61}, /* 0x40-0x43 */ + {0x7E, 0x62}, {0x7E, 0x63}, {0x7E, 0x64}, {0x7E, 0x65}, /* 0x44-0x47 */ + {0x7E, 0x66}, {0x7E, 0x67}, {0x7E, 0x68}, {0x7E, 0x69}, /* 0x48-0x4B */ + {0x7E, 0x6A}, {0x7E, 0x6B}, {0x7E, 0x6C}, {0x7E, 0x6D}, /* 0x4C-0x4F */ + {0x7E, 0x6E}, {0x7E, 0x6F}, {0x7E, 0x70}, {0x7E, 0x71}, /* 0x50-0x53 */ + {0x7E, 0x72}, {0x7E, 0x73}, {0x7E, 0x74}, {0x7E, 0x75}, /* 0x54-0x57 */ + {0x7E, 0x76}, {0x7E, 0x77}, {0x7E, 0x78}, {0x7E, 0x79}, /* 0x58-0x5B */ + {0x7E, 0x7A}, {0x7E, 0x7B}, {0x7E, 0x7C}, {0x7E, 0x7D}, /* 0x5C-0x5F */ + {0x7E, 0x7E}, {0x7E, 0x7F}, {0x7E, 0x80}, {0x7E, 0x81}, /* 0x60-0x63 */ + {0x7E, 0x83}, {0x7E, 0x84}, {0x7E, 0x85}, {0x7E, 0x86}, /* 0x64-0x67 */ + {0x7E, 0x87}, {0x7E, 0x88}, {0x7E, 0x89}, {0x7E, 0x8A}, /* 0x68-0x6B */ + {0x7E, 0x8B}, {0x7E, 0x8C}, {0x7E, 0x8D}, {0x7E, 0x8E}, /* 0x6C-0x6F */ + {0x7E, 0x8F}, {0x7E, 0x90}, {0x7E, 0x91}, {0x7E, 0x92}, /* 0x70-0x73 */ + {0x7E, 0x93}, {0x7E, 0x94}, {0x7E, 0x95}, {0x7E, 0x96}, /* 0x74-0x77 */ + {0x7E, 0x97}, {0x7E, 0x98}, {0x7E, 0x99}, {0x7E, 0x9A}, /* 0x78-0x7B */ + {0x7E, 0x9C}, {0x7E, 0x9D}, {0x7E, 0x9E}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7E, 0xAE}, {0x7E, 0xB4}, {0x7E, 0xBB}, {0x7E, 0xBC}, /* 0x80-0x83 */ + {0x7E, 0xD6}, {0x7E, 0xE4}, {0x7E, 0xEC}, {0x7E, 0xF9}, /* 0x84-0x87 */ + {0x7F, 0x0A}, {0x7F, 0x10}, {0x7F, 0x1E}, {0x7F, 0x37}, /* 0x88-0x8B */ + {0x7F, 0x39}, {0x7F, 0x3B}, {0x7F, 0x3C}, {0x7F, 0x3D}, /* 0x8C-0x8F */ + {0x7F, 0x3E}, {0x7F, 0x3F}, {0x7F, 0x40}, {0x7F, 0x41}, /* 0x90-0x93 */ + {0x7F, 0x43}, {0x7F, 0x46}, {0x7F, 0x47}, {0x7F, 0x48}, /* 0x94-0x97 */ + {0x7F, 0x49}, {0x7F, 0x4A}, {0x7F, 0x4B}, {0x7F, 0x4C}, /* 0x98-0x9B */ + {0x7F, 0x4D}, {0x7F, 0x4E}, {0x7F, 0x4F}, {0x7F, 0x52}, /* 0x9C-0x9F */ + {0x7F, 0x53}, {0x99, 0x88}, {0x61, 0x27}, {0x6E, 0x83}, /* 0xA0-0xA3 */ + {0x57, 0x64}, {0x66, 0x06}, {0x63, 0x46}, {0x56, 0xF0}, /* 0xA4-0xA7 */ + {0x62, 0xEC}, {0x62, 0x69}, {0x5E, 0xD3}, {0x96, 0x14}, /* 0xA8-0xAB */ + {0x57, 0x83}, {0x62, 0xC9}, {0x55, 0x87}, {0x87, 0x21}, /* 0xAC-0xAF */ + {0x81, 0x4A}, {0x8F, 0xA3}, {0x55, 0x66}, {0x83, 0xB1}, /* 0xB0-0xB3 */ + {0x67, 0x65}, {0x8D, 0x56}, {0x84, 0xDD}, {0x5A, 0x6A}, /* 0xB4-0xB7 */ + {0x68, 0x0F}, {0x62, 0xE6}, {0x7B, 0xEE}, {0x96, 0x11}, /* 0xB8-0xBB */ + {0x51, 0x70}, {0x6F, 0x9C}, {0x8C, 0x30}, {0x63, 0xFD}, /* 0xBC-0xBF */ + {0x89, 0xC8}, {0x61, 0xD2}, {0x7F, 0x06}, {0x70, 0xC2}, /* 0xC0-0xC3 */ + {0x6E, 0xE5}, {0x74, 0x05}, {0x69, 0x94}, {0x72, 0xFC}, /* 0xC4-0xC7 */ + {0x5E, 0xCA}, {0x90, 0xCE}, {0x67, 0x17}, {0x6D, 0x6A}, /* 0xC8-0xCB */ + {0x63, 0x5E}, {0x52, 0xB3}, {0x72, 0x62}, {0x80, 0x01}, /* 0xCC-0xCF */ + {0x4F, 0x6C}, {0x59, 0xE5}, {0x91, 0x6A}, {0x70, 0xD9}, /* 0xD0-0xD3 */ + {0x6D, 0x9D}, {0x52, 0xD2}, {0x4E, 0x50}, {0x96, 0xF7}, /* 0xD4-0xD7 */ + {0x95, 0x6D}, {0x85, 0x7E}, {0x78, 0xCA}, {0x7D, 0x2F}, /* 0xD8-0xDB */ + {0x51, 0x21}, {0x57, 0x92}, {0x64, 0xC2}, {0x80, 0x8B}, /* 0xDC-0xDF */ + {0x7C, 0x7B}, {0x6C, 0xEA}, {0x68, 0xF1}, {0x69, 0x5E}, /* 0xE0-0xE3 */ + {0x51, 0xB7}, {0x53, 0x98}, {0x68, 0xA8}, {0x72, 0x81}, /* 0xE4-0xE7 */ + {0x9E, 0xCE}, {0x7B, 0xF1}, {0x72, 0xF8}, {0x79, 0xBB}, /* 0xE8-0xEB */ + {0x6F, 0x13}, {0x74, 0x06}, {0x67, 0x4E}, {0x91, 0xCC}, /* 0xEC-0xEF */ + {0x9C, 0xA4}, {0x79, 0x3C}, {0x83, 0x89}, {0x83, 0x54}, /* 0xF0-0xF3 */ + {0x54, 0x0F}, {0x68, 0x17}, {0x4E, 0x3D}, {0x53, 0x89}, /* 0xF4-0xF7 */ + {0x52, 0xB1}, {0x78, 0x3E}, {0x53, 0x86}, {0x52, 0x29}, /* 0xF8-0xFB */ + {0x50, 0x88}, {0x4F, 0x8B}, {0x4F, 0xD0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7F, 0x56}, {0x7F, 0x59}, {0x7F, 0x5B}, {0x7F, 0x5C}, /* 0x40-0x43 */ + {0x7F, 0x5D}, {0x7F, 0x5E}, {0x7F, 0x60}, {0x7F, 0x63}, /* 0x44-0x47 */ + {0x7F, 0x64}, {0x7F, 0x65}, {0x7F, 0x66}, {0x7F, 0x67}, /* 0x48-0x4B */ + {0x7F, 0x6B}, {0x7F, 0x6C}, {0x7F, 0x6D}, {0x7F, 0x6F}, /* 0x4C-0x4F */ + {0x7F, 0x70}, {0x7F, 0x73}, {0x7F, 0x75}, {0x7F, 0x76}, /* 0x50-0x53 */ + {0x7F, 0x77}, {0x7F, 0x78}, {0x7F, 0x7A}, {0x7F, 0x7B}, /* 0x54-0x57 */ + {0x7F, 0x7C}, {0x7F, 0x7D}, {0x7F, 0x7F}, {0x7F, 0x80}, /* 0x58-0x5B */ + {0x7F, 0x82}, {0x7F, 0x83}, {0x7F, 0x84}, {0x7F, 0x85}, /* 0x5C-0x5F */ + {0x7F, 0x86}, {0x7F, 0x87}, {0x7F, 0x88}, {0x7F, 0x89}, /* 0x60-0x63 */ + {0x7F, 0x8B}, {0x7F, 0x8D}, {0x7F, 0x8F}, {0x7F, 0x90}, /* 0x64-0x67 */ + {0x7F, 0x91}, {0x7F, 0x92}, {0x7F, 0x93}, {0x7F, 0x95}, /* 0x68-0x6B */ + {0x7F, 0x96}, {0x7F, 0x97}, {0x7F, 0x98}, {0x7F, 0x99}, /* 0x6C-0x6F */ + {0x7F, 0x9B}, {0x7F, 0x9C}, {0x7F, 0xA0}, {0x7F, 0xA2}, /* 0x70-0x73 */ + {0x7F, 0xA3}, {0x7F, 0xA5}, {0x7F, 0xA6}, {0x7F, 0xA8}, /* 0x74-0x77 */ + {0x7F, 0xA9}, {0x7F, 0xAA}, {0x7F, 0xAB}, {0x7F, 0xAC}, /* 0x78-0x7B */ + {0x7F, 0xAD}, {0x7F, 0xAE}, {0x7F, 0xB1}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x7F, 0xB3}, {0x7F, 0xB4}, {0x7F, 0xB5}, {0x7F, 0xB6}, /* 0x80-0x83 */ + {0x7F, 0xB7}, {0x7F, 0xBA}, {0x7F, 0xBB}, {0x7F, 0xBE}, /* 0x84-0x87 */ + {0x7F, 0xC0}, {0x7F, 0xC2}, {0x7F, 0xC3}, {0x7F, 0xC4}, /* 0x88-0x8B */ + {0x7F, 0xC6}, {0x7F, 0xC7}, {0x7F, 0xC8}, {0x7F, 0xC9}, /* 0x8C-0x8F */ + {0x7F, 0xCB}, {0x7F, 0xCD}, {0x7F, 0xCF}, {0x7F, 0xD0}, /* 0x90-0x93 */ + {0x7F, 0xD1}, {0x7F, 0xD2}, {0x7F, 0xD3}, {0x7F, 0xD6}, /* 0x94-0x97 */ + {0x7F, 0xD7}, {0x7F, 0xD9}, {0x7F, 0xDA}, {0x7F, 0xDB}, /* 0x98-0x9B */ + {0x7F, 0xDC}, {0x7F, 0xDD}, {0x7F, 0xDE}, {0x7F, 0xE2}, /* 0x9C-0x9F */ + {0x7F, 0xE3}, {0x75, 0xE2}, {0x7A, 0xCB}, {0x7C, 0x92}, /* 0xA0-0xA3 */ + {0x6C, 0xA5}, {0x96, 0xB6}, {0x52, 0x9B}, {0x74, 0x83}, /* 0xA4-0xA7 */ + {0x54, 0xE9}, {0x4F, 0xE9}, {0x80, 0x54}, {0x83, 0xB2}, /* 0xA8-0xAB */ + {0x8F, 0xDE}, {0x95, 0x70}, {0x5E, 0xC9}, {0x60, 0x1C}, /* 0xAC-0xAF */ + {0x6D, 0x9F}, {0x5E, 0x18}, {0x65, 0x5B}, {0x81, 0x38}, /* 0xB0-0xB3 */ + {0x94, 0xFE}, {0x60, 0x4B}, {0x70, 0xBC}, {0x7E, 0xC3}, /* 0xB4-0xB7 */ + {0x7C, 0xAE}, {0x51, 0xC9}, {0x68, 0x81}, {0x7C, 0xB1}, /* 0xB8-0xBB */ + {0x82, 0x6F}, {0x4E, 0x24}, {0x8F, 0x86}, {0x91, 0xCF}, /* 0xBC-0xBF */ + {0x66, 0x7E}, {0x4E, 0xAE}, {0x8C, 0x05}, {0x64, 0xA9}, /* 0xC0-0xC3 */ + {0x80, 0x4A}, {0x50, 0xDA}, {0x75, 0x97}, {0x71, 0xCE}, /* 0xC4-0xC7 */ + {0x5B, 0xE5}, {0x8F, 0xBD}, {0x6F, 0x66}, {0x4E, 0x86}, /* 0xC8-0xCB */ + {0x64, 0x82}, {0x95, 0x63}, {0x5E, 0xD6}, {0x65, 0x99}, /* 0xCC-0xCF */ + {0x52, 0x17}, {0x88, 0xC2}, {0x70, 0xC8}, {0x52, 0xA3}, /* 0xD0-0xD3 */ + {0x73, 0x0E}, {0x74, 0x33}, {0x67, 0x97}, {0x78, 0xF7}, /* 0xD4-0xD7 */ + {0x97, 0x16}, {0x4E, 0x34}, {0x90, 0xBB}, {0x9C, 0xDE}, /* 0xD8-0xDB */ + {0x6D, 0xCB}, {0x51, 0xDB}, {0x8D, 0x41}, {0x54, 0x1D}, /* 0xDC-0xDF */ + {0x62, 0xCE}, {0x73, 0xB2}, {0x83, 0xF1}, {0x96, 0xF6}, /* 0xE0-0xE3 */ + {0x9F, 0x84}, {0x94, 0xC3}, {0x4F, 0x36}, {0x7F, 0x9A}, /* 0xE4-0xE7 */ + {0x51, 0xCC}, {0x70, 0x75}, {0x96, 0x75}, {0x5C, 0xAD}, /* 0xE8-0xEB */ + {0x98, 0x86}, {0x53, 0xE6}, {0x4E, 0xE4}, {0x6E, 0x9C}, /* 0xEC-0xEF */ + {0x74, 0x09}, {0x69, 0xB4}, {0x78, 0x6B}, {0x99, 0x8F}, /* 0xF0-0xF3 */ + {0x75, 0x59}, {0x52, 0x18}, {0x76, 0x24}, {0x6D, 0x41}, /* 0xF4-0xF7 */ + {0x67, 0xF3}, {0x51, 0x6D}, {0x9F, 0x99}, {0x80, 0x4B}, /* 0xF8-0xFB */ + {0x54, 0x99}, {0x7B, 0x3C}, {0x7A, 0xBF}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7F, 0xE4}, {0x7F, 0xE7}, {0x7F, 0xE8}, {0x7F, 0xEA}, /* 0x40-0x43 */ + {0x7F, 0xEB}, {0x7F, 0xEC}, {0x7F, 0xED}, {0x7F, 0xEF}, /* 0x44-0x47 */ + {0x7F, 0xF2}, {0x7F, 0xF4}, {0x7F, 0xF5}, {0x7F, 0xF6}, /* 0x48-0x4B */ + {0x7F, 0xF7}, {0x7F, 0xF8}, {0x7F, 0xF9}, {0x7F, 0xFA}, /* 0x4C-0x4F */ + {0x7F, 0xFD}, {0x7F, 0xFE}, {0x7F, 0xFF}, {0x80, 0x02}, /* 0x50-0x53 */ + {0x80, 0x07}, {0x80, 0x08}, {0x80, 0x09}, {0x80, 0x0A}, /* 0x54-0x57 */ + {0x80, 0x0E}, {0x80, 0x0F}, {0x80, 0x11}, {0x80, 0x13}, /* 0x58-0x5B */ + {0x80, 0x1A}, {0x80, 0x1B}, {0x80, 0x1D}, {0x80, 0x1E}, /* 0x5C-0x5F */ + {0x80, 0x1F}, {0x80, 0x21}, {0x80, 0x23}, {0x80, 0x24}, /* 0x60-0x63 */ + {0x80, 0x2B}, {0x80, 0x2C}, {0x80, 0x2D}, {0x80, 0x2E}, /* 0x64-0x67 */ + {0x80, 0x2F}, {0x80, 0x30}, {0x80, 0x32}, {0x80, 0x34}, /* 0x68-0x6B */ + {0x80, 0x39}, {0x80, 0x3A}, {0x80, 0x3C}, {0x80, 0x3E}, /* 0x6C-0x6F */ + {0x80, 0x40}, {0x80, 0x41}, {0x80, 0x44}, {0x80, 0x45}, /* 0x70-0x73 */ + {0x80, 0x47}, {0x80, 0x48}, {0x80, 0x49}, {0x80, 0x4E}, /* 0x74-0x77 */ + {0x80, 0x4F}, {0x80, 0x50}, {0x80, 0x51}, {0x80, 0x53}, /* 0x78-0x7B */ + {0x80, 0x55}, {0x80, 0x56}, {0x80, 0x57}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x80, 0x59}, {0x80, 0x5B}, {0x80, 0x5C}, {0x80, 0x5D}, /* 0x80-0x83 */ + {0x80, 0x5E}, {0x80, 0x5F}, {0x80, 0x60}, {0x80, 0x61}, /* 0x84-0x87 */ + {0x80, 0x62}, {0x80, 0x63}, {0x80, 0x64}, {0x80, 0x65}, /* 0x88-0x8B */ + {0x80, 0x66}, {0x80, 0x67}, {0x80, 0x68}, {0x80, 0x6B}, /* 0x8C-0x8F */ + {0x80, 0x6C}, {0x80, 0x6D}, {0x80, 0x6E}, {0x80, 0x6F}, /* 0x90-0x93 */ + {0x80, 0x70}, {0x80, 0x72}, {0x80, 0x73}, {0x80, 0x74}, /* 0x94-0x97 */ + {0x80, 0x75}, {0x80, 0x76}, {0x80, 0x77}, {0x80, 0x78}, /* 0x98-0x9B */ + {0x80, 0x79}, {0x80, 0x7A}, {0x80, 0x7B}, {0x80, 0x7C}, /* 0x9C-0x9F */ + {0x80, 0x7D}, {0x96, 0x86}, {0x57, 0x84}, {0x62, 0xE2}, /* 0xA0-0xA3 */ + {0x96, 0x47}, {0x69, 0x7C}, {0x5A, 0x04}, {0x64, 0x02}, /* 0xA4-0xA7 */ + {0x7B, 0xD3}, {0x6F, 0x0F}, {0x96, 0x4B}, {0x82, 0xA6}, /* 0xA8-0xAB */ + {0x53, 0x62}, {0x98, 0x85}, {0x5E, 0x90}, {0x70, 0x89}, /* 0xAC-0xAF */ + {0x63, 0xB3}, {0x53, 0x64}, {0x86, 0x4F}, {0x9C, 0x81}, /* 0xB0-0xB3 */ + {0x9E, 0x93}, {0x78, 0x8C}, {0x97, 0x32}, {0x8D, 0xEF}, /* 0xB4-0xB7 */ + {0x8D, 0x42}, {0x9E, 0x7F}, {0x6F, 0x5E}, {0x79, 0x84}, /* 0xB8-0xBB */ + {0x5F, 0x55}, {0x96, 0x46}, {0x62, 0x2E}, {0x9A, 0x74}, /* 0xBC-0xBF */ + {0x54, 0x15}, {0x94, 0xDD}, {0x4F, 0xA3}, {0x65, 0xC5}, /* 0xC0-0xC3 */ + {0x5C, 0x65}, {0x5C, 0x61}, {0x7F, 0x15}, {0x86, 0x51}, /* 0xC4-0xC7 */ + {0x6C, 0x2F}, {0x5F, 0x8B}, {0x73, 0x87}, {0x6E, 0xE4}, /* 0xC8-0xCB */ + {0x7E, 0xFF}, {0x5C, 0xE6}, {0x63, 0x1B}, {0x5B, 0x6A}, /* 0xCC-0xCF */ + {0x6E, 0xE6}, {0x53, 0x75}, {0x4E, 0x71}, {0x63, 0xA0}, /* 0xD0-0xD3 */ + {0x75, 0x65}, {0x62, 0xA1}, {0x8F, 0x6E}, {0x4F, 0x26}, /* 0xD4-0xD7 */ + {0x4E, 0xD1}, {0x6C, 0xA6}, {0x7E, 0xB6}, {0x8B, 0xBA}, /* 0xD8-0xDB */ + {0x84, 0x1D}, {0x87, 0xBA}, {0x7F, 0x57}, {0x90, 0x3B}, /* 0xDC-0xDF */ + {0x95, 0x23}, {0x7B, 0xA9}, {0x9A, 0xA1}, {0x88, 0xF8}, /* 0xE0-0xE3 */ + {0x84, 0x3D}, {0x6D, 0x1B}, {0x9A, 0x86}, {0x7E, 0xDC}, /* 0xE4-0xE7 */ + {0x59, 0x88}, {0x9E, 0xBB}, {0x73, 0x9B}, {0x78, 0x01}, /* 0xE8-0xEB */ + {0x86, 0x82}, {0x9A, 0x6C}, {0x9A, 0x82}, {0x56, 0x1B}, /* 0xEC-0xEF */ + {0x54, 0x17}, {0x57, 0xCB}, {0x4E, 0x70}, {0x9E, 0xA6}, /* 0xF0-0xF3 */ + {0x53, 0x56}, {0x8F, 0xC8}, {0x81, 0x09}, {0x77, 0x92}, /* 0xF4-0xF7 */ + {0x99, 0x92}, {0x86, 0xEE}, {0x6E, 0xE1}, {0x85, 0x13}, /* 0xF8-0xFB */ + {0x66, 0xFC}, {0x61, 0x62}, {0x6F, 0x2B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x80, 0x7E}, {0x80, 0x81}, {0x80, 0x82}, {0x80, 0x85}, /* 0x40-0x43 */ + {0x80, 0x88}, {0x80, 0x8A}, {0x80, 0x8D}, {0x80, 0x8E}, /* 0x44-0x47 */ + {0x80, 0x8F}, {0x80, 0x90}, {0x80, 0x91}, {0x80, 0x92}, /* 0x48-0x4B */ + {0x80, 0x94}, {0x80, 0x95}, {0x80, 0x97}, {0x80, 0x99}, /* 0x4C-0x4F */ + {0x80, 0x9E}, {0x80, 0xA3}, {0x80, 0xA6}, {0x80, 0xA7}, /* 0x50-0x53 */ + {0x80, 0xA8}, {0x80, 0xAC}, {0x80, 0xB0}, {0x80, 0xB3}, /* 0x54-0x57 */ + {0x80, 0xB5}, {0x80, 0xB6}, {0x80, 0xB8}, {0x80, 0xB9}, /* 0x58-0x5B */ + {0x80, 0xBB}, {0x80, 0xC5}, {0x80, 0xC7}, {0x80, 0xC8}, /* 0x5C-0x5F */ + {0x80, 0xC9}, {0x80, 0xCA}, {0x80, 0xCB}, {0x80, 0xCF}, /* 0x60-0x63 */ + {0x80, 0xD0}, {0x80, 0xD1}, {0x80, 0xD2}, {0x80, 0xD3}, /* 0x64-0x67 */ + {0x80, 0xD4}, {0x80, 0xD5}, {0x80, 0xD8}, {0x80, 0xDF}, /* 0x68-0x6B */ + {0x80, 0xE0}, {0x80, 0xE2}, {0x80, 0xE3}, {0x80, 0xE6}, /* 0x6C-0x6F */ + {0x80, 0xEE}, {0x80, 0xF5}, {0x80, 0xF7}, {0x80, 0xF9}, /* 0x70-0x73 */ + {0x80, 0xFB}, {0x80, 0xFE}, {0x80, 0xFF}, {0x81, 0x00}, /* 0x74-0x77 */ + {0x81, 0x01}, {0x81, 0x03}, {0x81, 0x04}, {0x81, 0x05}, /* 0x78-0x7B */ + {0x81, 0x07}, {0x81, 0x08}, {0x81, 0x0B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x81, 0x0C}, {0x81, 0x15}, {0x81, 0x17}, {0x81, 0x19}, /* 0x80-0x83 */ + {0x81, 0x1B}, {0x81, 0x1C}, {0x81, 0x1D}, {0x81, 0x1F}, /* 0x84-0x87 */ + {0x81, 0x20}, {0x81, 0x21}, {0x81, 0x22}, {0x81, 0x23}, /* 0x88-0x8B */ + {0x81, 0x24}, {0x81, 0x25}, {0x81, 0x26}, {0x81, 0x27}, /* 0x8C-0x8F */ + {0x81, 0x28}, {0x81, 0x29}, {0x81, 0x2A}, {0x81, 0x2B}, /* 0x90-0x93 */ + {0x81, 0x2D}, {0x81, 0x2E}, {0x81, 0x30}, {0x81, 0x33}, /* 0x94-0x97 */ + {0x81, 0x34}, {0x81, 0x35}, {0x81, 0x37}, {0x81, 0x39}, /* 0x98-0x9B */ + {0x81, 0x3A}, {0x81, 0x3B}, {0x81, 0x3C}, {0x81, 0x3D}, /* 0x9C-0x9F */ + {0x81, 0x3F}, {0x8C, 0x29}, {0x82, 0x92}, {0x83, 0x2B}, /* 0xA0-0xA3 */ + {0x76, 0xF2}, {0x6C, 0x13}, {0x5F, 0xD9}, {0x83, 0xBD}, /* 0xA4-0xA7 */ + {0x73, 0x2B}, {0x83, 0x05}, {0x95, 0x1A}, {0x6B, 0xDB}, /* 0xA8-0xAB */ + {0x77, 0xDB}, {0x94, 0xC6}, {0x53, 0x6F}, {0x83, 0x02}, /* 0xAC-0xAF */ + {0x51, 0x92}, {0x5E, 0x3D}, {0x8C, 0x8C}, {0x8D, 0x38}, /* 0xB0-0xB3 */ + {0x4E, 0x48}, {0x73, 0xAB}, {0x67, 0x9A}, {0x68, 0x85}, /* 0xB4-0xB7 */ + {0x91, 0x76}, {0x97, 0x09}, {0x71, 0x64}, {0x6C, 0xA1}, /* 0xB8-0xBB */ + {0x77, 0x09}, {0x5A, 0x92}, {0x95, 0x41}, {0x6B, 0xCF}, /* 0xBC-0xBF */ + {0x7F, 0x8E}, {0x66, 0x27}, {0x5B, 0xD0}, {0x59, 0xB9}, /* 0xC0-0xC3 */ + {0x5A, 0x9A}, {0x95, 0xE8}, {0x95, 0xF7}, {0x4E, 0xEC}, /* 0xC4-0xC7 */ + {0x84, 0x0C}, {0x84, 0x99}, {0x6A, 0xAC}, {0x76, 0xDF}, /* 0xC8-0xCB */ + {0x95, 0x30}, {0x73, 0x1B}, {0x68, 0xA6}, {0x5B, 0x5F}, /* 0xCC-0xCF */ + {0x77, 0x2F}, {0x91, 0x9A}, {0x97, 0x61}, {0x7C, 0xDC}, /* 0xD0-0xD3 */ + {0x8F, 0xF7}, {0x8C, 0x1C}, {0x5F, 0x25}, {0x7C, 0x73}, /* 0xD4-0xD7 */ + {0x79, 0xD8}, {0x89, 0xC5}, {0x6C, 0xCC}, {0x87, 0x1C}, /* 0xD8-0xDB */ + {0x5B, 0xC6}, {0x5E, 0x42}, {0x68, 0xC9}, {0x77, 0x20}, /* 0xDC-0xDF */ + {0x7E, 0xF5}, {0x51, 0x95}, {0x51, 0x4D}, {0x52, 0xC9}, /* 0xE0-0xE3 */ + {0x5A, 0x29}, {0x7F, 0x05}, {0x97, 0x62}, {0x82, 0xD7}, /* 0xE4-0xE7 */ + {0x63, 0xCF}, {0x77, 0x84}, {0x85, 0xD0}, {0x79, 0xD2}, /* 0xE8-0xEB */ + {0x6E, 0x3A}, {0x5E, 0x99}, {0x59, 0x99}, {0x85, 0x11}, /* 0xEC-0xEF */ + {0x70, 0x6D}, {0x6C, 0x11}, {0x62, 0xBF}, {0x76, 0xBF}, /* 0xF0-0xF3 */ + {0x65, 0x4F}, {0x60, 0xAF}, {0x95, 0xFD}, {0x66, 0x0E}, /* 0xF4-0xF7 */ + {0x87, 0x9F}, {0x9E, 0x23}, {0x94, 0xED}, {0x54, 0x0D}, /* 0xF8-0xFB */ + {0x54, 0x7D}, {0x8C, 0x2C}, {0x64, 0x78}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x81, 0x40}, {0x81, 0x41}, {0x81, 0x42}, {0x81, 0x43}, /* 0x40-0x43 */ + {0x81, 0x44}, {0x81, 0x45}, {0x81, 0x47}, {0x81, 0x49}, /* 0x44-0x47 */ + {0x81, 0x4D}, {0x81, 0x4E}, {0x81, 0x4F}, {0x81, 0x52}, /* 0x48-0x4B */ + {0x81, 0x56}, {0x81, 0x57}, {0x81, 0x58}, {0x81, 0x5B}, /* 0x4C-0x4F */ + {0x81, 0x5C}, {0x81, 0x5D}, {0x81, 0x5E}, {0x81, 0x5F}, /* 0x50-0x53 */ + {0x81, 0x61}, {0x81, 0x62}, {0x81, 0x63}, {0x81, 0x64}, /* 0x54-0x57 */ + {0x81, 0x66}, {0x81, 0x68}, {0x81, 0x6A}, {0x81, 0x6B}, /* 0x58-0x5B */ + {0x81, 0x6C}, {0x81, 0x6F}, {0x81, 0x72}, {0x81, 0x73}, /* 0x5C-0x5F */ + {0x81, 0x75}, {0x81, 0x76}, {0x81, 0x77}, {0x81, 0x78}, /* 0x60-0x63 */ + {0x81, 0x81}, {0x81, 0x83}, {0x81, 0x84}, {0x81, 0x85}, /* 0x64-0x67 */ + {0x81, 0x86}, {0x81, 0x87}, {0x81, 0x89}, {0x81, 0x8B}, /* 0x68-0x6B */ + {0x81, 0x8C}, {0x81, 0x8D}, {0x81, 0x8E}, {0x81, 0x90}, /* 0x6C-0x6F */ + {0x81, 0x92}, {0x81, 0x93}, {0x81, 0x94}, {0x81, 0x95}, /* 0x70-0x73 */ + {0x81, 0x96}, {0x81, 0x97}, {0x81, 0x99}, {0x81, 0x9A}, /* 0x74-0x77 */ + {0x81, 0x9E}, {0x81, 0x9F}, {0x81, 0xA0}, {0x81, 0xA1}, /* 0x78-0x7B */ + {0x81, 0xA2}, {0x81, 0xA4}, {0x81, 0xA5}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x81, 0xA7}, {0x81, 0xA9}, {0x81, 0xAB}, {0x81, 0xAC}, /* 0x80-0x83 */ + {0x81, 0xAD}, {0x81, 0xAE}, {0x81, 0xAF}, {0x81, 0xB0}, /* 0x84-0x87 */ + {0x81, 0xB1}, {0x81, 0xB2}, {0x81, 0xB4}, {0x81, 0xB5}, /* 0x88-0x8B */ + {0x81, 0xB6}, {0x81, 0xB7}, {0x81, 0xB8}, {0x81, 0xB9}, /* 0x8C-0x8F */ + {0x81, 0xBC}, {0x81, 0xBD}, {0x81, 0xBE}, {0x81, 0xBF}, /* 0x90-0x93 */ + {0x81, 0xC4}, {0x81, 0xC5}, {0x81, 0xC7}, {0x81, 0xC8}, /* 0x94-0x97 */ + {0x81, 0xC9}, {0x81, 0xCB}, {0x81, 0xCD}, {0x81, 0xCE}, /* 0x98-0x9B */ + {0x81, 0xCF}, {0x81, 0xD0}, {0x81, 0xD1}, {0x81, 0xD2}, /* 0x9C-0x9F */ + {0x81, 0xD3}, {0x64, 0x79}, {0x86, 0x11}, {0x6A, 0x21}, /* 0xA0-0xA3 */ + {0x81, 0x9C}, {0x78, 0xE8}, {0x64, 0x69}, {0x9B, 0x54}, /* 0xA4-0xA7 */ + {0x62, 0xB9}, {0x67, 0x2B}, {0x83, 0xAB}, {0x58, 0xA8}, /* 0xA8-0xAB */ + {0x9E, 0xD8}, {0x6C, 0xAB}, {0x6F, 0x20}, {0x5B, 0xDE}, /* 0xAC-0xAF */ + {0x96, 0x4C}, {0x8C, 0x0B}, {0x72, 0x5F}, {0x67, 0xD0}, /* 0xB0-0xB3 */ + {0x62, 0xC7}, {0x72, 0x61}, {0x4E, 0xA9}, {0x59, 0xC6}, /* 0xB4-0xB7 */ + {0x6B, 0xCD}, {0x58, 0x93}, {0x66, 0xAE}, {0x5E, 0x55}, /* 0xB8-0xBB */ + {0x52, 0xDF}, {0x61, 0x55}, {0x67, 0x28}, {0x76, 0xEE}, /* 0xBC-0xBF */ + {0x77, 0x66}, {0x72, 0x67}, {0x7A, 0x46}, {0x62, 0xFF}, /* 0xC0-0xC3 */ + {0x54, 0xEA}, {0x54, 0x50}, {0x94, 0xA0}, {0x90, 0xA3}, /* 0xC4-0xC7 */ + {0x5A, 0x1C}, {0x7E, 0xB3}, {0x6C, 0x16}, {0x4E, 0x43}, /* 0xC8-0xCB */ + {0x59, 0x76}, {0x80, 0x10}, {0x59, 0x48}, {0x53, 0x57}, /* 0xCC-0xCF */ + {0x75, 0x37}, {0x96, 0xBE}, {0x56, 0xCA}, {0x63, 0x20}, /* 0xD0-0xD3 */ + {0x81, 0x11}, {0x60, 0x7C}, {0x95, 0xF9}, {0x6D, 0xD6}, /* 0xD4-0xD7 */ + {0x54, 0x62}, {0x99, 0x81}, {0x51, 0x85}, {0x5A, 0xE9}, /* 0xD8-0xDB */ + {0x80, 0xFD}, {0x59, 0xAE}, {0x97, 0x13}, {0x50, 0x2A}, /* 0xDC-0xDF */ + {0x6C, 0xE5}, {0x5C, 0x3C}, {0x62, 0xDF}, {0x4F, 0x60}, /* 0xE0-0xE3 */ + {0x53, 0x3F}, {0x81, 0x7B}, {0x90, 0x06}, {0x6E, 0xBA}, /* 0xE4-0xE7 */ + {0x85, 0x2B}, {0x62, 0xC8}, {0x5E, 0x74}, {0x78, 0xBE}, /* 0xE8-0xEB */ + {0x64, 0xB5}, {0x63, 0x7B}, {0x5F, 0xF5}, {0x5A, 0x18}, /* 0xEC-0xEF */ + {0x91, 0x7F}, {0x9E, 0x1F}, {0x5C, 0x3F}, {0x63, 0x4F}, /* 0xF0-0xF3 */ + {0x80, 0x42}, {0x5B, 0x7D}, {0x55, 0x6E}, {0x95, 0x4A}, /* 0xF4-0xF7 */ + {0x95, 0x4D}, {0x6D, 0x85}, {0x60, 0xA8}, {0x67, 0xE0}, /* 0xF8-0xFB */ + {0x72, 0xDE}, {0x51, 0xDD}, {0x5B, 0x81}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x81, 0xD4}, {0x81, 0xD5}, {0x81, 0xD6}, {0x81, 0xD7}, /* 0x40-0x43 */ + {0x81, 0xD8}, {0x81, 0xD9}, {0x81, 0xDA}, {0x81, 0xDB}, /* 0x44-0x47 */ + {0x81, 0xDC}, {0x81, 0xDD}, {0x81, 0xDE}, {0x81, 0xDF}, /* 0x48-0x4B */ + {0x81, 0xE0}, {0x81, 0xE1}, {0x81, 0xE2}, {0x81, 0xE4}, /* 0x4C-0x4F */ + {0x81, 0xE5}, {0x81, 0xE6}, {0x81, 0xE8}, {0x81, 0xE9}, /* 0x50-0x53 */ + {0x81, 0xEB}, {0x81, 0xEE}, {0x81, 0xEF}, {0x81, 0xF0}, /* 0x54-0x57 */ + {0x81, 0xF1}, {0x81, 0xF2}, {0x81, 0xF5}, {0x81, 0xF6}, /* 0x58-0x5B */ + {0x81, 0xF7}, {0x81, 0xF8}, {0x81, 0xF9}, {0x81, 0xFA}, /* 0x5C-0x5F */ + {0x81, 0xFD}, {0x81, 0xFF}, {0x82, 0x03}, {0x82, 0x07}, /* 0x60-0x63 */ + {0x82, 0x08}, {0x82, 0x09}, {0x82, 0x0A}, {0x82, 0x0B}, /* 0x64-0x67 */ + {0x82, 0x0E}, {0x82, 0x0F}, {0x82, 0x11}, {0x82, 0x13}, /* 0x68-0x6B */ + {0x82, 0x15}, {0x82, 0x16}, {0x82, 0x17}, {0x82, 0x18}, /* 0x6C-0x6F */ + {0x82, 0x19}, {0x82, 0x1A}, {0x82, 0x1D}, {0x82, 0x20}, /* 0x70-0x73 */ + {0x82, 0x24}, {0x82, 0x25}, {0x82, 0x26}, {0x82, 0x27}, /* 0x74-0x77 */ + {0x82, 0x29}, {0x82, 0x2E}, {0x82, 0x32}, {0x82, 0x3A}, /* 0x78-0x7B */ + {0x82, 0x3C}, {0x82, 0x3D}, {0x82, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x82, 0x40}, {0x82, 0x41}, {0x82, 0x42}, {0x82, 0x43}, /* 0x80-0x83 */ + {0x82, 0x45}, {0x82, 0x46}, {0x82, 0x48}, {0x82, 0x4A}, /* 0x84-0x87 */ + {0x82, 0x4C}, {0x82, 0x4D}, {0x82, 0x4E}, {0x82, 0x50}, /* 0x88-0x8B */ + {0x82, 0x51}, {0x82, 0x52}, {0x82, 0x53}, {0x82, 0x54}, /* 0x8C-0x8F */ + {0x82, 0x55}, {0x82, 0x56}, {0x82, 0x57}, {0x82, 0x59}, /* 0x90-0x93 */ + {0x82, 0x5B}, {0x82, 0x5C}, {0x82, 0x5D}, {0x82, 0x5E}, /* 0x94-0x97 */ + {0x82, 0x60}, {0x82, 0x61}, {0x82, 0x62}, {0x82, 0x63}, /* 0x98-0x9B */ + {0x82, 0x64}, {0x82, 0x65}, {0x82, 0x66}, {0x82, 0x67}, /* 0x9C-0x9F */ + {0x82, 0x69}, {0x62, 0xE7}, {0x6C, 0xDE}, {0x72, 0x5B}, /* 0xA0-0xA3 */ + {0x62, 0x6D}, {0x94, 0xAE}, {0x7E, 0xBD}, {0x81, 0x13}, /* 0xA4-0xA7 */ + {0x6D, 0x53}, {0x51, 0x9C}, {0x5F, 0x04}, {0x59, 0x74}, /* 0xA8-0xAB */ + {0x52, 0xAA}, {0x60, 0x12}, {0x59, 0x73}, {0x66, 0x96}, /* 0xAC-0xAF */ + {0x86, 0x50}, {0x75, 0x9F}, {0x63, 0x2A}, {0x61, 0xE6}, /* 0xB0-0xB3 */ + {0x7C, 0xEF}, {0x8B, 0xFA}, {0x54, 0xE6}, {0x6B, 0x27}, /* 0xB4-0xB7 */ + {0x9E, 0x25}, {0x6B, 0xB4}, {0x85, 0xD5}, {0x54, 0x55}, /* 0xB8-0xBB */ + {0x50, 0x76}, {0x6C, 0xA4}, {0x55, 0x6A}, {0x8D, 0xB4}, /* 0xBC-0xBF */ + {0x72, 0x2C}, {0x5E, 0x15}, {0x60, 0x15}, {0x74, 0x36}, /* 0xC0-0xC3 */ + {0x62, 0xCD}, {0x63, 0x92}, {0x72, 0x4C}, {0x5F, 0x98}, /* 0xC4-0xC7 */ + {0x6E, 0x43}, {0x6D, 0x3E}, {0x65, 0x00}, {0x6F, 0x58}, /* 0xC8-0xCB */ + {0x76, 0xD8}, {0x78, 0xD0}, {0x76, 0xFC}, {0x75, 0x54}, /* 0xCC-0xCF */ + {0x52, 0x24}, {0x53, 0xDB}, {0x4E, 0x53}, {0x5E, 0x9E}, /* 0xD0-0xD3 */ + {0x65, 0xC1}, {0x80, 0x2A}, {0x80, 0xD6}, {0x62, 0x9B}, /* 0xD4-0xD7 */ + {0x54, 0x86}, {0x52, 0x28}, {0x70, 0xAE}, {0x88, 0x8D}, /* 0xD8-0xDB */ + {0x8D, 0xD1}, {0x6C, 0xE1}, {0x54, 0x78}, {0x80, 0xDA}, /* 0xDC-0xDF */ + {0x57, 0xF9}, {0x88, 0xF4}, {0x8D, 0x54}, {0x96, 0x6A}, /* 0xE0-0xE3 */ + {0x91, 0x4D}, {0x4F, 0x69}, {0x6C, 0x9B}, {0x55, 0xB7}, /* 0xE4-0xE7 */ + {0x76, 0xC6}, {0x78, 0x30}, {0x62, 0xA8}, {0x70, 0xF9}, /* 0xE8-0xEB */ + {0x6F, 0x8E}, {0x5F, 0x6D}, {0x84, 0xEC}, {0x68, 0xDA}, /* 0xEC-0xEF */ + {0x78, 0x7C}, {0x7B, 0xF7}, {0x81, 0xA8}, {0x67, 0x0B}, /* 0xF0-0xF3 */ + {0x9E, 0x4F}, {0x63, 0x67}, {0x78, 0xB0}, {0x57, 0x6F}, /* 0xF4-0xF7 */ + {0x78, 0x12}, {0x97, 0x39}, {0x62, 0x79}, {0x62, 0xAB}, /* 0xF8-0xFB */ + {0x52, 0x88}, {0x74, 0x35}, {0x6B, 0xD7}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x82, 0x6A}, {0x82, 0x6B}, {0x82, 0x6C}, {0x82, 0x6D}, /* 0x40-0x43 */ + {0x82, 0x71}, {0x82, 0x75}, {0x82, 0x76}, {0x82, 0x77}, /* 0x44-0x47 */ + {0x82, 0x78}, {0x82, 0x7B}, {0x82, 0x7C}, {0x82, 0x80}, /* 0x48-0x4B */ + {0x82, 0x81}, {0x82, 0x83}, {0x82, 0x85}, {0x82, 0x86}, /* 0x4C-0x4F */ + {0x82, 0x87}, {0x82, 0x89}, {0x82, 0x8C}, {0x82, 0x90}, /* 0x50-0x53 */ + {0x82, 0x93}, {0x82, 0x94}, {0x82, 0x95}, {0x82, 0x96}, /* 0x54-0x57 */ + {0x82, 0x9A}, {0x82, 0x9B}, {0x82, 0x9E}, {0x82, 0xA0}, /* 0x58-0x5B */ + {0x82, 0xA2}, {0x82, 0xA3}, {0x82, 0xA7}, {0x82, 0xB2}, /* 0x5C-0x5F */ + {0x82, 0xB5}, {0x82, 0xB6}, {0x82, 0xBA}, {0x82, 0xBB}, /* 0x60-0x63 */ + {0x82, 0xBC}, {0x82, 0xBF}, {0x82, 0xC0}, {0x82, 0xC2}, /* 0x64-0x67 */ + {0x82, 0xC3}, {0x82, 0xC5}, {0x82, 0xC6}, {0x82, 0xC9}, /* 0x68-0x6B */ + {0x82, 0xD0}, {0x82, 0xD6}, {0x82, 0xD9}, {0x82, 0xDA}, /* 0x6C-0x6F */ + {0x82, 0xDD}, {0x82, 0xE2}, {0x82, 0xE7}, {0x82, 0xE8}, /* 0x70-0x73 */ + {0x82, 0xE9}, {0x82, 0xEA}, {0x82, 0xEC}, {0x82, 0xED}, /* 0x74-0x77 */ + {0x82, 0xEE}, {0x82, 0xF0}, {0x82, 0xF2}, {0x82, 0xF3}, /* 0x78-0x7B */ + {0x82, 0xF5}, {0x82, 0xF6}, {0x82, 0xF8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x82, 0xFA}, {0x82, 0xFC}, {0x82, 0xFD}, {0x82, 0xFE}, /* 0x80-0x83 */ + {0x82, 0xFF}, {0x83, 0x00}, {0x83, 0x0A}, {0x83, 0x0B}, /* 0x84-0x87 */ + {0x83, 0x0D}, {0x83, 0x10}, {0x83, 0x12}, {0x83, 0x13}, /* 0x88-0x8B */ + {0x83, 0x16}, {0x83, 0x18}, {0x83, 0x19}, {0x83, 0x1D}, /* 0x8C-0x8F */ + {0x83, 0x1E}, {0x83, 0x1F}, {0x83, 0x20}, {0x83, 0x21}, /* 0x90-0x93 */ + {0x83, 0x22}, {0x83, 0x23}, {0x83, 0x24}, {0x83, 0x25}, /* 0x94-0x97 */ + {0x83, 0x26}, {0x83, 0x29}, {0x83, 0x2A}, {0x83, 0x2E}, /* 0x98-0x9B */ + {0x83, 0x30}, {0x83, 0x32}, {0x83, 0x37}, {0x83, 0x3B}, /* 0x9C-0x9F */ + {0x83, 0x3D}, {0x55, 0x64}, {0x81, 0x3E}, {0x75, 0xB2}, /* 0xA0-0xA3 */ + {0x76, 0xAE}, {0x53, 0x39}, {0x75, 0xDE}, {0x50, 0xFB}, /* 0xA4-0xA7 */ + {0x5C, 0x41}, {0x8B, 0x6C}, {0x7B, 0xC7}, {0x50, 0x4F}, /* 0xA8-0xAB */ + {0x72, 0x47}, {0x9A, 0x97}, {0x98, 0xD8}, {0x6F, 0x02}, /* 0xAC-0xAF */ + {0x74, 0xE2}, {0x79, 0x68}, {0x64, 0x87}, {0x77, 0xA5}, /* 0xB0-0xB3 */ + {0x62, 0xFC}, {0x98, 0x91}, {0x8D, 0x2B}, {0x54, 0xC1}, /* 0xB4-0xB7 */ + {0x80, 0x58}, {0x4E, 0x52}, {0x57, 0x6A}, {0x82, 0xF9}, /* 0xB8-0xBB */ + {0x84, 0x0D}, {0x5E, 0x73}, {0x51, 0xED}, {0x74, 0xF6}, /* 0xBC-0xBF */ + {0x8B, 0xC4}, {0x5C, 0x4F}, {0x57, 0x61}, {0x6C, 0xFC}, /* 0xC0-0xC3 */ + {0x98, 0x87}, {0x5A, 0x46}, {0x78, 0x34}, {0x9B, 0x44}, /* 0xC4-0xC7 */ + {0x8F, 0xEB}, {0x7C, 0x95}, {0x52, 0x56}, {0x62, 0x51}, /* 0xC8-0xCB */ + {0x94, 0xFA}, {0x4E, 0xC6}, {0x83, 0x86}, {0x84, 0x61}, /* 0xCC-0xCF */ + {0x83, 0xE9}, {0x84, 0xB2}, {0x57, 0xD4}, {0x67, 0x34}, /* 0xD0-0xD3 */ + {0x57, 0x03}, {0x66, 0x6E}, {0x6D, 0x66}, {0x8C, 0x31}, /* 0xD4-0xD7 */ + {0x66, 0xDD}, {0x70, 0x11}, {0x67, 0x1F}, {0x6B, 0x3A}, /* 0xD8-0xDB */ + {0x68, 0x16}, {0x62, 0x1A}, {0x59, 0xBB}, {0x4E, 0x03}, /* 0xDC-0xDF */ + {0x51, 0xC4}, {0x6F, 0x06}, {0x67, 0xD2}, {0x6C, 0x8F}, /* 0xE0-0xE3 */ + {0x51, 0x76}, {0x68, 0xCB}, {0x59, 0x47}, {0x6B, 0x67}, /* 0xE4-0xE7 */ + {0x75, 0x66}, {0x5D, 0x0E}, {0x81, 0x10}, {0x9F, 0x50}, /* 0xE8-0xEB */ + {0x65, 0xD7}, {0x79, 0x48}, {0x79, 0x41}, {0x9A, 0x91}, /* 0xEC-0xEF */ + {0x8D, 0x77}, {0x5C, 0x82}, {0x4E, 0x5E}, {0x4F, 0x01}, /* 0xF0-0xF3 */ + {0x54, 0x2F}, {0x59, 0x51}, {0x78, 0x0C}, {0x56, 0x68}, /* 0xF4-0xF7 */ + {0x6C, 0x14}, {0x8F, 0xC4}, {0x5F, 0x03}, {0x6C, 0x7D}, /* 0xF8-0xFB */ + {0x6C, 0xE3}, {0x8B, 0xAB}, {0x63, 0x90}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x83, 0x3E}, {0x83, 0x3F}, {0x83, 0x41}, {0x83, 0x42}, /* 0x40-0x43 */ + {0x83, 0x44}, {0x83, 0x45}, {0x83, 0x48}, {0x83, 0x4A}, /* 0x44-0x47 */ + {0x83, 0x4B}, {0x83, 0x4C}, {0x83, 0x4D}, {0x83, 0x4E}, /* 0x48-0x4B */ + {0x83, 0x53}, {0x83, 0x55}, {0x83, 0x56}, {0x83, 0x57}, /* 0x4C-0x4F */ + {0x83, 0x58}, {0x83, 0x59}, {0x83, 0x5D}, {0x83, 0x62}, /* 0x50-0x53 */ + {0x83, 0x70}, {0x83, 0x71}, {0x83, 0x72}, {0x83, 0x73}, /* 0x54-0x57 */ + {0x83, 0x74}, {0x83, 0x75}, {0x83, 0x76}, {0x83, 0x79}, /* 0x58-0x5B */ + {0x83, 0x7A}, {0x83, 0x7E}, {0x83, 0x7F}, {0x83, 0x80}, /* 0x5C-0x5F */ + {0x83, 0x81}, {0x83, 0x82}, {0x83, 0x83}, {0x83, 0x84}, /* 0x60-0x63 */ + {0x83, 0x87}, {0x83, 0x88}, {0x83, 0x8A}, {0x83, 0x8B}, /* 0x64-0x67 */ + {0x83, 0x8C}, {0x83, 0x8D}, {0x83, 0x8F}, {0x83, 0x90}, /* 0x68-0x6B */ + {0x83, 0x91}, {0x83, 0x94}, {0x83, 0x95}, {0x83, 0x96}, /* 0x6C-0x6F */ + {0x83, 0x97}, {0x83, 0x99}, {0x83, 0x9A}, {0x83, 0x9D}, /* 0x70-0x73 */ + {0x83, 0x9F}, {0x83, 0xA1}, {0x83, 0xA2}, {0x83, 0xA3}, /* 0x74-0x77 */ + {0x83, 0xA4}, {0x83, 0xA5}, {0x83, 0xA6}, {0x83, 0xA7}, /* 0x78-0x7B */ + {0x83, 0xAC}, {0x83, 0xAD}, {0x83, 0xAE}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x83, 0xAF}, {0x83, 0xB5}, {0x83, 0xBB}, {0x83, 0xBE}, /* 0x80-0x83 */ + {0x83, 0xBF}, {0x83, 0xC2}, {0x83, 0xC3}, {0x83, 0xC4}, /* 0x84-0x87 */ + {0x83, 0xC6}, {0x83, 0xC8}, {0x83, 0xC9}, {0x83, 0xCB}, /* 0x88-0x8B */ + {0x83, 0xCD}, {0x83, 0xCE}, {0x83, 0xD0}, {0x83, 0xD1}, /* 0x8C-0x8F */ + {0x83, 0xD2}, {0x83, 0xD3}, {0x83, 0xD5}, {0x83, 0xD7}, /* 0x90-0x93 */ + {0x83, 0xD9}, {0x83, 0xDA}, {0x83, 0xDB}, {0x83, 0xDE}, /* 0x94-0x97 */ + {0x83, 0xE2}, {0x83, 0xE3}, {0x83, 0xE4}, {0x83, 0xE6}, /* 0x98-0x9B */ + {0x83, 0xE7}, {0x83, 0xE8}, {0x83, 0xEB}, {0x83, 0xEC}, /* 0x9C-0x9F */ + {0x83, 0xED}, {0x60, 0x70}, {0x6D, 0x3D}, {0x72, 0x75}, /* 0xA0-0xA3 */ + {0x62, 0x66}, {0x94, 0x8E}, {0x94, 0xC5}, {0x53, 0x43}, /* 0xA4-0xA7 */ + {0x8F, 0xC1}, {0x7B, 0x7E}, {0x4E, 0xDF}, {0x8C, 0x26}, /* 0xA8-0xAB */ + {0x4E, 0x7E}, {0x9E, 0xD4}, {0x94, 0xB1}, {0x94, 0xB3}, /* 0xAC-0xAF */ + {0x52, 0x4D}, {0x6F, 0x5C}, {0x90, 0x63}, {0x6D, 0x45}, /* 0xB0-0xB3 */ + {0x8C, 0x34}, {0x58, 0x11}, {0x5D, 0x4C}, {0x6B, 0x20}, /* 0xB4-0xB7 */ + {0x6B, 0x49}, {0x67, 0xAA}, {0x54, 0x5B}, {0x81, 0x54}, /* 0xB8-0xBB */ + {0x7F, 0x8C}, {0x58, 0x99}, {0x85, 0x37}, {0x5F, 0x3A}, /* 0xBC-0xBF */ + {0x62, 0xA2}, {0x6A, 0x47}, {0x95, 0x39}, {0x65, 0x72}, /* 0xC0-0xC3 */ + {0x60, 0x84}, {0x68, 0x65}, {0x77, 0xA7}, {0x4E, 0x54}, /* 0xC4-0xC7 */ + {0x4F, 0xA8}, {0x5D, 0xE7}, {0x97, 0x98}, {0x64, 0xAC}, /* 0xC8-0xCB */ + {0x7F, 0xD8}, {0x5C, 0xED}, {0x4F, 0xCF}, {0x7A, 0x8D}, /* 0xCC-0xCF */ + {0x52, 0x07}, {0x83, 0x04}, {0x4E, 0x14}, {0x60, 0x2F}, /* 0xD0-0xD3 */ + {0x7A, 0x83}, {0x94, 0xA6}, {0x4F, 0xB5}, {0x4E, 0xB2}, /* 0xD4-0xD7 */ + {0x79, 0xE6}, {0x74, 0x34}, {0x52, 0xE4}, {0x82, 0xB9}, /* 0xD8-0xDB */ + {0x64, 0xD2}, {0x79, 0xBD}, {0x5B, 0xDD}, {0x6C, 0x81}, /* 0xDC-0xDF */ + {0x97, 0x52}, {0x8F, 0x7B}, {0x6C, 0x22}, {0x50, 0x3E}, /* 0xE0-0xE3 */ + {0x53, 0x7F}, {0x6E, 0x05}, {0x64, 0xCE}, {0x66, 0x74}, /* 0xE4-0xE7 */ + {0x6C, 0x30}, {0x60, 0xC5}, {0x98, 0x77}, {0x8B, 0xF7}, /* 0xE8-0xEB */ + {0x5E, 0x86}, {0x74, 0x3C}, {0x7A, 0x77}, {0x79, 0xCB}, /* 0xEC-0xEF */ + {0x4E, 0x18}, {0x90, 0xB1}, {0x74, 0x03}, {0x6C, 0x42}, /* 0xF0-0xF3 */ + {0x56, 0xDA}, {0x91, 0x4B}, {0x6C, 0xC5}, {0x8D, 0x8B}, /* 0xF4-0xF7 */ + {0x53, 0x3A}, {0x86, 0xC6}, {0x66, 0xF2}, {0x8E, 0xAF}, /* 0xF8-0xFB */ + {0x5C, 0x48}, {0x9A, 0x71}, {0x6E, 0x20}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x83, 0xEE}, {0x83, 0xEF}, {0x83, 0xF3}, {0x83, 0xF4}, /* 0x40-0x43 */ + {0x83, 0xF5}, {0x83, 0xF6}, {0x83, 0xF7}, {0x83, 0xFA}, /* 0x44-0x47 */ + {0x83, 0xFB}, {0x83, 0xFC}, {0x83, 0xFE}, {0x83, 0xFF}, /* 0x48-0x4B */ + {0x84, 0x00}, {0x84, 0x02}, {0x84, 0x05}, {0x84, 0x07}, /* 0x4C-0x4F */ + {0x84, 0x08}, {0x84, 0x09}, {0x84, 0x0A}, {0x84, 0x10}, /* 0x50-0x53 */ + {0x84, 0x12}, {0x84, 0x13}, {0x84, 0x14}, {0x84, 0x15}, /* 0x54-0x57 */ + {0x84, 0x16}, {0x84, 0x17}, {0x84, 0x19}, {0x84, 0x1A}, /* 0x58-0x5B */ + {0x84, 0x1B}, {0x84, 0x1E}, {0x84, 0x1F}, {0x84, 0x20}, /* 0x5C-0x5F */ + {0x84, 0x21}, {0x84, 0x22}, {0x84, 0x23}, {0x84, 0x29}, /* 0x60-0x63 */ + {0x84, 0x2A}, {0x84, 0x2B}, {0x84, 0x2C}, {0x84, 0x2D}, /* 0x64-0x67 */ + {0x84, 0x2E}, {0x84, 0x2F}, {0x84, 0x30}, {0x84, 0x32}, /* 0x68-0x6B */ + {0x84, 0x33}, {0x84, 0x34}, {0x84, 0x35}, {0x84, 0x36}, /* 0x6C-0x6F */ + {0x84, 0x37}, {0x84, 0x39}, {0x84, 0x3A}, {0x84, 0x3B}, /* 0x70-0x73 */ + {0x84, 0x3E}, {0x84, 0x3F}, {0x84, 0x40}, {0x84, 0x41}, /* 0x74-0x77 */ + {0x84, 0x42}, {0x84, 0x43}, {0x84, 0x44}, {0x84, 0x45}, /* 0x78-0x7B */ + {0x84, 0x47}, {0x84, 0x48}, {0x84, 0x49}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x84, 0x4A}, {0x84, 0x4B}, {0x84, 0x4C}, {0x84, 0x4D}, /* 0x80-0x83 */ + {0x84, 0x4E}, {0x84, 0x4F}, {0x84, 0x50}, {0x84, 0x52}, /* 0x84-0x87 */ + {0x84, 0x53}, {0x84, 0x54}, {0x84, 0x55}, {0x84, 0x56}, /* 0x88-0x8B */ + {0x84, 0x58}, {0x84, 0x5D}, {0x84, 0x5E}, {0x84, 0x5F}, /* 0x8C-0x8F */ + {0x84, 0x60}, {0x84, 0x62}, {0x84, 0x64}, {0x84, 0x65}, /* 0x90-0x93 */ + {0x84, 0x66}, {0x84, 0x67}, {0x84, 0x68}, {0x84, 0x6A}, /* 0x94-0x97 */ + {0x84, 0x6E}, {0x84, 0x6F}, {0x84, 0x70}, {0x84, 0x72}, /* 0x98-0x9B */ + {0x84, 0x74}, {0x84, 0x77}, {0x84, 0x79}, {0x84, 0x7B}, /* 0x9C-0x9F */ + {0x84, 0x7C}, {0x53, 0xD6}, {0x5A, 0x36}, {0x9F, 0x8B}, /* 0xA0-0xA3 */ + {0x8D, 0xA3}, {0x53, 0xBB}, {0x57, 0x08}, {0x98, 0xA7}, /* 0xA4-0xA7 */ + {0x67, 0x43}, {0x91, 0x9B}, {0x6C, 0xC9}, {0x51, 0x68}, /* 0xA8-0xAB */ + {0x75, 0xCA}, {0x62, 0xF3}, {0x72, 0xAC}, {0x52, 0x38}, /* 0xAC-0xAF */ + {0x52, 0x9D}, {0x7F, 0x3A}, {0x70, 0x94}, {0x76, 0x38}, /* 0xB0-0xB3 */ + {0x53, 0x74}, {0x9E, 0x4A}, {0x69, 0xB7}, {0x78, 0x6E}, /* 0xB4-0xB7 */ + {0x96, 0xC0}, {0x88, 0xD9}, {0x7F, 0xA4}, {0x71, 0x36}, /* 0xB8-0xBB */ + {0x71, 0xC3}, {0x51, 0x89}, {0x67, 0xD3}, {0x74, 0xE4}, /* 0xBC-0xBF */ + {0x58, 0xE4}, {0x65, 0x18}, {0x56, 0xB7}, {0x8B, 0xA9}, /* 0xC0-0xC3 */ + {0x99, 0x76}, {0x62, 0x70}, {0x7E, 0xD5}, {0x60, 0xF9}, /* 0xC4-0xC7 */ + {0x70, 0xED}, {0x58, 0xEC}, {0x4E, 0xC1}, {0x4E, 0xBA}, /* 0xC8-0xCB */ + {0x5F, 0xCD}, {0x97, 0xE7}, {0x4E, 0xFB}, {0x8B, 0xA4}, /* 0xCC-0xCF */ + {0x52, 0x03}, {0x59, 0x8A}, {0x7E, 0xAB}, {0x62, 0x54}, /* 0xD0-0xD3 */ + {0x4E, 0xCD}, {0x65, 0xE5}, {0x62, 0x0E}, {0x83, 0x38}, /* 0xD4-0xD7 */ + {0x84, 0xC9}, {0x83, 0x63}, {0x87, 0x8D}, {0x71, 0x94}, /* 0xD8-0xDB */ + {0x6E, 0xB6}, {0x5B, 0xB9}, {0x7E, 0xD2}, {0x51, 0x97}, /* 0xDC-0xDF */ + {0x63, 0xC9}, {0x67, 0xD4}, {0x80, 0x89}, {0x83, 0x39}, /* 0xE0-0xE3 */ + {0x88, 0x15}, {0x51, 0x12}, {0x5B, 0x7A}, {0x59, 0x82}, /* 0xE4-0xE7 */ + {0x8F, 0xB1}, {0x4E, 0x73}, {0x6C, 0x5D}, {0x51, 0x65}, /* 0xE8-0xEB */ + {0x89, 0x25}, {0x8F, 0x6F}, {0x96, 0x2E}, {0x85, 0x4A}, /* 0xEC-0xEF */ + {0x74, 0x5E}, {0x95, 0x10}, {0x95, 0xF0}, {0x6D, 0xA6}, /* 0xF0-0xF3 */ + {0x82, 0xE5}, {0x5F, 0x31}, {0x64, 0x92}, {0x6D, 0x12}, /* 0xF4-0xF7 */ + {0x84, 0x28}, {0x81, 0x6E}, {0x9C, 0xC3}, {0x58, 0x5E}, /* 0xF8-0xFB */ + {0x8D, 0x5B}, {0x4E, 0x09}, {0x53, 0xC1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x84, 0x7D}, {0x84, 0x7E}, {0x84, 0x7F}, {0x84, 0x80}, /* 0x40-0x43 */ + {0x84, 0x81}, {0x84, 0x83}, {0x84, 0x84}, {0x84, 0x85}, /* 0x44-0x47 */ + {0x84, 0x86}, {0x84, 0x8A}, {0x84, 0x8D}, {0x84, 0x8F}, /* 0x48-0x4B */ + {0x84, 0x90}, {0x84, 0x91}, {0x84, 0x92}, {0x84, 0x93}, /* 0x4C-0x4F */ + {0x84, 0x94}, {0x84, 0x95}, {0x84, 0x96}, {0x84, 0x98}, /* 0x50-0x53 */ + {0x84, 0x9A}, {0x84, 0x9B}, {0x84, 0x9D}, {0x84, 0x9E}, /* 0x54-0x57 */ + {0x84, 0x9F}, {0x84, 0xA0}, {0x84, 0xA2}, {0x84, 0xA3}, /* 0x58-0x5B */ + {0x84, 0xA4}, {0x84, 0xA5}, {0x84, 0xA6}, {0x84, 0xA7}, /* 0x5C-0x5F */ + {0x84, 0xA8}, {0x84, 0xA9}, {0x84, 0xAA}, {0x84, 0xAB}, /* 0x60-0x63 */ + {0x84, 0xAC}, {0x84, 0xAD}, {0x84, 0xAE}, {0x84, 0xB0}, /* 0x64-0x67 */ + {0x84, 0xB1}, {0x84, 0xB3}, {0x84, 0xB5}, {0x84, 0xB6}, /* 0x68-0x6B */ + {0x84, 0xB7}, {0x84, 0xBB}, {0x84, 0xBC}, {0x84, 0xBE}, /* 0x6C-0x6F */ + {0x84, 0xC0}, {0x84, 0xC2}, {0x84, 0xC3}, {0x84, 0xC5}, /* 0x70-0x73 */ + {0x84, 0xC6}, {0x84, 0xC7}, {0x84, 0xC8}, {0x84, 0xCB}, /* 0x74-0x77 */ + {0x84, 0xCC}, {0x84, 0xCE}, {0x84, 0xCF}, {0x84, 0xD2}, /* 0x78-0x7B */ + {0x84, 0xD4}, {0x84, 0xD5}, {0x84, 0xD7}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x84, 0xD8}, {0x84, 0xD9}, {0x84, 0xDA}, {0x84, 0xDB}, /* 0x80-0x83 */ + {0x84, 0xDC}, {0x84, 0xDE}, {0x84, 0xE1}, {0x84, 0xE2}, /* 0x84-0x87 */ + {0x84, 0xE4}, {0x84, 0xE7}, {0x84, 0xE8}, {0x84, 0xE9}, /* 0x88-0x8B */ + {0x84, 0xEA}, {0x84, 0xEB}, {0x84, 0xED}, {0x84, 0xEE}, /* 0x8C-0x8F */ + {0x84, 0xEF}, {0x84, 0xF1}, {0x84, 0xF2}, {0x84, 0xF3}, /* 0x90-0x93 */ + {0x84, 0xF4}, {0x84, 0xF5}, {0x84, 0xF6}, {0x84, 0xF7}, /* 0x94-0x97 */ + {0x84, 0xF8}, {0x84, 0xF9}, {0x84, 0xFA}, {0x84, 0xFB}, /* 0x98-0x9B */ + {0x84, 0xFD}, {0x84, 0xFE}, {0x85, 0x00}, {0x85, 0x01}, /* 0x9C-0x9F */ + {0x85, 0x02}, {0x4F, 0x1E}, {0x65, 0x63}, {0x68, 0x51}, /* 0xA0-0xA3 */ + {0x55, 0xD3}, {0x4E, 0x27}, {0x64, 0x14}, {0x9A, 0x9A}, /* 0xA4-0xA7 */ + {0x62, 0x6B}, {0x5A, 0xC2}, {0x74, 0x5F}, {0x82, 0x72}, /* 0xA8-0xAB */ + {0x6D, 0xA9}, {0x68, 0xEE}, {0x50, 0xE7}, {0x83, 0x8E}, /* 0xAC-0xAF */ + {0x78, 0x02}, {0x67, 0x40}, {0x52, 0x39}, {0x6C, 0x99}, /* 0xB0-0xB3 */ + {0x7E, 0xB1}, {0x50, 0xBB}, {0x55, 0x65}, {0x71, 0x5E}, /* 0xB4-0xB7 */ + {0x7B, 0x5B}, {0x66, 0x52}, {0x73, 0xCA}, {0x82, 0xEB}, /* 0xB8-0xBB */ + {0x67, 0x49}, {0x5C, 0x71}, {0x52, 0x20}, {0x71, 0x7D}, /* 0xBC-0xBF */ + {0x88, 0x6B}, {0x95, 0xEA}, {0x96, 0x55}, {0x64, 0xC5}, /* 0xC0-0xC3 */ + {0x8D, 0x61}, {0x81, 0xB3}, {0x55, 0x84}, {0x6C, 0x55}, /* 0xC4-0xC7 */ + {0x62, 0x47}, {0x7F, 0x2E}, {0x58, 0x92}, {0x4F, 0x24}, /* 0xC8-0xCB */ + {0x55, 0x46}, {0x8D, 0x4F}, {0x66, 0x4C}, {0x4E, 0x0A}, /* 0xCC-0xCF */ + {0x5C, 0x1A}, {0x88, 0xF3}, {0x68, 0xA2}, {0x63, 0x4E}, /* 0xD0-0xD3 */ + {0x7A, 0x0D}, {0x70, 0xE7}, {0x82, 0x8D}, {0x52, 0xFA}, /* 0xD4-0xD7 */ + {0x97, 0xF6}, {0x5C, 0x11}, {0x54, 0xE8}, {0x90, 0xB5}, /* 0xD8-0xDB */ + {0x7E, 0xCD}, {0x59, 0x62}, {0x8D, 0x4A}, {0x86, 0xC7}, /* 0xDC-0xDF */ + {0x82, 0x0C}, {0x82, 0x0D}, {0x8D, 0x66}, {0x64, 0x44}, /* 0xE0-0xE3 */ + {0x5C, 0x04}, {0x61, 0x51}, {0x6D, 0x89}, {0x79, 0x3E}, /* 0xE4-0xE7 */ + {0x8B, 0xBE}, {0x78, 0x37}, {0x75, 0x33}, {0x54, 0x7B}, /* 0xE8-0xEB */ + {0x4F, 0x38}, {0x8E, 0xAB}, {0x6D, 0xF1}, {0x5A, 0x20}, /* 0xEC-0xEF */ + {0x7E, 0xC5}, {0x79, 0x5E}, {0x6C, 0x88}, {0x5B, 0xA1}, /* 0xF0-0xF3 */ + {0x5A, 0x76}, {0x75, 0x1A}, {0x80, 0xBE}, {0x61, 0x4E}, /* 0xF4-0xF7 */ + {0x6E, 0x17}, {0x58, 0xF0}, {0x75, 0x1F}, {0x75, 0x25}, /* 0xF8-0xFB */ + {0x72, 0x72}, {0x53, 0x47}, {0x7E, 0xF3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x85, 0x03}, {0x85, 0x04}, {0x85, 0x05}, {0x85, 0x06}, /* 0x40-0x43 */ + {0x85, 0x07}, {0x85, 0x08}, {0x85, 0x09}, {0x85, 0x0A}, /* 0x44-0x47 */ + {0x85, 0x0B}, {0x85, 0x0D}, {0x85, 0x0E}, {0x85, 0x0F}, /* 0x48-0x4B */ + {0x85, 0x10}, {0x85, 0x12}, {0x85, 0x14}, {0x85, 0x15}, /* 0x4C-0x4F */ + {0x85, 0x16}, {0x85, 0x18}, {0x85, 0x19}, {0x85, 0x1B}, /* 0x50-0x53 */ + {0x85, 0x1C}, {0x85, 0x1D}, {0x85, 0x1E}, {0x85, 0x20}, /* 0x54-0x57 */ + {0x85, 0x22}, {0x85, 0x23}, {0x85, 0x24}, {0x85, 0x25}, /* 0x58-0x5B */ + {0x85, 0x26}, {0x85, 0x27}, {0x85, 0x28}, {0x85, 0x29}, /* 0x5C-0x5F */ + {0x85, 0x2A}, {0x85, 0x2D}, {0x85, 0x2E}, {0x85, 0x2F}, /* 0x60-0x63 */ + {0x85, 0x30}, {0x85, 0x31}, {0x85, 0x32}, {0x85, 0x33}, /* 0x64-0x67 */ + {0x85, 0x34}, {0x85, 0x35}, {0x85, 0x36}, {0x85, 0x3E}, /* 0x68-0x6B */ + {0x85, 0x3F}, {0x85, 0x40}, {0x85, 0x41}, {0x85, 0x42}, /* 0x6C-0x6F */ + {0x85, 0x44}, {0x85, 0x45}, {0x85, 0x46}, {0x85, 0x47}, /* 0x70-0x73 */ + {0x85, 0x4B}, {0x85, 0x4C}, {0x85, 0x4D}, {0x85, 0x4E}, /* 0x74-0x77 */ + {0x85, 0x4F}, {0x85, 0x50}, {0x85, 0x51}, {0x85, 0x52}, /* 0x78-0x7B */ + {0x85, 0x53}, {0x85, 0x54}, {0x85, 0x55}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x85, 0x57}, {0x85, 0x58}, {0x85, 0x5A}, {0x85, 0x5B}, /* 0x80-0x83 */ + {0x85, 0x5C}, {0x85, 0x5D}, {0x85, 0x5F}, {0x85, 0x60}, /* 0x84-0x87 */ + {0x85, 0x61}, {0x85, 0x62}, {0x85, 0x63}, {0x85, 0x65}, /* 0x88-0x8B */ + {0x85, 0x66}, {0x85, 0x67}, {0x85, 0x69}, {0x85, 0x6A}, /* 0x8C-0x8F */ + {0x85, 0x6B}, {0x85, 0x6C}, {0x85, 0x6D}, {0x85, 0x6E}, /* 0x90-0x93 */ + {0x85, 0x6F}, {0x85, 0x70}, {0x85, 0x71}, {0x85, 0x73}, /* 0x94-0x97 */ + {0x85, 0x75}, {0x85, 0x76}, {0x85, 0x77}, {0x85, 0x78}, /* 0x98-0x9B */ + {0x85, 0x7C}, {0x85, 0x7D}, {0x85, 0x7F}, {0x85, 0x80}, /* 0x9C-0x9F */ + {0x85, 0x81}, {0x77, 0x01}, {0x76, 0xDB}, {0x52, 0x69}, /* 0xA0-0xA3 */ + {0x80, 0xDC}, {0x57, 0x23}, {0x5E, 0x08}, {0x59, 0x31}, /* 0xA4-0xA7 */ + {0x72, 0xEE}, {0x65, 0xBD}, {0x6E, 0x7F}, {0x8B, 0xD7}, /* 0xA8-0xAB */ + {0x5C, 0x38}, {0x86, 0x71}, {0x53, 0x41}, {0x77, 0xF3}, /* 0xAC-0xAF */ + {0x62, 0xFE}, {0x65, 0xF6}, {0x4E, 0xC0}, {0x98, 0xDF}, /* 0xB0-0xB3 */ + {0x86, 0x80}, {0x5B, 0x9E}, {0x8B, 0xC6}, {0x53, 0xF2}, /* 0xB4-0xB7 */ + {0x77, 0xE2}, {0x4F, 0x7F}, {0x5C, 0x4E}, {0x9A, 0x76}, /* 0xB8-0xBB */ + {0x59, 0xCB}, {0x5F, 0x0F}, {0x79, 0x3A}, {0x58, 0xEB}, /* 0xBC-0xBF */ + {0x4E, 0x16}, {0x67, 0xFF}, {0x4E, 0x8B}, {0x62, 0xED}, /* 0xC0-0xC3 */ + {0x8A, 0x93}, {0x90, 0x1D}, {0x52, 0xBF}, {0x66, 0x2F}, /* 0xC4-0xC7 */ + {0x55, 0xDC}, {0x56, 0x6C}, {0x90, 0x02}, {0x4E, 0xD5}, /* 0xC8-0xCB */ + {0x4F, 0x8D}, {0x91, 0xCA}, {0x99, 0x70}, {0x6C, 0x0F}, /* 0xCC-0xCF */ + {0x5E, 0x02}, {0x60, 0x43}, {0x5B, 0xA4}, {0x89, 0xC6}, /* 0xD0-0xD3 */ + {0x8B, 0xD5}, {0x65, 0x36}, {0x62, 0x4B}, {0x99, 0x96}, /* 0xD4-0xD7 */ + {0x5B, 0x88}, {0x5B, 0xFF}, {0x63, 0x88}, {0x55, 0x2E}, /* 0xD8-0xDB */ + {0x53, 0xD7}, {0x76, 0x26}, {0x51, 0x7D}, {0x85, 0x2C}, /* 0xDC-0xDF */ + {0x67, 0xA2}, {0x68, 0xB3}, {0x6B, 0x8A}, {0x62, 0x92}, /* 0xE0-0xE3 */ + {0x8F, 0x93}, {0x53, 0xD4}, {0x82, 0x12}, {0x6D, 0xD1}, /* 0xE4-0xE7 */ + {0x75, 0x8F}, {0x4E, 0x66}, {0x8D, 0x4E}, {0x5B, 0x70}, /* 0xE8-0xEB */ + {0x71, 0x9F}, {0x85, 0xAF}, {0x66, 0x91}, {0x66, 0xD9}, /* 0xEC-0xEF */ + {0x7F, 0x72}, {0x87, 0x00}, {0x9E, 0xCD}, {0x9F, 0x20}, /* 0xF0-0xF3 */ + {0x5C, 0x5E}, {0x67, 0x2F}, {0x8F, 0xF0}, {0x68, 0x11}, /* 0xF4-0xF7 */ + {0x67, 0x5F}, {0x62, 0x0D}, {0x7A, 0xD6}, {0x58, 0x85}, /* 0xF8-0xFB */ + {0x5E, 0xB6}, {0x65, 0x70}, {0x6F, 0x31}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x85, 0x82}, {0x85, 0x83}, {0x85, 0x86}, {0x85, 0x88}, /* 0x40-0x43 */ + {0x85, 0x89}, {0x85, 0x8A}, {0x85, 0x8B}, {0x85, 0x8C}, /* 0x44-0x47 */ + {0x85, 0x8D}, {0x85, 0x8E}, {0x85, 0x90}, {0x85, 0x91}, /* 0x48-0x4B */ + {0x85, 0x92}, {0x85, 0x93}, {0x85, 0x94}, {0x85, 0x95}, /* 0x4C-0x4F */ + {0x85, 0x96}, {0x85, 0x97}, {0x85, 0x98}, {0x85, 0x99}, /* 0x50-0x53 */ + {0x85, 0x9A}, {0x85, 0x9D}, {0x85, 0x9E}, {0x85, 0x9F}, /* 0x54-0x57 */ + {0x85, 0xA0}, {0x85, 0xA1}, {0x85, 0xA2}, {0x85, 0xA3}, /* 0x58-0x5B */ + {0x85, 0xA5}, {0x85, 0xA6}, {0x85, 0xA7}, {0x85, 0xA9}, /* 0x5C-0x5F */ + {0x85, 0xAB}, {0x85, 0xAC}, {0x85, 0xAD}, {0x85, 0xB1}, /* 0x60-0x63 */ + {0x85, 0xB2}, {0x85, 0xB3}, {0x85, 0xB4}, {0x85, 0xB5}, /* 0x64-0x67 */ + {0x85, 0xB6}, {0x85, 0xB8}, {0x85, 0xBA}, {0x85, 0xBB}, /* 0x68-0x6B */ + {0x85, 0xBC}, {0x85, 0xBD}, {0x85, 0xBE}, {0x85, 0xBF}, /* 0x6C-0x6F */ + {0x85, 0xC0}, {0x85, 0xC2}, {0x85, 0xC3}, {0x85, 0xC4}, /* 0x70-0x73 */ + {0x85, 0xC5}, {0x85, 0xC6}, {0x85, 0xC7}, {0x85, 0xC8}, /* 0x74-0x77 */ + {0x85, 0xCA}, {0x85, 0xCB}, {0x85, 0xCC}, {0x85, 0xCD}, /* 0x78-0x7B */ + {0x85, 0xCE}, {0x85, 0xD1}, {0x85, 0xD2}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x85, 0xD4}, {0x85, 0xD6}, {0x85, 0xD7}, {0x85, 0xD8}, /* 0x80-0x83 */ + {0x85, 0xD9}, {0x85, 0xDA}, {0x85, 0xDB}, {0x85, 0xDD}, /* 0x84-0x87 */ + {0x85, 0xDE}, {0x85, 0xDF}, {0x85, 0xE0}, {0x85, 0xE1}, /* 0x88-0x8B */ + {0x85, 0xE2}, {0x85, 0xE3}, {0x85, 0xE5}, {0x85, 0xE6}, /* 0x8C-0x8F */ + {0x85, 0xE7}, {0x85, 0xE8}, {0x85, 0xEA}, {0x85, 0xEB}, /* 0x90-0x93 */ + {0x85, 0xEC}, {0x85, 0xED}, {0x85, 0xEE}, {0x85, 0xEF}, /* 0x94-0x97 */ + {0x85, 0xF0}, {0x85, 0xF1}, {0x85, 0xF2}, {0x85, 0xF3}, /* 0x98-0x9B */ + {0x85, 0xF4}, {0x85, 0xF5}, {0x85, 0xF6}, {0x85, 0xF7}, /* 0x9C-0x9F */ + {0x85, 0xF8}, {0x60, 0x55}, {0x52, 0x37}, {0x80, 0x0D}, /* 0xA0-0xA3 */ + {0x64, 0x54}, {0x88, 0x70}, {0x75, 0x29}, {0x5E, 0x05}, /* 0xA4-0xA7 */ + {0x68, 0x13}, {0x62, 0xF4}, {0x97, 0x1C}, {0x53, 0xCC}, /* 0xA8-0xAB */ + {0x72, 0x3D}, {0x8C, 0x01}, {0x6C, 0x34}, {0x77, 0x61}, /* 0xAC-0xAF */ + {0x7A, 0x0E}, {0x54, 0x2E}, {0x77, 0xAC}, {0x98, 0x7A}, /* 0xB0-0xB3 */ + {0x82, 0x1C}, {0x8B, 0xF4}, {0x78, 0x55}, {0x67, 0x14}, /* 0xB4-0xB7 */ + {0x70, 0xC1}, {0x65, 0xAF}, {0x64, 0x95}, {0x56, 0x36}, /* 0xB8-0xBB */ + {0x60, 0x1D}, {0x79, 0xC1}, {0x53, 0xF8}, {0x4E, 0x1D}, /* 0xBC-0xBF */ + {0x6B, 0x7B}, {0x80, 0x86}, {0x5B, 0xFA}, {0x55, 0xE3}, /* 0xC0-0xC3 */ + {0x56, 0xDB}, {0x4F, 0x3A}, {0x4F, 0x3C}, {0x99, 0x72}, /* 0xC4-0xC7 */ + {0x5D, 0xF3}, {0x67, 0x7E}, {0x80, 0x38}, {0x60, 0x02}, /* 0xC8-0xCB */ + {0x98, 0x82}, {0x90, 0x01}, {0x5B, 0x8B}, {0x8B, 0xBC}, /* 0xCC-0xCF */ + {0x8B, 0xF5}, {0x64, 0x1C}, {0x82, 0x58}, {0x64, 0xDE}, /* 0xD0-0xD3 */ + {0x55, 0xFD}, {0x82, 0xCF}, {0x91, 0x65}, {0x4F, 0xD7}, /* 0xD4-0xD7 */ + {0x7D, 0x20}, {0x90, 0x1F}, {0x7C, 0x9F}, {0x50, 0xF3}, /* 0xD8-0xDB */ + {0x58, 0x51}, {0x6E, 0xAF}, {0x5B, 0xBF}, {0x8B, 0xC9}, /* 0xDC-0xDF */ + {0x80, 0x83}, {0x91, 0x78}, {0x84, 0x9C}, {0x7B, 0x97}, /* 0xE0-0xE3 */ + {0x86, 0x7D}, {0x96, 0x8B}, {0x96, 0x8F}, {0x7E, 0xE5}, /* 0xE4-0xE7 */ + {0x9A, 0xD3}, {0x78, 0x8E}, {0x5C, 0x81}, {0x7A, 0x57}, /* 0xE8-0xEB */ + {0x90, 0x42}, {0x96, 0xA7}, {0x79, 0x5F}, {0x5B, 0x59}, /* 0xEC-0xEF */ + {0x63, 0x5F}, {0x7B, 0x0B}, {0x84, 0xD1}, {0x68, 0xAD}, /* 0xF0-0xF3 */ + {0x55, 0x06}, {0x7F, 0x29}, {0x74, 0x10}, {0x7D, 0x22}, /* 0xF4-0xF7 */ + {0x95, 0x01}, {0x62, 0x40}, {0x58, 0x4C}, {0x4E, 0xD6}, /* 0xF8-0xFB */ + {0x5B, 0x83}, {0x59, 0x79}, {0x58, 0x54}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x85, 0xF9}, {0x85, 0xFA}, {0x85, 0xFC}, {0x85, 0xFD}, /* 0x40-0x43 */ + {0x85, 0xFE}, {0x86, 0x00}, {0x86, 0x01}, {0x86, 0x02}, /* 0x44-0x47 */ + {0x86, 0x03}, {0x86, 0x04}, {0x86, 0x06}, {0x86, 0x07}, /* 0x48-0x4B */ + {0x86, 0x08}, {0x86, 0x09}, {0x86, 0x0A}, {0x86, 0x0B}, /* 0x4C-0x4F */ + {0x86, 0x0C}, {0x86, 0x0D}, {0x86, 0x0E}, {0x86, 0x0F}, /* 0x50-0x53 */ + {0x86, 0x10}, {0x86, 0x12}, {0x86, 0x13}, {0x86, 0x14}, /* 0x54-0x57 */ + {0x86, 0x15}, {0x86, 0x17}, {0x86, 0x18}, {0x86, 0x19}, /* 0x58-0x5B */ + {0x86, 0x1A}, {0x86, 0x1B}, {0x86, 0x1C}, {0x86, 0x1D}, /* 0x5C-0x5F */ + {0x86, 0x1E}, {0x86, 0x1F}, {0x86, 0x20}, {0x86, 0x21}, /* 0x60-0x63 */ + {0x86, 0x22}, {0x86, 0x23}, {0x86, 0x24}, {0x86, 0x25}, /* 0x64-0x67 */ + {0x86, 0x26}, {0x86, 0x28}, {0x86, 0x2A}, {0x86, 0x2B}, /* 0x68-0x6B */ + {0x86, 0x2C}, {0x86, 0x2D}, {0x86, 0x2E}, {0x86, 0x2F}, /* 0x6C-0x6F */ + {0x86, 0x30}, {0x86, 0x31}, {0x86, 0x32}, {0x86, 0x33}, /* 0x70-0x73 */ + {0x86, 0x34}, {0x86, 0x35}, {0x86, 0x36}, {0x86, 0x37}, /* 0x74-0x77 */ + {0x86, 0x39}, {0x86, 0x3A}, {0x86, 0x3B}, {0x86, 0x3D}, /* 0x78-0x7B */ + {0x86, 0x3E}, {0x86, 0x3F}, {0x86, 0x40}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x86, 0x41}, {0x86, 0x42}, {0x86, 0x43}, {0x86, 0x44}, /* 0x80-0x83 */ + {0x86, 0x45}, {0x86, 0x46}, {0x86, 0x47}, {0x86, 0x48}, /* 0x84-0x87 */ + {0x86, 0x49}, {0x86, 0x4A}, {0x86, 0x4B}, {0x86, 0x4C}, /* 0x88-0x8B */ + {0x86, 0x52}, {0x86, 0x53}, {0x86, 0x55}, {0x86, 0x56}, /* 0x8C-0x8F */ + {0x86, 0x57}, {0x86, 0x58}, {0x86, 0x59}, {0x86, 0x5B}, /* 0x90-0x93 */ + {0x86, 0x5C}, {0x86, 0x5D}, {0x86, 0x5F}, {0x86, 0x60}, /* 0x94-0x97 */ + {0x86, 0x61}, {0x86, 0x63}, {0x86, 0x64}, {0x86, 0x65}, /* 0x98-0x9B */ + {0x86, 0x66}, {0x86, 0x67}, {0x86, 0x68}, {0x86, 0x69}, /* 0x9C-0x9F */ + {0x86, 0x6A}, {0x73, 0x6D}, {0x63, 0x1E}, {0x8E, 0x4B}, /* 0xA0-0xA3 */ + {0x8E, 0x0F}, {0x80, 0xCE}, {0x82, 0xD4}, {0x62, 0xAC}, /* 0xA4-0xA7 */ + {0x53, 0xF0}, {0x6C, 0xF0}, {0x91, 0x5E}, {0x59, 0x2A}, /* 0xA8-0xAB */ + {0x60, 0x01}, {0x6C, 0x70}, {0x57, 0x4D}, {0x64, 0x4A}, /* 0xAC-0xAF */ + {0x8D, 0x2A}, {0x76, 0x2B}, {0x6E, 0xE9}, {0x57, 0x5B}, /* 0xB0-0xB3 */ + {0x6A, 0x80}, {0x75, 0xF0}, {0x6F, 0x6D}, {0x8C, 0x2D}, /* 0xB4-0xB7 */ + {0x8C, 0x08}, {0x57, 0x66}, {0x6B, 0xEF}, {0x88, 0x92}, /* 0xB8-0xBB */ + {0x78, 0xB3}, {0x63, 0xA2}, {0x53, 0xF9}, {0x70, 0xAD}, /* 0xBC-0xBF */ + {0x6C, 0x64}, {0x58, 0x58}, {0x64, 0x2A}, {0x58, 0x02}, /* 0xC0-0xC3 */ + {0x68, 0xE0}, {0x81, 0x9B}, {0x55, 0x10}, {0x7C, 0xD6}, /* 0xC4-0xC7 */ + {0x50, 0x18}, {0x8E, 0xBA}, {0x6D, 0xCC}, {0x8D, 0x9F}, /* 0xC8-0xCB */ + {0x70, 0xEB}, {0x63, 0x8F}, {0x6D, 0x9B}, {0x6E, 0xD4}, /* 0xCC-0xCF */ + {0x7E, 0xE6}, {0x84, 0x04}, {0x68, 0x43}, {0x90, 0x03}, /* 0xD0-0xD3 */ + {0x6D, 0xD8}, {0x96, 0x76}, {0x8B, 0xA8}, {0x59, 0x57}, /* 0xD4-0xD7 */ + {0x72, 0x79}, {0x85, 0xE4}, {0x81, 0x7E}, {0x75, 0xBC}, /* 0xD8-0xDB */ + {0x8A, 0x8A}, {0x68, 0xAF}, {0x52, 0x54}, {0x8E, 0x22}, /* 0xDC-0xDF */ + {0x95, 0x11}, {0x63, 0xD0}, {0x98, 0x98}, {0x8E, 0x44}, /* 0xE0-0xE3 */ + {0x55, 0x7C}, {0x4F, 0x53}, {0x66, 0xFF}, {0x56, 0x8F}, /* 0xE4-0xE7 */ + {0x60, 0xD5}, {0x6D, 0x95}, {0x52, 0x43}, {0x5C, 0x49}, /* 0xE8-0xEB */ + {0x59, 0x29}, {0x6D, 0xFB}, {0x58, 0x6B}, {0x75, 0x30}, /* 0xEC-0xEF */ + {0x75, 0x1C}, {0x60, 0x6C}, {0x82, 0x14}, {0x81, 0x46}, /* 0xF0-0xF3 */ + {0x63, 0x11}, {0x67, 0x61}, {0x8F, 0xE2}, {0x77, 0x3A}, /* 0xF4-0xF7 */ + {0x8D, 0xF3}, {0x8D, 0x34}, {0x94, 0xC1}, {0x5E, 0x16}, /* 0xF8-0xFB */ + {0x53, 0x85}, {0x54, 0x2C}, {0x70, 0xC3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x86, 0x6D}, {0x86, 0x6F}, {0x86, 0x70}, {0x86, 0x72}, /* 0x40-0x43 */ + {0x86, 0x73}, {0x86, 0x74}, {0x86, 0x75}, {0x86, 0x76}, /* 0x44-0x47 */ + {0x86, 0x77}, {0x86, 0x78}, {0x86, 0x83}, {0x86, 0x84}, /* 0x48-0x4B */ + {0x86, 0x85}, {0x86, 0x86}, {0x86, 0x87}, {0x86, 0x88}, /* 0x4C-0x4F */ + {0x86, 0x89}, {0x86, 0x8E}, {0x86, 0x8F}, {0x86, 0x90}, /* 0x50-0x53 */ + {0x86, 0x91}, {0x86, 0x92}, {0x86, 0x94}, {0x86, 0x96}, /* 0x54-0x57 */ + {0x86, 0x97}, {0x86, 0x98}, {0x86, 0x99}, {0x86, 0x9A}, /* 0x58-0x5B */ + {0x86, 0x9B}, {0x86, 0x9E}, {0x86, 0x9F}, {0x86, 0xA0}, /* 0x5C-0x5F */ + {0x86, 0xA1}, {0x86, 0xA2}, {0x86, 0xA5}, {0x86, 0xA6}, /* 0x60-0x63 */ + {0x86, 0xAB}, {0x86, 0xAD}, {0x86, 0xAE}, {0x86, 0xB2}, /* 0x64-0x67 */ + {0x86, 0xB3}, {0x86, 0xB7}, {0x86, 0xB8}, {0x86, 0xB9}, /* 0x68-0x6B */ + {0x86, 0xBB}, {0x86, 0xBC}, {0x86, 0xBD}, {0x86, 0xBE}, /* 0x6C-0x6F */ + {0x86, 0xBF}, {0x86, 0xC1}, {0x86, 0xC2}, {0x86, 0xC3}, /* 0x70-0x73 */ + {0x86, 0xC5}, {0x86, 0xC8}, {0x86, 0xCC}, {0x86, 0xCD}, /* 0x74-0x77 */ + {0x86, 0xD2}, {0x86, 0xD3}, {0x86, 0xD5}, {0x86, 0xD6}, /* 0x78-0x7B */ + {0x86, 0xD7}, {0x86, 0xDA}, {0x86, 0xDC}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x86, 0xDD}, {0x86, 0xE0}, {0x86, 0xE1}, {0x86, 0xE2}, /* 0x80-0x83 */ + {0x86, 0xE3}, {0x86, 0xE5}, {0x86, 0xE6}, {0x86, 0xE7}, /* 0x84-0x87 */ + {0x86, 0xE8}, {0x86, 0xEA}, {0x86, 0xEB}, {0x86, 0xEC}, /* 0x88-0x8B */ + {0x86, 0xEF}, {0x86, 0xF5}, {0x86, 0xF6}, {0x86, 0xF7}, /* 0x8C-0x8F */ + {0x86, 0xFA}, {0x86, 0xFB}, {0x86, 0xFC}, {0x86, 0xFD}, /* 0x90-0x93 */ + {0x86, 0xFF}, {0x87, 0x01}, {0x87, 0x04}, {0x87, 0x05}, /* 0x94-0x97 */ + {0x87, 0x06}, {0x87, 0x0B}, {0x87, 0x0C}, {0x87, 0x0E}, /* 0x98-0x9B */ + {0x87, 0x0F}, {0x87, 0x10}, {0x87, 0x11}, {0x87, 0x14}, /* 0x9C-0x9F */ + {0x87, 0x16}, {0x6C, 0x40}, {0x5E, 0xF7}, {0x50, 0x5C}, /* 0xA0-0xA3 */ + {0x4E, 0xAD}, {0x5E, 0xAD}, {0x63, 0x3A}, {0x82, 0x47}, /* 0xA4-0xA7 */ + {0x90, 0x1A}, {0x68, 0x50}, {0x91, 0x6E}, {0x77, 0xB3}, /* 0xA8-0xAB */ + {0x54, 0x0C}, {0x94, 0xDC}, {0x5F, 0x64}, {0x7A, 0xE5}, /* 0xAC-0xAF */ + {0x68, 0x76}, {0x63, 0x45}, {0x7B, 0x52}, {0x7E, 0xDF}, /* 0xB0-0xB3 */ + {0x75, 0xDB}, {0x50, 0x77}, {0x62, 0x95}, {0x59, 0x34}, /* 0xB4-0xB7 */ + {0x90, 0x0F}, {0x51, 0xF8}, {0x79, 0xC3}, {0x7A, 0x81}, /* 0xB8-0xBB */ + {0x56, 0xFE}, {0x5F, 0x92}, {0x90, 0x14}, {0x6D, 0x82}, /* 0xBC-0xBF */ + {0x5C, 0x60}, {0x57, 0x1F}, {0x54, 0x10}, {0x51, 0x54}, /* 0xC0-0xC3 */ + {0x6E, 0x4D}, {0x56, 0xE2}, {0x63, 0xA8}, {0x98, 0x93}, /* 0xC4-0xC7 */ + {0x81, 0x7F}, {0x87, 0x15}, {0x89, 0x2A}, {0x90, 0x00}, /* 0xC8-0xCB */ + {0x54, 0x1E}, {0x5C, 0x6F}, {0x81, 0xC0}, {0x62, 0xD6}, /* 0xCC-0xCF */ + {0x62, 0x58}, {0x81, 0x31}, {0x9E, 0x35}, {0x96, 0x40}, /* 0xD0-0xD3 */ + {0x9A, 0x6E}, {0x9A, 0x7C}, {0x69, 0x2D}, {0x59, 0xA5}, /* 0xD4-0xD7 */ + {0x62, 0xD3}, {0x55, 0x3E}, {0x63, 0x16}, {0x54, 0xC7}, /* 0xD8-0xDB */ + {0x86, 0xD9}, {0x6D, 0x3C}, {0x5A, 0x03}, {0x74, 0xE6}, /* 0xDC-0xDF */ + {0x88, 0x9C}, {0x6B, 0x6A}, {0x59, 0x16}, {0x8C, 0x4C}, /* 0xE0-0xE3 */ + {0x5F, 0x2F}, {0x6E, 0x7E}, {0x73, 0xA9}, {0x98, 0x7D}, /* 0xE4-0xE7 */ + {0x4E, 0x38}, {0x70, 0xF7}, {0x5B, 0x8C}, {0x78, 0x97}, /* 0xE8-0xEB */ + {0x63, 0x3D}, {0x66, 0x5A}, {0x76, 0x96}, {0x60, 0xCB}, /* 0xEC-0xEF */ + {0x5B, 0x9B}, {0x5A, 0x49}, {0x4E, 0x07}, {0x81, 0x55}, /* 0xF0-0xF3 */ + {0x6C, 0x6A}, {0x73, 0x8B}, {0x4E, 0xA1}, {0x67, 0x89}, /* 0xF4-0xF7 */ + {0x7F, 0x51}, {0x5F, 0x80}, {0x65, 0xFA}, {0x67, 0x1B}, /* 0xF8-0xFB */ + {0x5F, 0xD8}, {0x59, 0x84}, {0x5A, 0x01}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x87, 0x19}, {0x87, 0x1B}, {0x87, 0x1D}, {0x87, 0x1F}, /* 0x40-0x43 */ + {0x87, 0x20}, {0x87, 0x24}, {0x87, 0x26}, {0x87, 0x27}, /* 0x44-0x47 */ + {0x87, 0x28}, {0x87, 0x2A}, {0x87, 0x2B}, {0x87, 0x2C}, /* 0x48-0x4B */ + {0x87, 0x2D}, {0x87, 0x2F}, {0x87, 0x30}, {0x87, 0x32}, /* 0x4C-0x4F */ + {0x87, 0x33}, {0x87, 0x35}, {0x87, 0x36}, {0x87, 0x38}, /* 0x50-0x53 */ + {0x87, 0x39}, {0x87, 0x3A}, {0x87, 0x3C}, {0x87, 0x3D}, /* 0x54-0x57 */ + {0x87, 0x40}, {0x87, 0x41}, {0x87, 0x42}, {0x87, 0x43}, /* 0x58-0x5B */ + {0x87, 0x44}, {0x87, 0x45}, {0x87, 0x46}, {0x87, 0x4A}, /* 0x5C-0x5F */ + {0x87, 0x4B}, {0x87, 0x4D}, {0x87, 0x4F}, {0x87, 0x50}, /* 0x60-0x63 */ + {0x87, 0x51}, {0x87, 0x52}, {0x87, 0x54}, {0x87, 0x55}, /* 0x64-0x67 */ + {0x87, 0x56}, {0x87, 0x58}, {0x87, 0x5A}, {0x87, 0x5B}, /* 0x68-0x6B */ + {0x87, 0x5C}, {0x87, 0x5D}, {0x87, 0x5E}, {0x87, 0x5F}, /* 0x6C-0x6F */ + {0x87, 0x61}, {0x87, 0x62}, {0x87, 0x66}, {0x87, 0x67}, /* 0x70-0x73 */ + {0x87, 0x68}, {0x87, 0x69}, {0x87, 0x6A}, {0x87, 0x6B}, /* 0x74-0x77 */ + {0x87, 0x6C}, {0x87, 0x6D}, {0x87, 0x6F}, {0x87, 0x71}, /* 0x78-0x7B */ + {0x87, 0x72}, {0x87, 0x73}, {0x87, 0x75}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x87, 0x77}, {0x87, 0x78}, {0x87, 0x79}, {0x87, 0x7A}, /* 0x80-0x83 */ + {0x87, 0x7F}, {0x87, 0x80}, {0x87, 0x81}, {0x87, 0x84}, /* 0x84-0x87 */ + {0x87, 0x86}, {0x87, 0x87}, {0x87, 0x89}, {0x87, 0x8A}, /* 0x88-0x8B */ + {0x87, 0x8C}, {0x87, 0x8E}, {0x87, 0x8F}, {0x87, 0x90}, /* 0x8C-0x8F */ + {0x87, 0x91}, {0x87, 0x92}, {0x87, 0x94}, {0x87, 0x95}, /* 0x90-0x93 */ + {0x87, 0x96}, {0x87, 0x98}, {0x87, 0x99}, {0x87, 0x9A}, /* 0x94-0x97 */ + {0x87, 0x9B}, {0x87, 0x9C}, {0x87, 0x9D}, {0x87, 0x9E}, /* 0x98-0x9B */ + {0x87, 0xA0}, {0x87, 0xA1}, {0x87, 0xA2}, {0x87, 0xA3}, /* 0x9C-0x9F */ + {0x87, 0xA4}, {0x5D, 0xCD}, {0x5F, 0xAE}, {0x53, 0x71}, /* 0xA0-0xA3 */ + {0x97, 0xE6}, {0x8F, 0xDD}, {0x68, 0x45}, {0x56, 0xF4}, /* 0xA4-0xA7 */ + {0x55, 0x2F}, {0x60, 0xDF}, {0x4E, 0x3A}, {0x6F, 0x4D}, /* 0xA8-0xAB */ + {0x7E, 0xF4}, {0x82, 0xC7}, {0x84, 0x0E}, {0x59, 0xD4}, /* 0xAC-0xAF */ + {0x4F, 0x1F}, {0x4F, 0x2A}, {0x5C, 0x3E}, {0x7E, 0xAC}, /* 0xB0-0xB3 */ + {0x67, 0x2A}, {0x85, 0x1A}, {0x54, 0x73}, {0x75, 0x4F}, /* 0xB4-0xB7 */ + {0x80, 0xC3}, {0x55, 0x82}, {0x9B, 0x4F}, {0x4F, 0x4D}, /* 0xB8-0xBB */ + {0x6E, 0x2D}, {0x8C, 0x13}, {0x5C, 0x09}, {0x61, 0x70}, /* 0xBC-0xBF */ + {0x53, 0x6B}, {0x76, 0x1F}, {0x6E, 0x29}, {0x86, 0x8A}, /* 0xC0-0xC3 */ + {0x65, 0x87}, {0x95, 0xFB}, {0x7E, 0xB9}, {0x54, 0x3B}, /* 0xC4-0xC7 */ + {0x7A, 0x33}, {0x7D, 0x0A}, {0x95, 0xEE}, {0x55, 0xE1}, /* 0xC8-0xCB */ + {0x7F, 0xC1}, {0x74, 0xEE}, {0x63, 0x1D}, {0x87, 0x17}, /* 0xCC-0xCF */ + {0x6D, 0xA1}, {0x7A, 0x9D}, {0x62, 0x11}, {0x65, 0xA1}, /* 0xD0-0xD3 */ + {0x53, 0x67}, {0x63, 0xE1}, {0x6C, 0x83}, {0x5D, 0xEB}, /* 0xD4-0xD7 */ + {0x54, 0x5C}, {0x94, 0xA8}, {0x4E, 0x4C}, {0x6C, 0x61}, /* 0xD8-0xDB */ + {0x8B, 0xEC}, {0x5C, 0x4B}, {0x65, 0xE0}, {0x82, 0x9C}, /* 0xDC-0xDF */ + {0x68, 0xA7}, {0x54, 0x3E}, {0x54, 0x34}, {0x6B, 0xCB}, /* 0xE0-0xE3 */ + {0x6B, 0x66}, {0x4E, 0x94}, {0x63, 0x42}, {0x53, 0x48}, /* 0xE4-0xE7 */ + {0x82, 0x1E}, {0x4F, 0x0D}, {0x4F, 0xAE}, {0x57, 0x5E}, /* 0xE8-0xEB */ + {0x62, 0x0A}, {0x96, 0xFE}, {0x66, 0x64}, {0x72, 0x69}, /* 0xEC-0xEF */ + {0x52, 0xFF}, {0x52, 0xA1}, {0x60, 0x9F}, {0x8B, 0xEF}, /* 0xF0-0xF3 */ + {0x66, 0x14}, {0x71, 0x99}, {0x67, 0x90}, {0x89, 0x7F}, /* 0xF4-0xF7 */ + {0x78, 0x52}, {0x77, 0xFD}, {0x66, 0x70}, {0x56, 0x3B}, /* 0xF8-0xFB */ + {0x54, 0x38}, {0x95, 0x21}, {0x72, 0x7A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x87, 0xA5}, {0x87, 0xA6}, {0x87, 0xA7}, {0x87, 0xA9}, /* 0x40-0x43 */ + {0x87, 0xAA}, {0x87, 0xAE}, {0x87, 0xB0}, {0x87, 0xB1}, /* 0x44-0x47 */ + {0x87, 0xB2}, {0x87, 0xB4}, {0x87, 0xB6}, {0x87, 0xB7}, /* 0x48-0x4B */ + {0x87, 0xB8}, {0x87, 0xB9}, {0x87, 0xBB}, {0x87, 0xBC}, /* 0x4C-0x4F */ + {0x87, 0xBE}, {0x87, 0xBF}, {0x87, 0xC1}, {0x87, 0xC2}, /* 0x50-0x53 */ + {0x87, 0xC3}, {0x87, 0xC4}, {0x87, 0xC5}, {0x87, 0xC7}, /* 0x54-0x57 */ + {0x87, 0xC8}, {0x87, 0xC9}, {0x87, 0xCC}, {0x87, 0xCD}, /* 0x58-0x5B */ + {0x87, 0xCE}, {0x87, 0xCF}, {0x87, 0xD0}, {0x87, 0xD4}, /* 0x5C-0x5F */ + {0x87, 0xD5}, {0x87, 0xD6}, {0x87, 0xD7}, {0x87, 0xD8}, /* 0x60-0x63 */ + {0x87, 0xD9}, {0x87, 0xDA}, {0x87, 0xDC}, {0x87, 0xDD}, /* 0x64-0x67 */ + {0x87, 0xDE}, {0x87, 0xDF}, {0x87, 0xE1}, {0x87, 0xE2}, /* 0x68-0x6B */ + {0x87, 0xE3}, {0x87, 0xE4}, {0x87, 0xE6}, {0x87, 0xE7}, /* 0x6C-0x6F */ + {0x87, 0xE8}, {0x87, 0xE9}, {0x87, 0xEB}, {0x87, 0xEC}, /* 0x70-0x73 */ + {0x87, 0xED}, {0x87, 0xEF}, {0x87, 0xF0}, {0x87, 0xF1}, /* 0x74-0x77 */ + {0x87, 0xF2}, {0x87, 0xF3}, {0x87, 0xF4}, {0x87, 0xF5}, /* 0x78-0x7B */ + {0x87, 0xF6}, {0x87, 0xF7}, {0x87, 0xF8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x87, 0xFA}, {0x87, 0xFB}, {0x87, 0xFC}, {0x87, 0xFD}, /* 0x80-0x83 */ + {0x87, 0xFF}, {0x88, 0x00}, {0x88, 0x01}, {0x88, 0x02}, /* 0x84-0x87 */ + {0x88, 0x04}, {0x88, 0x05}, {0x88, 0x06}, {0x88, 0x07}, /* 0x88-0x8B */ + {0x88, 0x08}, {0x88, 0x09}, {0x88, 0x0B}, {0x88, 0x0C}, /* 0x8C-0x8F */ + {0x88, 0x0D}, {0x88, 0x0E}, {0x88, 0x0F}, {0x88, 0x10}, /* 0x90-0x93 */ + {0x88, 0x11}, {0x88, 0x12}, {0x88, 0x14}, {0x88, 0x17}, /* 0x94-0x97 */ + {0x88, 0x18}, {0x88, 0x19}, {0x88, 0x1A}, {0x88, 0x1C}, /* 0x98-0x9B */ + {0x88, 0x1D}, {0x88, 0x1E}, {0x88, 0x1F}, {0x88, 0x20}, /* 0x9C-0x9F */ + {0x88, 0x23}, {0x7A, 0x00}, {0x60, 0x6F}, {0x5E, 0x0C}, /* 0xA0-0xA3 */ + {0x60, 0x89}, {0x81, 0x9D}, {0x59, 0x15}, {0x60, 0xDC}, /* 0xA4-0xA7 */ + {0x71, 0x84}, {0x70, 0xEF}, {0x6E, 0xAA}, {0x6C, 0x50}, /* 0xA8-0xAB */ + {0x72, 0x80}, {0x6A, 0x84}, {0x88, 0xAD}, {0x5E, 0x2D}, /* 0xAC-0xAF */ + {0x4E, 0x60}, {0x5A, 0xB3}, {0x55, 0x9C}, {0x94, 0xE3}, /* 0xB0-0xB3 */ + {0x6D, 0x17}, {0x7C, 0xFB}, {0x96, 0x99}, {0x62, 0x0F}, /* 0xB4-0xB7 */ + {0x7E, 0xC6}, {0x77, 0x8E}, {0x86, 0x7E}, {0x53, 0x23}, /* 0xB8-0xBB */ + {0x97, 0x1E}, {0x8F, 0x96}, {0x66, 0x87}, {0x5C, 0xE1}, /* 0xBC-0xBF */ + {0x4F, 0xA0}, {0x72, 0xED}, {0x4E, 0x0B}, {0x53, 0xA6}, /* 0xC0-0xC3 */ + {0x59, 0x0F}, {0x54, 0x13}, {0x63, 0x80}, {0x95, 0x28}, /* 0xC4-0xC7 */ + {0x51, 0x48}, {0x4E, 0xD9}, {0x9C, 0x9C}, {0x7E, 0xA4}, /* 0xC8-0xCB */ + {0x54, 0xB8}, {0x8D, 0x24}, {0x88, 0x54}, {0x82, 0x37}, /* 0xCC-0xCF */ + {0x95, 0xF2}, {0x6D, 0x8E}, {0x5F, 0x26}, {0x5A, 0xCC}, /* 0xD0-0xD3 */ + {0x66, 0x3E}, {0x96, 0x69}, {0x73, 0xB0}, {0x73, 0x2E}, /* 0xD4-0xD7 */ + {0x53, 0xBF}, {0x81, 0x7A}, {0x99, 0x85}, {0x7F, 0xA1}, /* 0xD8-0xDB */ + {0x5B, 0xAA}, {0x96, 0x77}, {0x96, 0x50}, {0x7E, 0xBF}, /* 0xDC-0xDF */ + {0x76, 0xF8}, {0x53, 0xA2}, {0x95, 0x76}, {0x99, 0x99}, /* 0xE0-0xE3 */ + {0x7B, 0xB1}, {0x89, 0x44}, {0x6E, 0x58}, {0x4E, 0x61}, /* 0xE4-0xE7 */ + {0x7F, 0xD4}, {0x79, 0x65}, {0x8B, 0xE6}, {0x60, 0xF3}, /* 0xE8-0xEB */ + {0x54, 0xCD}, {0x4E, 0xAB}, {0x98, 0x79}, {0x5D, 0xF7}, /* 0xEC-0xEF */ + {0x6A, 0x61}, {0x50, 0xCF}, {0x54, 0x11}, {0x8C, 0x61}, /* 0xF0-0xF3 */ + {0x84, 0x27}, {0x78, 0x5D}, {0x97, 0x04}, {0x52, 0x4A}, /* 0xF4-0xF7 */ + {0x54, 0xEE}, {0x56, 0xA3}, {0x95, 0x00}, {0x6D, 0x88}, /* 0xF8-0xFB */ + {0x5B, 0xB5}, {0x6D, 0xC6}, {0x66, 0x53}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x88, 0x24}, {0x88, 0x25}, {0x88, 0x26}, {0x88, 0x27}, /* 0x40-0x43 */ + {0x88, 0x28}, {0x88, 0x29}, {0x88, 0x2A}, {0x88, 0x2B}, /* 0x44-0x47 */ + {0x88, 0x2C}, {0x88, 0x2D}, {0x88, 0x2E}, {0x88, 0x2F}, /* 0x48-0x4B */ + {0x88, 0x30}, {0x88, 0x31}, {0x88, 0x33}, {0x88, 0x34}, /* 0x4C-0x4F */ + {0x88, 0x35}, {0x88, 0x36}, {0x88, 0x37}, {0x88, 0x38}, /* 0x50-0x53 */ + {0x88, 0x3A}, {0x88, 0x3B}, {0x88, 0x3D}, {0x88, 0x3E}, /* 0x54-0x57 */ + {0x88, 0x3F}, {0x88, 0x41}, {0x88, 0x42}, {0x88, 0x43}, /* 0x58-0x5B */ + {0x88, 0x46}, {0x88, 0x47}, {0x88, 0x48}, {0x88, 0x49}, /* 0x5C-0x5F */ + {0x88, 0x4A}, {0x88, 0x4B}, {0x88, 0x4E}, {0x88, 0x4F}, /* 0x60-0x63 */ + {0x88, 0x50}, {0x88, 0x51}, {0x88, 0x52}, {0x88, 0x53}, /* 0x64-0x67 */ + {0x88, 0x55}, {0x88, 0x56}, {0x88, 0x58}, {0x88, 0x5A}, /* 0x68-0x6B */ + {0x88, 0x5B}, {0x88, 0x5C}, {0x88, 0x5D}, {0x88, 0x5E}, /* 0x6C-0x6F */ + {0x88, 0x5F}, {0x88, 0x60}, {0x88, 0x66}, {0x88, 0x67}, /* 0x70-0x73 */ + {0x88, 0x6A}, {0x88, 0x6D}, {0x88, 0x6F}, {0x88, 0x71}, /* 0x74-0x77 */ + {0x88, 0x73}, {0x88, 0x74}, {0x88, 0x75}, {0x88, 0x76}, /* 0x78-0x7B */ + {0x88, 0x78}, {0x88, 0x79}, {0x88, 0x7A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x88, 0x7B}, {0x88, 0x7C}, {0x88, 0x80}, {0x88, 0x83}, /* 0x80-0x83 */ + {0x88, 0x86}, {0x88, 0x87}, {0x88, 0x89}, {0x88, 0x8A}, /* 0x84-0x87 */ + {0x88, 0x8C}, {0x88, 0x8E}, {0x88, 0x8F}, {0x88, 0x90}, /* 0x88-0x8B */ + {0x88, 0x91}, {0x88, 0x93}, {0x88, 0x94}, {0x88, 0x95}, /* 0x8C-0x8F */ + {0x88, 0x97}, {0x88, 0x98}, {0x88, 0x99}, {0x88, 0x9A}, /* 0x90-0x93 */ + {0x88, 0x9B}, {0x88, 0x9D}, {0x88, 0x9E}, {0x88, 0x9F}, /* 0x94-0x97 */ + {0x88, 0xA0}, {0x88, 0xA1}, {0x88, 0xA3}, {0x88, 0xA5}, /* 0x98-0x9B */ + {0x88, 0xA6}, {0x88, 0xA7}, {0x88, 0xA8}, {0x88, 0xA9}, /* 0x9C-0x9F */ + {0x88, 0xAA}, {0x5C, 0x0F}, {0x5B, 0x5D}, {0x68, 0x21}, /* 0xA0-0xA3 */ + {0x80, 0x96}, {0x55, 0x78}, {0x7B, 0x11}, {0x65, 0x48}, /* 0xA4-0xA7 */ + {0x69, 0x54}, {0x4E, 0x9B}, {0x6B, 0x47}, {0x87, 0x4E}, /* 0xA8-0xAB */ + {0x97, 0x8B}, {0x53, 0x4F}, {0x63, 0x1F}, {0x64, 0x3A}, /* 0xAC-0xAF */ + {0x90, 0xAA}, {0x65, 0x9C}, {0x80, 0xC1}, {0x8C, 0x10}, /* 0xB0-0xB3 */ + {0x51, 0x99}, {0x68, 0xB0}, {0x53, 0x78}, {0x87, 0xF9}, /* 0xB4-0xB7 */ + {0x61, 0xC8}, {0x6C, 0xC4}, {0x6C, 0xFB}, {0x8C, 0x22}, /* 0xB8-0xBB */ + {0x5C, 0x51}, {0x85, 0xAA}, {0x82, 0xAF}, {0x95, 0x0C}, /* 0xBC-0xBF */ + {0x6B, 0x23}, {0x8F, 0x9B}, {0x65, 0xB0}, {0x5F, 0xFB}, /* 0xC0-0xC3 */ + {0x5F, 0xC3}, {0x4F, 0xE1}, {0x88, 0x45}, {0x66, 0x1F}, /* 0xC4-0xC7 */ + {0x81, 0x65}, {0x73, 0x29}, {0x60, 0xFA}, {0x51, 0x74}, /* 0xC8-0xCB */ + {0x52, 0x11}, {0x57, 0x8B}, {0x5F, 0x62}, {0x90, 0xA2}, /* 0xCC-0xCF */ + {0x88, 0x4C}, {0x91, 0x92}, {0x5E, 0x78}, {0x67, 0x4F}, /* 0xD0-0xD3 */ + {0x60, 0x27}, {0x59, 0xD3}, {0x51, 0x44}, {0x51, 0xF6}, /* 0xD4-0xD7 */ + {0x80, 0xF8}, {0x53, 0x08}, {0x6C, 0x79}, {0x96, 0xC4}, /* 0xD8-0xDB */ + {0x71, 0x8A}, {0x4F, 0x11}, {0x4F, 0xEE}, {0x7F, 0x9E}, /* 0xDC-0xDF */ + {0x67, 0x3D}, {0x55, 0xC5}, {0x95, 0x08}, {0x79, 0xC0}, /* 0xE0-0xE3 */ + {0x88, 0x96}, {0x7E, 0xE3}, {0x58, 0x9F}, {0x62, 0x0C}, /* 0xE4-0xE7 */ + {0x97, 0x00}, {0x86, 0x5A}, {0x56, 0x18}, {0x98, 0x7B}, /* 0xE8-0xEB */ + {0x5F, 0x90}, {0x8B, 0xB8}, {0x84, 0xC4}, {0x91, 0x57}, /* 0xEC-0xEF */ + {0x53, 0xD9}, {0x65, 0xED}, {0x5E, 0x8F}, {0x75, 0x5C}, /* 0xF0-0xF3 */ + {0x60, 0x64}, {0x7D, 0x6E}, {0x5A, 0x7F}, {0x7E, 0xEA}, /* 0xF4-0xF7 */ + {0x7E, 0xED}, {0x8F, 0x69}, {0x55, 0xA7}, {0x5B, 0xA3}, /* 0xF8-0xFB */ + {0x60, 0xAC}, {0x65, 0xCB}, {0x73, 0x84}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x88, 0xAC}, {0x88, 0xAE}, {0x88, 0xAF}, {0x88, 0xB0}, /* 0x40-0x43 */ + {0x88, 0xB2}, {0x88, 0xB3}, {0x88, 0xB4}, {0x88, 0xB5}, /* 0x44-0x47 */ + {0x88, 0xB6}, {0x88, 0xB8}, {0x88, 0xB9}, {0x88, 0xBA}, /* 0x48-0x4B */ + {0x88, 0xBB}, {0x88, 0xBD}, {0x88, 0xBE}, {0x88, 0xBF}, /* 0x4C-0x4F */ + {0x88, 0xC0}, {0x88, 0xC3}, {0x88, 0xC4}, {0x88, 0xC7}, /* 0x50-0x53 */ + {0x88, 0xC8}, {0x88, 0xCA}, {0x88, 0xCB}, {0x88, 0xCC}, /* 0x54-0x57 */ + {0x88, 0xCD}, {0x88, 0xCF}, {0x88, 0xD0}, {0x88, 0xD1}, /* 0x58-0x5B */ + {0x88, 0xD3}, {0x88, 0xD6}, {0x88, 0xD7}, {0x88, 0xDA}, /* 0x5C-0x5F */ + {0x88, 0xDB}, {0x88, 0xDC}, {0x88, 0xDD}, {0x88, 0xDE}, /* 0x60-0x63 */ + {0x88, 0xE0}, {0x88, 0xE1}, {0x88, 0xE6}, {0x88, 0xE7}, /* 0x64-0x67 */ + {0x88, 0xE9}, {0x88, 0xEA}, {0x88, 0xEB}, {0x88, 0xEC}, /* 0x68-0x6B */ + {0x88, 0xED}, {0x88, 0xEE}, {0x88, 0xEF}, {0x88, 0xF2}, /* 0x6C-0x6F */ + {0x88, 0xF5}, {0x88, 0xF6}, {0x88, 0xF7}, {0x88, 0xFA}, /* 0x70-0x73 */ + {0x88, 0xFB}, {0x88, 0xFD}, {0x88, 0xFF}, {0x89, 0x00}, /* 0x74-0x77 */ + {0x89, 0x01}, {0x89, 0x03}, {0x89, 0x04}, {0x89, 0x05}, /* 0x78-0x7B */ + {0x89, 0x06}, {0x89, 0x07}, {0x89, 0x08}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x89, 0x09}, {0x89, 0x0B}, {0x89, 0x0C}, {0x89, 0x0D}, /* 0x80-0x83 */ + {0x89, 0x0E}, {0x89, 0x0F}, {0x89, 0x11}, {0x89, 0x14}, /* 0x84-0x87 */ + {0x89, 0x15}, {0x89, 0x16}, {0x89, 0x17}, {0x89, 0x18}, /* 0x88-0x8B */ + {0x89, 0x1C}, {0x89, 0x1D}, {0x89, 0x1E}, {0x89, 0x1F}, /* 0x8C-0x8F */ + {0x89, 0x20}, {0x89, 0x22}, {0x89, 0x23}, {0x89, 0x24}, /* 0x90-0x93 */ + {0x89, 0x26}, {0x89, 0x27}, {0x89, 0x28}, {0x89, 0x29}, /* 0x94-0x97 */ + {0x89, 0x2C}, {0x89, 0x2D}, {0x89, 0x2E}, {0x89, 0x2F}, /* 0x98-0x9B */ + {0x89, 0x31}, {0x89, 0x32}, {0x89, 0x33}, {0x89, 0x35}, /* 0x9C-0x9F */ + {0x89, 0x37}, {0x90, 0x09}, {0x76, 0x63}, {0x77, 0x29}, /* 0xA0-0xA3 */ + {0x7E, 0xDA}, {0x97, 0x74}, {0x85, 0x9B}, {0x5B, 0x66}, /* 0xA4-0xA7 */ + {0x7A, 0x74}, {0x96, 0xEA}, {0x88, 0x40}, {0x52, 0xCB}, /* 0xA8-0xAB */ + {0x71, 0x8F}, {0x5F, 0xAA}, {0x65, 0xEC}, {0x8B, 0xE2}, /* 0xAC-0xAF */ + {0x5B, 0xFB}, {0x9A, 0x6F}, {0x5D, 0xE1}, {0x6B, 0x89}, /* 0xB0-0xB3 */ + {0x6C, 0x5B}, {0x8B, 0xAD}, {0x8B, 0xAF}, {0x90, 0x0A}, /* 0xB4-0xB7 */ + {0x8F, 0xC5}, {0x53, 0x8B}, {0x62, 0xBC}, {0x9E, 0x26}, /* 0xB8-0xBB */ + {0x9E, 0x2D}, {0x54, 0x40}, {0x4E, 0x2B}, {0x82, 0xBD}, /* 0xBC-0xBF */ + {0x72, 0x59}, {0x86, 0x9C}, {0x5D, 0x16}, {0x88, 0x59}, /* 0xC0-0xC3 */ + {0x6D, 0xAF}, {0x96, 0xC5}, {0x54, 0xD1}, {0x4E, 0x9A}, /* 0xC4-0xC7 */ + {0x8B, 0xB6}, {0x71, 0x09}, {0x54, 0xBD}, {0x96, 0x09}, /* 0xC8-0xCB */ + {0x70, 0xDF}, {0x6D, 0xF9}, {0x76, 0xD0}, {0x4E, 0x25}, /* 0xCC-0xCF */ + {0x78, 0x14}, {0x87, 0x12}, {0x5C, 0xA9}, {0x5E, 0xF6}, /* 0xD0-0xD3 */ + {0x8A, 0x00}, {0x98, 0x9C}, {0x96, 0x0E}, {0x70, 0x8E}, /* 0xD4-0xD7 */ + {0x6C, 0xBF}, {0x59, 0x44}, {0x63, 0xA9}, {0x77, 0x3C}, /* 0xD8-0xDB */ + {0x88, 0x4D}, {0x6F, 0x14}, {0x82, 0x73}, {0x58, 0x30}, /* 0xDC-0xDF */ + {0x71, 0xD5}, {0x53, 0x8C}, {0x78, 0x1A}, {0x96, 0xC1}, /* 0xE0-0xE3 */ + {0x55, 0x01}, {0x5F, 0x66}, {0x71, 0x30}, {0x5B, 0xB4}, /* 0xE4-0xE7 */ + {0x8C, 0x1A}, {0x9A, 0x8C}, {0x6B, 0x83}, {0x59, 0x2E}, /* 0xE8-0xEB */ + {0x9E, 0x2F}, {0x79, 0xE7}, {0x67, 0x68}, {0x62, 0x6C}, /* 0xEC-0xEF */ + {0x4F, 0x6F}, {0x75, 0xA1}, {0x7F, 0x8A}, {0x6D, 0x0B}, /* 0xF0-0xF3 */ + {0x96, 0x33}, {0x6C, 0x27}, {0x4E, 0xF0}, {0x75, 0xD2}, /* 0xF4-0xF7 */ + {0x51, 0x7B}, {0x68, 0x37}, {0x6F, 0x3E}, {0x90, 0x80}, /* 0xF8-0xFB */ + {0x81, 0x70}, {0x59, 0x96}, {0x74, 0x76}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x89, 0x38}, {0x89, 0x39}, {0x89, 0x3A}, {0x89, 0x3B}, /* 0x40-0x43 */ + {0x89, 0x3C}, {0x89, 0x3D}, {0x89, 0x3E}, {0x89, 0x3F}, /* 0x44-0x47 */ + {0x89, 0x40}, {0x89, 0x42}, {0x89, 0x43}, {0x89, 0x45}, /* 0x48-0x4B */ + {0x89, 0x46}, {0x89, 0x47}, {0x89, 0x48}, {0x89, 0x49}, /* 0x4C-0x4F */ + {0x89, 0x4A}, {0x89, 0x4B}, {0x89, 0x4C}, {0x89, 0x4D}, /* 0x50-0x53 */ + {0x89, 0x4E}, {0x89, 0x4F}, {0x89, 0x50}, {0x89, 0x51}, /* 0x54-0x57 */ + {0x89, 0x52}, {0x89, 0x53}, {0x89, 0x54}, {0x89, 0x55}, /* 0x58-0x5B */ + {0x89, 0x56}, {0x89, 0x57}, {0x89, 0x58}, {0x89, 0x59}, /* 0x5C-0x5F */ + {0x89, 0x5A}, {0x89, 0x5B}, {0x89, 0x5C}, {0x89, 0x5D}, /* 0x60-0x63 */ + {0x89, 0x60}, {0x89, 0x61}, {0x89, 0x62}, {0x89, 0x63}, /* 0x64-0x67 */ + {0x89, 0x64}, {0x89, 0x65}, {0x89, 0x67}, {0x89, 0x68}, /* 0x68-0x6B */ + {0x89, 0x69}, {0x89, 0x6A}, {0x89, 0x6B}, {0x89, 0x6C}, /* 0x6C-0x6F */ + {0x89, 0x6D}, {0x89, 0x6E}, {0x89, 0x6F}, {0x89, 0x70}, /* 0x70-0x73 */ + {0x89, 0x71}, {0x89, 0x72}, {0x89, 0x73}, {0x89, 0x74}, /* 0x74-0x77 */ + {0x89, 0x75}, {0x89, 0x76}, {0x89, 0x77}, {0x89, 0x78}, /* 0x78-0x7B */ + {0x89, 0x79}, {0x89, 0x7A}, {0x89, 0x7C}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x89, 0x7D}, {0x89, 0x7E}, {0x89, 0x80}, {0x89, 0x82}, /* 0x80-0x83 */ + {0x89, 0x84}, {0x89, 0x85}, {0x89, 0x87}, {0x89, 0x88}, /* 0x84-0x87 */ + {0x89, 0x89}, {0x89, 0x8A}, {0x89, 0x8B}, {0x89, 0x8C}, /* 0x88-0x8B */ + {0x89, 0x8D}, {0x89, 0x8E}, {0x89, 0x8F}, {0x89, 0x90}, /* 0x8C-0x8F */ + {0x89, 0x91}, {0x89, 0x92}, {0x89, 0x93}, {0x89, 0x94}, /* 0x90-0x93 */ + {0x89, 0x95}, {0x89, 0x96}, {0x89, 0x97}, {0x89, 0x98}, /* 0x94-0x97 */ + {0x89, 0x99}, {0x89, 0x9A}, {0x89, 0x9B}, {0x89, 0x9C}, /* 0x98-0x9B */ + {0x89, 0x9D}, {0x89, 0x9E}, {0x89, 0x9F}, {0x89, 0xA0}, /* 0x9C-0x9F */ + {0x89, 0xA1}, {0x64, 0x47}, {0x5C, 0x27}, {0x90, 0x65}, /* 0xA0-0xA3 */ + {0x7A, 0x91}, {0x8C, 0x23}, {0x59, 0xDA}, {0x54, 0xAC}, /* 0xA4-0xA7 */ + {0x82, 0x00}, {0x83, 0x6F}, {0x89, 0x81}, {0x80, 0x00}, /* 0xA8-0xAB */ + {0x69, 0x30}, {0x56, 0x4E}, {0x80, 0x36}, {0x72, 0x37}, /* 0xAC-0xAF */ + {0x91, 0xCE}, {0x51, 0xB6}, {0x4E, 0x5F}, {0x98, 0x75}, /* 0xB0-0xB3 */ + {0x63, 0x96}, {0x4E, 0x1A}, {0x53, 0xF6}, {0x66, 0xF3}, /* 0xB4-0xB7 */ + {0x81, 0x4B}, {0x59, 0x1C}, {0x6D, 0xB2}, {0x4E, 0x00}, /* 0xB8-0xBB */ + {0x58, 0xF9}, {0x53, 0x3B}, {0x63, 0xD6}, {0x94, 0xF1}, /* 0xBC-0xBF */ + {0x4F, 0x9D}, {0x4F, 0x0A}, {0x88, 0x63}, {0x98, 0x90}, /* 0xC0-0xC3 */ + {0x59, 0x37}, {0x90, 0x57}, {0x79, 0xFB}, {0x4E, 0xEA}, /* 0xC4-0xC7 */ + {0x80, 0xF0}, {0x75, 0x91}, {0x6C, 0x82}, {0x5B, 0x9C}, /* 0xC8-0xCB */ + {0x59, 0xE8}, {0x5F, 0x5D}, {0x69, 0x05}, {0x86, 0x81}, /* 0xCC-0xCF */ + {0x50, 0x1A}, {0x5D, 0xF2}, {0x4E, 0x59}, {0x77, 0xE3}, /* 0xD0-0xD3 */ + {0x4E, 0xE5}, {0x82, 0x7A}, {0x62, 0x91}, {0x66, 0x13}, /* 0xD4-0xD7 */ + {0x90, 0x91}, {0x5C, 0x79}, {0x4E, 0xBF}, {0x5F, 0x79}, /* 0xD8-0xDB */ + {0x81, 0xC6}, {0x90, 0x38}, {0x80, 0x84}, {0x75, 0xAB}, /* 0xDC-0xDF */ + {0x4E, 0xA6}, {0x88, 0xD4}, {0x61, 0x0F}, {0x6B, 0xC5}, /* 0xE0-0xE3 */ + {0x5F, 0xC6}, {0x4E, 0x49}, {0x76, 0xCA}, {0x6E, 0xA2}, /* 0xE4-0xE7 */ + {0x8B, 0xE3}, {0x8B, 0xAE}, {0x8C, 0x0A}, {0x8B, 0xD1}, /* 0xE8-0xEB */ + {0x5F, 0x02}, {0x7F, 0xFC}, {0x7F, 0xCC}, {0x7E, 0xCE}, /* 0xEC-0xEF */ + {0x83, 0x35}, {0x83, 0x6B}, {0x56, 0xE0}, {0x6B, 0xB7}, /* 0xF0-0xF3 */ + {0x97, 0xF3}, {0x96, 0x34}, {0x59, 0xFB}, {0x54, 0x1F}, /* 0xF4-0xF7 */ + {0x94, 0xF6}, {0x6D, 0xEB}, {0x5B, 0xC5}, {0x99, 0x6E}, /* 0xF8-0xFB */ + {0x5C, 0x39}, {0x5F, 0x15}, {0x96, 0x90}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x89, 0xA2}, {0x89, 0xA3}, {0x89, 0xA4}, {0x89, 0xA5}, /* 0x40-0x43 */ + {0x89, 0xA6}, {0x89, 0xA7}, {0x89, 0xA8}, {0x89, 0xA9}, /* 0x44-0x47 */ + {0x89, 0xAA}, {0x89, 0xAB}, {0x89, 0xAC}, {0x89, 0xAD}, /* 0x48-0x4B */ + {0x89, 0xAE}, {0x89, 0xAF}, {0x89, 0xB0}, {0x89, 0xB1}, /* 0x4C-0x4F */ + {0x89, 0xB2}, {0x89, 0xB3}, {0x89, 0xB4}, {0x89, 0xB5}, /* 0x50-0x53 */ + {0x89, 0xB6}, {0x89, 0xB7}, {0x89, 0xB8}, {0x89, 0xB9}, /* 0x54-0x57 */ + {0x89, 0xBA}, {0x89, 0xBB}, {0x89, 0xBC}, {0x89, 0xBD}, /* 0x58-0x5B */ + {0x89, 0xBE}, {0x89, 0xBF}, {0x89, 0xC0}, {0x89, 0xC3}, /* 0x5C-0x5F */ + {0x89, 0xCD}, {0x89, 0xD3}, {0x89, 0xD4}, {0x89, 0xD5}, /* 0x60-0x63 */ + {0x89, 0xD7}, {0x89, 0xD8}, {0x89, 0xD9}, {0x89, 0xDB}, /* 0x64-0x67 */ + {0x89, 0xDD}, {0x89, 0xDF}, {0x89, 0xE0}, {0x89, 0xE1}, /* 0x68-0x6B */ + {0x89, 0xE2}, {0x89, 0xE4}, {0x89, 0xE7}, {0x89, 0xE8}, /* 0x6C-0x6F */ + {0x89, 0xE9}, {0x89, 0xEA}, {0x89, 0xEC}, {0x89, 0xED}, /* 0x70-0x73 */ + {0x89, 0xEE}, {0x89, 0xF0}, {0x89, 0xF1}, {0x89, 0xF2}, /* 0x74-0x77 */ + {0x89, 0xF4}, {0x89, 0xF5}, {0x89, 0xF6}, {0x89, 0xF7}, /* 0x78-0x7B */ + {0x89, 0xF8}, {0x89, 0xF9}, {0x89, 0xFA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x89, 0xFB}, {0x89, 0xFC}, {0x89, 0xFD}, {0x89, 0xFE}, /* 0x80-0x83 */ + {0x89, 0xFF}, {0x8A, 0x01}, {0x8A, 0x02}, {0x8A, 0x03}, /* 0x84-0x87 */ + {0x8A, 0x04}, {0x8A, 0x05}, {0x8A, 0x06}, {0x8A, 0x08}, /* 0x88-0x8B */ + {0x8A, 0x09}, {0x8A, 0x0A}, {0x8A, 0x0B}, {0x8A, 0x0C}, /* 0x8C-0x8F */ + {0x8A, 0x0D}, {0x8A, 0x0E}, {0x8A, 0x0F}, {0x8A, 0x10}, /* 0x90-0x93 */ + {0x8A, 0x11}, {0x8A, 0x12}, {0x8A, 0x13}, {0x8A, 0x14}, /* 0x94-0x97 */ + {0x8A, 0x15}, {0x8A, 0x16}, {0x8A, 0x17}, {0x8A, 0x18}, /* 0x98-0x9B */ + {0x8A, 0x19}, {0x8A, 0x1A}, {0x8A, 0x1B}, {0x8A, 0x1C}, /* 0x9C-0x9F */ + {0x8A, 0x1D}, {0x53, 0x70}, {0x82, 0xF1}, {0x6A, 0x31}, /* 0xA0-0xA3 */ + {0x5A, 0x74}, {0x9E, 0x70}, {0x5E, 0x94}, {0x7F, 0x28}, /* 0xA4-0xA7 */ + {0x83, 0xB9}, {0x84, 0x24}, {0x84, 0x25}, {0x83, 0x67}, /* 0xA8-0xAB */ + {0x87, 0x47}, {0x8F, 0xCE}, {0x8D, 0x62}, {0x76, 0xC8}, /* 0xAC-0xAF */ + {0x5F, 0x71}, {0x98, 0x96}, {0x78, 0x6C}, {0x66, 0x20}, /* 0xB0-0xB3 */ + {0x54, 0xDF}, {0x62, 0xE5}, {0x4F, 0x63}, {0x81, 0xC3}, /* 0xB4-0xB7 */ + {0x75, 0xC8}, {0x5E, 0xB8}, {0x96, 0xCD}, {0x8E, 0x0A}, /* 0xB8-0xBB */ + {0x86, 0xF9}, {0x54, 0x8F}, {0x6C, 0xF3}, {0x6D, 0x8C}, /* 0xBC-0xBF */ + {0x6C, 0x38}, {0x60, 0x7F}, {0x52, 0xC7}, {0x75, 0x28}, /* 0xC0-0xC3 */ + {0x5E, 0x7D}, {0x4F, 0x18}, {0x60, 0xA0}, {0x5F, 0xE7}, /* 0xC4-0xC7 */ + {0x5C, 0x24}, {0x75, 0x31}, {0x90, 0xAE}, {0x94, 0xC0}, /* 0xC8-0xCB */ + {0x72, 0xB9}, {0x6C, 0xB9}, {0x6E, 0x38}, {0x91, 0x49}, /* 0xCC-0xCF */ + {0x67, 0x09}, {0x53, 0xCB}, {0x53, 0xF3}, {0x4F, 0x51}, /* 0xD0-0xD3 */ + {0x91, 0xC9}, {0x8B, 0xF1}, {0x53, 0xC8}, {0x5E, 0x7C}, /* 0xD4-0xD7 */ + {0x8F, 0xC2}, {0x6D, 0xE4}, {0x4E, 0x8E}, {0x76, 0xC2}, /* 0xD8-0xDB */ + {0x69, 0x86}, {0x86, 0x5E}, {0x61, 0x1A}, {0x82, 0x06}, /* 0xDC-0xDF */ + {0x4F, 0x59}, {0x4F, 0xDE}, {0x90, 0x3E}, {0x9C, 0x7C}, /* 0xE0-0xE3 */ + {0x61, 0x09}, {0x6E, 0x1D}, {0x6E, 0x14}, {0x96, 0x85}, /* 0xE4-0xE7 */ + {0x4E, 0x88}, {0x5A, 0x31}, {0x96, 0xE8}, {0x4E, 0x0E}, /* 0xE8-0xEB */ + {0x5C, 0x7F}, {0x79, 0xB9}, {0x5B, 0x87}, {0x8B, 0xED}, /* 0xEC-0xEF */ + {0x7F, 0xBD}, {0x73, 0x89}, {0x57, 0xDF}, {0x82, 0x8B}, /* 0xF0-0xF3 */ + {0x90, 0xC1}, {0x54, 0x01}, {0x90, 0x47}, {0x55, 0xBB}, /* 0xF4-0xF7 */ + {0x5C, 0xEA}, {0x5F, 0xA1}, {0x61, 0x08}, {0x6B, 0x32}, /* 0xF8-0xFB */ + {0x72, 0xF1}, {0x80, 0xB2}, {0x8A, 0x89}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8A, 0x1E}, {0x8A, 0x1F}, {0x8A, 0x20}, {0x8A, 0x21}, /* 0x40-0x43 */ + {0x8A, 0x22}, {0x8A, 0x23}, {0x8A, 0x24}, {0x8A, 0x25}, /* 0x44-0x47 */ + {0x8A, 0x26}, {0x8A, 0x27}, {0x8A, 0x28}, {0x8A, 0x29}, /* 0x48-0x4B */ + {0x8A, 0x2A}, {0x8A, 0x2B}, {0x8A, 0x2C}, {0x8A, 0x2D}, /* 0x4C-0x4F */ + {0x8A, 0x2E}, {0x8A, 0x2F}, {0x8A, 0x30}, {0x8A, 0x31}, /* 0x50-0x53 */ + {0x8A, 0x32}, {0x8A, 0x33}, {0x8A, 0x34}, {0x8A, 0x35}, /* 0x54-0x57 */ + {0x8A, 0x36}, {0x8A, 0x37}, {0x8A, 0x38}, {0x8A, 0x39}, /* 0x58-0x5B */ + {0x8A, 0x3A}, {0x8A, 0x3B}, {0x8A, 0x3C}, {0x8A, 0x3D}, /* 0x5C-0x5F */ + {0x8A, 0x3F}, {0x8A, 0x40}, {0x8A, 0x41}, {0x8A, 0x42}, /* 0x60-0x63 */ + {0x8A, 0x43}, {0x8A, 0x44}, {0x8A, 0x45}, {0x8A, 0x46}, /* 0x64-0x67 */ + {0x8A, 0x47}, {0x8A, 0x49}, {0x8A, 0x4A}, {0x8A, 0x4B}, /* 0x68-0x6B */ + {0x8A, 0x4C}, {0x8A, 0x4D}, {0x8A, 0x4E}, {0x8A, 0x4F}, /* 0x6C-0x6F */ + {0x8A, 0x50}, {0x8A, 0x51}, {0x8A, 0x52}, {0x8A, 0x53}, /* 0x70-0x73 */ + {0x8A, 0x54}, {0x8A, 0x55}, {0x8A, 0x56}, {0x8A, 0x57}, /* 0x74-0x77 */ + {0x8A, 0x58}, {0x8A, 0x59}, {0x8A, 0x5A}, {0x8A, 0x5B}, /* 0x78-0x7B */ + {0x8A, 0x5C}, {0x8A, 0x5D}, {0x8A, 0x5E}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8A, 0x5F}, {0x8A, 0x60}, {0x8A, 0x61}, {0x8A, 0x62}, /* 0x80-0x83 */ + {0x8A, 0x63}, {0x8A, 0x64}, {0x8A, 0x65}, {0x8A, 0x66}, /* 0x84-0x87 */ + {0x8A, 0x67}, {0x8A, 0x68}, {0x8A, 0x69}, {0x8A, 0x6A}, /* 0x88-0x8B */ + {0x8A, 0x6B}, {0x8A, 0x6C}, {0x8A, 0x6D}, {0x8A, 0x6E}, /* 0x8C-0x8F */ + {0x8A, 0x6F}, {0x8A, 0x70}, {0x8A, 0x71}, {0x8A, 0x72}, /* 0x90-0x93 */ + {0x8A, 0x73}, {0x8A, 0x74}, {0x8A, 0x75}, {0x8A, 0x76}, /* 0x94-0x97 */ + {0x8A, 0x77}, {0x8A, 0x78}, {0x8A, 0x7A}, {0x8A, 0x7B}, /* 0x98-0x9B */ + {0x8A, 0x7C}, {0x8A, 0x7D}, {0x8A, 0x7E}, {0x8A, 0x7F}, /* 0x9C-0x9F */ + {0x8A, 0x80}, {0x6D, 0x74}, {0x5B, 0xD3}, {0x88, 0xD5}, /* 0xA0-0xA3 */ + {0x98, 0x84}, {0x8C, 0x6B}, {0x9A, 0x6D}, {0x9E, 0x33}, /* 0xA4-0xA7 */ + {0x6E, 0x0A}, {0x51, 0xA4}, {0x51, 0x43}, {0x57, 0xA3}, /* 0xA8-0xAB */ + {0x88, 0x81}, {0x53, 0x9F}, {0x63, 0xF4}, {0x8F, 0x95}, /* 0xAC-0xAF */ + {0x56, 0xED}, {0x54, 0x58}, {0x57, 0x06}, {0x73, 0x3F}, /* 0xB0-0xB3 */ + {0x6E, 0x90}, {0x7F, 0x18}, {0x8F, 0xDC}, {0x82, 0xD1}, /* 0xB4-0xB7 */ + {0x61, 0x3F}, {0x60, 0x28}, {0x96, 0x62}, {0x66, 0xF0}, /* 0xB8-0xBB */ + {0x7E, 0xA6}, {0x8D, 0x8A}, {0x8D, 0xC3}, {0x94, 0xA5}, /* 0xBC-0xBF */ + {0x5C, 0xB3}, {0x7C, 0xA4}, {0x67, 0x08}, {0x60, 0xA6}, /* 0xC0-0xC3 */ + {0x96, 0x05}, {0x80, 0x18}, {0x4E, 0x91}, {0x90, 0xE7}, /* 0xC4-0xC7 */ + {0x53, 0x00}, {0x96, 0x68}, {0x51, 0x41}, {0x8F, 0xD0}, /* 0xC8-0xCB */ + {0x85, 0x74}, {0x91, 0x5D}, {0x66, 0x55}, {0x97, 0xF5}, /* 0xCC-0xCF */ + {0x5B, 0x55}, {0x53, 0x1D}, {0x78, 0x38}, {0x67, 0x42}, /* 0xD0-0xD3 */ + {0x68, 0x3D}, {0x54, 0xC9}, {0x70, 0x7E}, {0x5B, 0xB0}, /* 0xD4-0xD7 */ + {0x8F, 0x7D}, {0x51, 0x8D}, {0x57, 0x28}, {0x54, 0xB1}, /* 0xD8-0xDB */ + {0x65, 0x12}, {0x66, 0x82}, {0x8D, 0x5E}, {0x8D, 0x43}, /* 0xDC-0xDF */ + {0x81, 0x0F}, {0x84, 0x6C}, {0x90, 0x6D}, {0x7C, 0xDF}, /* 0xE0-0xE3 */ + {0x51, 0xFF}, {0x85, 0xFB}, {0x67, 0xA3}, {0x65, 0xE9}, /* 0xE4-0xE7 */ + {0x6F, 0xA1}, {0x86, 0xA4}, {0x8E, 0x81}, {0x56, 0x6A}, /* 0xE8-0xEB */ + {0x90, 0x20}, {0x76, 0x82}, {0x70, 0x76}, {0x71, 0xE5}, /* 0xEC-0xEF */ + {0x8D, 0x23}, {0x62, 0xE9}, {0x52, 0x19}, {0x6C, 0xFD}, /* 0xF0-0xF3 */ + {0x8D, 0x3C}, {0x60, 0x0E}, {0x58, 0x9E}, {0x61, 0x8E}, /* 0xF4-0xF7 */ + {0x66, 0xFE}, {0x8D, 0x60}, {0x62, 0x4E}, {0x55, 0xB3}, /* 0xF8-0xFB */ + {0x6E, 0x23}, {0x67, 0x2D}, {0x8F, 0x67}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8A, 0x81}, {0x8A, 0x82}, {0x8A, 0x83}, {0x8A, 0x84}, /* 0x40-0x43 */ + {0x8A, 0x85}, {0x8A, 0x86}, {0x8A, 0x87}, {0x8A, 0x88}, /* 0x44-0x47 */ + {0x8A, 0x8B}, {0x8A, 0x8C}, {0x8A, 0x8D}, {0x8A, 0x8E}, /* 0x48-0x4B */ + {0x8A, 0x8F}, {0x8A, 0x90}, {0x8A, 0x91}, {0x8A, 0x92}, /* 0x4C-0x4F */ + {0x8A, 0x94}, {0x8A, 0x95}, {0x8A, 0x96}, {0x8A, 0x97}, /* 0x50-0x53 */ + {0x8A, 0x98}, {0x8A, 0x99}, {0x8A, 0x9A}, {0x8A, 0x9B}, /* 0x54-0x57 */ + {0x8A, 0x9C}, {0x8A, 0x9D}, {0x8A, 0x9E}, {0x8A, 0x9F}, /* 0x58-0x5B */ + {0x8A, 0xA0}, {0x8A, 0xA1}, {0x8A, 0xA2}, {0x8A, 0xA3}, /* 0x5C-0x5F */ + {0x8A, 0xA4}, {0x8A, 0xA5}, {0x8A, 0xA6}, {0x8A, 0xA7}, /* 0x60-0x63 */ + {0x8A, 0xA8}, {0x8A, 0xA9}, {0x8A, 0xAA}, {0x8A, 0xAB}, /* 0x64-0x67 */ + {0x8A, 0xAC}, {0x8A, 0xAD}, {0x8A, 0xAE}, {0x8A, 0xAF}, /* 0x68-0x6B */ + {0x8A, 0xB0}, {0x8A, 0xB1}, {0x8A, 0xB2}, {0x8A, 0xB3}, /* 0x6C-0x6F */ + {0x8A, 0xB4}, {0x8A, 0xB5}, {0x8A, 0xB6}, {0x8A, 0xB7}, /* 0x70-0x73 */ + {0x8A, 0xB8}, {0x8A, 0xB9}, {0x8A, 0xBA}, {0x8A, 0xBB}, /* 0x74-0x77 */ + {0x8A, 0xBC}, {0x8A, 0xBD}, {0x8A, 0xBE}, {0x8A, 0xBF}, /* 0x78-0x7B */ + {0x8A, 0xC0}, {0x8A, 0xC1}, {0x8A, 0xC2}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8A, 0xC3}, {0x8A, 0xC4}, {0x8A, 0xC5}, {0x8A, 0xC6}, /* 0x80-0x83 */ + {0x8A, 0xC7}, {0x8A, 0xC8}, {0x8A, 0xC9}, {0x8A, 0xCA}, /* 0x84-0x87 */ + {0x8A, 0xCB}, {0x8A, 0xCC}, {0x8A, 0xCD}, {0x8A, 0xCE}, /* 0x88-0x8B */ + {0x8A, 0xCF}, {0x8A, 0xD0}, {0x8A, 0xD1}, {0x8A, 0xD2}, /* 0x8C-0x8F */ + {0x8A, 0xD3}, {0x8A, 0xD4}, {0x8A, 0xD5}, {0x8A, 0xD6}, /* 0x90-0x93 */ + {0x8A, 0xD7}, {0x8A, 0xD8}, {0x8A, 0xD9}, {0x8A, 0xDA}, /* 0x94-0x97 */ + {0x8A, 0xDB}, {0x8A, 0xDC}, {0x8A, 0xDD}, {0x8A, 0xDE}, /* 0x98-0x9B */ + {0x8A, 0xDF}, {0x8A, 0xE0}, {0x8A, 0xE1}, {0x8A, 0xE2}, /* 0x9C-0x9F */ + {0x8A, 0xE3}, {0x94, 0xE1}, {0x95, 0xF8}, {0x77, 0x28}, /* 0xA0-0xA3 */ + {0x68, 0x05}, {0x69, 0xA8}, {0x54, 0x8B}, {0x4E, 0x4D}, /* 0xA4-0xA7 */ + {0x70, 0xB8}, {0x8B, 0xC8}, {0x64, 0x58}, {0x65, 0x8B}, /* 0xA8-0xAB */ + {0x5B, 0x85}, {0x7A, 0x84}, {0x50, 0x3A}, {0x5B, 0xE8}, /* 0xAC-0xAF */ + {0x77, 0xBB}, {0x6B, 0xE1}, {0x8A, 0x79}, {0x7C, 0x98}, /* 0xB0-0xB3 */ + {0x6C, 0xBE}, {0x76, 0xCF}, {0x65, 0xA9}, {0x8F, 0x97}, /* 0xB4-0xB7 */ + {0x5D, 0x2D}, {0x5C, 0x55}, {0x86, 0x38}, {0x68, 0x08}, /* 0xB8-0xBB */ + {0x53, 0x60}, {0x62, 0x18}, {0x7A, 0xD9}, {0x6E, 0x5B}, /* 0xBC-0xBF */ + {0x7E, 0xFD}, {0x6A, 0x1F}, {0x7A, 0xE0}, {0x5F, 0x70}, /* 0xC0-0xC3 */ + {0x6F, 0x33}, {0x5F, 0x20}, {0x63, 0x8C}, {0x6D, 0xA8}, /* 0xC4-0xC7 */ + {0x67, 0x56}, {0x4E, 0x08}, {0x5E, 0x10}, {0x8D, 0x26}, /* 0xC8-0xCB */ + {0x4E, 0xD7}, {0x80, 0xC0}, {0x76, 0x34}, {0x96, 0x9C}, /* 0xCC-0xCF */ + {0x62, 0xDB}, {0x66, 0x2D}, {0x62, 0x7E}, {0x6C, 0xBC}, /* 0xD0-0xD3 */ + {0x8D, 0x75}, {0x71, 0x67}, {0x7F, 0x69}, {0x51, 0x46}, /* 0xD4-0xD7 */ + {0x80, 0x87}, {0x53, 0xEC}, {0x90, 0x6E}, {0x62, 0x98}, /* 0xD8-0xDB */ + {0x54, 0xF2}, {0x86, 0xF0}, {0x8F, 0x99}, {0x80, 0x05}, /* 0xDC-0xDF */ + {0x95, 0x17}, {0x85, 0x17}, {0x8F, 0xD9}, {0x6D, 0x59}, /* 0xE0-0xE3 */ + {0x73, 0xCD}, {0x65, 0x9F}, {0x77, 0x1F}, {0x75, 0x04}, /* 0xE4-0xE7 */ + {0x78, 0x27}, {0x81, 0xFB}, {0x8D, 0x1E}, {0x94, 0x88}, /* 0xE8-0xEB */ + {0x4F, 0xA6}, {0x67, 0x95}, {0x75, 0xB9}, {0x8B, 0xCA}, /* 0xEC-0xEF */ + {0x97, 0x07}, {0x63, 0x2F}, {0x95, 0x47}, {0x96, 0x35}, /* 0xF0-0xF3 */ + {0x84, 0xB8}, {0x63, 0x23}, {0x77, 0x41}, {0x5F, 0x81}, /* 0xF4-0xF7 */ + {0x72, 0xF0}, {0x4E, 0x89}, {0x60, 0x14}, {0x65, 0x74}, /* 0xF8-0xFB */ + {0x62, 0xEF}, {0x6B, 0x63}, {0x65, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8A, 0xE4}, {0x8A, 0xE5}, {0x8A, 0xE6}, {0x8A, 0xE7}, /* 0x40-0x43 */ + {0x8A, 0xE8}, {0x8A, 0xE9}, {0x8A, 0xEA}, {0x8A, 0xEB}, /* 0x44-0x47 */ + {0x8A, 0xEC}, {0x8A, 0xED}, {0x8A, 0xEE}, {0x8A, 0xEF}, /* 0x48-0x4B */ + {0x8A, 0xF0}, {0x8A, 0xF1}, {0x8A, 0xF2}, {0x8A, 0xF3}, /* 0x4C-0x4F */ + {0x8A, 0xF4}, {0x8A, 0xF5}, {0x8A, 0xF6}, {0x8A, 0xF7}, /* 0x50-0x53 */ + {0x8A, 0xF8}, {0x8A, 0xF9}, {0x8A, 0xFA}, {0x8A, 0xFB}, /* 0x54-0x57 */ + {0x8A, 0xFC}, {0x8A, 0xFD}, {0x8A, 0xFE}, {0x8A, 0xFF}, /* 0x58-0x5B */ + {0x8B, 0x00}, {0x8B, 0x01}, {0x8B, 0x02}, {0x8B, 0x03}, /* 0x5C-0x5F */ + {0x8B, 0x04}, {0x8B, 0x05}, {0x8B, 0x06}, {0x8B, 0x08}, /* 0x60-0x63 */ + {0x8B, 0x09}, {0x8B, 0x0A}, {0x8B, 0x0B}, {0x8B, 0x0C}, /* 0x64-0x67 */ + {0x8B, 0x0D}, {0x8B, 0x0E}, {0x8B, 0x0F}, {0x8B, 0x10}, /* 0x68-0x6B */ + {0x8B, 0x11}, {0x8B, 0x12}, {0x8B, 0x13}, {0x8B, 0x14}, /* 0x6C-0x6F */ + {0x8B, 0x15}, {0x8B, 0x16}, {0x8B, 0x17}, {0x8B, 0x18}, /* 0x70-0x73 */ + {0x8B, 0x19}, {0x8B, 0x1A}, {0x8B, 0x1B}, {0x8B, 0x1C}, /* 0x74-0x77 */ + {0x8B, 0x1D}, {0x8B, 0x1E}, {0x8B, 0x1F}, {0x8B, 0x20}, /* 0x78-0x7B */ + {0x8B, 0x21}, {0x8B, 0x22}, {0x8B, 0x23}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8B, 0x24}, {0x8B, 0x25}, {0x8B, 0x27}, {0x8B, 0x28}, /* 0x80-0x83 */ + {0x8B, 0x29}, {0x8B, 0x2A}, {0x8B, 0x2B}, {0x8B, 0x2C}, /* 0x84-0x87 */ + {0x8B, 0x2D}, {0x8B, 0x2E}, {0x8B, 0x2F}, {0x8B, 0x30}, /* 0x88-0x8B */ + {0x8B, 0x31}, {0x8B, 0x32}, {0x8B, 0x33}, {0x8B, 0x34}, /* 0x8C-0x8F */ + {0x8B, 0x35}, {0x8B, 0x36}, {0x8B, 0x37}, {0x8B, 0x38}, /* 0x90-0x93 */ + {0x8B, 0x39}, {0x8B, 0x3A}, {0x8B, 0x3B}, {0x8B, 0x3C}, /* 0x94-0x97 */ + {0x8B, 0x3D}, {0x8B, 0x3E}, {0x8B, 0x3F}, {0x8B, 0x40}, /* 0x98-0x9B */ + {0x8B, 0x41}, {0x8B, 0x42}, {0x8B, 0x43}, {0x8B, 0x44}, /* 0x9C-0x9F */ + {0x8B, 0x45}, {0x5E, 0x27}, {0x75, 0xC7}, {0x90, 0xD1}, /* 0xA0-0xA3 */ + {0x8B, 0xC1}, {0x82, 0x9D}, {0x67, 0x9D}, {0x65, 0x2F}, /* 0xA4-0xA7 */ + {0x54, 0x31}, {0x87, 0x18}, {0x77, 0xE5}, {0x80, 0xA2}, /* 0xA8-0xAB */ + {0x81, 0x02}, {0x6C, 0x41}, {0x4E, 0x4B}, {0x7E, 0xC7}, /* 0xAC-0xAF */ + {0x80, 0x4C}, {0x76, 0xF4}, {0x69, 0x0D}, {0x6B, 0x96}, /* 0xB0-0xB3 */ + {0x62, 0x67}, {0x50, 0x3C}, {0x4F, 0x84}, {0x57, 0x40}, /* 0xB4-0xB7 */ + {0x63, 0x07}, {0x6B, 0x62}, {0x8D, 0xBE}, {0x53, 0xEA}, /* 0xB8-0xBB */ + {0x65, 0xE8}, {0x7E, 0xB8}, {0x5F, 0xD7}, {0x63, 0x1A}, /* 0xBC-0xBF */ + {0x63, 0xB7}, {0x81, 0xF3}, {0x81, 0xF4}, {0x7F, 0x6E}, /* 0xC0-0xC3 */ + {0x5E, 0x1C}, {0x5C, 0xD9}, {0x52, 0x36}, {0x66, 0x7A}, /* 0xC4-0xC7 */ + {0x79, 0xE9}, {0x7A, 0x1A}, {0x8D, 0x28}, {0x70, 0x99}, /* 0xC8-0xCB */ + {0x75, 0xD4}, {0x6E, 0xDE}, {0x6C, 0xBB}, {0x7A, 0x92}, /* 0xCC-0xCF */ + {0x4E, 0x2D}, {0x76, 0xC5}, {0x5F, 0xE0}, {0x94, 0x9F}, /* 0xD0-0xD3 */ + {0x88, 0x77}, {0x7E, 0xC8}, {0x79, 0xCD}, {0x80, 0xBF}, /* 0xD4-0xD7 */ + {0x91, 0xCD}, {0x4E, 0xF2}, {0x4F, 0x17}, {0x82, 0x1F}, /* 0xD8-0xDB */ + {0x54, 0x68}, {0x5D, 0xDE}, {0x6D, 0x32}, {0x8B, 0xCC}, /* 0xDC-0xDF */ + {0x7C, 0xA5}, {0x8F, 0x74}, {0x80, 0x98}, {0x5E, 0x1A}, /* 0xE0-0xE3 */ + {0x54, 0x92}, {0x76, 0xB1}, {0x5B, 0x99}, {0x66, 0x3C}, /* 0xE4-0xE7 */ + {0x9A, 0xA4}, {0x73, 0xE0}, {0x68, 0x2A}, {0x86, 0xDB}, /* 0xE8-0xEB */ + {0x67, 0x31}, {0x73, 0x2A}, {0x8B, 0xF8}, {0x8B, 0xDB}, /* 0xEC-0xEF */ + {0x90, 0x10}, {0x7A, 0xF9}, {0x70, 0xDB}, {0x71, 0x6E}, /* 0xF0-0xF3 */ + {0x62, 0xC4}, {0x77, 0xA9}, {0x56, 0x31}, {0x4E, 0x3B}, /* 0xF4-0xF7 */ + {0x84, 0x57}, {0x67, 0xF1}, {0x52, 0xA9}, {0x86, 0xC0}, /* 0xF8-0xFB */ + {0x8D, 0x2E}, {0x94, 0xF8}, {0x7B, 0x51}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8B, 0x46}, {0x8B, 0x47}, {0x8B, 0x48}, {0x8B, 0x49}, /* 0x40-0x43 */ + {0x8B, 0x4A}, {0x8B, 0x4B}, {0x8B, 0x4C}, {0x8B, 0x4D}, /* 0x44-0x47 */ + {0x8B, 0x4E}, {0x8B, 0x4F}, {0x8B, 0x50}, {0x8B, 0x51}, /* 0x48-0x4B */ + {0x8B, 0x52}, {0x8B, 0x53}, {0x8B, 0x54}, {0x8B, 0x55}, /* 0x4C-0x4F */ + {0x8B, 0x56}, {0x8B, 0x57}, {0x8B, 0x58}, {0x8B, 0x59}, /* 0x50-0x53 */ + {0x8B, 0x5A}, {0x8B, 0x5B}, {0x8B, 0x5C}, {0x8B, 0x5D}, /* 0x54-0x57 */ + {0x8B, 0x5E}, {0x8B, 0x5F}, {0x8B, 0x60}, {0x8B, 0x61}, /* 0x58-0x5B */ + {0x8B, 0x62}, {0x8B, 0x63}, {0x8B, 0x64}, {0x8B, 0x65}, /* 0x5C-0x5F */ + {0x8B, 0x67}, {0x8B, 0x68}, {0x8B, 0x69}, {0x8B, 0x6A}, /* 0x60-0x63 */ + {0x8B, 0x6B}, {0x8B, 0x6D}, {0x8B, 0x6E}, {0x8B, 0x6F}, /* 0x64-0x67 */ + {0x8B, 0x70}, {0x8B, 0x71}, {0x8B, 0x72}, {0x8B, 0x73}, /* 0x68-0x6B */ + {0x8B, 0x74}, {0x8B, 0x75}, {0x8B, 0x76}, {0x8B, 0x77}, /* 0x6C-0x6F */ + {0x8B, 0x78}, {0x8B, 0x79}, {0x8B, 0x7A}, {0x8B, 0x7B}, /* 0x70-0x73 */ + {0x8B, 0x7C}, {0x8B, 0x7D}, {0x8B, 0x7E}, {0x8B, 0x7F}, /* 0x74-0x77 */ + {0x8B, 0x80}, {0x8B, 0x81}, {0x8B, 0x82}, {0x8B, 0x83}, /* 0x78-0x7B */ + {0x8B, 0x84}, {0x8B, 0x85}, {0x8B, 0x86}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8B, 0x87}, {0x8B, 0x88}, {0x8B, 0x89}, {0x8B, 0x8A}, /* 0x80-0x83 */ + {0x8B, 0x8B}, {0x8B, 0x8C}, {0x8B, 0x8D}, {0x8B, 0x8E}, /* 0x84-0x87 */ + {0x8B, 0x8F}, {0x8B, 0x90}, {0x8B, 0x91}, {0x8B, 0x92}, /* 0x88-0x8B */ + {0x8B, 0x93}, {0x8B, 0x94}, {0x8B, 0x95}, {0x8B, 0x96}, /* 0x8C-0x8F */ + {0x8B, 0x97}, {0x8B, 0x98}, {0x8B, 0x99}, {0x8B, 0x9A}, /* 0x90-0x93 */ + {0x8B, 0x9B}, {0x8B, 0x9C}, {0x8B, 0x9D}, {0x8B, 0x9E}, /* 0x94-0x97 */ + {0x8B, 0x9F}, {0x8B, 0xAC}, {0x8B, 0xB1}, {0x8B, 0xBB}, /* 0x98-0x9B */ + {0x8B, 0xC7}, {0x8B, 0xD0}, {0x8B, 0xEA}, {0x8C, 0x09}, /* 0x9C-0x9F */ + {0x8C, 0x1E}, {0x4F, 0x4F}, {0x6C, 0xE8}, {0x79, 0x5D}, /* 0xA0-0xA3 */ + {0x9A, 0x7B}, {0x62, 0x93}, {0x72, 0x2A}, {0x62, 0xFD}, /* 0xA4-0xA7 */ + {0x4E, 0x13}, {0x78, 0x16}, {0x8F, 0x6C}, {0x64, 0xB0}, /* 0xA8-0xAB */ + {0x8D, 0x5A}, {0x7B, 0xC6}, {0x68, 0x69}, {0x5E, 0x84}, /* 0xAC-0xAF */ + {0x88, 0xC5}, {0x59, 0x86}, {0x64, 0x9E}, {0x58, 0xEE}, /* 0xB0-0xB3 */ + {0x72, 0xB6}, {0x69, 0x0E}, {0x95, 0x25}, {0x8F, 0xFD}, /* 0xB4-0xB7 */ + {0x8D, 0x58}, {0x57, 0x60}, {0x7F, 0x00}, {0x8C, 0x06}, /* 0xB8-0xBB */ + {0x51, 0xC6}, {0x63, 0x49}, {0x62, 0xD9}, {0x53, 0x53}, /* 0xBC-0xBF */ + {0x68, 0x4C}, {0x74, 0x22}, {0x83, 0x01}, {0x91, 0x4C}, /* 0xC0-0xC3 */ + {0x55, 0x44}, {0x77, 0x40}, {0x70, 0x7C}, {0x6D, 0x4A}, /* 0xC4-0xC7 */ + {0x51, 0x79}, {0x54, 0xA8}, {0x8D, 0x44}, {0x59, 0xFF}, /* 0xC8-0xCB */ + {0x6E, 0xCB}, {0x6D, 0xC4}, {0x5B, 0x5C}, {0x7D, 0x2B}, /* 0xCC-0xCF */ + {0x4E, 0xD4}, {0x7C, 0x7D}, {0x6E, 0xD3}, {0x5B, 0x50}, /* 0xD0-0xD3 */ + {0x81, 0xEA}, {0x6E, 0x0D}, {0x5B, 0x57}, {0x9B, 0x03}, /* 0xD4-0xD7 */ + {0x68, 0xD5}, {0x8E, 0x2A}, {0x5B, 0x97}, {0x7E, 0xFC}, /* 0xD8-0xDB */ + {0x60, 0x3B}, {0x7E, 0xB5}, {0x90, 0xB9}, {0x8D, 0x70}, /* 0xDC-0xDF */ + {0x59, 0x4F}, {0x63, 0xCD}, {0x79, 0xDF}, {0x8D, 0xB3}, /* 0xE0-0xE3 */ + {0x53, 0x52}, {0x65, 0xCF}, {0x79, 0x56}, {0x8B, 0xC5}, /* 0xE4-0xE7 */ + {0x96, 0x3B}, {0x7E, 0xC4}, {0x94, 0xBB}, {0x7E, 0x82}, /* 0xE8-0xEB */ + {0x56, 0x34}, {0x91, 0x89}, {0x67, 0x00}, {0x7F, 0x6A}, /* 0xEC-0xEF */ + {0x5C, 0x0A}, {0x90, 0x75}, {0x66, 0x28}, {0x5D, 0xE6}, /* 0xF0-0xF3 */ + {0x4F, 0x50}, {0x67, 0xDE}, {0x50, 0x5A}, {0x4F, 0x5C}, /* 0xF4-0xF7 */ + {0x57, 0x50}, {0x5E, 0xA7}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8C, 0x38}, {0x8C, 0x39}, {0x8C, 0x3A}, {0x8C, 0x3B}, /* 0x40-0x43 */ + {0x8C, 0x3C}, {0x8C, 0x3D}, {0x8C, 0x3E}, {0x8C, 0x3F}, /* 0x44-0x47 */ + {0x8C, 0x40}, {0x8C, 0x42}, {0x8C, 0x43}, {0x8C, 0x44}, /* 0x48-0x4B */ + {0x8C, 0x45}, {0x8C, 0x48}, {0x8C, 0x4A}, {0x8C, 0x4B}, /* 0x4C-0x4F */ + {0x8C, 0x4D}, {0x8C, 0x4E}, {0x8C, 0x4F}, {0x8C, 0x50}, /* 0x50-0x53 */ + {0x8C, 0x51}, {0x8C, 0x52}, {0x8C, 0x53}, {0x8C, 0x54}, /* 0x54-0x57 */ + {0x8C, 0x56}, {0x8C, 0x57}, {0x8C, 0x58}, {0x8C, 0x59}, /* 0x58-0x5B */ + {0x8C, 0x5B}, {0x8C, 0x5C}, {0x8C, 0x5D}, {0x8C, 0x5E}, /* 0x5C-0x5F */ + {0x8C, 0x5F}, {0x8C, 0x60}, {0x8C, 0x63}, {0x8C, 0x64}, /* 0x60-0x63 */ + {0x8C, 0x65}, {0x8C, 0x66}, {0x8C, 0x67}, {0x8C, 0x68}, /* 0x64-0x67 */ + {0x8C, 0x69}, {0x8C, 0x6C}, {0x8C, 0x6D}, {0x8C, 0x6E}, /* 0x68-0x6B */ + {0x8C, 0x6F}, {0x8C, 0x70}, {0x8C, 0x71}, {0x8C, 0x72}, /* 0x6C-0x6F */ + {0x8C, 0x74}, {0x8C, 0x75}, {0x8C, 0x76}, {0x8C, 0x77}, /* 0x70-0x73 */ + {0x8C, 0x7B}, {0x8C, 0x7C}, {0x8C, 0x7D}, {0x8C, 0x7E}, /* 0x74-0x77 */ + {0x8C, 0x7F}, {0x8C, 0x80}, {0x8C, 0x81}, {0x8C, 0x83}, /* 0x78-0x7B */ + {0x8C, 0x84}, {0x8C, 0x86}, {0x8C, 0x87}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8C, 0x88}, {0x8C, 0x8B}, {0x8C, 0x8D}, {0x8C, 0x8E}, /* 0x80-0x83 */ + {0x8C, 0x8F}, {0x8C, 0x90}, {0x8C, 0x91}, {0x8C, 0x92}, /* 0x84-0x87 */ + {0x8C, 0x93}, {0x8C, 0x95}, {0x8C, 0x96}, {0x8C, 0x97}, /* 0x88-0x8B */ + {0x8C, 0x99}, {0x8C, 0x9A}, {0x8C, 0x9B}, {0x8C, 0x9C}, /* 0x8C-0x8F */ + {0x8C, 0x9D}, {0x8C, 0x9E}, {0x8C, 0x9F}, {0x8C, 0xA0}, /* 0x90-0x93 */ + {0x8C, 0xA1}, {0x8C, 0xA2}, {0x8C, 0xA3}, {0x8C, 0xA4}, /* 0x94-0x97 */ + {0x8C, 0xA5}, {0x8C, 0xA6}, {0x8C, 0xA7}, {0x8C, 0xA8}, /* 0x98-0x9B */ + {0x8C, 0xA9}, {0x8C, 0xAA}, {0x8C, 0xAB}, {0x8C, 0xAC}, /* 0x9C-0x9F */ + {0x8C, 0xAD}, {0x4E, 0x8D}, {0x4E, 0x0C}, {0x51, 0x40}, /* 0xA0-0xA3 */ + {0x4E, 0x10}, {0x5E, 0xFF}, {0x53, 0x45}, {0x4E, 0x15}, /* 0xA4-0xA7 */ + {0x4E, 0x98}, {0x4E, 0x1E}, {0x9B, 0x32}, {0x5B, 0x6C}, /* 0xA8-0xAB */ + {0x56, 0x69}, {0x4E, 0x28}, {0x79, 0xBA}, {0x4E, 0x3F}, /* 0xAC-0xAF */ + {0x53, 0x15}, {0x4E, 0x47}, {0x59, 0x2D}, {0x72, 0x3B}, /* 0xB0-0xB3 */ + {0x53, 0x6E}, {0x6C, 0x10}, {0x56, 0xDF}, {0x80, 0xE4}, /* 0xB4-0xB7 */ + {0x99, 0x97}, {0x6B, 0xD3}, {0x77, 0x7E}, {0x9F, 0x17}, /* 0xB8-0xBB */ + {0x4E, 0x36}, {0x4E, 0x9F}, {0x9F, 0x10}, {0x4E, 0x5C}, /* 0xBC-0xBF */ + {0x4E, 0x69}, {0x4E, 0x93}, {0x82, 0x88}, {0x5B, 0x5B}, /* 0xC0-0xC3 */ + {0x55, 0x6C}, {0x56, 0x0F}, {0x4E, 0xC4}, {0x53, 0x8D}, /* 0xC4-0xC7 */ + {0x53, 0x9D}, {0x53, 0xA3}, {0x53, 0xA5}, {0x53, 0xAE}, /* 0xC8-0xCB */ + {0x97, 0x65}, {0x8D, 0x5D}, {0x53, 0x1A}, {0x53, 0xF5}, /* 0xCC-0xCF */ + {0x53, 0x26}, {0x53, 0x2E}, {0x53, 0x3E}, {0x8D, 0x5C}, /* 0xD0-0xD3 */ + {0x53, 0x66}, {0x53, 0x63}, {0x52, 0x02}, {0x52, 0x08}, /* 0xD4-0xD7 */ + {0x52, 0x0E}, {0x52, 0x2D}, {0x52, 0x33}, {0x52, 0x3F}, /* 0xD8-0xDB */ + {0x52, 0x40}, {0x52, 0x4C}, {0x52, 0x5E}, {0x52, 0x61}, /* 0xDC-0xDF */ + {0x52, 0x5C}, {0x84, 0xAF}, {0x52, 0x7D}, {0x52, 0x82}, /* 0xE0-0xE3 */ + {0x52, 0x81}, {0x52, 0x90}, {0x52, 0x93}, {0x51, 0x82}, /* 0xE4-0xE7 */ + {0x7F, 0x54}, {0x4E, 0xBB}, {0x4E, 0xC3}, {0x4E, 0xC9}, /* 0xE8-0xEB */ + {0x4E, 0xC2}, {0x4E, 0xE8}, {0x4E, 0xE1}, {0x4E, 0xEB}, /* 0xEC-0xEF */ + {0x4E, 0xDE}, {0x4F, 0x1B}, {0x4E, 0xF3}, {0x4F, 0x22}, /* 0xF0-0xF3 */ + {0x4F, 0x64}, {0x4E, 0xF5}, {0x4F, 0x25}, {0x4F, 0x27}, /* 0xF4-0xF7 */ + {0x4F, 0x09}, {0x4F, 0x2B}, {0x4F, 0x5E}, {0x4F, 0x67}, /* 0xF8-0xFB */ + {0x65, 0x38}, {0x4F, 0x5A}, {0x4F, 0x5D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8C, 0xAE}, {0x8C, 0xAF}, {0x8C, 0xB0}, {0x8C, 0xB1}, /* 0x40-0x43 */ + {0x8C, 0xB2}, {0x8C, 0xB3}, {0x8C, 0xB4}, {0x8C, 0xB5}, /* 0x44-0x47 */ + {0x8C, 0xB6}, {0x8C, 0xB7}, {0x8C, 0xB8}, {0x8C, 0xB9}, /* 0x48-0x4B */ + {0x8C, 0xBA}, {0x8C, 0xBB}, {0x8C, 0xBC}, {0x8C, 0xBD}, /* 0x4C-0x4F */ + {0x8C, 0xBE}, {0x8C, 0xBF}, {0x8C, 0xC0}, {0x8C, 0xC1}, /* 0x50-0x53 */ + {0x8C, 0xC2}, {0x8C, 0xC3}, {0x8C, 0xC4}, {0x8C, 0xC5}, /* 0x54-0x57 */ + {0x8C, 0xC6}, {0x8C, 0xC7}, {0x8C, 0xC8}, {0x8C, 0xC9}, /* 0x58-0x5B */ + {0x8C, 0xCA}, {0x8C, 0xCB}, {0x8C, 0xCC}, {0x8C, 0xCD}, /* 0x5C-0x5F */ + {0x8C, 0xCE}, {0x8C, 0xCF}, {0x8C, 0xD0}, {0x8C, 0xD1}, /* 0x60-0x63 */ + {0x8C, 0xD2}, {0x8C, 0xD3}, {0x8C, 0xD4}, {0x8C, 0xD5}, /* 0x64-0x67 */ + {0x8C, 0xD6}, {0x8C, 0xD7}, {0x8C, 0xD8}, {0x8C, 0xD9}, /* 0x68-0x6B */ + {0x8C, 0xDA}, {0x8C, 0xDB}, {0x8C, 0xDC}, {0x8C, 0xDD}, /* 0x6C-0x6F */ + {0x8C, 0xDE}, {0x8C, 0xDF}, {0x8C, 0xE0}, {0x8C, 0xE1}, /* 0x70-0x73 */ + {0x8C, 0xE2}, {0x8C, 0xE3}, {0x8C, 0xE4}, {0x8C, 0xE5}, /* 0x74-0x77 */ + {0x8C, 0xE6}, {0x8C, 0xE7}, {0x8C, 0xE8}, {0x8C, 0xE9}, /* 0x78-0x7B */ + {0x8C, 0xEA}, {0x8C, 0xEB}, {0x8C, 0xEC}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8C, 0xED}, {0x8C, 0xEE}, {0x8C, 0xEF}, {0x8C, 0xF0}, /* 0x80-0x83 */ + {0x8C, 0xF1}, {0x8C, 0xF2}, {0x8C, 0xF3}, {0x8C, 0xF4}, /* 0x84-0x87 */ + {0x8C, 0xF5}, {0x8C, 0xF6}, {0x8C, 0xF7}, {0x8C, 0xF8}, /* 0x88-0x8B */ + {0x8C, 0xF9}, {0x8C, 0xFA}, {0x8C, 0xFB}, {0x8C, 0xFC}, /* 0x8C-0x8F */ + {0x8C, 0xFD}, {0x8C, 0xFE}, {0x8C, 0xFF}, {0x8D, 0x00}, /* 0x90-0x93 */ + {0x8D, 0x01}, {0x8D, 0x02}, {0x8D, 0x03}, {0x8D, 0x04}, /* 0x94-0x97 */ + {0x8D, 0x05}, {0x8D, 0x06}, {0x8D, 0x07}, {0x8D, 0x08}, /* 0x98-0x9B */ + {0x8D, 0x09}, {0x8D, 0x0A}, {0x8D, 0x0B}, {0x8D, 0x0C}, /* 0x9C-0x9F */ + {0x8D, 0x0D}, {0x4F, 0x5F}, {0x4F, 0x57}, {0x4F, 0x32}, /* 0xA0-0xA3 */ + {0x4F, 0x3D}, {0x4F, 0x76}, {0x4F, 0x74}, {0x4F, 0x91}, /* 0xA4-0xA7 */ + {0x4F, 0x89}, {0x4F, 0x83}, {0x4F, 0x8F}, {0x4F, 0x7E}, /* 0xA8-0xAB */ + {0x4F, 0x7B}, {0x4F, 0xAA}, {0x4F, 0x7C}, {0x4F, 0xAC}, /* 0xAC-0xAF */ + {0x4F, 0x94}, {0x4F, 0xE6}, {0x4F, 0xE8}, {0x4F, 0xEA}, /* 0xB0-0xB3 */ + {0x4F, 0xC5}, {0x4F, 0xDA}, {0x4F, 0xE3}, {0x4F, 0xDC}, /* 0xB4-0xB7 */ + {0x4F, 0xD1}, {0x4F, 0xDF}, {0x4F, 0xF8}, {0x50, 0x29}, /* 0xB8-0xBB */ + {0x50, 0x4C}, {0x4F, 0xF3}, {0x50, 0x2C}, {0x50, 0x0F}, /* 0xBC-0xBF */ + {0x50, 0x2E}, {0x50, 0x2D}, {0x4F, 0xFE}, {0x50, 0x1C}, /* 0xC0-0xC3 */ + {0x50, 0x0C}, {0x50, 0x25}, {0x50, 0x28}, {0x50, 0x7E}, /* 0xC4-0xC7 */ + {0x50, 0x43}, {0x50, 0x55}, {0x50, 0x48}, {0x50, 0x4E}, /* 0xC8-0xCB */ + {0x50, 0x6C}, {0x50, 0x7B}, {0x50, 0xA5}, {0x50, 0xA7}, /* 0xCC-0xCF */ + {0x50, 0xA9}, {0x50, 0xBA}, {0x50, 0xD6}, {0x51, 0x06}, /* 0xD0-0xD3 */ + {0x50, 0xED}, {0x50, 0xEC}, {0x50, 0xE6}, {0x50, 0xEE}, /* 0xD4-0xD7 */ + {0x51, 0x07}, {0x51, 0x0B}, {0x4E, 0xDD}, {0x6C, 0x3D}, /* 0xD8-0xDB */ + {0x4F, 0x58}, {0x4F, 0x65}, {0x4F, 0xCE}, {0x9F, 0xA0}, /* 0xDC-0xDF */ + {0x6C, 0x46}, {0x7C, 0x74}, {0x51, 0x6E}, {0x5D, 0xFD}, /* 0xE0-0xE3 */ + {0x9E, 0xC9}, {0x99, 0x98}, {0x51, 0x81}, {0x59, 0x14}, /* 0xE4-0xE7 */ + {0x52, 0xF9}, {0x53, 0x0D}, {0x8A, 0x07}, {0x53, 0x10}, /* 0xE8-0xEB */ + {0x51, 0xEB}, {0x59, 0x19}, {0x51, 0x55}, {0x4E, 0xA0}, /* 0xEC-0xEF */ + {0x51, 0x56}, {0x4E, 0xB3}, {0x88, 0x6E}, {0x88, 0xA4}, /* 0xF0-0xF3 */ + {0x4E, 0xB5}, {0x81, 0x14}, {0x88, 0xD2}, {0x79, 0x80}, /* 0xF4-0xF7 */ + {0x5B, 0x34}, {0x88, 0x03}, {0x7F, 0xB8}, {0x51, 0xAB}, /* 0xF8-0xFB */ + {0x51, 0xB1}, {0x51, 0xBD}, {0x51, 0xBC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8D, 0x0E}, {0x8D, 0x0F}, {0x8D, 0x10}, {0x8D, 0x11}, /* 0x40-0x43 */ + {0x8D, 0x12}, {0x8D, 0x13}, {0x8D, 0x14}, {0x8D, 0x15}, /* 0x44-0x47 */ + {0x8D, 0x16}, {0x8D, 0x17}, {0x8D, 0x18}, {0x8D, 0x19}, /* 0x48-0x4B */ + {0x8D, 0x1A}, {0x8D, 0x1B}, {0x8D, 0x1C}, {0x8D, 0x20}, /* 0x4C-0x4F */ + {0x8D, 0x51}, {0x8D, 0x52}, {0x8D, 0x57}, {0x8D, 0x5F}, /* 0x50-0x53 */ + {0x8D, 0x65}, {0x8D, 0x68}, {0x8D, 0x69}, {0x8D, 0x6A}, /* 0x54-0x57 */ + {0x8D, 0x6C}, {0x8D, 0x6E}, {0x8D, 0x6F}, {0x8D, 0x71}, /* 0x58-0x5B */ + {0x8D, 0x72}, {0x8D, 0x78}, {0x8D, 0x79}, {0x8D, 0x7A}, /* 0x5C-0x5F */ + {0x8D, 0x7B}, {0x8D, 0x7C}, {0x8D, 0x7D}, {0x8D, 0x7E}, /* 0x60-0x63 */ + {0x8D, 0x7F}, {0x8D, 0x80}, {0x8D, 0x82}, {0x8D, 0x83}, /* 0x64-0x67 */ + {0x8D, 0x86}, {0x8D, 0x87}, {0x8D, 0x88}, {0x8D, 0x89}, /* 0x68-0x6B */ + {0x8D, 0x8C}, {0x8D, 0x8D}, {0x8D, 0x8E}, {0x8D, 0x8F}, /* 0x6C-0x6F */ + {0x8D, 0x90}, {0x8D, 0x92}, {0x8D, 0x93}, {0x8D, 0x95}, /* 0x70-0x73 */ + {0x8D, 0x96}, {0x8D, 0x97}, {0x8D, 0x98}, {0x8D, 0x99}, /* 0x74-0x77 */ + {0x8D, 0x9A}, {0x8D, 0x9B}, {0x8D, 0x9C}, {0x8D, 0x9D}, /* 0x78-0x7B */ + {0x8D, 0x9E}, {0x8D, 0xA0}, {0x8D, 0xA1}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8D, 0xA2}, {0x8D, 0xA4}, {0x8D, 0xA5}, {0x8D, 0xA6}, /* 0x80-0x83 */ + {0x8D, 0xA7}, {0x8D, 0xA8}, {0x8D, 0xA9}, {0x8D, 0xAA}, /* 0x84-0x87 */ + {0x8D, 0xAB}, {0x8D, 0xAC}, {0x8D, 0xAD}, {0x8D, 0xAE}, /* 0x88-0x8B */ + {0x8D, 0xAF}, {0x8D, 0xB0}, {0x8D, 0xB2}, {0x8D, 0xB6}, /* 0x8C-0x8F */ + {0x8D, 0xB7}, {0x8D, 0xB9}, {0x8D, 0xBB}, {0x8D, 0xBD}, /* 0x90-0x93 */ + {0x8D, 0xC0}, {0x8D, 0xC1}, {0x8D, 0xC2}, {0x8D, 0xC5}, /* 0x94-0x97 */ + {0x8D, 0xC7}, {0x8D, 0xC8}, {0x8D, 0xC9}, {0x8D, 0xCA}, /* 0x98-0x9B */ + {0x8D, 0xCD}, {0x8D, 0xD0}, {0x8D, 0xD2}, {0x8D, 0xD3}, /* 0x9C-0x9F */ + {0x8D, 0xD4}, {0x51, 0xC7}, {0x51, 0x96}, {0x51, 0xA2}, /* 0xA0-0xA3 */ + {0x51, 0xA5}, {0x8B, 0xA0}, {0x8B, 0xA6}, {0x8B, 0xA7}, /* 0xA4-0xA7 */ + {0x8B, 0xAA}, {0x8B, 0xB4}, {0x8B, 0xB5}, {0x8B, 0xB7}, /* 0xA8-0xAB */ + {0x8B, 0xC2}, {0x8B, 0xC3}, {0x8B, 0xCB}, {0x8B, 0xCF}, /* 0xAC-0xAF */ + {0x8B, 0xCE}, {0x8B, 0xD2}, {0x8B, 0xD3}, {0x8B, 0xD4}, /* 0xB0-0xB3 */ + {0x8B, 0xD6}, {0x8B, 0xD8}, {0x8B, 0xD9}, {0x8B, 0xDC}, /* 0xB4-0xB7 */ + {0x8B, 0xDF}, {0x8B, 0xE0}, {0x8B, 0xE4}, {0x8B, 0xE8}, /* 0xB8-0xBB */ + {0x8B, 0xE9}, {0x8B, 0xEE}, {0x8B, 0xF0}, {0x8B, 0xF3}, /* 0xBC-0xBF */ + {0x8B, 0xF6}, {0x8B, 0xF9}, {0x8B, 0xFC}, {0x8B, 0xFF}, /* 0xC0-0xC3 */ + {0x8C, 0x00}, {0x8C, 0x02}, {0x8C, 0x04}, {0x8C, 0x07}, /* 0xC4-0xC7 */ + {0x8C, 0x0C}, {0x8C, 0x0F}, {0x8C, 0x11}, {0x8C, 0x12}, /* 0xC8-0xCB */ + {0x8C, 0x14}, {0x8C, 0x15}, {0x8C, 0x16}, {0x8C, 0x19}, /* 0xCC-0xCF */ + {0x8C, 0x1B}, {0x8C, 0x18}, {0x8C, 0x1D}, {0x8C, 0x1F}, /* 0xD0-0xD3 */ + {0x8C, 0x20}, {0x8C, 0x21}, {0x8C, 0x25}, {0x8C, 0x27}, /* 0xD4-0xD7 */ + {0x8C, 0x2A}, {0x8C, 0x2B}, {0x8C, 0x2E}, {0x8C, 0x2F}, /* 0xD8-0xDB */ + {0x8C, 0x32}, {0x8C, 0x33}, {0x8C, 0x35}, {0x8C, 0x36}, /* 0xDC-0xDF */ + {0x53, 0x69}, {0x53, 0x7A}, {0x96, 0x1D}, {0x96, 0x22}, /* 0xE0-0xE3 */ + {0x96, 0x21}, {0x96, 0x31}, {0x96, 0x2A}, {0x96, 0x3D}, /* 0xE4-0xE7 */ + {0x96, 0x3C}, {0x96, 0x42}, {0x96, 0x49}, {0x96, 0x54}, /* 0xE8-0xEB */ + {0x96, 0x5F}, {0x96, 0x67}, {0x96, 0x6C}, {0x96, 0x72}, /* 0xEC-0xEF */ + {0x96, 0x74}, {0x96, 0x88}, {0x96, 0x8D}, {0x96, 0x97}, /* 0xF0-0xF3 */ + {0x96, 0xB0}, {0x90, 0x97}, {0x90, 0x9B}, {0x90, 0x9D}, /* 0xF4-0xF7 */ + {0x90, 0x99}, {0x90, 0xAC}, {0x90, 0xA1}, {0x90, 0xB4}, /* 0xF8-0xFB */ + {0x90, 0xB3}, {0x90, 0xB6}, {0x90, 0xBA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8D, 0xD5}, {0x8D, 0xD8}, {0x8D, 0xD9}, {0x8D, 0xDC}, /* 0x40-0x43 */ + {0x8D, 0xE0}, {0x8D, 0xE1}, {0x8D, 0xE2}, {0x8D, 0xE5}, /* 0x44-0x47 */ + {0x8D, 0xE6}, {0x8D, 0xE7}, {0x8D, 0xE9}, {0x8D, 0xED}, /* 0x48-0x4B */ + {0x8D, 0xEE}, {0x8D, 0xF0}, {0x8D, 0xF1}, {0x8D, 0xF2}, /* 0x4C-0x4F */ + {0x8D, 0xF4}, {0x8D, 0xF6}, {0x8D, 0xFC}, {0x8D, 0xFE}, /* 0x50-0x53 */ + {0x8D, 0xFF}, {0x8E, 0x00}, {0x8E, 0x01}, {0x8E, 0x02}, /* 0x54-0x57 */ + {0x8E, 0x03}, {0x8E, 0x04}, {0x8E, 0x06}, {0x8E, 0x07}, /* 0x58-0x5B */ + {0x8E, 0x08}, {0x8E, 0x0B}, {0x8E, 0x0D}, {0x8E, 0x0E}, /* 0x5C-0x5F */ + {0x8E, 0x10}, {0x8E, 0x11}, {0x8E, 0x12}, {0x8E, 0x13}, /* 0x60-0x63 */ + {0x8E, 0x15}, {0x8E, 0x16}, {0x8E, 0x17}, {0x8E, 0x18}, /* 0x64-0x67 */ + {0x8E, 0x19}, {0x8E, 0x1A}, {0x8E, 0x1B}, {0x8E, 0x1C}, /* 0x68-0x6B */ + {0x8E, 0x20}, {0x8E, 0x21}, {0x8E, 0x24}, {0x8E, 0x25}, /* 0x6C-0x6F */ + {0x8E, 0x26}, {0x8E, 0x27}, {0x8E, 0x28}, {0x8E, 0x2B}, /* 0x70-0x73 */ + {0x8E, 0x2D}, {0x8E, 0x30}, {0x8E, 0x32}, {0x8E, 0x33}, /* 0x74-0x77 */ + {0x8E, 0x34}, {0x8E, 0x36}, {0x8E, 0x37}, {0x8E, 0x38}, /* 0x78-0x7B */ + {0x8E, 0x3B}, {0x8E, 0x3C}, {0x8E, 0x3E}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8E, 0x3F}, {0x8E, 0x43}, {0x8E, 0x45}, {0x8E, 0x46}, /* 0x80-0x83 */ + {0x8E, 0x4C}, {0x8E, 0x4D}, {0x8E, 0x4E}, {0x8E, 0x4F}, /* 0x84-0x87 */ + {0x8E, 0x50}, {0x8E, 0x53}, {0x8E, 0x54}, {0x8E, 0x55}, /* 0x88-0x8B */ + {0x8E, 0x56}, {0x8E, 0x57}, {0x8E, 0x58}, {0x8E, 0x5A}, /* 0x8C-0x8F */ + {0x8E, 0x5B}, {0x8E, 0x5C}, {0x8E, 0x5D}, {0x8E, 0x5E}, /* 0x90-0x93 */ + {0x8E, 0x5F}, {0x8E, 0x60}, {0x8E, 0x61}, {0x8E, 0x62}, /* 0x94-0x97 */ + {0x8E, 0x63}, {0x8E, 0x64}, {0x8E, 0x65}, {0x8E, 0x67}, /* 0x98-0x9B */ + {0x8E, 0x68}, {0x8E, 0x6A}, {0x8E, 0x6B}, {0x8E, 0x6E}, /* 0x9C-0x9F */ + {0x8E, 0x71}, {0x90, 0xB8}, {0x90, 0xB0}, {0x90, 0xCF}, /* 0xA0-0xA3 */ + {0x90, 0xC5}, {0x90, 0xBE}, {0x90, 0xD0}, {0x90, 0xC4}, /* 0xA4-0xA7 */ + {0x90, 0xC7}, {0x90, 0xD3}, {0x90, 0xE6}, {0x90, 0xE2}, /* 0xA8-0xAB */ + {0x90, 0xDC}, {0x90, 0xD7}, {0x90, 0xDB}, {0x90, 0xEB}, /* 0xAC-0xAF */ + {0x90, 0xEF}, {0x90, 0xFE}, {0x91, 0x04}, {0x91, 0x22}, /* 0xB0-0xB3 */ + {0x91, 0x1E}, {0x91, 0x23}, {0x91, 0x31}, {0x91, 0x2F}, /* 0xB4-0xB7 */ + {0x91, 0x39}, {0x91, 0x43}, {0x91, 0x46}, {0x52, 0x0D}, /* 0xB8-0xBB */ + {0x59, 0x42}, {0x52, 0xA2}, {0x52, 0xAC}, {0x52, 0xAD}, /* 0xBC-0xBF */ + {0x52, 0xBE}, {0x54, 0xFF}, {0x52, 0xD0}, {0x52, 0xD6}, /* 0xC0-0xC3 */ + {0x52, 0xF0}, {0x53, 0xDF}, {0x71, 0xEE}, {0x77, 0xCD}, /* 0xC4-0xC7 */ + {0x5E, 0xF4}, {0x51, 0xF5}, {0x51, 0xFC}, {0x9B, 0x2F}, /* 0xC8-0xCB */ + {0x53, 0xB6}, {0x5F, 0x01}, {0x75, 0x5A}, {0x5D, 0xEF}, /* 0xCC-0xCF */ + {0x57, 0x4C}, {0x57, 0xA9}, {0x57, 0xA1}, {0x58, 0x7E}, /* 0xD0-0xD3 */ + {0x58, 0xBC}, {0x58, 0xC5}, {0x58, 0xD1}, {0x57, 0x29}, /* 0xD4-0xD7 */ + {0x57, 0x2C}, {0x57, 0x2A}, {0x57, 0x33}, {0x57, 0x39}, /* 0xD8-0xDB */ + {0x57, 0x2E}, {0x57, 0x2F}, {0x57, 0x5C}, {0x57, 0x3B}, /* 0xDC-0xDF */ + {0x57, 0x42}, {0x57, 0x69}, {0x57, 0x85}, {0x57, 0x6B}, /* 0xE0-0xE3 */ + {0x57, 0x86}, {0x57, 0x7C}, {0x57, 0x7B}, {0x57, 0x68}, /* 0xE4-0xE7 */ + {0x57, 0x6D}, {0x57, 0x76}, {0x57, 0x73}, {0x57, 0xAD}, /* 0xE8-0xEB */ + {0x57, 0xA4}, {0x57, 0x8C}, {0x57, 0xB2}, {0x57, 0xCF}, /* 0xEC-0xEF */ + {0x57, 0xA7}, {0x57, 0xB4}, {0x57, 0x93}, {0x57, 0xA0}, /* 0xF0-0xF3 */ + {0x57, 0xD5}, {0x57, 0xD8}, {0x57, 0xDA}, {0x57, 0xD9}, /* 0xF4-0xF7 */ + {0x57, 0xD2}, {0x57, 0xB8}, {0x57, 0xF4}, {0x57, 0xEF}, /* 0xF8-0xFB */ + {0x57, 0xF8}, {0x57, 0xE4}, {0x57, 0xDD}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8E, 0x73}, {0x8E, 0x75}, {0x8E, 0x77}, {0x8E, 0x78}, /* 0x40-0x43 */ + {0x8E, 0x79}, {0x8E, 0x7A}, {0x8E, 0x7B}, {0x8E, 0x7D}, /* 0x44-0x47 */ + {0x8E, 0x7E}, {0x8E, 0x80}, {0x8E, 0x82}, {0x8E, 0x83}, /* 0x48-0x4B */ + {0x8E, 0x84}, {0x8E, 0x86}, {0x8E, 0x88}, {0x8E, 0x89}, /* 0x4C-0x4F */ + {0x8E, 0x8A}, {0x8E, 0x8B}, {0x8E, 0x8C}, {0x8E, 0x8D}, /* 0x50-0x53 */ + {0x8E, 0x8E}, {0x8E, 0x91}, {0x8E, 0x92}, {0x8E, 0x93}, /* 0x54-0x57 */ + {0x8E, 0x95}, {0x8E, 0x96}, {0x8E, 0x97}, {0x8E, 0x98}, /* 0x58-0x5B */ + {0x8E, 0x99}, {0x8E, 0x9A}, {0x8E, 0x9B}, {0x8E, 0x9D}, /* 0x5C-0x5F */ + {0x8E, 0x9F}, {0x8E, 0xA0}, {0x8E, 0xA1}, {0x8E, 0xA2}, /* 0x60-0x63 */ + {0x8E, 0xA3}, {0x8E, 0xA4}, {0x8E, 0xA5}, {0x8E, 0xA6}, /* 0x64-0x67 */ + {0x8E, 0xA7}, {0x8E, 0xA8}, {0x8E, 0xA9}, {0x8E, 0xAA}, /* 0x68-0x6B */ + {0x8E, 0xAD}, {0x8E, 0xAE}, {0x8E, 0xB0}, {0x8E, 0xB1}, /* 0x6C-0x6F */ + {0x8E, 0xB3}, {0x8E, 0xB4}, {0x8E, 0xB5}, {0x8E, 0xB6}, /* 0x70-0x73 */ + {0x8E, 0xB7}, {0x8E, 0xB8}, {0x8E, 0xB9}, {0x8E, 0xBB}, /* 0x74-0x77 */ + {0x8E, 0xBC}, {0x8E, 0xBD}, {0x8E, 0xBE}, {0x8E, 0xBF}, /* 0x78-0x7B */ + {0x8E, 0xC0}, {0x8E, 0xC1}, {0x8E, 0xC2}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8E, 0xC3}, {0x8E, 0xC4}, {0x8E, 0xC5}, {0x8E, 0xC6}, /* 0x80-0x83 */ + {0x8E, 0xC7}, {0x8E, 0xC8}, {0x8E, 0xC9}, {0x8E, 0xCA}, /* 0x84-0x87 */ + {0x8E, 0xCB}, {0x8E, 0xCC}, {0x8E, 0xCD}, {0x8E, 0xCF}, /* 0x88-0x8B */ + {0x8E, 0xD0}, {0x8E, 0xD1}, {0x8E, 0xD2}, {0x8E, 0xD3}, /* 0x8C-0x8F */ + {0x8E, 0xD4}, {0x8E, 0xD5}, {0x8E, 0xD6}, {0x8E, 0xD7}, /* 0x90-0x93 */ + {0x8E, 0xD8}, {0x8E, 0xD9}, {0x8E, 0xDA}, {0x8E, 0xDB}, /* 0x94-0x97 */ + {0x8E, 0xDC}, {0x8E, 0xDD}, {0x8E, 0xDE}, {0x8E, 0xDF}, /* 0x98-0x9B */ + {0x8E, 0xE0}, {0x8E, 0xE1}, {0x8E, 0xE2}, {0x8E, 0xE3}, /* 0x9C-0x9F */ + {0x8E, 0xE4}, {0x58, 0x0B}, {0x58, 0x0D}, {0x57, 0xFD}, /* 0xA0-0xA3 */ + {0x57, 0xED}, {0x58, 0x00}, {0x58, 0x1E}, {0x58, 0x19}, /* 0xA4-0xA7 */ + {0x58, 0x44}, {0x58, 0x20}, {0x58, 0x65}, {0x58, 0x6C}, /* 0xA8-0xAB */ + {0x58, 0x81}, {0x58, 0x89}, {0x58, 0x9A}, {0x58, 0x80}, /* 0xAC-0xAF */ + {0x99, 0xA8}, {0x9F, 0x19}, {0x61, 0xFF}, {0x82, 0x79}, /* 0xB0-0xB3 */ + {0x82, 0x7D}, {0x82, 0x7F}, {0x82, 0x8F}, {0x82, 0x8A}, /* 0xB4-0xB7 */ + {0x82, 0xA8}, {0x82, 0x84}, {0x82, 0x8E}, {0x82, 0x91}, /* 0xB8-0xBB */ + {0x82, 0x97}, {0x82, 0x99}, {0x82, 0xAB}, {0x82, 0xB8}, /* 0xBC-0xBF */ + {0x82, 0xBE}, {0x82, 0xB0}, {0x82, 0xC8}, {0x82, 0xCA}, /* 0xC0-0xC3 */ + {0x82, 0xE3}, {0x82, 0x98}, {0x82, 0xB7}, {0x82, 0xAE}, /* 0xC4-0xC7 */ + {0x82, 0xCB}, {0x82, 0xCC}, {0x82, 0xC1}, {0x82, 0xA9}, /* 0xC8-0xCB */ + {0x82, 0xB4}, {0x82, 0xA1}, {0x82, 0xAA}, {0x82, 0x9F}, /* 0xCC-0xCF */ + {0x82, 0xC4}, {0x82, 0xCE}, {0x82, 0xA4}, {0x82, 0xE1}, /* 0xD0-0xD3 */ + {0x83, 0x09}, {0x82, 0xF7}, {0x82, 0xE4}, {0x83, 0x0F}, /* 0xD4-0xD7 */ + {0x83, 0x07}, {0x82, 0xDC}, {0x82, 0xF4}, {0x82, 0xD2}, /* 0xD8-0xDB */ + {0x82, 0xD8}, {0x83, 0x0C}, {0x82, 0xFB}, {0x82, 0xD3}, /* 0xDC-0xDF */ + {0x83, 0x11}, {0x83, 0x1A}, {0x83, 0x06}, {0x83, 0x14}, /* 0xE0-0xE3 */ + {0x83, 0x15}, {0x82, 0xE0}, {0x82, 0xD5}, {0x83, 0x1C}, /* 0xE4-0xE7 */ + {0x83, 0x51}, {0x83, 0x5B}, {0x83, 0x5C}, {0x83, 0x08}, /* 0xE8-0xEB */ + {0x83, 0x92}, {0x83, 0x3C}, {0x83, 0x34}, {0x83, 0x31}, /* 0xEC-0xEF */ + {0x83, 0x9B}, {0x83, 0x5E}, {0x83, 0x2F}, {0x83, 0x4F}, /* 0xF0-0xF3 */ + {0x83, 0x47}, {0x83, 0x43}, {0x83, 0x5F}, {0x83, 0x40}, /* 0xF4-0xF7 */ + {0x83, 0x17}, {0x83, 0x60}, {0x83, 0x2D}, {0x83, 0x3A}, /* 0xF8-0xFB */ + {0x83, 0x33}, {0x83, 0x66}, {0x83, 0x65}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8E, 0xE5}, {0x8E, 0xE6}, {0x8E, 0xE7}, {0x8E, 0xE8}, /* 0x40-0x43 */ + {0x8E, 0xE9}, {0x8E, 0xEA}, {0x8E, 0xEB}, {0x8E, 0xEC}, /* 0x44-0x47 */ + {0x8E, 0xED}, {0x8E, 0xEE}, {0x8E, 0xEF}, {0x8E, 0xF0}, /* 0x48-0x4B */ + {0x8E, 0xF1}, {0x8E, 0xF2}, {0x8E, 0xF3}, {0x8E, 0xF4}, /* 0x4C-0x4F */ + {0x8E, 0xF5}, {0x8E, 0xF6}, {0x8E, 0xF7}, {0x8E, 0xF8}, /* 0x50-0x53 */ + {0x8E, 0xF9}, {0x8E, 0xFA}, {0x8E, 0xFB}, {0x8E, 0xFC}, /* 0x54-0x57 */ + {0x8E, 0xFD}, {0x8E, 0xFE}, {0x8E, 0xFF}, {0x8F, 0x00}, /* 0x58-0x5B */ + {0x8F, 0x01}, {0x8F, 0x02}, {0x8F, 0x03}, {0x8F, 0x04}, /* 0x5C-0x5F */ + {0x8F, 0x05}, {0x8F, 0x06}, {0x8F, 0x07}, {0x8F, 0x08}, /* 0x60-0x63 */ + {0x8F, 0x09}, {0x8F, 0x0A}, {0x8F, 0x0B}, {0x8F, 0x0C}, /* 0x64-0x67 */ + {0x8F, 0x0D}, {0x8F, 0x0E}, {0x8F, 0x0F}, {0x8F, 0x10}, /* 0x68-0x6B */ + {0x8F, 0x11}, {0x8F, 0x12}, {0x8F, 0x13}, {0x8F, 0x14}, /* 0x6C-0x6F */ + {0x8F, 0x15}, {0x8F, 0x16}, {0x8F, 0x17}, {0x8F, 0x18}, /* 0x70-0x73 */ + {0x8F, 0x19}, {0x8F, 0x1A}, {0x8F, 0x1B}, {0x8F, 0x1C}, /* 0x74-0x77 */ + {0x8F, 0x1D}, {0x8F, 0x1E}, {0x8F, 0x1F}, {0x8F, 0x20}, /* 0x78-0x7B */ + {0x8F, 0x21}, {0x8F, 0x22}, {0x8F, 0x23}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8F, 0x24}, {0x8F, 0x25}, {0x8F, 0x26}, {0x8F, 0x27}, /* 0x80-0x83 */ + {0x8F, 0x28}, {0x8F, 0x29}, {0x8F, 0x2A}, {0x8F, 0x2B}, /* 0x84-0x87 */ + {0x8F, 0x2C}, {0x8F, 0x2D}, {0x8F, 0x2E}, {0x8F, 0x2F}, /* 0x88-0x8B */ + {0x8F, 0x30}, {0x8F, 0x31}, {0x8F, 0x32}, {0x8F, 0x33}, /* 0x8C-0x8F */ + {0x8F, 0x34}, {0x8F, 0x35}, {0x8F, 0x36}, {0x8F, 0x37}, /* 0x90-0x93 */ + {0x8F, 0x38}, {0x8F, 0x39}, {0x8F, 0x3A}, {0x8F, 0x3B}, /* 0x94-0x97 */ + {0x8F, 0x3C}, {0x8F, 0x3D}, {0x8F, 0x3E}, {0x8F, 0x3F}, /* 0x98-0x9B */ + {0x8F, 0x40}, {0x8F, 0x41}, {0x8F, 0x42}, {0x8F, 0x43}, /* 0x9C-0x9F */ + {0x8F, 0x44}, {0x83, 0x68}, {0x83, 0x1B}, {0x83, 0x69}, /* 0xA0-0xA3 */ + {0x83, 0x6C}, {0x83, 0x6A}, {0x83, 0x6D}, {0x83, 0x6E}, /* 0xA4-0xA7 */ + {0x83, 0xB0}, {0x83, 0x78}, {0x83, 0xB3}, {0x83, 0xB4}, /* 0xA8-0xAB */ + {0x83, 0xA0}, {0x83, 0xAA}, {0x83, 0x93}, {0x83, 0x9C}, /* 0xAC-0xAF */ + {0x83, 0x85}, {0x83, 0x7C}, {0x83, 0xB6}, {0x83, 0xA9}, /* 0xB0-0xB3 */ + {0x83, 0x7D}, {0x83, 0xB8}, {0x83, 0x7B}, {0x83, 0x98}, /* 0xB4-0xB7 */ + {0x83, 0x9E}, {0x83, 0xA8}, {0x83, 0xBA}, {0x83, 0xBC}, /* 0xB8-0xBB */ + {0x83, 0xC1}, {0x84, 0x01}, {0x83, 0xE5}, {0x83, 0xD8}, /* 0xBC-0xBF */ + {0x58, 0x07}, {0x84, 0x18}, {0x84, 0x0B}, {0x83, 0xDD}, /* 0xC0-0xC3 */ + {0x83, 0xFD}, {0x83, 0xD6}, {0x84, 0x1C}, {0x84, 0x38}, /* 0xC4-0xC7 */ + {0x84, 0x11}, {0x84, 0x06}, {0x83, 0xD4}, {0x83, 0xDF}, /* 0xC8-0xCB */ + {0x84, 0x0F}, {0x84, 0x03}, {0x83, 0xF8}, {0x83, 0xF9}, /* 0xCC-0xCF */ + {0x83, 0xEA}, {0x83, 0xC5}, {0x83, 0xC0}, {0x84, 0x26}, /* 0xD0-0xD3 */ + {0x83, 0xF0}, {0x83, 0xE1}, {0x84, 0x5C}, {0x84, 0x51}, /* 0xD4-0xD7 */ + {0x84, 0x5A}, {0x84, 0x59}, {0x84, 0x73}, {0x84, 0x87}, /* 0xD8-0xDB */ + {0x84, 0x88}, {0x84, 0x7A}, {0x84, 0x89}, {0x84, 0x78}, /* 0xDC-0xDF */ + {0x84, 0x3C}, {0x84, 0x46}, {0x84, 0x69}, {0x84, 0x76}, /* 0xE0-0xE3 */ + {0x84, 0x8C}, {0x84, 0x8E}, {0x84, 0x31}, {0x84, 0x6D}, /* 0xE4-0xE7 */ + {0x84, 0xC1}, {0x84, 0xCD}, {0x84, 0xD0}, {0x84, 0xE6}, /* 0xE8-0xEB */ + {0x84, 0xBD}, {0x84, 0xD3}, {0x84, 0xCA}, {0x84, 0xBF}, /* 0xEC-0xEF */ + {0x84, 0xBA}, {0x84, 0xE0}, {0x84, 0xA1}, {0x84, 0xB9}, /* 0xF0-0xF3 */ + {0x84, 0xB4}, {0x84, 0x97}, {0x84, 0xE5}, {0x84, 0xE3}, /* 0xF4-0xF7 */ + {0x85, 0x0C}, {0x75, 0x0D}, {0x85, 0x38}, {0x84, 0xF0}, /* 0xF8-0xFB */ + {0x85, 0x39}, {0x85, 0x1F}, {0x85, 0x3A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8F, 0x45}, {0x8F, 0x46}, {0x8F, 0x47}, {0x8F, 0x48}, /* 0x40-0x43 */ + {0x8F, 0x49}, {0x8F, 0x4A}, {0x8F, 0x4B}, {0x8F, 0x4C}, /* 0x44-0x47 */ + {0x8F, 0x4D}, {0x8F, 0x4E}, {0x8F, 0x4F}, {0x8F, 0x50}, /* 0x48-0x4B */ + {0x8F, 0x51}, {0x8F, 0x52}, {0x8F, 0x53}, {0x8F, 0x54}, /* 0x4C-0x4F */ + {0x8F, 0x55}, {0x8F, 0x56}, {0x8F, 0x57}, {0x8F, 0x58}, /* 0x50-0x53 */ + {0x8F, 0x59}, {0x8F, 0x5A}, {0x8F, 0x5B}, {0x8F, 0x5C}, /* 0x54-0x57 */ + {0x8F, 0x5D}, {0x8F, 0x5E}, {0x8F, 0x5F}, {0x8F, 0x60}, /* 0x58-0x5B */ + {0x8F, 0x61}, {0x8F, 0x62}, {0x8F, 0x63}, {0x8F, 0x64}, /* 0x5C-0x5F */ + {0x8F, 0x65}, {0x8F, 0x6A}, {0x8F, 0x80}, {0x8F, 0x8C}, /* 0x60-0x63 */ + {0x8F, 0x92}, {0x8F, 0x9D}, {0x8F, 0xA0}, {0x8F, 0xA1}, /* 0x64-0x67 */ + {0x8F, 0xA2}, {0x8F, 0xA4}, {0x8F, 0xA5}, {0x8F, 0xA6}, /* 0x68-0x6B */ + {0x8F, 0xA7}, {0x8F, 0xAA}, {0x8F, 0xAC}, {0x8F, 0xAD}, /* 0x6C-0x6F */ + {0x8F, 0xAE}, {0x8F, 0xAF}, {0x8F, 0xB2}, {0x8F, 0xB3}, /* 0x70-0x73 */ + {0x8F, 0xB4}, {0x8F, 0xB5}, {0x8F, 0xB7}, {0x8F, 0xB8}, /* 0x74-0x77 */ + {0x8F, 0xBA}, {0x8F, 0xBB}, {0x8F, 0xBC}, {0x8F, 0xBF}, /* 0x78-0x7B */ + {0x8F, 0xC0}, {0x8F, 0xC3}, {0x8F, 0xC6}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x8F, 0xC9}, {0x8F, 0xCA}, {0x8F, 0xCB}, {0x8F, 0xCC}, /* 0x80-0x83 */ + {0x8F, 0xCD}, {0x8F, 0xCF}, {0x8F, 0xD2}, {0x8F, 0xD6}, /* 0x84-0x87 */ + {0x8F, 0xD7}, {0x8F, 0xDA}, {0x8F, 0xE0}, {0x8F, 0xE1}, /* 0x88-0x8B */ + {0x8F, 0xE3}, {0x8F, 0xE7}, {0x8F, 0xEC}, {0x8F, 0xEF}, /* 0x8C-0x8F */ + {0x8F, 0xF1}, {0x8F, 0xF2}, {0x8F, 0xF4}, {0x8F, 0xF5}, /* 0x90-0x93 */ + {0x8F, 0xF6}, {0x8F, 0xFA}, {0x8F, 0xFB}, {0x8F, 0xFC}, /* 0x94-0x97 */ + {0x8F, 0xFE}, {0x8F, 0xFF}, {0x90, 0x07}, {0x90, 0x08}, /* 0x98-0x9B */ + {0x90, 0x0C}, {0x90, 0x0E}, {0x90, 0x13}, {0x90, 0x15}, /* 0x9C-0x9F */ + {0x90, 0x18}, {0x85, 0x56}, {0x85, 0x3B}, {0x84, 0xFF}, /* 0xA0-0xA3 */ + {0x84, 0xFC}, {0x85, 0x59}, {0x85, 0x48}, {0x85, 0x68}, /* 0xA4-0xA7 */ + {0x85, 0x64}, {0x85, 0x5E}, {0x85, 0x7A}, {0x77, 0xA2}, /* 0xA8-0xAB */ + {0x85, 0x43}, {0x85, 0x72}, {0x85, 0x7B}, {0x85, 0xA4}, /* 0xAC-0xAF */ + {0x85, 0xA8}, {0x85, 0x87}, {0x85, 0x8F}, {0x85, 0x79}, /* 0xB0-0xB3 */ + {0x85, 0xAE}, {0x85, 0x9C}, {0x85, 0x85}, {0x85, 0xB9}, /* 0xB4-0xB7 */ + {0x85, 0xB7}, {0x85, 0xB0}, {0x85, 0xD3}, {0x85, 0xC1}, /* 0xB8-0xBB */ + {0x85, 0xDC}, {0x85, 0xFF}, {0x86, 0x27}, {0x86, 0x05}, /* 0xBC-0xBF */ + {0x86, 0x29}, {0x86, 0x16}, {0x86, 0x3C}, {0x5E, 0xFE}, /* 0xC0-0xC3 */ + {0x5F, 0x08}, {0x59, 0x3C}, {0x59, 0x41}, {0x80, 0x37}, /* 0xC4-0xC7 */ + {0x59, 0x55}, {0x59, 0x5A}, {0x59, 0x58}, {0x53, 0x0F}, /* 0xC8-0xCB */ + {0x5C, 0x22}, {0x5C, 0x25}, {0x5C, 0x2C}, {0x5C, 0x34}, /* 0xCC-0xCF */ + {0x62, 0x4C}, {0x62, 0x6A}, {0x62, 0x9F}, {0x62, 0xBB}, /* 0xD0-0xD3 */ + {0x62, 0xCA}, {0x62, 0xDA}, {0x62, 0xD7}, {0x62, 0xEE}, /* 0xD4-0xD7 */ + {0x63, 0x22}, {0x62, 0xF6}, {0x63, 0x39}, {0x63, 0x4B}, /* 0xD8-0xDB */ + {0x63, 0x43}, {0x63, 0xAD}, {0x63, 0xF6}, {0x63, 0x71}, /* 0xDC-0xDF */ + {0x63, 0x7A}, {0x63, 0x8E}, {0x63, 0xB4}, {0x63, 0x6D}, /* 0xE0-0xE3 */ + {0x63, 0xAC}, {0x63, 0x8A}, {0x63, 0x69}, {0x63, 0xAE}, /* 0xE4-0xE7 */ + {0x63, 0xBC}, {0x63, 0xF2}, {0x63, 0xF8}, {0x63, 0xE0}, /* 0xE8-0xEB */ + {0x63, 0xFF}, {0x63, 0xC4}, {0x63, 0xDE}, {0x63, 0xCE}, /* 0xEC-0xEF */ + {0x64, 0x52}, {0x63, 0xC6}, {0x63, 0xBE}, {0x64, 0x45}, /* 0xF0-0xF3 */ + {0x64, 0x41}, {0x64, 0x0B}, {0x64, 0x1B}, {0x64, 0x20}, /* 0xF4-0xF7 */ + {0x64, 0x0C}, {0x64, 0x26}, {0x64, 0x21}, {0x64, 0x5E}, /* 0xF8-0xFB */ + {0x64, 0x84}, {0x64, 0x6D}, {0x64, 0x96}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x90, 0x19}, {0x90, 0x1C}, {0x90, 0x23}, {0x90, 0x24}, /* 0x40-0x43 */ + {0x90, 0x25}, {0x90, 0x27}, {0x90, 0x28}, {0x90, 0x29}, /* 0x44-0x47 */ + {0x90, 0x2A}, {0x90, 0x2B}, {0x90, 0x2C}, {0x90, 0x30}, /* 0x48-0x4B */ + {0x90, 0x31}, {0x90, 0x32}, {0x90, 0x33}, {0x90, 0x34}, /* 0x4C-0x4F */ + {0x90, 0x37}, {0x90, 0x39}, {0x90, 0x3A}, {0x90, 0x3D}, /* 0x50-0x53 */ + {0x90, 0x3F}, {0x90, 0x40}, {0x90, 0x43}, {0x90, 0x45}, /* 0x54-0x57 */ + {0x90, 0x46}, {0x90, 0x48}, {0x90, 0x49}, {0x90, 0x4A}, /* 0x58-0x5B */ + {0x90, 0x4B}, {0x90, 0x4C}, {0x90, 0x4E}, {0x90, 0x54}, /* 0x5C-0x5F */ + {0x90, 0x55}, {0x90, 0x56}, {0x90, 0x59}, {0x90, 0x5A}, /* 0x60-0x63 */ + {0x90, 0x5C}, {0x90, 0x5D}, {0x90, 0x5E}, {0x90, 0x5F}, /* 0x64-0x67 */ + {0x90, 0x60}, {0x90, 0x61}, {0x90, 0x64}, {0x90, 0x66}, /* 0x68-0x6B */ + {0x90, 0x67}, {0x90, 0x69}, {0x90, 0x6A}, {0x90, 0x6B}, /* 0x6C-0x6F */ + {0x90, 0x6C}, {0x90, 0x6F}, {0x90, 0x70}, {0x90, 0x71}, /* 0x70-0x73 */ + {0x90, 0x72}, {0x90, 0x73}, {0x90, 0x76}, {0x90, 0x77}, /* 0x74-0x77 */ + {0x90, 0x78}, {0x90, 0x79}, {0x90, 0x7A}, {0x90, 0x7B}, /* 0x78-0x7B */ + {0x90, 0x7C}, {0x90, 0x7E}, {0x90, 0x81}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x90, 0x84}, {0x90, 0x85}, {0x90, 0x86}, {0x90, 0x87}, /* 0x80-0x83 */ + {0x90, 0x89}, {0x90, 0x8A}, {0x90, 0x8C}, {0x90, 0x8D}, /* 0x84-0x87 */ + {0x90, 0x8E}, {0x90, 0x8F}, {0x90, 0x90}, {0x90, 0x92}, /* 0x88-0x8B */ + {0x90, 0x94}, {0x90, 0x96}, {0x90, 0x98}, {0x90, 0x9A}, /* 0x8C-0x8F */ + {0x90, 0x9C}, {0x90, 0x9E}, {0x90, 0x9F}, {0x90, 0xA0}, /* 0x90-0x93 */ + {0x90, 0xA4}, {0x90, 0xA5}, {0x90, 0xA7}, {0x90, 0xA8}, /* 0x94-0x97 */ + {0x90, 0xA9}, {0x90, 0xAB}, {0x90, 0xAD}, {0x90, 0xB2}, /* 0x98-0x9B */ + {0x90, 0xB7}, {0x90, 0xBC}, {0x90, 0xBD}, {0x90, 0xBF}, /* 0x9C-0x9F */ + {0x90, 0xC0}, {0x64, 0x7A}, {0x64, 0xB7}, {0x64, 0xB8}, /* 0xA0-0xA3 */ + {0x64, 0x99}, {0x64, 0xBA}, {0x64, 0xC0}, {0x64, 0xD0}, /* 0xA4-0xA7 */ + {0x64, 0xD7}, {0x64, 0xE4}, {0x64, 0xE2}, {0x65, 0x09}, /* 0xA8-0xAB */ + {0x65, 0x25}, {0x65, 0x2E}, {0x5F, 0x0B}, {0x5F, 0xD2}, /* 0xAC-0xAF */ + {0x75, 0x19}, {0x5F, 0x11}, {0x53, 0x5F}, {0x53, 0xF1}, /* 0xB0-0xB3 */ + {0x53, 0xFD}, {0x53, 0xE9}, {0x53, 0xE8}, {0x53, 0xFB}, /* 0xB4-0xB7 */ + {0x54, 0x12}, {0x54, 0x16}, {0x54, 0x06}, {0x54, 0x4B}, /* 0xB8-0xBB */ + {0x54, 0x52}, {0x54, 0x53}, {0x54, 0x54}, {0x54, 0x56}, /* 0xBC-0xBF */ + {0x54, 0x43}, {0x54, 0x21}, {0x54, 0x57}, {0x54, 0x59}, /* 0xC0-0xC3 */ + {0x54, 0x23}, {0x54, 0x32}, {0x54, 0x82}, {0x54, 0x94}, /* 0xC4-0xC7 */ + {0x54, 0x77}, {0x54, 0x71}, {0x54, 0x64}, {0x54, 0x9A}, /* 0xC8-0xCB */ + {0x54, 0x9B}, {0x54, 0x84}, {0x54, 0x76}, {0x54, 0x66}, /* 0xCC-0xCF */ + {0x54, 0x9D}, {0x54, 0xD0}, {0x54, 0xAD}, {0x54, 0xC2}, /* 0xD0-0xD3 */ + {0x54, 0xB4}, {0x54, 0xD2}, {0x54, 0xA7}, {0x54, 0xA6}, /* 0xD4-0xD7 */ + {0x54, 0xD3}, {0x54, 0xD4}, {0x54, 0x72}, {0x54, 0xA3}, /* 0xD8-0xDB */ + {0x54, 0xD5}, {0x54, 0xBB}, {0x54, 0xBF}, {0x54, 0xCC}, /* 0xDC-0xDF */ + {0x54, 0xD9}, {0x54, 0xDA}, {0x54, 0xDC}, {0x54, 0xA9}, /* 0xE0-0xE3 */ + {0x54, 0xAA}, {0x54, 0xA4}, {0x54, 0xDD}, {0x54, 0xCF}, /* 0xE4-0xE7 */ + {0x54, 0xDE}, {0x55, 0x1B}, {0x54, 0xE7}, {0x55, 0x20}, /* 0xE8-0xEB */ + {0x54, 0xFD}, {0x55, 0x14}, {0x54, 0xF3}, {0x55, 0x22}, /* 0xEC-0xEF */ + {0x55, 0x23}, {0x55, 0x0F}, {0x55, 0x11}, {0x55, 0x27}, /* 0xF0-0xF3 */ + {0x55, 0x2A}, {0x55, 0x67}, {0x55, 0x8F}, {0x55, 0xB5}, /* 0xF4-0xF7 */ + {0x55, 0x49}, {0x55, 0x6D}, {0x55, 0x41}, {0x55, 0x55}, /* 0xF8-0xFB */ + {0x55, 0x3F}, {0x55, 0x50}, {0x55, 0x3C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x90, 0xC2}, {0x90, 0xC3}, {0x90, 0xC6}, {0x90, 0xC8}, /* 0x40-0x43 */ + {0x90, 0xC9}, {0x90, 0xCB}, {0x90, 0xCC}, {0x90, 0xCD}, /* 0x44-0x47 */ + {0x90, 0xD2}, {0x90, 0xD4}, {0x90, 0xD5}, {0x90, 0xD6}, /* 0x48-0x4B */ + {0x90, 0xD8}, {0x90, 0xD9}, {0x90, 0xDA}, {0x90, 0xDE}, /* 0x4C-0x4F */ + {0x90, 0xDF}, {0x90, 0xE0}, {0x90, 0xE3}, {0x90, 0xE4}, /* 0x50-0x53 */ + {0x90, 0xE5}, {0x90, 0xE9}, {0x90, 0xEA}, {0x90, 0xEC}, /* 0x54-0x57 */ + {0x90, 0xEE}, {0x90, 0xF0}, {0x90, 0xF1}, {0x90, 0xF2}, /* 0x58-0x5B */ + {0x90, 0xF3}, {0x90, 0xF5}, {0x90, 0xF6}, {0x90, 0xF7}, /* 0x5C-0x5F */ + {0x90, 0xF9}, {0x90, 0xFA}, {0x90, 0xFB}, {0x90, 0xFC}, /* 0x60-0x63 */ + {0x90, 0xFF}, {0x91, 0x00}, {0x91, 0x01}, {0x91, 0x03}, /* 0x64-0x67 */ + {0x91, 0x05}, {0x91, 0x06}, {0x91, 0x07}, {0x91, 0x08}, /* 0x68-0x6B */ + {0x91, 0x09}, {0x91, 0x0A}, {0x91, 0x0B}, {0x91, 0x0C}, /* 0x6C-0x6F */ + {0x91, 0x0D}, {0x91, 0x0E}, {0x91, 0x0F}, {0x91, 0x10}, /* 0x70-0x73 */ + {0x91, 0x11}, {0x91, 0x12}, {0x91, 0x13}, {0x91, 0x14}, /* 0x74-0x77 */ + {0x91, 0x15}, {0x91, 0x16}, {0x91, 0x17}, {0x91, 0x18}, /* 0x78-0x7B */ + {0x91, 0x1A}, {0x91, 0x1B}, {0x91, 0x1C}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x91, 0x1D}, {0x91, 0x1F}, {0x91, 0x20}, {0x91, 0x21}, /* 0x80-0x83 */ + {0x91, 0x24}, {0x91, 0x25}, {0x91, 0x26}, {0x91, 0x27}, /* 0x84-0x87 */ + {0x91, 0x28}, {0x91, 0x29}, {0x91, 0x2A}, {0x91, 0x2B}, /* 0x88-0x8B */ + {0x91, 0x2C}, {0x91, 0x2D}, {0x91, 0x2E}, {0x91, 0x30}, /* 0x8C-0x8F */ + {0x91, 0x32}, {0x91, 0x33}, {0x91, 0x34}, {0x91, 0x35}, /* 0x90-0x93 */ + {0x91, 0x36}, {0x91, 0x37}, {0x91, 0x38}, {0x91, 0x3A}, /* 0x94-0x97 */ + {0x91, 0x3B}, {0x91, 0x3C}, {0x91, 0x3D}, {0x91, 0x3E}, /* 0x98-0x9B */ + {0x91, 0x3F}, {0x91, 0x40}, {0x91, 0x41}, {0x91, 0x42}, /* 0x9C-0x9F */ + {0x91, 0x44}, {0x55, 0x37}, {0x55, 0x56}, {0x55, 0x75}, /* 0xA0-0xA3 */ + {0x55, 0x76}, {0x55, 0x77}, {0x55, 0x33}, {0x55, 0x30}, /* 0xA4-0xA7 */ + {0x55, 0x5C}, {0x55, 0x8B}, {0x55, 0xD2}, {0x55, 0x83}, /* 0xA8-0xAB */ + {0x55, 0xB1}, {0x55, 0xB9}, {0x55, 0x88}, {0x55, 0x81}, /* 0xAC-0xAF */ + {0x55, 0x9F}, {0x55, 0x7E}, {0x55, 0xD6}, {0x55, 0x91}, /* 0xB0-0xB3 */ + {0x55, 0x7B}, {0x55, 0xDF}, {0x55, 0xBD}, {0x55, 0xBE}, /* 0xB4-0xB7 */ + {0x55, 0x94}, {0x55, 0x99}, {0x55, 0xEA}, {0x55, 0xF7}, /* 0xB8-0xBB */ + {0x55, 0xC9}, {0x56, 0x1F}, {0x55, 0xD1}, {0x55, 0xEB}, /* 0xBC-0xBF */ + {0x55, 0xEC}, {0x55, 0xD4}, {0x55, 0xE6}, {0x55, 0xDD}, /* 0xC0-0xC3 */ + {0x55, 0xC4}, {0x55, 0xEF}, {0x55, 0xE5}, {0x55, 0xF2}, /* 0xC4-0xC7 */ + {0x55, 0xF3}, {0x55, 0xCC}, {0x55, 0xCD}, {0x55, 0xE8}, /* 0xC8-0xCB */ + {0x55, 0xF5}, {0x55, 0xE4}, {0x8F, 0x94}, {0x56, 0x1E}, /* 0xCC-0xCF */ + {0x56, 0x08}, {0x56, 0x0C}, {0x56, 0x01}, {0x56, 0x24}, /* 0xD0-0xD3 */ + {0x56, 0x23}, {0x55, 0xFE}, {0x56, 0x00}, {0x56, 0x27}, /* 0xD4-0xD7 */ + {0x56, 0x2D}, {0x56, 0x58}, {0x56, 0x39}, {0x56, 0x57}, /* 0xD8-0xDB */ + {0x56, 0x2C}, {0x56, 0x4D}, {0x56, 0x62}, {0x56, 0x59}, /* 0xDC-0xDF */ + {0x56, 0x5C}, {0x56, 0x4C}, {0x56, 0x54}, {0x56, 0x86}, /* 0xE0-0xE3 */ + {0x56, 0x64}, {0x56, 0x71}, {0x56, 0x6B}, {0x56, 0x7B}, /* 0xE4-0xE7 */ + {0x56, 0x7C}, {0x56, 0x85}, {0x56, 0x93}, {0x56, 0xAF}, /* 0xE8-0xEB */ + {0x56, 0xD4}, {0x56, 0xD7}, {0x56, 0xDD}, {0x56, 0xE1}, /* 0xEC-0xEF */ + {0x56, 0xF5}, {0x56, 0xEB}, {0x56, 0xF9}, {0x56, 0xFF}, /* 0xF0-0xF3 */ + {0x57, 0x04}, {0x57, 0x0A}, {0x57, 0x09}, {0x57, 0x1C}, /* 0xF4-0xF7 */ + {0x5E, 0x0F}, {0x5E, 0x19}, {0x5E, 0x14}, {0x5E, 0x11}, /* 0xF8-0xFB */ + {0x5E, 0x31}, {0x5E, 0x3B}, {0x5E, 0x3C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x91, 0x45}, {0x91, 0x47}, {0x91, 0x48}, {0x91, 0x51}, /* 0x40-0x43 */ + {0x91, 0x53}, {0x91, 0x54}, {0x91, 0x55}, {0x91, 0x56}, /* 0x44-0x47 */ + {0x91, 0x58}, {0x91, 0x59}, {0x91, 0x5B}, {0x91, 0x5C}, /* 0x48-0x4B */ + {0x91, 0x5F}, {0x91, 0x60}, {0x91, 0x66}, {0x91, 0x67}, /* 0x4C-0x4F */ + {0x91, 0x68}, {0x91, 0x6B}, {0x91, 0x6D}, {0x91, 0x73}, /* 0x50-0x53 */ + {0x91, 0x7A}, {0x91, 0x7B}, {0x91, 0x7C}, {0x91, 0x80}, /* 0x54-0x57 */ + {0x91, 0x81}, {0x91, 0x82}, {0x91, 0x83}, {0x91, 0x84}, /* 0x58-0x5B */ + {0x91, 0x86}, {0x91, 0x88}, {0x91, 0x8A}, {0x91, 0x8E}, /* 0x5C-0x5F */ + {0x91, 0x8F}, {0x91, 0x93}, {0x91, 0x94}, {0x91, 0x95}, /* 0x60-0x63 */ + {0x91, 0x96}, {0x91, 0x97}, {0x91, 0x98}, {0x91, 0x99}, /* 0x64-0x67 */ + {0x91, 0x9C}, {0x91, 0x9D}, {0x91, 0x9E}, {0x91, 0x9F}, /* 0x68-0x6B */ + {0x91, 0xA0}, {0x91, 0xA1}, {0x91, 0xA4}, {0x91, 0xA5}, /* 0x6C-0x6F */ + {0x91, 0xA6}, {0x91, 0xA7}, {0x91, 0xA8}, {0x91, 0xA9}, /* 0x70-0x73 */ + {0x91, 0xAB}, {0x91, 0xAC}, {0x91, 0xB0}, {0x91, 0xB1}, /* 0x74-0x77 */ + {0x91, 0xB2}, {0x91, 0xB3}, {0x91, 0xB6}, {0x91, 0xB7}, /* 0x78-0x7B */ + {0x91, 0xB8}, {0x91, 0xB9}, {0x91, 0xBB}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x91, 0xBC}, {0x91, 0xBD}, {0x91, 0xBE}, {0x91, 0xBF}, /* 0x80-0x83 */ + {0x91, 0xC0}, {0x91, 0xC1}, {0x91, 0xC2}, {0x91, 0xC3}, /* 0x84-0x87 */ + {0x91, 0xC4}, {0x91, 0xC5}, {0x91, 0xC6}, {0x91, 0xC8}, /* 0x88-0x8B */ + {0x91, 0xCB}, {0x91, 0xD0}, {0x91, 0xD2}, {0x91, 0xD3}, /* 0x8C-0x8F */ + {0x91, 0xD4}, {0x91, 0xD5}, {0x91, 0xD6}, {0x91, 0xD7}, /* 0x90-0x93 */ + {0x91, 0xD8}, {0x91, 0xD9}, {0x91, 0xDA}, {0x91, 0xDB}, /* 0x94-0x97 */ + {0x91, 0xDD}, {0x91, 0xDE}, {0x91, 0xDF}, {0x91, 0xE0}, /* 0x98-0x9B */ + {0x91, 0xE1}, {0x91, 0xE2}, {0x91, 0xE3}, {0x91, 0xE4}, /* 0x9C-0x9F */ + {0x91, 0xE5}, {0x5E, 0x37}, {0x5E, 0x44}, {0x5E, 0x54}, /* 0xA0-0xA3 */ + {0x5E, 0x5B}, {0x5E, 0x5E}, {0x5E, 0x61}, {0x5C, 0x8C}, /* 0xA4-0xA7 */ + {0x5C, 0x7A}, {0x5C, 0x8D}, {0x5C, 0x90}, {0x5C, 0x96}, /* 0xA8-0xAB */ + {0x5C, 0x88}, {0x5C, 0x98}, {0x5C, 0x99}, {0x5C, 0x91}, /* 0xAC-0xAF */ + {0x5C, 0x9A}, {0x5C, 0x9C}, {0x5C, 0xB5}, {0x5C, 0xA2}, /* 0xB0-0xB3 */ + {0x5C, 0xBD}, {0x5C, 0xAC}, {0x5C, 0xAB}, {0x5C, 0xB1}, /* 0xB4-0xB7 */ + {0x5C, 0xA3}, {0x5C, 0xC1}, {0x5C, 0xB7}, {0x5C, 0xC4}, /* 0xB8-0xBB */ + {0x5C, 0xD2}, {0x5C, 0xE4}, {0x5C, 0xCB}, {0x5C, 0xE5}, /* 0xBC-0xBF */ + {0x5D, 0x02}, {0x5D, 0x03}, {0x5D, 0x27}, {0x5D, 0x26}, /* 0xC0-0xC3 */ + {0x5D, 0x2E}, {0x5D, 0x24}, {0x5D, 0x1E}, {0x5D, 0x06}, /* 0xC4-0xC7 */ + {0x5D, 0x1B}, {0x5D, 0x58}, {0x5D, 0x3E}, {0x5D, 0x34}, /* 0xC8-0xCB */ + {0x5D, 0x3D}, {0x5D, 0x6C}, {0x5D, 0x5B}, {0x5D, 0x6F}, /* 0xCC-0xCF */ + {0x5D, 0x5D}, {0x5D, 0x6B}, {0x5D, 0x4B}, {0x5D, 0x4A}, /* 0xD0-0xD3 */ + {0x5D, 0x69}, {0x5D, 0x74}, {0x5D, 0x82}, {0x5D, 0x99}, /* 0xD4-0xD7 */ + {0x5D, 0x9D}, {0x8C, 0x73}, {0x5D, 0xB7}, {0x5D, 0xC5}, /* 0xD8-0xDB */ + {0x5F, 0x73}, {0x5F, 0x77}, {0x5F, 0x82}, {0x5F, 0x87}, /* 0xDC-0xDF */ + {0x5F, 0x89}, {0x5F, 0x8C}, {0x5F, 0x95}, {0x5F, 0x99}, /* 0xE0-0xE3 */ + {0x5F, 0x9C}, {0x5F, 0xA8}, {0x5F, 0xAD}, {0x5F, 0xB5}, /* 0xE4-0xE7 */ + {0x5F, 0xBC}, {0x88, 0x62}, {0x5F, 0x61}, {0x72, 0xAD}, /* 0xE8-0xEB */ + {0x72, 0xB0}, {0x72, 0xB4}, {0x72, 0xB7}, {0x72, 0xB8}, /* 0xEC-0xEF */ + {0x72, 0xC3}, {0x72, 0xC1}, {0x72, 0xCE}, {0x72, 0xCD}, /* 0xF0-0xF3 */ + {0x72, 0xD2}, {0x72, 0xE8}, {0x72, 0xEF}, {0x72, 0xE9}, /* 0xF4-0xF7 */ + {0x72, 0xF2}, {0x72, 0xF4}, {0x72, 0xF7}, {0x73, 0x01}, /* 0xF8-0xFB */ + {0x72, 0xF3}, {0x73, 0x03}, {0x72, 0xFA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x91, 0xE6}, {0x91, 0xE7}, {0x91, 0xE8}, {0x91, 0xE9}, /* 0x40-0x43 */ + {0x91, 0xEA}, {0x91, 0xEB}, {0x91, 0xEC}, {0x91, 0xED}, /* 0x44-0x47 */ + {0x91, 0xEE}, {0x91, 0xEF}, {0x91, 0xF0}, {0x91, 0xF1}, /* 0x48-0x4B */ + {0x91, 0xF2}, {0x91, 0xF3}, {0x91, 0xF4}, {0x91, 0xF5}, /* 0x4C-0x4F */ + {0x91, 0xF6}, {0x91, 0xF7}, {0x91, 0xF8}, {0x91, 0xF9}, /* 0x50-0x53 */ + {0x91, 0xFA}, {0x91, 0xFB}, {0x91, 0xFC}, {0x91, 0xFD}, /* 0x54-0x57 */ + {0x91, 0xFE}, {0x91, 0xFF}, {0x92, 0x00}, {0x92, 0x01}, /* 0x58-0x5B */ + {0x92, 0x02}, {0x92, 0x03}, {0x92, 0x04}, {0x92, 0x05}, /* 0x5C-0x5F */ + {0x92, 0x06}, {0x92, 0x07}, {0x92, 0x08}, {0x92, 0x09}, /* 0x60-0x63 */ + {0x92, 0x0A}, {0x92, 0x0B}, {0x92, 0x0C}, {0x92, 0x0D}, /* 0x64-0x67 */ + {0x92, 0x0E}, {0x92, 0x0F}, {0x92, 0x10}, {0x92, 0x11}, /* 0x68-0x6B */ + {0x92, 0x12}, {0x92, 0x13}, {0x92, 0x14}, {0x92, 0x15}, /* 0x6C-0x6F */ + {0x92, 0x16}, {0x92, 0x17}, {0x92, 0x18}, {0x92, 0x19}, /* 0x70-0x73 */ + {0x92, 0x1A}, {0x92, 0x1B}, {0x92, 0x1C}, {0x92, 0x1D}, /* 0x74-0x77 */ + {0x92, 0x1E}, {0x92, 0x1F}, {0x92, 0x20}, {0x92, 0x21}, /* 0x78-0x7B */ + {0x92, 0x22}, {0x92, 0x23}, {0x92, 0x24}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x92, 0x25}, {0x92, 0x26}, {0x92, 0x27}, {0x92, 0x28}, /* 0x80-0x83 */ + {0x92, 0x29}, {0x92, 0x2A}, {0x92, 0x2B}, {0x92, 0x2C}, /* 0x84-0x87 */ + {0x92, 0x2D}, {0x92, 0x2E}, {0x92, 0x2F}, {0x92, 0x30}, /* 0x88-0x8B */ + {0x92, 0x31}, {0x92, 0x32}, {0x92, 0x33}, {0x92, 0x34}, /* 0x8C-0x8F */ + {0x92, 0x35}, {0x92, 0x36}, {0x92, 0x37}, {0x92, 0x38}, /* 0x90-0x93 */ + {0x92, 0x39}, {0x92, 0x3A}, {0x92, 0x3B}, {0x92, 0x3C}, /* 0x94-0x97 */ + {0x92, 0x3D}, {0x92, 0x3E}, {0x92, 0x3F}, {0x92, 0x40}, /* 0x98-0x9B */ + {0x92, 0x41}, {0x92, 0x42}, {0x92, 0x43}, {0x92, 0x44}, /* 0x9C-0x9F */ + {0x92, 0x45}, {0x72, 0xFB}, {0x73, 0x17}, {0x73, 0x13}, /* 0xA0-0xA3 */ + {0x73, 0x21}, {0x73, 0x0A}, {0x73, 0x1E}, {0x73, 0x1D}, /* 0xA4-0xA7 */ + {0x73, 0x15}, {0x73, 0x22}, {0x73, 0x39}, {0x73, 0x25}, /* 0xA8-0xAB */ + {0x73, 0x2C}, {0x73, 0x38}, {0x73, 0x31}, {0x73, 0x50}, /* 0xAC-0xAF */ + {0x73, 0x4D}, {0x73, 0x57}, {0x73, 0x60}, {0x73, 0x6C}, /* 0xB0-0xB3 */ + {0x73, 0x6F}, {0x73, 0x7E}, {0x82, 0x1B}, {0x59, 0x25}, /* 0xB4-0xB7 */ + {0x98, 0xE7}, {0x59, 0x24}, {0x59, 0x02}, {0x99, 0x63}, /* 0xB8-0xBB */ + {0x99, 0x67}, {0x99, 0x68}, {0x99, 0x69}, {0x99, 0x6A}, /* 0xBC-0xBF */ + {0x99, 0x6B}, {0x99, 0x6C}, {0x99, 0x74}, {0x99, 0x77}, /* 0xC0-0xC3 */ + {0x99, 0x7D}, {0x99, 0x80}, {0x99, 0x84}, {0x99, 0x87}, /* 0xC4-0xC7 */ + {0x99, 0x8A}, {0x99, 0x8D}, {0x99, 0x90}, {0x99, 0x91}, /* 0xC8-0xCB */ + {0x99, 0x93}, {0x99, 0x94}, {0x99, 0x95}, {0x5E, 0x80}, /* 0xCC-0xCF */ + {0x5E, 0x91}, {0x5E, 0x8B}, {0x5E, 0x96}, {0x5E, 0xA5}, /* 0xD0-0xD3 */ + {0x5E, 0xA0}, {0x5E, 0xB9}, {0x5E, 0xB5}, {0x5E, 0xBE}, /* 0xD4-0xD7 */ + {0x5E, 0xB3}, {0x8D, 0x53}, {0x5E, 0xD2}, {0x5E, 0xD1}, /* 0xD8-0xDB */ + {0x5E, 0xDB}, {0x5E, 0xE8}, {0x5E, 0xEA}, {0x81, 0xBA}, /* 0xDC-0xDF */ + {0x5F, 0xC4}, {0x5F, 0xC9}, {0x5F, 0xD6}, {0x5F, 0xCF}, /* 0xE0-0xE3 */ + {0x60, 0x03}, {0x5F, 0xEE}, {0x60, 0x04}, {0x5F, 0xE1}, /* 0xE4-0xE7 */ + {0x5F, 0xE4}, {0x5F, 0xFE}, {0x60, 0x05}, {0x60, 0x06}, /* 0xE8-0xEB */ + {0x5F, 0xEA}, {0x5F, 0xED}, {0x5F, 0xF8}, {0x60, 0x19}, /* 0xEC-0xEF */ + {0x60, 0x35}, {0x60, 0x26}, {0x60, 0x1B}, {0x60, 0x0F}, /* 0xF0-0xF3 */ + {0x60, 0x0D}, {0x60, 0x29}, {0x60, 0x2B}, {0x60, 0x0A}, /* 0xF4-0xF7 */ + {0x60, 0x3F}, {0x60, 0x21}, {0x60, 0x78}, {0x60, 0x79}, /* 0xF8-0xFB */ + {0x60, 0x7B}, {0x60, 0x7A}, {0x60, 0x42}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x92, 0x46}, {0x92, 0x47}, {0x92, 0x48}, {0x92, 0x49}, /* 0x40-0x43 */ + {0x92, 0x4A}, {0x92, 0x4B}, {0x92, 0x4C}, {0x92, 0x4D}, /* 0x44-0x47 */ + {0x92, 0x4E}, {0x92, 0x4F}, {0x92, 0x50}, {0x92, 0x51}, /* 0x48-0x4B */ + {0x92, 0x52}, {0x92, 0x53}, {0x92, 0x54}, {0x92, 0x55}, /* 0x4C-0x4F */ + {0x92, 0x56}, {0x92, 0x57}, {0x92, 0x58}, {0x92, 0x59}, /* 0x50-0x53 */ + {0x92, 0x5A}, {0x92, 0x5B}, {0x92, 0x5C}, {0x92, 0x5D}, /* 0x54-0x57 */ + {0x92, 0x5E}, {0x92, 0x5F}, {0x92, 0x60}, {0x92, 0x61}, /* 0x58-0x5B */ + {0x92, 0x62}, {0x92, 0x63}, {0x92, 0x64}, {0x92, 0x65}, /* 0x5C-0x5F */ + {0x92, 0x66}, {0x92, 0x67}, {0x92, 0x68}, {0x92, 0x69}, /* 0x60-0x63 */ + {0x92, 0x6A}, {0x92, 0x6B}, {0x92, 0x6C}, {0x92, 0x6D}, /* 0x64-0x67 */ + {0x92, 0x6E}, {0x92, 0x6F}, {0x92, 0x70}, {0x92, 0x71}, /* 0x68-0x6B */ + {0x92, 0x72}, {0x92, 0x73}, {0x92, 0x75}, {0x92, 0x76}, /* 0x6C-0x6F */ + {0x92, 0x77}, {0x92, 0x78}, {0x92, 0x79}, {0x92, 0x7A}, /* 0x70-0x73 */ + {0x92, 0x7B}, {0x92, 0x7C}, {0x92, 0x7D}, {0x92, 0x7E}, /* 0x74-0x77 */ + {0x92, 0x7F}, {0x92, 0x80}, {0x92, 0x81}, {0x92, 0x82}, /* 0x78-0x7B */ + {0x92, 0x83}, {0x92, 0x84}, {0x92, 0x85}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x92, 0x86}, {0x92, 0x87}, {0x92, 0x88}, {0x92, 0x89}, /* 0x80-0x83 */ + {0x92, 0x8A}, {0x92, 0x8B}, {0x92, 0x8C}, {0x92, 0x8D}, /* 0x84-0x87 */ + {0x92, 0x8F}, {0x92, 0x90}, {0x92, 0x91}, {0x92, 0x92}, /* 0x88-0x8B */ + {0x92, 0x93}, {0x92, 0x94}, {0x92, 0x95}, {0x92, 0x96}, /* 0x8C-0x8F */ + {0x92, 0x97}, {0x92, 0x98}, {0x92, 0x99}, {0x92, 0x9A}, /* 0x90-0x93 */ + {0x92, 0x9B}, {0x92, 0x9C}, {0x92, 0x9D}, {0x92, 0x9E}, /* 0x94-0x97 */ + {0x92, 0x9F}, {0x92, 0xA0}, {0x92, 0xA1}, {0x92, 0xA2}, /* 0x98-0x9B */ + {0x92, 0xA3}, {0x92, 0xA4}, {0x92, 0xA5}, {0x92, 0xA6}, /* 0x9C-0x9F */ + {0x92, 0xA7}, {0x60, 0x6A}, {0x60, 0x7D}, {0x60, 0x96}, /* 0xA0-0xA3 */ + {0x60, 0x9A}, {0x60, 0xAD}, {0x60, 0x9D}, {0x60, 0x83}, /* 0xA4-0xA7 */ + {0x60, 0x92}, {0x60, 0x8C}, {0x60, 0x9B}, {0x60, 0xEC}, /* 0xA8-0xAB */ + {0x60, 0xBB}, {0x60, 0xB1}, {0x60, 0xDD}, {0x60, 0xD8}, /* 0xAC-0xAF */ + {0x60, 0xC6}, {0x60, 0xDA}, {0x60, 0xB4}, {0x61, 0x20}, /* 0xB0-0xB3 */ + {0x61, 0x26}, {0x61, 0x15}, {0x61, 0x23}, {0x60, 0xF4}, /* 0xB4-0xB7 */ + {0x61, 0x00}, {0x61, 0x0E}, {0x61, 0x2B}, {0x61, 0x4A}, /* 0xB8-0xBB */ + {0x61, 0x75}, {0x61, 0xAC}, {0x61, 0x94}, {0x61, 0xA7}, /* 0xBC-0xBF */ + {0x61, 0xB7}, {0x61, 0xD4}, {0x61, 0xF5}, {0x5F, 0xDD}, /* 0xC0-0xC3 */ + {0x96, 0xB3}, {0x95, 0xE9}, {0x95, 0xEB}, {0x95, 0xF1}, /* 0xC4-0xC7 */ + {0x95, 0xF3}, {0x95, 0xF5}, {0x95, 0xF6}, {0x95, 0xFC}, /* 0xC8-0xCB */ + {0x95, 0xFE}, {0x96, 0x03}, {0x96, 0x04}, {0x96, 0x06}, /* 0xCC-0xCF */ + {0x96, 0x08}, {0x96, 0x0A}, {0x96, 0x0B}, {0x96, 0x0C}, /* 0xD0-0xD3 */ + {0x96, 0x0D}, {0x96, 0x0F}, {0x96, 0x12}, {0x96, 0x15}, /* 0xD4-0xD7 */ + {0x96, 0x16}, {0x96, 0x17}, {0x96, 0x19}, {0x96, 0x1A}, /* 0xD8-0xDB */ + {0x4E, 0x2C}, {0x72, 0x3F}, {0x62, 0x15}, {0x6C, 0x35}, /* 0xDC-0xDF */ + {0x6C, 0x54}, {0x6C, 0x5C}, {0x6C, 0x4A}, {0x6C, 0xA3}, /* 0xE0-0xE3 */ + {0x6C, 0x85}, {0x6C, 0x90}, {0x6C, 0x94}, {0x6C, 0x8C}, /* 0xE4-0xE7 */ + {0x6C, 0x68}, {0x6C, 0x69}, {0x6C, 0x74}, {0x6C, 0x76}, /* 0xE8-0xEB */ + {0x6C, 0x86}, {0x6C, 0xA9}, {0x6C, 0xD0}, {0x6C, 0xD4}, /* 0xEC-0xEF */ + {0x6C, 0xAD}, {0x6C, 0xF7}, {0x6C, 0xF8}, {0x6C, 0xF1}, /* 0xF0-0xF3 */ + {0x6C, 0xD7}, {0x6C, 0xB2}, {0x6C, 0xE0}, {0x6C, 0xD6}, /* 0xF4-0xF7 */ + {0x6C, 0xFA}, {0x6C, 0xEB}, {0x6C, 0xEE}, {0x6C, 0xB1}, /* 0xF8-0xFB */ + {0x6C, 0xD3}, {0x6C, 0xEF}, {0x6C, 0xFE}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x92, 0xA8}, {0x92, 0xA9}, {0x92, 0xAA}, {0x92, 0xAB}, /* 0x40-0x43 */ + {0x92, 0xAC}, {0x92, 0xAD}, {0x92, 0xAF}, {0x92, 0xB0}, /* 0x44-0x47 */ + {0x92, 0xB1}, {0x92, 0xB2}, {0x92, 0xB3}, {0x92, 0xB4}, /* 0x48-0x4B */ + {0x92, 0xB5}, {0x92, 0xB6}, {0x92, 0xB7}, {0x92, 0xB8}, /* 0x4C-0x4F */ + {0x92, 0xB9}, {0x92, 0xBA}, {0x92, 0xBB}, {0x92, 0xBC}, /* 0x50-0x53 */ + {0x92, 0xBD}, {0x92, 0xBE}, {0x92, 0xBF}, {0x92, 0xC0}, /* 0x54-0x57 */ + {0x92, 0xC1}, {0x92, 0xC2}, {0x92, 0xC3}, {0x92, 0xC4}, /* 0x58-0x5B */ + {0x92, 0xC5}, {0x92, 0xC6}, {0x92, 0xC7}, {0x92, 0xC9}, /* 0x5C-0x5F */ + {0x92, 0xCA}, {0x92, 0xCB}, {0x92, 0xCC}, {0x92, 0xCD}, /* 0x60-0x63 */ + {0x92, 0xCE}, {0x92, 0xCF}, {0x92, 0xD0}, {0x92, 0xD1}, /* 0x64-0x67 */ + {0x92, 0xD2}, {0x92, 0xD3}, {0x92, 0xD4}, {0x92, 0xD5}, /* 0x68-0x6B */ + {0x92, 0xD6}, {0x92, 0xD7}, {0x92, 0xD8}, {0x92, 0xD9}, /* 0x6C-0x6F */ + {0x92, 0xDA}, {0x92, 0xDB}, {0x92, 0xDC}, {0x92, 0xDD}, /* 0x70-0x73 */ + {0x92, 0xDE}, {0x92, 0xDF}, {0x92, 0xE0}, {0x92, 0xE1}, /* 0x74-0x77 */ + {0x92, 0xE2}, {0x92, 0xE3}, {0x92, 0xE4}, {0x92, 0xE5}, /* 0x78-0x7B */ + {0x92, 0xE6}, {0x92, 0xE7}, {0x92, 0xE8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x92, 0xE9}, {0x92, 0xEA}, {0x92, 0xEB}, {0x92, 0xEC}, /* 0x80-0x83 */ + {0x92, 0xED}, {0x92, 0xEE}, {0x92, 0xEF}, {0x92, 0xF0}, /* 0x84-0x87 */ + {0x92, 0xF1}, {0x92, 0xF2}, {0x92, 0xF3}, {0x92, 0xF4}, /* 0x88-0x8B */ + {0x92, 0xF5}, {0x92, 0xF6}, {0x92, 0xF7}, {0x92, 0xF8}, /* 0x8C-0x8F */ + {0x92, 0xF9}, {0x92, 0xFA}, {0x92, 0xFB}, {0x92, 0xFC}, /* 0x90-0x93 */ + {0x92, 0xFD}, {0x92, 0xFE}, {0x92, 0xFF}, {0x93, 0x00}, /* 0x94-0x97 */ + {0x93, 0x01}, {0x93, 0x02}, {0x93, 0x03}, {0x93, 0x04}, /* 0x98-0x9B */ + {0x93, 0x05}, {0x93, 0x06}, {0x93, 0x07}, {0x93, 0x08}, /* 0x9C-0x9F */ + {0x93, 0x09}, {0x6D, 0x39}, {0x6D, 0x27}, {0x6D, 0x0C}, /* 0xA0-0xA3 */ + {0x6D, 0x43}, {0x6D, 0x48}, {0x6D, 0x07}, {0x6D, 0x04}, /* 0xA4-0xA7 */ + {0x6D, 0x19}, {0x6D, 0x0E}, {0x6D, 0x2B}, {0x6D, 0x4D}, /* 0xA8-0xAB */ + {0x6D, 0x2E}, {0x6D, 0x35}, {0x6D, 0x1A}, {0x6D, 0x4F}, /* 0xAC-0xAF */ + {0x6D, 0x52}, {0x6D, 0x54}, {0x6D, 0x33}, {0x6D, 0x91}, /* 0xB0-0xB3 */ + {0x6D, 0x6F}, {0x6D, 0x9E}, {0x6D, 0xA0}, {0x6D, 0x5E}, /* 0xB4-0xB7 */ + {0x6D, 0x93}, {0x6D, 0x94}, {0x6D, 0x5C}, {0x6D, 0x60}, /* 0xB8-0xBB */ + {0x6D, 0x7C}, {0x6D, 0x63}, {0x6E, 0x1A}, {0x6D, 0xC7}, /* 0xBC-0xBF */ + {0x6D, 0xC5}, {0x6D, 0xDE}, {0x6E, 0x0E}, {0x6D, 0xBF}, /* 0xC0-0xC3 */ + {0x6D, 0xE0}, {0x6E, 0x11}, {0x6D, 0xE6}, {0x6D, 0xDD}, /* 0xC4-0xC7 */ + {0x6D, 0xD9}, {0x6E, 0x16}, {0x6D, 0xAB}, {0x6E, 0x0C}, /* 0xC8-0xCB */ + {0x6D, 0xAE}, {0x6E, 0x2B}, {0x6E, 0x6E}, {0x6E, 0x4E}, /* 0xCC-0xCF */ + {0x6E, 0x6B}, {0x6E, 0xB2}, {0x6E, 0x5F}, {0x6E, 0x86}, /* 0xD0-0xD3 */ + {0x6E, 0x53}, {0x6E, 0x54}, {0x6E, 0x32}, {0x6E, 0x25}, /* 0xD4-0xD7 */ + {0x6E, 0x44}, {0x6E, 0xDF}, {0x6E, 0xB1}, {0x6E, 0x98}, /* 0xD8-0xDB */ + {0x6E, 0xE0}, {0x6F, 0x2D}, {0x6E, 0xE2}, {0x6E, 0xA5}, /* 0xDC-0xDF */ + {0x6E, 0xA7}, {0x6E, 0xBD}, {0x6E, 0xBB}, {0x6E, 0xB7}, /* 0xE0-0xE3 */ + {0x6E, 0xD7}, {0x6E, 0xB4}, {0x6E, 0xCF}, {0x6E, 0x8F}, /* 0xE4-0xE7 */ + {0x6E, 0xC2}, {0x6E, 0x9F}, {0x6F, 0x62}, {0x6F, 0x46}, /* 0xE8-0xEB */ + {0x6F, 0x47}, {0x6F, 0x24}, {0x6F, 0x15}, {0x6E, 0xF9}, /* 0xEC-0xEF */ + {0x6F, 0x2F}, {0x6F, 0x36}, {0x6F, 0x4B}, {0x6F, 0x74}, /* 0xF0-0xF3 */ + {0x6F, 0x2A}, {0x6F, 0x09}, {0x6F, 0x29}, {0x6F, 0x89}, /* 0xF4-0xF7 */ + {0x6F, 0x8D}, {0x6F, 0x8C}, {0x6F, 0x78}, {0x6F, 0x72}, /* 0xF8-0xFB */ + {0x6F, 0x7C}, {0x6F, 0x7A}, {0x6F, 0xD1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0x0A}, {0x93, 0x0B}, {0x93, 0x0C}, {0x93, 0x0D}, /* 0x40-0x43 */ + {0x93, 0x0E}, {0x93, 0x0F}, {0x93, 0x10}, {0x93, 0x11}, /* 0x44-0x47 */ + {0x93, 0x12}, {0x93, 0x13}, {0x93, 0x14}, {0x93, 0x15}, /* 0x48-0x4B */ + {0x93, 0x16}, {0x93, 0x17}, {0x93, 0x18}, {0x93, 0x19}, /* 0x4C-0x4F */ + {0x93, 0x1A}, {0x93, 0x1B}, {0x93, 0x1C}, {0x93, 0x1D}, /* 0x50-0x53 */ + {0x93, 0x1E}, {0x93, 0x1F}, {0x93, 0x20}, {0x93, 0x21}, /* 0x54-0x57 */ + {0x93, 0x22}, {0x93, 0x23}, {0x93, 0x24}, {0x93, 0x25}, /* 0x58-0x5B */ + {0x93, 0x26}, {0x93, 0x27}, {0x93, 0x28}, {0x93, 0x29}, /* 0x5C-0x5F */ + {0x93, 0x2A}, {0x93, 0x2B}, {0x93, 0x2C}, {0x93, 0x2D}, /* 0x60-0x63 */ + {0x93, 0x2E}, {0x93, 0x2F}, {0x93, 0x30}, {0x93, 0x31}, /* 0x64-0x67 */ + {0x93, 0x32}, {0x93, 0x33}, {0x93, 0x34}, {0x93, 0x35}, /* 0x68-0x6B */ + {0x93, 0x36}, {0x93, 0x37}, {0x93, 0x38}, {0x93, 0x39}, /* 0x6C-0x6F */ + {0x93, 0x3A}, {0x93, 0x3B}, {0x93, 0x3C}, {0x93, 0x3D}, /* 0x70-0x73 */ + {0x93, 0x3F}, {0x93, 0x40}, {0x93, 0x41}, {0x93, 0x42}, /* 0x74-0x77 */ + {0x93, 0x43}, {0x93, 0x44}, {0x93, 0x45}, {0x93, 0x46}, /* 0x78-0x7B */ + {0x93, 0x47}, {0x93, 0x48}, {0x93, 0x49}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x93, 0x4A}, {0x93, 0x4B}, {0x93, 0x4C}, {0x93, 0x4D}, /* 0x80-0x83 */ + {0x93, 0x4E}, {0x93, 0x4F}, {0x93, 0x50}, {0x93, 0x51}, /* 0x84-0x87 */ + {0x93, 0x52}, {0x93, 0x53}, {0x93, 0x54}, {0x93, 0x55}, /* 0x88-0x8B */ + {0x93, 0x56}, {0x93, 0x57}, {0x93, 0x58}, {0x93, 0x59}, /* 0x8C-0x8F */ + {0x93, 0x5A}, {0x93, 0x5B}, {0x93, 0x5C}, {0x93, 0x5D}, /* 0x90-0x93 */ + {0x93, 0x5E}, {0x93, 0x5F}, {0x93, 0x60}, {0x93, 0x61}, /* 0x94-0x97 */ + {0x93, 0x62}, {0x93, 0x63}, {0x93, 0x64}, {0x93, 0x65}, /* 0x98-0x9B */ + {0x93, 0x66}, {0x93, 0x67}, {0x93, 0x68}, {0x93, 0x69}, /* 0x9C-0x9F */ + {0x93, 0x6B}, {0x6F, 0xC9}, {0x6F, 0xA7}, {0x6F, 0xB9}, /* 0xA0-0xA3 */ + {0x6F, 0xB6}, {0x6F, 0xC2}, {0x6F, 0xE1}, {0x6F, 0xEE}, /* 0xA4-0xA7 */ + {0x6F, 0xDE}, {0x6F, 0xE0}, {0x6F, 0xEF}, {0x70, 0x1A}, /* 0xA8-0xAB */ + {0x70, 0x23}, {0x70, 0x1B}, {0x70, 0x39}, {0x70, 0x35}, /* 0xAC-0xAF */ + {0x70, 0x4F}, {0x70, 0x5E}, {0x5B, 0x80}, {0x5B, 0x84}, /* 0xB0-0xB3 */ + {0x5B, 0x95}, {0x5B, 0x93}, {0x5B, 0xA5}, {0x5B, 0xB8}, /* 0xB4-0xB7 */ + {0x75, 0x2F}, {0x9A, 0x9E}, {0x64, 0x34}, {0x5B, 0xE4}, /* 0xB8-0xBB */ + {0x5B, 0xEE}, {0x89, 0x30}, {0x5B, 0xF0}, {0x8E, 0x47}, /* 0xBC-0xBF */ + {0x8B, 0x07}, {0x8F, 0xB6}, {0x8F, 0xD3}, {0x8F, 0xD5}, /* 0xC0-0xC3 */ + {0x8F, 0xE5}, {0x8F, 0xEE}, {0x8F, 0xE4}, {0x8F, 0xE9}, /* 0xC4-0xC7 */ + {0x8F, 0xE6}, {0x8F, 0xF3}, {0x8F, 0xE8}, {0x90, 0x05}, /* 0xC8-0xCB */ + {0x90, 0x04}, {0x90, 0x0B}, {0x90, 0x26}, {0x90, 0x11}, /* 0xCC-0xCF */ + {0x90, 0x0D}, {0x90, 0x16}, {0x90, 0x21}, {0x90, 0x35}, /* 0xD0-0xD3 */ + {0x90, 0x36}, {0x90, 0x2D}, {0x90, 0x2F}, {0x90, 0x44}, /* 0xD4-0xD7 */ + {0x90, 0x51}, {0x90, 0x52}, {0x90, 0x50}, {0x90, 0x68}, /* 0xD8-0xDB */ + {0x90, 0x58}, {0x90, 0x62}, {0x90, 0x5B}, {0x66, 0xB9}, /* 0xDC-0xDF */ + {0x90, 0x74}, {0x90, 0x7D}, {0x90, 0x82}, {0x90, 0x88}, /* 0xE0-0xE3 */ + {0x90, 0x83}, {0x90, 0x8B}, {0x5F, 0x50}, {0x5F, 0x57}, /* 0xE4-0xE7 */ + {0x5F, 0x56}, {0x5F, 0x58}, {0x5C, 0x3B}, {0x54, 0xAB}, /* 0xE8-0xEB */ + {0x5C, 0x50}, {0x5C, 0x59}, {0x5B, 0x71}, {0x5C, 0x63}, /* 0xEC-0xEF */ + {0x5C, 0x66}, {0x7F, 0xBC}, {0x5F, 0x2A}, {0x5F, 0x29}, /* 0xF0-0xF3 */ + {0x5F, 0x2D}, {0x82, 0x74}, {0x5F, 0x3C}, {0x9B, 0x3B}, /* 0xF4-0xF7 */ + {0x5C, 0x6E}, {0x59, 0x81}, {0x59, 0x83}, {0x59, 0x8D}, /* 0xF8-0xFB */ + {0x59, 0xA9}, {0x59, 0xAA}, {0x59, 0xA3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0x6C}, {0x93, 0x6D}, {0x93, 0x6E}, {0x93, 0x6F}, /* 0x40-0x43 */ + {0x93, 0x70}, {0x93, 0x71}, {0x93, 0x72}, {0x93, 0x73}, /* 0x44-0x47 */ + {0x93, 0x74}, {0x93, 0x75}, {0x93, 0x76}, {0x93, 0x77}, /* 0x48-0x4B */ + {0x93, 0x78}, {0x93, 0x79}, {0x93, 0x7A}, {0x93, 0x7B}, /* 0x4C-0x4F */ + {0x93, 0x7C}, {0x93, 0x7D}, {0x93, 0x7E}, {0x93, 0x7F}, /* 0x50-0x53 */ + {0x93, 0x80}, {0x93, 0x81}, {0x93, 0x82}, {0x93, 0x83}, /* 0x54-0x57 */ + {0x93, 0x84}, {0x93, 0x85}, {0x93, 0x86}, {0x93, 0x87}, /* 0x58-0x5B */ + {0x93, 0x88}, {0x93, 0x89}, {0x93, 0x8A}, {0x93, 0x8B}, /* 0x5C-0x5F */ + {0x93, 0x8C}, {0x93, 0x8D}, {0x93, 0x8E}, {0x93, 0x90}, /* 0x60-0x63 */ + {0x93, 0x91}, {0x93, 0x92}, {0x93, 0x93}, {0x93, 0x94}, /* 0x64-0x67 */ + {0x93, 0x95}, {0x93, 0x96}, {0x93, 0x97}, {0x93, 0x98}, /* 0x68-0x6B */ + {0x93, 0x99}, {0x93, 0x9A}, {0x93, 0x9B}, {0x93, 0x9C}, /* 0x6C-0x6F */ + {0x93, 0x9D}, {0x93, 0x9E}, {0x93, 0x9F}, {0x93, 0xA0}, /* 0x70-0x73 */ + {0x93, 0xA1}, {0x93, 0xA2}, {0x93, 0xA3}, {0x93, 0xA4}, /* 0x74-0x77 */ + {0x93, 0xA5}, {0x93, 0xA6}, {0x93, 0xA7}, {0x93, 0xA8}, /* 0x78-0x7B */ + {0x93, 0xA9}, {0x93, 0xAA}, {0x93, 0xAB}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x93, 0xAC}, {0x93, 0xAD}, {0x93, 0xAE}, {0x93, 0xAF}, /* 0x80-0x83 */ + {0x93, 0xB0}, {0x93, 0xB1}, {0x93, 0xB2}, {0x93, 0xB3}, /* 0x84-0x87 */ + {0x93, 0xB4}, {0x93, 0xB5}, {0x93, 0xB6}, {0x93, 0xB7}, /* 0x88-0x8B */ + {0x93, 0xB8}, {0x93, 0xB9}, {0x93, 0xBA}, {0x93, 0xBB}, /* 0x8C-0x8F */ + {0x93, 0xBC}, {0x93, 0xBD}, {0x93, 0xBE}, {0x93, 0xBF}, /* 0x90-0x93 */ + {0x93, 0xC0}, {0x93, 0xC1}, {0x93, 0xC2}, {0x93, 0xC3}, /* 0x94-0x97 */ + {0x93, 0xC4}, {0x93, 0xC5}, {0x93, 0xC6}, {0x93, 0xC7}, /* 0x98-0x9B */ + {0x93, 0xC8}, {0x93, 0xC9}, {0x93, 0xCB}, {0x93, 0xCC}, /* 0x9C-0x9F */ + {0x93, 0xCD}, {0x59, 0x97}, {0x59, 0xCA}, {0x59, 0xAB}, /* 0xA0-0xA3 */ + {0x59, 0x9E}, {0x59, 0xA4}, {0x59, 0xD2}, {0x59, 0xB2}, /* 0xA4-0xA7 */ + {0x59, 0xAF}, {0x59, 0xD7}, {0x59, 0xBE}, {0x5A, 0x05}, /* 0xA8-0xAB */ + {0x5A, 0x06}, {0x59, 0xDD}, {0x5A, 0x08}, {0x59, 0xE3}, /* 0xAC-0xAF */ + {0x59, 0xD8}, {0x59, 0xF9}, {0x5A, 0x0C}, {0x5A, 0x09}, /* 0xB0-0xB3 */ + {0x5A, 0x32}, {0x5A, 0x34}, {0x5A, 0x11}, {0x5A, 0x23}, /* 0xB4-0xB7 */ + {0x5A, 0x13}, {0x5A, 0x40}, {0x5A, 0x67}, {0x5A, 0x4A}, /* 0xB8-0xBB */ + {0x5A, 0x55}, {0x5A, 0x3C}, {0x5A, 0x62}, {0x5A, 0x75}, /* 0xBC-0xBF */ + {0x80, 0xEC}, {0x5A, 0xAA}, {0x5A, 0x9B}, {0x5A, 0x77}, /* 0xC0-0xC3 */ + {0x5A, 0x7A}, {0x5A, 0xBE}, {0x5A, 0xEB}, {0x5A, 0xB2}, /* 0xC4-0xC7 */ + {0x5A, 0xD2}, {0x5A, 0xD4}, {0x5A, 0xB8}, {0x5A, 0xE0}, /* 0xC8-0xCB */ + {0x5A, 0xE3}, {0x5A, 0xF1}, {0x5A, 0xD6}, {0x5A, 0xE6}, /* 0xCC-0xCF */ + {0x5A, 0xD8}, {0x5A, 0xDC}, {0x5B, 0x09}, {0x5B, 0x17}, /* 0xD0-0xD3 */ + {0x5B, 0x16}, {0x5B, 0x32}, {0x5B, 0x37}, {0x5B, 0x40}, /* 0xD4-0xD7 */ + {0x5C, 0x15}, {0x5C, 0x1C}, {0x5B, 0x5A}, {0x5B, 0x65}, /* 0xD8-0xDB */ + {0x5B, 0x73}, {0x5B, 0x51}, {0x5B, 0x53}, {0x5B, 0x62}, /* 0xDC-0xDF */ + {0x9A, 0x75}, {0x9A, 0x77}, {0x9A, 0x78}, {0x9A, 0x7A}, /* 0xE0-0xE3 */ + {0x9A, 0x7F}, {0x9A, 0x7D}, {0x9A, 0x80}, {0x9A, 0x81}, /* 0xE4-0xE7 */ + {0x9A, 0x85}, {0x9A, 0x88}, {0x9A, 0x8A}, {0x9A, 0x90}, /* 0xE8-0xEB */ + {0x9A, 0x92}, {0x9A, 0x93}, {0x9A, 0x96}, {0x9A, 0x98}, /* 0xEC-0xEF */ + {0x9A, 0x9B}, {0x9A, 0x9C}, {0x9A, 0x9D}, {0x9A, 0x9F}, /* 0xF0-0xF3 */ + {0x9A, 0xA0}, {0x9A, 0xA2}, {0x9A, 0xA3}, {0x9A, 0xA5}, /* 0xF4-0xF7 */ + {0x9A, 0xA7}, {0x7E, 0x9F}, {0x7E, 0xA1}, {0x7E, 0xA3}, /* 0xF8-0xFB */ + {0x7E, 0xA5}, {0x7E, 0xA8}, {0x7E, 0xA9}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0xCE}, {0x93, 0xCF}, {0x93, 0xD0}, {0x93, 0xD1}, /* 0x40-0x43 */ + {0x93, 0xD2}, {0x93, 0xD3}, {0x93, 0xD4}, {0x93, 0xD5}, /* 0x44-0x47 */ + {0x93, 0xD7}, {0x93, 0xD8}, {0x93, 0xD9}, {0x93, 0xDA}, /* 0x48-0x4B */ + {0x93, 0xDB}, {0x93, 0xDC}, {0x93, 0xDD}, {0x93, 0xDE}, /* 0x4C-0x4F */ + {0x93, 0xDF}, {0x93, 0xE0}, {0x93, 0xE1}, {0x93, 0xE2}, /* 0x50-0x53 */ + {0x93, 0xE3}, {0x93, 0xE4}, {0x93, 0xE5}, {0x93, 0xE6}, /* 0x54-0x57 */ + {0x93, 0xE7}, {0x93, 0xE8}, {0x93, 0xE9}, {0x93, 0xEA}, /* 0x58-0x5B */ + {0x93, 0xEB}, {0x93, 0xEC}, {0x93, 0xED}, {0x93, 0xEE}, /* 0x5C-0x5F */ + {0x93, 0xEF}, {0x93, 0xF0}, {0x93, 0xF1}, {0x93, 0xF2}, /* 0x60-0x63 */ + {0x93, 0xF3}, {0x93, 0xF4}, {0x93, 0xF5}, {0x93, 0xF6}, /* 0x64-0x67 */ + {0x93, 0xF7}, {0x93, 0xF8}, {0x93, 0xF9}, {0x93, 0xFA}, /* 0x68-0x6B */ + {0x93, 0xFB}, {0x93, 0xFC}, {0x93, 0xFD}, {0x93, 0xFE}, /* 0x6C-0x6F */ + {0x93, 0xFF}, {0x94, 0x00}, {0x94, 0x01}, {0x94, 0x02}, /* 0x70-0x73 */ + {0x94, 0x03}, {0x94, 0x04}, {0x94, 0x05}, {0x94, 0x06}, /* 0x74-0x77 */ + {0x94, 0x07}, {0x94, 0x08}, {0x94, 0x09}, {0x94, 0x0A}, /* 0x78-0x7B */ + {0x94, 0x0B}, {0x94, 0x0C}, {0x94, 0x0D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x94, 0x0E}, {0x94, 0x0F}, {0x94, 0x10}, {0x94, 0x11}, /* 0x80-0x83 */ + {0x94, 0x12}, {0x94, 0x13}, {0x94, 0x14}, {0x94, 0x15}, /* 0x84-0x87 */ + {0x94, 0x16}, {0x94, 0x17}, {0x94, 0x18}, {0x94, 0x19}, /* 0x88-0x8B */ + {0x94, 0x1A}, {0x94, 0x1B}, {0x94, 0x1C}, {0x94, 0x1D}, /* 0x8C-0x8F */ + {0x94, 0x1E}, {0x94, 0x1F}, {0x94, 0x20}, {0x94, 0x21}, /* 0x90-0x93 */ + {0x94, 0x22}, {0x94, 0x23}, {0x94, 0x24}, {0x94, 0x25}, /* 0x94-0x97 */ + {0x94, 0x26}, {0x94, 0x27}, {0x94, 0x28}, {0x94, 0x29}, /* 0x98-0x9B */ + {0x94, 0x2A}, {0x94, 0x2B}, {0x94, 0x2C}, {0x94, 0x2D}, /* 0x9C-0x9F */ + {0x94, 0x2E}, {0x7E, 0xAD}, {0x7E, 0xB0}, {0x7E, 0xBE}, /* 0xA0-0xA3 */ + {0x7E, 0xC0}, {0x7E, 0xC1}, {0x7E, 0xC2}, {0x7E, 0xC9}, /* 0xA4-0xA7 */ + {0x7E, 0xCB}, {0x7E, 0xCC}, {0x7E, 0xD0}, {0x7E, 0xD4}, /* 0xA8-0xAB */ + {0x7E, 0xD7}, {0x7E, 0xDB}, {0x7E, 0xE0}, {0x7E, 0xE1}, /* 0xAC-0xAF */ + {0x7E, 0xE8}, {0x7E, 0xEB}, {0x7E, 0xEE}, {0x7E, 0xEF}, /* 0xB0-0xB3 */ + {0x7E, 0xF1}, {0x7E, 0xF2}, {0x7F, 0x0D}, {0x7E, 0xF6}, /* 0xB4-0xB7 */ + {0x7E, 0xFA}, {0x7E, 0xFB}, {0x7E, 0xFE}, {0x7F, 0x01}, /* 0xB8-0xBB */ + {0x7F, 0x02}, {0x7F, 0x03}, {0x7F, 0x07}, {0x7F, 0x08}, /* 0xBC-0xBF */ + {0x7F, 0x0B}, {0x7F, 0x0C}, {0x7F, 0x0F}, {0x7F, 0x11}, /* 0xC0-0xC3 */ + {0x7F, 0x12}, {0x7F, 0x17}, {0x7F, 0x19}, {0x7F, 0x1C}, /* 0xC4-0xC7 */ + {0x7F, 0x1B}, {0x7F, 0x1F}, {0x7F, 0x21}, {0x7F, 0x22}, /* 0xC8-0xCB */ + {0x7F, 0x23}, {0x7F, 0x24}, {0x7F, 0x25}, {0x7F, 0x26}, /* 0xCC-0xCF */ + {0x7F, 0x27}, {0x7F, 0x2A}, {0x7F, 0x2B}, {0x7F, 0x2C}, /* 0xD0-0xD3 */ + {0x7F, 0x2D}, {0x7F, 0x2F}, {0x7F, 0x30}, {0x7F, 0x31}, /* 0xD4-0xD7 */ + {0x7F, 0x32}, {0x7F, 0x33}, {0x7F, 0x35}, {0x5E, 0x7A}, /* 0xD8-0xDB */ + {0x75, 0x7F}, {0x5D, 0xDB}, {0x75, 0x3E}, {0x90, 0x95}, /* 0xDC-0xDF */ + {0x73, 0x8E}, {0x73, 0x91}, {0x73, 0xAE}, {0x73, 0xA2}, /* 0xE0-0xE3 */ + {0x73, 0x9F}, {0x73, 0xCF}, {0x73, 0xC2}, {0x73, 0xD1}, /* 0xE4-0xE7 */ + {0x73, 0xB7}, {0x73, 0xB3}, {0x73, 0xC0}, {0x73, 0xC9}, /* 0xE8-0xEB */ + {0x73, 0xC8}, {0x73, 0xE5}, {0x73, 0xD9}, {0x98, 0x7C}, /* 0xEC-0xEF */ + {0x74, 0x0A}, {0x73, 0xE9}, {0x73, 0xE7}, {0x73, 0xDE}, /* 0xF0-0xF3 */ + {0x73, 0xBA}, {0x73, 0xF2}, {0x74, 0x0F}, {0x74, 0x2A}, /* 0xF4-0xF7 */ + {0x74, 0x5B}, {0x74, 0x26}, {0x74, 0x25}, {0x74, 0x28}, /* 0xF8-0xFB */ + {0x74, 0x30}, {0x74, 0x2E}, {0x74, 0x2C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x94, 0x2F}, {0x94, 0x30}, {0x94, 0x31}, {0x94, 0x32}, /* 0x40-0x43 */ + {0x94, 0x33}, {0x94, 0x34}, {0x94, 0x35}, {0x94, 0x36}, /* 0x44-0x47 */ + {0x94, 0x37}, {0x94, 0x38}, {0x94, 0x39}, {0x94, 0x3A}, /* 0x48-0x4B */ + {0x94, 0x3B}, {0x94, 0x3C}, {0x94, 0x3D}, {0x94, 0x3F}, /* 0x4C-0x4F */ + {0x94, 0x40}, {0x94, 0x41}, {0x94, 0x42}, {0x94, 0x43}, /* 0x50-0x53 */ + {0x94, 0x44}, {0x94, 0x45}, {0x94, 0x46}, {0x94, 0x47}, /* 0x54-0x57 */ + {0x94, 0x48}, {0x94, 0x49}, {0x94, 0x4A}, {0x94, 0x4B}, /* 0x58-0x5B */ + {0x94, 0x4C}, {0x94, 0x4D}, {0x94, 0x4E}, {0x94, 0x4F}, /* 0x5C-0x5F */ + {0x94, 0x50}, {0x94, 0x51}, {0x94, 0x52}, {0x94, 0x53}, /* 0x60-0x63 */ + {0x94, 0x54}, {0x94, 0x55}, {0x94, 0x56}, {0x94, 0x57}, /* 0x64-0x67 */ + {0x94, 0x58}, {0x94, 0x59}, {0x94, 0x5A}, {0x94, 0x5B}, /* 0x68-0x6B */ + {0x94, 0x5C}, {0x94, 0x5D}, {0x94, 0x5E}, {0x94, 0x5F}, /* 0x6C-0x6F */ + {0x94, 0x60}, {0x94, 0x61}, {0x94, 0x62}, {0x94, 0x63}, /* 0x70-0x73 */ + {0x94, 0x64}, {0x94, 0x65}, {0x94, 0x66}, {0x94, 0x67}, /* 0x74-0x77 */ + {0x94, 0x68}, {0x94, 0x69}, {0x94, 0x6A}, {0x94, 0x6C}, /* 0x78-0x7B */ + {0x94, 0x6D}, {0x94, 0x6E}, {0x94, 0x6F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x94, 0x70}, {0x94, 0x71}, {0x94, 0x72}, {0x94, 0x73}, /* 0x80-0x83 */ + {0x94, 0x74}, {0x94, 0x75}, {0x94, 0x76}, {0x94, 0x77}, /* 0x84-0x87 */ + {0x94, 0x78}, {0x94, 0x79}, {0x94, 0x7A}, {0x94, 0x7B}, /* 0x88-0x8B */ + {0x94, 0x7C}, {0x94, 0x7D}, {0x94, 0x7E}, {0x94, 0x7F}, /* 0x8C-0x8F */ + {0x94, 0x80}, {0x94, 0x81}, {0x94, 0x82}, {0x94, 0x83}, /* 0x90-0x93 */ + {0x94, 0x84}, {0x94, 0x91}, {0x94, 0x96}, {0x94, 0x98}, /* 0x94-0x97 */ + {0x94, 0xC7}, {0x94, 0xCF}, {0x94, 0xD3}, {0x94, 0xD4}, /* 0x98-0x9B */ + {0x94, 0xDA}, {0x94, 0xE6}, {0x94, 0xFB}, {0x95, 0x1C}, /* 0x9C-0x9F */ + {0x95, 0x20}, {0x74, 0x1B}, {0x74, 0x1A}, {0x74, 0x41}, /* 0xA0-0xA3 */ + {0x74, 0x5C}, {0x74, 0x57}, {0x74, 0x55}, {0x74, 0x59}, /* 0xA4-0xA7 */ + {0x74, 0x77}, {0x74, 0x6D}, {0x74, 0x7E}, {0x74, 0x9C}, /* 0xA8-0xAB */ + {0x74, 0x8E}, {0x74, 0x80}, {0x74, 0x81}, {0x74, 0x87}, /* 0xAC-0xAF */ + {0x74, 0x8B}, {0x74, 0x9E}, {0x74, 0xA8}, {0x74, 0xA9}, /* 0xB0-0xB3 */ + {0x74, 0x90}, {0x74, 0xA7}, {0x74, 0xD2}, {0x74, 0xBA}, /* 0xB4-0xB7 */ + {0x97, 0xEA}, {0x97, 0xEB}, {0x97, 0xEC}, {0x67, 0x4C}, /* 0xB8-0xBB */ + {0x67, 0x53}, {0x67, 0x5E}, {0x67, 0x48}, {0x67, 0x69}, /* 0xBC-0xBF */ + {0x67, 0xA5}, {0x67, 0x87}, {0x67, 0x6A}, {0x67, 0x73}, /* 0xC0-0xC3 */ + {0x67, 0x98}, {0x67, 0xA7}, {0x67, 0x75}, {0x67, 0xA8}, /* 0xC4-0xC7 */ + {0x67, 0x9E}, {0x67, 0xAD}, {0x67, 0x8B}, {0x67, 0x77}, /* 0xC8-0xCB */ + {0x67, 0x7C}, {0x67, 0xF0}, {0x68, 0x09}, {0x67, 0xD8}, /* 0xCC-0xCF */ + {0x68, 0x0A}, {0x67, 0xE9}, {0x67, 0xB0}, {0x68, 0x0C}, /* 0xD0-0xD3 */ + {0x67, 0xD9}, {0x67, 0xB5}, {0x67, 0xDA}, {0x67, 0xB3}, /* 0xD4-0xD7 */ + {0x67, 0xDD}, {0x68, 0x00}, {0x67, 0xC3}, {0x67, 0xB8}, /* 0xD8-0xDB */ + {0x67, 0xE2}, {0x68, 0x0E}, {0x67, 0xC1}, {0x67, 0xFD}, /* 0xDC-0xDF */ + {0x68, 0x32}, {0x68, 0x33}, {0x68, 0x60}, {0x68, 0x61}, /* 0xE0-0xE3 */ + {0x68, 0x4E}, {0x68, 0x62}, {0x68, 0x44}, {0x68, 0x64}, /* 0xE4-0xE7 */ + {0x68, 0x83}, {0x68, 0x1D}, {0x68, 0x55}, {0x68, 0x66}, /* 0xE8-0xEB */ + {0x68, 0x41}, {0x68, 0x67}, {0x68, 0x40}, {0x68, 0x3E}, /* 0xEC-0xEF */ + {0x68, 0x4A}, {0x68, 0x49}, {0x68, 0x29}, {0x68, 0xB5}, /* 0xF0-0xF3 */ + {0x68, 0x8F}, {0x68, 0x74}, {0x68, 0x77}, {0x68, 0x93}, /* 0xF4-0xF7 */ + {0x68, 0x6B}, {0x68, 0xC2}, {0x69, 0x6E}, {0x68, 0xFC}, /* 0xF8-0xFB */ + {0x69, 0x1F}, {0x69, 0x20}, {0x68, 0xF9}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x95, 0x27}, {0x95, 0x33}, {0x95, 0x3D}, {0x95, 0x43}, /* 0x40-0x43 */ + {0x95, 0x48}, {0x95, 0x4B}, {0x95, 0x55}, {0x95, 0x5A}, /* 0x44-0x47 */ + {0x95, 0x60}, {0x95, 0x6E}, {0x95, 0x74}, {0x95, 0x75}, /* 0x48-0x4B */ + {0x95, 0x77}, {0x95, 0x78}, {0x95, 0x79}, {0x95, 0x7A}, /* 0x4C-0x4F */ + {0x95, 0x7B}, {0x95, 0x7C}, {0x95, 0x7D}, {0x95, 0x7E}, /* 0x50-0x53 */ + {0x95, 0x80}, {0x95, 0x81}, {0x95, 0x82}, {0x95, 0x83}, /* 0x54-0x57 */ + {0x95, 0x84}, {0x95, 0x85}, {0x95, 0x86}, {0x95, 0x87}, /* 0x58-0x5B */ + {0x95, 0x88}, {0x95, 0x89}, {0x95, 0x8A}, {0x95, 0x8B}, /* 0x5C-0x5F */ + {0x95, 0x8C}, {0x95, 0x8D}, {0x95, 0x8E}, {0x95, 0x8F}, /* 0x60-0x63 */ + {0x95, 0x90}, {0x95, 0x91}, {0x95, 0x92}, {0x95, 0x93}, /* 0x64-0x67 */ + {0x95, 0x94}, {0x95, 0x95}, {0x95, 0x96}, {0x95, 0x97}, /* 0x68-0x6B */ + {0x95, 0x98}, {0x95, 0x99}, {0x95, 0x9A}, {0x95, 0x9B}, /* 0x6C-0x6F */ + {0x95, 0x9C}, {0x95, 0x9D}, {0x95, 0x9E}, {0x95, 0x9F}, /* 0x70-0x73 */ + {0x95, 0xA0}, {0x95, 0xA1}, {0x95, 0xA2}, {0x95, 0xA3}, /* 0x74-0x77 */ + {0x95, 0xA4}, {0x95, 0xA5}, {0x95, 0xA6}, {0x95, 0xA7}, /* 0x78-0x7B */ + {0x95, 0xA8}, {0x95, 0xA9}, {0x95, 0xAA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x95, 0xAB}, {0x95, 0xAC}, {0x95, 0xAD}, {0x95, 0xAE}, /* 0x80-0x83 */ + {0x95, 0xAF}, {0x95, 0xB0}, {0x95, 0xB1}, {0x95, 0xB2}, /* 0x84-0x87 */ + {0x95, 0xB3}, {0x95, 0xB4}, {0x95, 0xB5}, {0x95, 0xB6}, /* 0x88-0x8B */ + {0x95, 0xB7}, {0x95, 0xB8}, {0x95, 0xB9}, {0x95, 0xBA}, /* 0x8C-0x8F */ + {0x95, 0xBB}, {0x95, 0xBC}, {0x95, 0xBD}, {0x95, 0xBE}, /* 0x90-0x93 */ + {0x95, 0xBF}, {0x95, 0xC0}, {0x95, 0xC1}, {0x95, 0xC2}, /* 0x94-0x97 */ + {0x95, 0xC3}, {0x95, 0xC4}, {0x95, 0xC5}, {0x95, 0xC6}, /* 0x98-0x9B */ + {0x95, 0xC7}, {0x95, 0xC8}, {0x95, 0xC9}, {0x95, 0xCA}, /* 0x9C-0x9F */ + {0x95, 0xCB}, {0x69, 0x24}, {0x68, 0xF0}, {0x69, 0x0B}, /* 0xA0-0xA3 */ + {0x69, 0x01}, {0x69, 0x57}, {0x68, 0xE3}, {0x69, 0x10}, /* 0xA4-0xA7 */ + {0x69, 0x71}, {0x69, 0x39}, {0x69, 0x60}, {0x69, 0x42}, /* 0xA8-0xAB */ + {0x69, 0x5D}, {0x69, 0x84}, {0x69, 0x6B}, {0x69, 0x80}, /* 0xAC-0xAF */ + {0x69, 0x98}, {0x69, 0x78}, {0x69, 0x34}, {0x69, 0xCC}, /* 0xB0-0xB3 */ + {0x69, 0x87}, {0x69, 0x88}, {0x69, 0xCE}, {0x69, 0x89}, /* 0xB4-0xB7 */ + {0x69, 0x66}, {0x69, 0x63}, {0x69, 0x79}, {0x69, 0x9B}, /* 0xB8-0xBB */ + {0x69, 0xA7}, {0x69, 0xBB}, {0x69, 0xAB}, {0x69, 0xAD}, /* 0xBC-0xBF */ + {0x69, 0xD4}, {0x69, 0xB1}, {0x69, 0xC1}, {0x69, 0xCA}, /* 0xC0-0xC3 */ + {0x69, 0xDF}, {0x69, 0x95}, {0x69, 0xE0}, {0x69, 0x8D}, /* 0xC4-0xC7 */ + {0x69, 0xFF}, {0x6A, 0x2F}, {0x69, 0xED}, {0x6A, 0x17}, /* 0xC8-0xCB */ + {0x6A, 0x18}, {0x6A, 0x65}, {0x69, 0xF2}, {0x6A, 0x44}, /* 0xCC-0xCF */ + {0x6A, 0x3E}, {0x6A, 0xA0}, {0x6A, 0x50}, {0x6A, 0x5B}, /* 0xD0-0xD3 */ + {0x6A, 0x35}, {0x6A, 0x8E}, {0x6A, 0x79}, {0x6A, 0x3D}, /* 0xD4-0xD7 */ + {0x6A, 0x28}, {0x6A, 0x58}, {0x6A, 0x7C}, {0x6A, 0x91}, /* 0xD8-0xDB */ + {0x6A, 0x90}, {0x6A, 0xA9}, {0x6A, 0x97}, {0x6A, 0xAB}, /* 0xDC-0xDF */ + {0x73, 0x37}, {0x73, 0x52}, {0x6B, 0x81}, {0x6B, 0x82}, /* 0xE0-0xE3 */ + {0x6B, 0x87}, {0x6B, 0x84}, {0x6B, 0x92}, {0x6B, 0x93}, /* 0xE4-0xE7 */ + {0x6B, 0x8D}, {0x6B, 0x9A}, {0x6B, 0x9B}, {0x6B, 0xA1}, /* 0xE8-0xEB */ + {0x6B, 0xAA}, {0x8F, 0x6B}, {0x8F, 0x6D}, {0x8F, 0x71}, /* 0xEC-0xEF */ + {0x8F, 0x72}, {0x8F, 0x73}, {0x8F, 0x75}, {0x8F, 0x76}, /* 0xF0-0xF3 */ + {0x8F, 0x78}, {0x8F, 0x77}, {0x8F, 0x79}, {0x8F, 0x7A}, /* 0xF4-0xF7 */ + {0x8F, 0x7C}, {0x8F, 0x7E}, {0x8F, 0x81}, {0x8F, 0x82}, /* 0xF8-0xFB */ + {0x8F, 0x84}, {0x8F, 0x87}, {0x8F, 0x8B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x95, 0xCC}, {0x95, 0xCD}, {0x95, 0xCE}, {0x95, 0xCF}, /* 0x40-0x43 */ + {0x95, 0xD0}, {0x95, 0xD1}, {0x95, 0xD2}, {0x95, 0xD3}, /* 0x44-0x47 */ + {0x95, 0xD4}, {0x95, 0xD5}, {0x95, 0xD6}, {0x95, 0xD7}, /* 0x48-0x4B */ + {0x95, 0xD8}, {0x95, 0xD9}, {0x95, 0xDA}, {0x95, 0xDB}, /* 0x4C-0x4F */ + {0x95, 0xDC}, {0x95, 0xDD}, {0x95, 0xDE}, {0x95, 0xDF}, /* 0x50-0x53 */ + {0x95, 0xE0}, {0x95, 0xE1}, {0x95, 0xE2}, {0x95, 0xE3}, /* 0x54-0x57 */ + {0x95, 0xE4}, {0x95, 0xE5}, {0x95, 0xE6}, {0x95, 0xE7}, /* 0x58-0x5B */ + {0x95, 0xEC}, {0x95, 0xFF}, {0x96, 0x07}, {0x96, 0x13}, /* 0x5C-0x5F */ + {0x96, 0x18}, {0x96, 0x1B}, {0x96, 0x1E}, {0x96, 0x20}, /* 0x60-0x63 */ + {0x96, 0x23}, {0x96, 0x24}, {0x96, 0x25}, {0x96, 0x26}, /* 0x64-0x67 */ + {0x96, 0x27}, {0x96, 0x28}, {0x96, 0x29}, {0x96, 0x2B}, /* 0x68-0x6B */ + {0x96, 0x2C}, {0x96, 0x2D}, {0x96, 0x2F}, {0x96, 0x30}, /* 0x6C-0x6F */ + {0x96, 0x37}, {0x96, 0x38}, {0x96, 0x39}, {0x96, 0x3A}, /* 0x70-0x73 */ + {0x96, 0x3E}, {0x96, 0x41}, {0x96, 0x43}, {0x96, 0x4A}, /* 0x74-0x77 */ + {0x96, 0x4E}, {0x96, 0x4F}, {0x96, 0x51}, {0x96, 0x52}, /* 0x78-0x7B */ + {0x96, 0x53}, {0x96, 0x56}, {0x96, 0x57}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x96, 0x58}, {0x96, 0x59}, {0x96, 0x5A}, {0x96, 0x5C}, /* 0x80-0x83 */ + {0x96, 0x5D}, {0x96, 0x5E}, {0x96, 0x60}, {0x96, 0x63}, /* 0x84-0x87 */ + {0x96, 0x65}, {0x96, 0x66}, {0x96, 0x6B}, {0x96, 0x6D}, /* 0x88-0x8B */ + {0x96, 0x6E}, {0x96, 0x6F}, {0x96, 0x70}, {0x96, 0x71}, /* 0x8C-0x8F */ + {0x96, 0x73}, {0x96, 0x78}, {0x96, 0x79}, {0x96, 0x7A}, /* 0x90-0x93 */ + {0x96, 0x7B}, {0x96, 0x7C}, {0x96, 0x7D}, {0x96, 0x7E}, /* 0x94-0x97 */ + {0x96, 0x7F}, {0x96, 0x80}, {0x96, 0x81}, {0x96, 0x82}, /* 0x98-0x9B */ + {0x96, 0x83}, {0x96, 0x84}, {0x96, 0x87}, {0x96, 0x89}, /* 0x9C-0x9F */ + {0x96, 0x8A}, {0x8F, 0x8D}, {0x8F, 0x8E}, {0x8F, 0x8F}, /* 0xA0-0xA3 */ + {0x8F, 0x98}, {0x8F, 0x9A}, {0x8E, 0xCE}, {0x62, 0x0B}, /* 0xA4-0xA7 */ + {0x62, 0x17}, {0x62, 0x1B}, {0x62, 0x1F}, {0x62, 0x22}, /* 0xA8-0xAB */ + {0x62, 0x21}, {0x62, 0x25}, {0x62, 0x24}, {0x62, 0x2C}, /* 0xAC-0xAF */ + {0x81, 0xE7}, {0x74, 0xEF}, {0x74, 0xF4}, {0x74, 0xFF}, /* 0xB0-0xB3 */ + {0x75, 0x0F}, {0x75, 0x11}, {0x75, 0x13}, {0x65, 0x34}, /* 0xB4-0xB7 */ + {0x65, 0xEE}, {0x65, 0xEF}, {0x65, 0xF0}, {0x66, 0x0A}, /* 0xB8-0xBB */ + {0x66, 0x19}, {0x67, 0x72}, {0x66, 0x03}, {0x66, 0x15}, /* 0xBC-0xBF */ + {0x66, 0x00}, {0x70, 0x85}, {0x66, 0xF7}, {0x66, 0x1D}, /* 0xC0-0xC3 */ + {0x66, 0x34}, {0x66, 0x31}, {0x66, 0x36}, {0x66, 0x35}, /* 0xC4-0xC7 */ + {0x80, 0x06}, {0x66, 0x5F}, {0x66, 0x54}, {0x66, 0x41}, /* 0xC8-0xCB */ + {0x66, 0x4F}, {0x66, 0x56}, {0x66, 0x61}, {0x66, 0x57}, /* 0xCC-0xCF */ + {0x66, 0x77}, {0x66, 0x84}, {0x66, 0x8C}, {0x66, 0xA7}, /* 0xD0-0xD3 */ + {0x66, 0x9D}, {0x66, 0xBE}, {0x66, 0xDB}, {0x66, 0xDC}, /* 0xD4-0xD7 */ + {0x66, 0xE6}, {0x66, 0xE9}, {0x8D, 0x32}, {0x8D, 0x33}, /* 0xD8-0xDB */ + {0x8D, 0x36}, {0x8D, 0x3B}, {0x8D, 0x3D}, {0x8D, 0x40}, /* 0xDC-0xDF */ + {0x8D, 0x45}, {0x8D, 0x46}, {0x8D, 0x48}, {0x8D, 0x49}, /* 0xE0-0xE3 */ + {0x8D, 0x47}, {0x8D, 0x4D}, {0x8D, 0x55}, {0x8D, 0x59}, /* 0xE4-0xE7 */ + {0x89, 0xC7}, {0x89, 0xCA}, {0x89, 0xCB}, {0x89, 0xCC}, /* 0xE8-0xEB */ + {0x89, 0xCE}, {0x89, 0xCF}, {0x89, 0xD0}, {0x89, 0xD1}, /* 0xEC-0xEF */ + {0x72, 0x6E}, {0x72, 0x9F}, {0x72, 0x5D}, {0x72, 0x66}, /* 0xF0-0xF3 */ + {0x72, 0x6F}, {0x72, 0x7E}, {0x72, 0x7F}, {0x72, 0x84}, /* 0xF4-0xF7 */ + {0x72, 0x8B}, {0x72, 0x8D}, {0x72, 0x8F}, {0x72, 0x92}, /* 0xF8-0xFB */ + {0x63, 0x08}, {0x63, 0x32}, {0x63, 0xB0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x96, 0x8C}, {0x96, 0x8E}, {0x96, 0x91}, {0x96, 0x92}, /* 0x40-0x43 */ + {0x96, 0x93}, {0x96, 0x95}, {0x96, 0x96}, {0x96, 0x9A}, /* 0x44-0x47 */ + {0x96, 0x9B}, {0x96, 0x9D}, {0x96, 0x9E}, {0x96, 0x9F}, /* 0x48-0x4B */ + {0x96, 0xA0}, {0x96, 0xA1}, {0x96, 0xA2}, {0x96, 0xA3}, /* 0x4C-0x4F */ + {0x96, 0xA4}, {0x96, 0xA5}, {0x96, 0xA6}, {0x96, 0xA8}, /* 0x50-0x53 */ + {0x96, 0xA9}, {0x96, 0xAA}, {0x96, 0xAB}, {0x96, 0xAC}, /* 0x54-0x57 */ + {0x96, 0xAD}, {0x96, 0xAE}, {0x96, 0xAF}, {0x96, 0xB1}, /* 0x58-0x5B */ + {0x96, 0xB2}, {0x96, 0xB4}, {0x96, 0xB5}, {0x96, 0xB7}, /* 0x5C-0x5F */ + {0x96, 0xB8}, {0x96, 0xBA}, {0x96, 0xBB}, {0x96, 0xBF}, /* 0x60-0x63 */ + {0x96, 0xC2}, {0x96, 0xC3}, {0x96, 0xC8}, {0x96, 0xCA}, /* 0x64-0x67 */ + {0x96, 0xCB}, {0x96, 0xD0}, {0x96, 0xD1}, {0x96, 0xD3}, /* 0x68-0x6B */ + {0x96, 0xD4}, {0x96, 0xD6}, {0x96, 0xD7}, {0x96, 0xD8}, /* 0x6C-0x6F */ + {0x96, 0xD9}, {0x96, 0xDA}, {0x96, 0xDB}, {0x96, 0xDC}, /* 0x70-0x73 */ + {0x96, 0xDD}, {0x96, 0xDE}, {0x96, 0xDF}, {0x96, 0xE1}, /* 0x74-0x77 */ + {0x96, 0xE2}, {0x96, 0xE3}, {0x96, 0xE4}, {0x96, 0xE5}, /* 0x78-0x7B */ + {0x96, 0xE6}, {0x96, 0xE7}, {0x96, 0xEB}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x96, 0xEC}, {0x96, 0xED}, {0x96, 0xEE}, {0x96, 0xF0}, /* 0x80-0x83 */ + {0x96, 0xF1}, {0x96, 0xF2}, {0x96, 0xF4}, {0x96, 0xF5}, /* 0x84-0x87 */ + {0x96, 0xF8}, {0x96, 0xFA}, {0x96, 0xFB}, {0x96, 0xFC}, /* 0x88-0x8B */ + {0x96, 0xFD}, {0x96, 0xFF}, {0x97, 0x02}, {0x97, 0x03}, /* 0x8C-0x8F */ + {0x97, 0x05}, {0x97, 0x0A}, {0x97, 0x0B}, {0x97, 0x0C}, /* 0x90-0x93 */ + {0x97, 0x10}, {0x97, 0x11}, {0x97, 0x12}, {0x97, 0x14}, /* 0x94-0x97 */ + {0x97, 0x15}, {0x97, 0x17}, {0x97, 0x18}, {0x97, 0x19}, /* 0x98-0x9B */ + {0x97, 0x1A}, {0x97, 0x1B}, {0x97, 0x1D}, {0x97, 0x1F}, /* 0x9C-0x9F */ + {0x97, 0x20}, {0x64, 0x3F}, {0x64, 0xD8}, {0x80, 0x04}, /* 0xA0-0xA3 */ + {0x6B, 0xEA}, {0x6B, 0xF3}, {0x6B, 0xFD}, {0x6B, 0xF5}, /* 0xA4-0xA7 */ + {0x6B, 0xF9}, {0x6C, 0x05}, {0x6C, 0x07}, {0x6C, 0x06}, /* 0xA8-0xAB */ + {0x6C, 0x0D}, {0x6C, 0x15}, {0x6C, 0x18}, {0x6C, 0x19}, /* 0xAC-0xAF */ + {0x6C, 0x1A}, {0x6C, 0x21}, {0x6C, 0x29}, {0x6C, 0x24}, /* 0xB0-0xB3 */ + {0x6C, 0x2A}, {0x6C, 0x32}, {0x65, 0x35}, {0x65, 0x55}, /* 0xB4-0xB7 */ + {0x65, 0x6B}, {0x72, 0x4D}, {0x72, 0x52}, {0x72, 0x56}, /* 0xB8-0xBB */ + {0x72, 0x30}, {0x86, 0x62}, {0x52, 0x16}, {0x80, 0x9F}, /* 0xBC-0xBF */ + {0x80, 0x9C}, {0x80, 0x93}, {0x80, 0xBC}, {0x67, 0x0A}, /* 0xC0-0xC3 */ + {0x80, 0xBD}, {0x80, 0xB1}, {0x80, 0xAB}, {0x80, 0xAD}, /* 0xC4-0xC7 */ + {0x80, 0xB4}, {0x80, 0xB7}, {0x80, 0xE7}, {0x80, 0xE8}, /* 0xC8-0xCB */ + {0x80, 0xE9}, {0x80, 0xEA}, {0x80, 0xDB}, {0x80, 0xC2}, /* 0xCC-0xCF */ + {0x80, 0xC4}, {0x80, 0xD9}, {0x80, 0xCD}, {0x80, 0xD7}, /* 0xD0-0xD3 */ + {0x67, 0x10}, {0x80, 0xDD}, {0x80, 0xEB}, {0x80, 0xF1}, /* 0xD4-0xD7 */ + {0x80, 0xF4}, {0x80, 0xED}, {0x81, 0x0D}, {0x81, 0x0E}, /* 0xD8-0xDB */ + {0x80, 0xF2}, {0x80, 0xFC}, {0x67, 0x15}, {0x81, 0x12}, /* 0xDC-0xDF */ + {0x8C, 0x5A}, {0x81, 0x36}, {0x81, 0x1E}, {0x81, 0x2C}, /* 0xE0-0xE3 */ + {0x81, 0x18}, {0x81, 0x32}, {0x81, 0x48}, {0x81, 0x4C}, /* 0xE4-0xE7 */ + {0x81, 0x53}, {0x81, 0x74}, {0x81, 0x59}, {0x81, 0x5A}, /* 0xE8-0xEB */ + {0x81, 0x71}, {0x81, 0x60}, {0x81, 0x69}, {0x81, 0x7C}, /* 0xEC-0xEF */ + {0x81, 0x7D}, {0x81, 0x6D}, {0x81, 0x67}, {0x58, 0x4D}, /* 0xF0-0xF3 */ + {0x5A, 0xB5}, {0x81, 0x88}, {0x81, 0x82}, {0x81, 0x91}, /* 0xF4-0xF7 */ + {0x6E, 0xD5}, {0x81, 0xA3}, {0x81, 0xAA}, {0x81, 0xCC}, /* 0xF8-0xFB */ + {0x67, 0x26}, {0x81, 0xCA}, {0x81, 0xBB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x97, 0x21}, {0x97, 0x22}, {0x97, 0x23}, {0x97, 0x24}, /* 0x40-0x43 */ + {0x97, 0x25}, {0x97, 0x26}, {0x97, 0x27}, {0x97, 0x28}, /* 0x44-0x47 */ + {0x97, 0x29}, {0x97, 0x2B}, {0x97, 0x2C}, {0x97, 0x2E}, /* 0x48-0x4B */ + {0x97, 0x2F}, {0x97, 0x31}, {0x97, 0x33}, {0x97, 0x34}, /* 0x4C-0x4F */ + {0x97, 0x35}, {0x97, 0x36}, {0x97, 0x37}, {0x97, 0x3A}, /* 0x50-0x53 */ + {0x97, 0x3B}, {0x97, 0x3C}, {0x97, 0x3D}, {0x97, 0x3F}, /* 0x54-0x57 */ + {0x97, 0x40}, {0x97, 0x41}, {0x97, 0x42}, {0x97, 0x43}, /* 0x58-0x5B */ + {0x97, 0x44}, {0x97, 0x45}, {0x97, 0x46}, {0x97, 0x47}, /* 0x5C-0x5F */ + {0x97, 0x48}, {0x97, 0x49}, {0x97, 0x4A}, {0x97, 0x4B}, /* 0x60-0x63 */ + {0x97, 0x4C}, {0x97, 0x4D}, {0x97, 0x4E}, {0x97, 0x4F}, /* 0x64-0x67 */ + {0x97, 0x50}, {0x97, 0x51}, {0x97, 0x54}, {0x97, 0x55}, /* 0x68-0x6B */ + {0x97, 0x57}, {0x97, 0x58}, {0x97, 0x5A}, {0x97, 0x5C}, /* 0x6C-0x6F */ + {0x97, 0x5D}, {0x97, 0x5F}, {0x97, 0x63}, {0x97, 0x64}, /* 0x70-0x73 */ + {0x97, 0x66}, {0x97, 0x67}, {0x97, 0x68}, {0x97, 0x6A}, /* 0x74-0x77 */ + {0x97, 0x6B}, {0x97, 0x6C}, {0x97, 0x6D}, {0x97, 0x6E}, /* 0x78-0x7B */ + {0x97, 0x6F}, {0x97, 0x70}, {0x97, 0x71}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x97, 0x72}, {0x97, 0x75}, {0x97, 0x77}, {0x97, 0x78}, /* 0x80-0x83 */ + {0x97, 0x79}, {0x97, 0x7A}, {0x97, 0x7B}, {0x97, 0x7D}, /* 0x84-0x87 */ + {0x97, 0x7E}, {0x97, 0x7F}, {0x97, 0x80}, {0x97, 0x81}, /* 0x88-0x8B */ + {0x97, 0x82}, {0x97, 0x83}, {0x97, 0x84}, {0x97, 0x86}, /* 0x8C-0x8F */ + {0x97, 0x87}, {0x97, 0x88}, {0x97, 0x89}, {0x97, 0x8A}, /* 0x90-0x93 */ + {0x97, 0x8C}, {0x97, 0x8E}, {0x97, 0x8F}, {0x97, 0x90}, /* 0x94-0x97 */ + {0x97, 0x93}, {0x97, 0x95}, {0x97, 0x96}, {0x97, 0x97}, /* 0x98-0x9B */ + {0x97, 0x99}, {0x97, 0x9A}, {0x97, 0x9B}, {0x97, 0x9C}, /* 0x9C-0x9F */ + {0x97, 0x9D}, {0x81, 0xC1}, {0x81, 0xA6}, {0x6B, 0x24}, /* 0xA0-0xA3 */ + {0x6B, 0x37}, {0x6B, 0x39}, {0x6B, 0x43}, {0x6B, 0x46}, /* 0xA4-0xA7 */ + {0x6B, 0x59}, {0x98, 0xD1}, {0x98, 0xD2}, {0x98, 0xD3}, /* 0xA8-0xAB */ + {0x98, 0xD5}, {0x98, 0xD9}, {0x98, 0xDA}, {0x6B, 0xB3}, /* 0xAC-0xAF */ + {0x5F, 0x40}, {0x6B, 0xC2}, {0x89, 0xF3}, {0x65, 0x90}, /* 0xB0-0xB3 */ + {0x9F, 0x51}, {0x65, 0x93}, {0x65, 0xBC}, {0x65, 0xC6}, /* 0xB4-0xB7 */ + {0x65, 0xC4}, {0x65, 0xC3}, {0x65, 0xCC}, {0x65, 0xCE}, /* 0xB8-0xBB */ + {0x65, 0xD2}, {0x65, 0xD6}, {0x70, 0x80}, {0x70, 0x9C}, /* 0xBC-0xBF */ + {0x70, 0x96}, {0x70, 0x9D}, {0x70, 0xBB}, {0x70, 0xC0}, /* 0xC0-0xC3 */ + {0x70, 0xB7}, {0x70, 0xAB}, {0x70, 0xB1}, {0x70, 0xE8}, /* 0xC4-0xC7 */ + {0x70, 0xCA}, {0x71, 0x10}, {0x71, 0x13}, {0x71, 0x16}, /* 0xC8-0xCB */ + {0x71, 0x2F}, {0x71, 0x31}, {0x71, 0x73}, {0x71, 0x5C}, /* 0xCC-0xCF */ + {0x71, 0x68}, {0x71, 0x45}, {0x71, 0x72}, {0x71, 0x4A}, /* 0xD0-0xD3 */ + {0x71, 0x78}, {0x71, 0x7A}, {0x71, 0x98}, {0x71, 0xB3}, /* 0xD4-0xD7 */ + {0x71, 0xB5}, {0x71, 0xA8}, {0x71, 0xA0}, {0x71, 0xE0}, /* 0xD8-0xDB */ + {0x71, 0xD4}, {0x71, 0xE7}, {0x71, 0xF9}, {0x72, 0x1D}, /* 0xDC-0xDF */ + {0x72, 0x28}, {0x70, 0x6C}, {0x71, 0x18}, {0x71, 0x66}, /* 0xE0-0xE3 */ + {0x71, 0xB9}, {0x62, 0x3E}, {0x62, 0x3D}, {0x62, 0x43}, /* 0xE4-0xE7 */ + {0x62, 0x48}, {0x62, 0x49}, {0x79, 0x3B}, {0x79, 0x40}, /* 0xE8-0xEB */ + {0x79, 0x46}, {0x79, 0x49}, {0x79, 0x5B}, {0x79, 0x5C}, /* 0xEC-0xEF */ + {0x79, 0x53}, {0x79, 0x5A}, {0x79, 0x62}, {0x79, 0x57}, /* 0xF0-0xF3 */ + {0x79, 0x60}, {0x79, 0x6F}, {0x79, 0x67}, {0x79, 0x7A}, /* 0xF4-0xF7 */ + {0x79, 0x85}, {0x79, 0x8A}, {0x79, 0x9A}, {0x79, 0xA7}, /* 0xF8-0xFB */ + {0x79, 0xB3}, {0x5F, 0xD1}, {0x5F, 0xD0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_ED[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x97, 0x9E}, {0x97, 0x9F}, {0x97, 0xA1}, {0x97, 0xA2}, /* 0x40-0x43 */ + {0x97, 0xA4}, {0x97, 0xA5}, {0x97, 0xA6}, {0x97, 0xA7}, /* 0x44-0x47 */ + {0x97, 0xA8}, {0x97, 0xA9}, {0x97, 0xAA}, {0x97, 0xAC}, /* 0x48-0x4B */ + {0x97, 0xAE}, {0x97, 0xB0}, {0x97, 0xB1}, {0x97, 0xB3}, /* 0x4C-0x4F */ + {0x97, 0xB5}, {0x97, 0xB6}, {0x97, 0xB7}, {0x97, 0xB8}, /* 0x50-0x53 */ + {0x97, 0xB9}, {0x97, 0xBA}, {0x97, 0xBB}, {0x97, 0xBC}, /* 0x54-0x57 */ + {0x97, 0xBD}, {0x97, 0xBE}, {0x97, 0xBF}, {0x97, 0xC0}, /* 0x58-0x5B */ + {0x97, 0xC1}, {0x97, 0xC2}, {0x97, 0xC3}, {0x97, 0xC4}, /* 0x5C-0x5F */ + {0x97, 0xC5}, {0x97, 0xC6}, {0x97, 0xC7}, {0x97, 0xC8}, /* 0x60-0x63 */ + {0x97, 0xC9}, {0x97, 0xCA}, {0x97, 0xCB}, {0x97, 0xCC}, /* 0x64-0x67 */ + {0x97, 0xCD}, {0x97, 0xCE}, {0x97, 0xCF}, {0x97, 0xD0}, /* 0x68-0x6B */ + {0x97, 0xD1}, {0x97, 0xD2}, {0x97, 0xD3}, {0x97, 0xD4}, /* 0x6C-0x6F */ + {0x97, 0xD5}, {0x97, 0xD6}, {0x97, 0xD7}, {0x97, 0xD8}, /* 0x70-0x73 */ + {0x97, 0xD9}, {0x97, 0xDA}, {0x97, 0xDB}, {0x97, 0xDC}, /* 0x74-0x77 */ + {0x97, 0xDD}, {0x97, 0xDE}, {0x97, 0xDF}, {0x97, 0xE0}, /* 0x78-0x7B */ + {0x97, 0xE1}, {0x97, 0xE2}, {0x97, 0xE3}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x97, 0xE4}, {0x97, 0xE5}, {0x97, 0xE8}, {0x97, 0xEE}, /* 0x80-0x83 */ + {0x97, 0xEF}, {0x97, 0xF0}, {0x97, 0xF1}, {0x97, 0xF2}, /* 0x84-0x87 */ + {0x97, 0xF4}, {0x97, 0xF7}, {0x97, 0xF8}, {0x97, 0xF9}, /* 0x88-0x8B */ + {0x97, 0xFA}, {0x97, 0xFB}, {0x97, 0xFC}, {0x97, 0xFD}, /* 0x8C-0x8F */ + {0x97, 0xFE}, {0x97, 0xFF}, {0x98, 0x00}, {0x98, 0x01}, /* 0x90-0x93 */ + {0x98, 0x02}, {0x98, 0x03}, {0x98, 0x04}, {0x98, 0x05}, /* 0x94-0x97 */ + {0x98, 0x06}, {0x98, 0x07}, {0x98, 0x08}, {0x98, 0x09}, /* 0x98-0x9B */ + {0x98, 0x0A}, {0x98, 0x0B}, {0x98, 0x0C}, {0x98, 0x0D}, /* 0x9C-0x9F */ + {0x98, 0x0E}, {0x60, 0x3C}, {0x60, 0x5D}, {0x60, 0x5A}, /* 0xA0-0xA3 */ + {0x60, 0x67}, {0x60, 0x41}, {0x60, 0x59}, {0x60, 0x63}, /* 0xA4-0xA7 */ + {0x60, 0xAB}, {0x61, 0x06}, {0x61, 0x0D}, {0x61, 0x5D}, /* 0xA8-0xAB */ + {0x61, 0xA9}, {0x61, 0x9D}, {0x61, 0xCB}, {0x61, 0xD1}, /* 0xAC-0xAF */ + {0x62, 0x06}, {0x80, 0x80}, {0x80, 0x7F}, {0x6C, 0x93}, /* 0xB0-0xB3 */ + {0x6C, 0xF6}, {0x6D, 0xFC}, {0x77, 0xF6}, {0x77, 0xF8}, /* 0xB4-0xB7 */ + {0x78, 0x00}, {0x78, 0x09}, {0x78, 0x17}, {0x78, 0x18}, /* 0xB8-0xBB */ + {0x78, 0x11}, {0x65, 0xAB}, {0x78, 0x2D}, {0x78, 0x1C}, /* 0xBC-0xBF */ + {0x78, 0x1D}, {0x78, 0x39}, {0x78, 0x3A}, {0x78, 0x3B}, /* 0xC0-0xC3 */ + {0x78, 0x1F}, {0x78, 0x3C}, {0x78, 0x25}, {0x78, 0x2C}, /* 0xC4-0xC7 */ + {0x78, 0x23}, {0x78, 0x29}, {0x78, 0x4E}, {0x78, 0x6D}, /* 0xC8-0xCB */ + {0x78, 0x56}, {0x78, 0x57}, {0x78, 0x26}, {0x78, 0x50}, /* 0xCC-0xCF */ + {0x78, 0x47}, {0x78, 0x4C}, {0x78, 0x6A}, {0x78, 0x9B}, /* 0xD0-0xD3 */ + {0x78, 0x93}, {0x78, 0x9A}, {0x78, 0x87}, {0x78, 0x9C}, /* 0xD4-0xD7 */ + {0x78, 0xA1}, {0x78, 0xA3}, {0x78, 0xB2}, {0x78, 0xB9}, /* 0xD8-0xDB */ + {0x78, 0xA5}, {0x78, 0xD4}, {0x78, 0xD9}, {0x78, 0xC9}, /* 0xDC-0xDF */ + {0x78, 0xEC}, {0x78, 0xF2}, {0x79, 0x05}, {0x78, 0xF4}, /* 0xE0-0xE3 */ + {0x79, 0x13}, {0x79, 0x24}, {0x79, 0x1E}, {0x79, 0x34}, /* 0xE4-0xE7 */ + {0x9F, 0x9B}, {0x9E, 0xF9}, {0x9E, 0xFB}, {0x9E, 0xFC}, /* 0xE8-0xEB */ + {0x76, 0xF1}, {0x77, 0x04}, {0x77, 0x0D}, {0x76, 0xF9}, /* 0xEC-0xEF */ + {0x77, 0x07}, {0x77, 0x08}, {0x77, 0x1A}, {0x77, 0x22}, /* 0xF0-0xF3 */ + {0x77, 0x19}, {0x77, 0x2D}, {0x77, 0x26}, {0x77, 0x35}, /* 0xF4-0xF7 */ + {0x77, 0x38}, {0x77, 0x50}, {0x77, 0x51}, {0x77, 0x47}, /* 0xF8-0xFB */ + {0x77, 0x43}, {0x77, 0x5A}, {0x77, 0x68}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x98, 0x0F}, {0x98, 0x10}, {0x98, 0x11}, {0x98, 0x12}, /* 0x40-0x43 */ + {0x98, 0x13}, {0x98, 0x14}, {0x98, 0x15}, {0x98, 0x16}, /* 0x44-0x47 */ + {0x98, 0x17}, {0x98, 0x18}, {0x98, 0x19}, {0x98, 0x1A}, /* 0x48-0x4B */ + {0x98, 0x1B}, {0x98, 0x1C}, {0x98, 0x1D}, {0x98, 0x1E}, /* 0x4C-0x4F */ + {0x98, 0x1F}, {0x98, 0x20}, {0x98, 0x21}, {0x98, 0x22}, /* 0x50-0x53 */ + {0x98, 0x23}, {0x98, 0x24}, {0x98, 0x25}, {0x98, 0x26}, /* 0x54-0x57 */ + {0x98, 0x27}, {0x98, 0x28}, {0x98, 0x29}, {0x98, 0x2A}, /* 0x58-0x5B */ + {0x98, 0x2B}, {0x98, 0x2C}, {0x98, 0x2D}, {0x98, 0x2E}, /* 0x5C-0x5F */ + {0x98, 0x2F}, {0x98, 0x30}, {0x98, 0x31}, {0x98, 0x32}, /* 0x60-0x63 */ + {0x98, 0x33}, {0x98, 0x34}, {0x98, 0x35}, {0x98, 0x36}, /* 0x64-0x67 */ + {0x98, 0x37}, {0x98, 0x38}, {0x98, 0x39}, {0x98, 0x3A}, /* 0x68-0x6B */ + {0x98, 0x3B}, {0x98, 0x3C}, {0x98, 0x3D}, {0x98, 0x3E}, /* 0x6C-0x6F */ + {0x98, 0x3F}, {0x98, 0x40}, {0x98, 0x41}, {0x98, 0x42}, /* 0x70-0x73 */ + {0x98, 0x43}, {0x98, 0x44}, {0x98, 0x45}, {0x98, 0x46}, /* 0x74-0x77 */ + {0x98, 0x47}, {0x98, 0x48}, {0x98, 0x49}, {0x98, 0x4A}, /* 0x78-0x7B */ + {0x98, 0x4B}, {0x98, 0x4C}, {0x98, 0x4D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x98, 0x4E}, {0x98, 0x4F}, {0x98, 0x50}, {0x98, 0x51}, /* 0x80-0x83 */ + {0x98, 0x52}, {0x98, 0x53}, {0x98, 0x54}, {0x98, 0x55}, /* 0x84-0x87 */ + {0x98, 0x56}, {0x98, 0x57}, {0x98, 0x58}, {0x98, 0x59}, /* 0x88-0x8B */ + {0x98, 0x5A}, {0x98, 0x5B}, {0x98, 0x5C}, {0x98, 0x5D}, /* 0x8C-0x8F */ + {0x98, 0x5E}, {0x98, 0x5F}, {0x98, 0x60}, {0x98, 0x61}, /* 0x90-0x93 */ + {0x98, 0x62}, {0x98, 0x63}, {0x98, 0x64}, {0x98, 0x65}, /* 0x94-0x97 */ + {0x98, 0x66}, {0x98, 0x67}, {0x98, 0x68}, {0x98, 0x69}, /* 0x98-0x9B */ + {0x98, 0x6A}, {0x98, 0x6B}, {0x98, 0x6C}, {0x98, 0x6D}, /* 0x9C-0x9F */ + {0x98, 0x6E}, {0x77, 0x62}, {0x77, 0x65}, {0x77, 0x7F}, /* 0xA0-0xA3 */ + {0x77, 0x8D}, {0x77, 0x7D}, {0x77, 0x80}, {0x77, 0x8C}, /* 0xA4-0xA7 */ + {0x77, 0x91}, {0x77, 0x9F}, {0x77, 0xA0}, {0x77, 0xB0}, /* 0xA8-0xAB */ + {0x77, 0xB5}, {0x77, 0xBD}, {0x75, 0x3A}, {0x75, 0x40}, /* 0xAC-0xAF */ + {0x75, 0x4E}, {0x75, 0x4B}, {0x75, 0x48}, {0x75, 0x5B}, /* 0xB0-0xB3 */ + {0x75, 0x72}, {0x75, 0x79}, {0x75, 0x83}, {0x7F, 0x58}, /* 0xB4-0xB7 */ + {0x7F, 0x61}, {0x7F, 0x5F}, {0x8A, 0x48}, {0x7F, 0x68}, /* 0xB8-0xBB */ + {0x7F, 0x74}, {0x7F, 0x71}, {0x7F, 0x79}, {0x7F, 0x81}, /* 0xBC-0xBF */ + {0x7F, 0x7E}, {0x76, 0xCD}, {0x76, 0xE5}, {0x88, 0x32}, /* 0xC0-0xC3 */ + {0x94, 0x85}, {0x94, 0x86}, {0x94, 0x87}, {0x94, 0x8B}, /* 0xC4-0xC7 */ + {0x94, 0x8A}, {0x94, 0x8C}, {0x94, 0x8D}, {0x94, 0x8F}, /* 0xC8-0xCB */ + {0x94, 0x90}, {0x94, 0x94}, {0x94, 0x97}, {0x94, 0x95}, /* 0xCC-0xCF */ + {0x94, 0x9A}, {0x94, 0x9B}, {0x94, 0x9C}, {0x94, 0xA3}, /* 0xD0-0xD3 */ + {0x94, 0xA4}, {0x94, 0xAB}, {0x94, 0xAA}, {0x94, 0xAD}, /* 0xD4-0xD7 */ + {0x94, 0xAC}, {0x94, 0xAF}, {0x94, 0xB0}, {0x94, 0xB2}, /* 0xD8-0xDB */ + {0x94, 0xB4}, {0x94, 0xB6}, {0x94, 0xB7}, {0x94, 0xB8}, /* 0xDC-0xDF */ + {0x94, 0xB9}, {0x94, 0xBA}, {0x94, 0xBC}, {0x94, 0xBD}, /* 0xE0-0xE3 */ + {0x94, 0xBF}, {0x94, 0xC4}, {0x94, 0xC8}, {0x94, 0xC9}, /* 0xE4-0xE7 */ + {0x94, 0xCA}, {0x94, 0xCB}, {0x94, 0xCC}, {0x94, 0xCD}, /* 0xE8-0xEB */ + {0x94, 0xCE}, {0x94, 0xD0}, {0x94, 0xD1}, {0x94, 0xD2}, /* 0xEC-0xEF */ + {0x94, 0xD5}, {0x94, 0xD6}, {0x94, 0xD7}, {0x94, 0xD9}, /* 0xF0-0xF3 */ + {0x94, 0xD8}, {0x94, 0xDB}, {0x94, 0xDE}, {0x94, 0xDF}, /* 0xF4-0xF7 */ + {0x94, 0xE0}, {0x94, 0xE2}, {0x94, 0xE4}, {0x94, 0xE5}, /* 0xF8-0xFB */ + {0x94, 0xE7}, {0x94, 0xE8}, {0x94, 0xEA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x98, 0x6F}, {0x98, 0x70}, {0x98, 0x71}, {0x98, 0x72}, /* 0x40-0x43 */ + {0x98, 0x73}, {0x98, 0x74}, {0x98, 0x8B}, {0x98, 0x8E}, /* 0x44-0x47 */ + {0x98, 0x92}, {0x98, 0x95}, {0x98, 0x99}, {0x98, 0xA3}, /* 0x48-0x4B */ + {0x98, 0xA8}, {0x98, 0xA9}, {0x98, 0xAA}, {0x98, 0xAB}, /* 0x4C-0x4F */ + {0x98, 0xAC}, {0x98, 0xAD}, {0x98, 0xAE}, {0x98, 0xAF}, /* 0x50-0x53 */ + {0x98, 0xB0}, {0x98, 0xB1}, {0x98, 0xB2}, {0x98, 0xB3}, /* 0x54-0x57 */ + {0x98, 0xB4}, {0x98, 0xB5}, {0x98, 0xB6}, {0x98, 0xB7}, /* 0x58-0x5B */ + {0x98, 0xB8}, {0x98, 0xB9}, {0x98, 0xBA}, {0x98, 0xBB}, /* 0x5C-0x5F */ + {0x98, 0xBC}, {0x98, 0xBD}, {0x98, 0xBE}, {0x98, 0xBF}, /* 0x60-0x63 */ + {0x98, 0xC0}, {0x98, 0xC1}, {0x98, 0xC2}, {0x98, 0xC3}, /* 0x64-0x67 */ + {0x98, 0xC4}, {0x98, 0xC5}, {0x98, 0xC6}, {0x98, 0xC7}, /* 0x68-0x6B */ + {0x98, 0xC8}, {0x98, 0xC9}, {0x98, 0xCA}, {0x98, 0xCB}, /* 0x6C-0x6F */ + {0x98, 0xCC}, {0x98, 0xCD}, {0x98, 0xCF}, {0x98, 0xD0}, /* 0x70-0x73 */ + {0x98, 0xD4}, {0x98, 0xD6}, {0x98, 0xD7}, {0x98, 0xDB}, /* 0x74-0x77 */ + {0x98, 0xDC}, {0x98, 0xDD}, {0x98, 0xE0}, {0x98, 0xE1}, /* 0x78-0x7B */ + {0x98, 0xE2}, {0x98, 0xE3}, {0x98, 0xE4}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x98, 0xE5}, {0x98, 0xE6}, {0x98, 0xE9}, {0x98, 0xEA}, /* 0x80-0x83 */ + {0x98, 0xEB}, {0x98, 0xEC}, {0x98, 0xED}, {0x98, 0xEE}, /* 0x84-0x87 */ + {0x98, 0xEF}, {0x98, 0xF0}, {0x98, 0xF1}, {0x98, 0xF2}, /* 0x88-0x8B */ + {0x98, 0xF3}, {0x98, 0xF4}, {0x98, 0xF5}, {0x98, 0xF6}, /* 0x8C-0x8F */ + {0x98, 0xF7}, {0x98, 0xF8}, {0x98, 0xF9}, {0x98, 0xFA}, /* 0x90-0x93 */ + {0x98, 0xFB}, {0x98, 0xFC}, {0x98, 0xFD}, {0x98, 0xFE}, /* 0x94-0x97 */ + {0x98, 0xFF}, {0x99, 0x00}, {0x99, 0x01}, {0x99, 0x02}, /* 0x98-0x9B */ + {0x99, 0x03}, {0x99, 0x04}, {0x99, 0x05}, {0x99, 0x06}, /* 0x9C-0x9F */ + {0x99, 0x07}, {0x94, 0xE9}, {0x94, 0xEB}, {0x94, 0xEE}, /* 0xA0-0xA3 */ + {0x94, 0xEF}, {0x94, 0xF3}, {0x94, 0xF4}, {0x94, 0xF5}, /* 0xA4-0xA7 */ + {0x94, 0xF7}, {0x94, 0xF9}, {0x94, 0xFC}, {0x94, 0xFD}, /* 0xA8-0xAB */ + {0x94, 0xFF}, {0x95, 0x03}, {0x95, 0x02}, {0x95, 0x06}, /* 0xAC-0xAF */ + {0x95, 0x07}, {0x95, 0x09}, {0x95, 0x0A}, {0x95, 0x0D}, /* 0xB0-0xB3 */ + {0x95, 0x0E}, {0x95, 0x0F}, {0x95, 0x12}, {0x95, 0x13}, /* 0xB4-0xB7 */ + {0x95, 0x14}, {0x95, 0x15}, {0x95, 0x16}, {0x95, 0x18}, /* 0xB8-0xBB */ + {0x95, 0x1B}, {0x95, 0x1D}, {0x95, 0x1E}, {0x95, 0x1F}, /* 0xBC-0xBF */ + {0x95, 0x22}, {0x95, 0x2A}, {0x95, 0x2B}, {0x95, 0x29}, /* 0xC0-0xC3 */ + {0x95, 0x2C}, {0x95, 0x31}, {0x95, 0x32}, {0x95, 0x34}, /* 0xC4-0xC7 */ + {0x95, 0x36}, {0x95, 0x37}, {0x95, 0x38}, {0x95, 0x3C}, /* 0xC8-0xCB */ + {0x95, 0x3E}, {0x95, 0x3F}, {0x95, 0x42}, {0x95, 0x35}, /* 0xCC-0xCF */ + {0x95, 0x44}, {0x95, 0x45}, {0x95, 0x46}, {0x95, 0x49}, /* 0xD0-0xD3 */ + {0x95, 0x4C}, {0x95, 0x4E}, {0x95, 0x4F}, {0x95, 0x52}, /* 0xD4-0xD7 */ + {0x95, 0x53}, {0x95, 0x54}, {0x95, 0x56}, {0x95, 0x57}, /* 0xD8-0xDB */ + {0x95, 0x58}, {0x95, 0x59}, {0x95, 0x5B}, {0x95, 0x5E}, /* 0xDC-0xDF */ + {0x95, 0x5F}, {0x95, 0x5D}, {0x95, 0x61}, {0x95, 0x62}, /* 0xE0-0xE3 */ + {0x95, 0x64}, {0x95, 0x65}, {0x95, 0x66}, {0x95, 0x67}, /* 0xE4-0xE7 */ + {0x95, 0x68}, {0x95, 0x69}, {0x95, 0x6A}, {0x95, 0x6B}, /* 0xE8-0xEB */ + {0x95, 0x6C}, {0x95, 0x6F}, {0x95, 0x71}, {0x95, 0x72}, /* 0xEC-0xEF */ + {0x95, 0x73}, {0x95, 0x3A}, {0x77, 0xE7}, {0x77, 0xEC}, /* 0xF0-0xF3 */ + {0x96, 0xC9}, {0x79, 0xD5}, {0x79, 0xED}, {0x79, 0xE3}, /* 0xF4-0xF7 */ + {0x79, 0xEB}, {0x7A, 0x06}, {0x5D, 0x47}, {0x7A, 0x03}, /* 0xF8-0xFB */ + {0x7A, 0x02}, {0x7A, 0x1E}, {0x7A, 0x14}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x99, 0x08}, {0x99, 0x09}, {0x99, 0x0A}, {0x99, 0x0B}, /* 0x40-0x43 */ + {0x99, 0x0C}, {0x99, 0x0E}, {0x99, 0x0F}, {0x99, 0x11}, /* 0x44-0x47 */ + {0x99, 0x12}, {0x99, 0x13}, {0x99, 0x14}, {0x99, 0x15}, /* 0x48-0x4B */ + {0x99, 0x16}, {0x99, 0x17}, {0x99, 0x18}, {0x99, 0x19}, /* 0x4C-0x4F */ + {0x99, 0x1A}, {0x99, 0x1B}, {0x99, 0x1C}, {0x99, 0x1D}, /* 0x50-0x53 */ + {0x99, 0x1E}, {0x99, 0x1F}, {0x99, 0x20}, {0x99, 0x21}, /* 0x54-0x57 */ + {0x99, 0x22}, {0x99, 0x23}, {0x99, 0x24}, {0x99, 0x25}, /* 0x58-0x5B */ + {0x99, 0x26}, {0x99, 0x27}, {0x99, 0x28}, {0x99, 0x29}, /* 0x5C-0x5F */ + {0x99, 0x2A}, {0x99, 0x2B}, {0x99, 0x2C}, {0x99, 0x2D}, /* 0x60-0x63 */ + {0x99, 0x2F}, {0x99, 0x30}, {0x99, 0x31}, {0x99, 0x32}, /* 0x64-0x67 */ + {0x99, 0x33}, {0x99, 0x34}, {0x99, 0x35}, {0x99, 0x36}, /* 0x68-0x6B */ + {0x99, 0x37}, {0x99, 0x38}, {0x99, 0x39}, {0x99, 0x3A}, /* 0x6C-0x6F */ + {0x99, 0x3B}, {0x99, 0x3C}, {0x99, 0x3D}, {0x99, 0x3E}, /* 0x70-0x73 */ + {0x99, 0x3F}, {0x99, 0x40}, {0x99, 0x41}, {0x99, 0x42}, /* 0x74-0x77 */ + {0x99, 0x43}, {0x99, 0x44}, {0x99, 0x45}, {0x99, 0x46}, /* 0x78-0x7B */ + {0x99, 0x47}, {0x99, 0x48}, {0x99, 0x49}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x99, 0x4A}, {0x99, 0x4B}, {0x99, 0x4C}, {0x99, 0x4D}, /* 0x80-0x83 */ + {0x99, 0x4E}, {0x99, 0x4F}, {0x99, 0x50}, {0x99, 0x51}, /* 0x84-0x87 */ + {0x99, 0x52}, {0x99, 0x53}, {0x99, 0x56}, {0x99, 0x57}, /* 0x88-0x8B */ + {0x99, 0x58}, {0x99, 0x59}, {0x99, 0x5A}, {0x99, 0x5B}, /* 0x8C-0x8F */ + {0x99, 0x5C}, {0x99, 0x5D}, {0x99, 0x5E}, {0x99, 0x5F}, /* 0x90-0x93 */ + {0x99, 0x60}, {0x99, 0x61}, {0x99, 0x62}, {0x99, 0x64}, /* 0x94-0x97 */ + {0x99, 0x66}, {0x99, 0x73}, {0x99, 0x78}, {0x99, 0x79}, /* 0x98-0x9B */ + {0x99, 0x7B}, {0x99, 0x7E}, {0x99, 0x82}, {0x99, 0x83}, /* 0x9C-0x9F */ + {0x99, 0x89}, {0x7A, 0x39}, {0x7A, 0x37}, {0x7A, 0x51}, /* 0xA0-0xA3 */ + {0x9E, 0xCF}, {0x99, 0xA5}, {0x7A, 0x70}, {0x76, 0x88}, /* 0xA4-0xA7 */ + {0x76, 0x8E}, {0x76, 0x93}, {0x76, 0x99}, {0x76, 0xA4}, /* 0xA8-0xAB */ + {0x74, 0xDE}, {0x74, 0xE0}, {0x75, 0x2C}, {0x9E, 0x20}, /* 0xAC-0xAF */ + {0x9E, 0x22}, {0x9E, 0x28}, {0x9E, 0x29}, {0x9E, 0x2A}, /* 0xB0-0xB3 */ + {0x9E, 0x2B}, {0x9E, 0x2C}, {0x9E, 0x32}, {0x9E, 0x31}, /* 0xB4-0xB7 */ + {0x9E, 0x36}, {0x9E, 0x38}, {0x9E, 0x37}, {0x9E, 0x39}, /* 0xB8-0xBB */ + {0x9E, 0x3A}, {0x9E, 0x3E}, {0x9E, 0x41}, {0x9E, 0x42}, /* 0xBC-0xBF */ + {0x9E, 0x44}, {0x9E, 0x46}, {0x9E, 0x47}, {0x9E, 0x48}, /* 0xC0-0xC3 */ + {0x9E, 0x49}, {0x9E, 0x4B}, {0x9E, 0x4C}, {0x9E, 0x4E}, /* 0xC4-0xC7 */ + {0x9E, 0x51}, {0x9E, 0x55}, {0x9E, 0x57}, {0x9E, 0x5A}, /* 0xC8-0xCB */ + {0x9E, 0x5B}, {0x9E, 0x5C}, {0x9E, 0x5E}, {0x9E, 0x63}, /* 0xCC-0xCF */ + {0x9E, 0x66}, {0x9E, 0x67}, {0x9E, 0x68}, {0x9E, 0x69}, /* 0xD0-0xD3 */ + {0x9E, 0x6A}, {0x9E, 0x6B}, {0x9E, 0x6C}, {0x9E, 0x71}, /* 0xD4-0xD7 */ + {0x9E, 0x6D}, {0x9E, 0x73}, {0x75, 0x92}, {0x75, 0x94}, /* 0xD8-0xDB */ + {0x75, 0x96}, {0x75, 0xA0}, {0x75, 0x9D}, {0x75, 0xAC}, /* 0xDC-0xDF */ + {0x75, 0xA3}, {0x75, 0xB3}, {0x75, 0xB4}, {0x75, 0xB8}, /* 0xE0-0xE3 */ + {0x75, 0xC4}, {0x75, 0xB1}, {0x75, 0xB0}, {0x75, 0xC3}, /* 0xE4-0xE7 */ + {0x75, 0xC2}, {0x75, 0xD6}, {0x75, 0xCD}, {0x75, 0xE3}, /* 0xE8-0xEB */ + {0x75, 0xE8}, {0x75, 0xE6}, {0x75, 0xE4}, {0x75, 0xEB}, /* 0xEC-0xEF */ + {0x75, 0xE7}, {0x76, 0x03}, {0x75, 0xF1}, {0x75, 0xFC}, /* 0xF0-0xF3 */ + {0x75, 0xFF}, {0x76, 0x10}, {0x76, 0x00}, {0x76, 0x05}, /* 0xF4-0xF7 */ + {0x76, 0x0C}, {0x76, 0x17}, {0x76, 0x0A}, {0x76, 0x25}, /* 0xF8-0xFB */ + {0x76, 0x18}, {0x76, 0x15}, {0x76, 0x19}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x99, 0x8C}, {0x99, 0x8E}, {0x99, 0x9A}, {0x99, 0x9B}, /* 0x40-0x43 */ + {0x99, 0x9C}, {0x99, 0x9D}, {0x99, 0x9E}, {0x99, 0x9F}, /* 0x44-0x47 */ + {0x99, 0xA0}, {0x99, 0xA1}, {0x99, 0xA2}, {0x99, 0xA3}, /* 0x48-0x4B */ + {0x99, 0xA4}, {0x99, 0xA6}, {0x99, 0xA7}, {0x99, 0xA9}, /* 0x4C-0x4F */ + {0x99, 0xAA}, {0x99, 0xAB}, {0x99, 0xAC}, {0x99, 0xAD}, /* 0x50-0x53 */ + {0x99, 0xAE}, {0x99, 0xAF}, {0x99, 0xB0}, {0x99, 0xB1}, /* 0x54-0x57 */ + {0x99, 0xB2}, {0x99, 0xB3}, {0x99, 0xB4}, {0x99, 0xB5}, /* 0x58-0x5B */ + {0x99, 0xB6}, {0x99, 0xB7}, {0x99, 0xB8}, {0x99, 0xB9}, /* 0x5C-0x5F */ + {0x99, 0xBA}, {0x99, 0xBB}, {0x99, 0xBC}, {0x99, 0xBD}, /* 0x60-0x63 */ + {0x99, 0xBE}, {0x99, 0xBF}, {0x99, 0xC0}, {0x99, 0xC1}, /* 0x64-0x67 */ + {0x99, 0xC2}, {0x99, 0xC3}, {0x99, 0xC4}, {0x99, 0xC5}, /* 0x68-0x6B */ + {0x99, 0xC6}, {0x99, 0xC7}, {0x99, 0xC8}, {0x99, 0xC9}, /* 0x6C-0x6F */ + {0x99, 0xCA}, {0x99, 0xCB}, {0x99, 0xCC}, {0x99, 0xCD}, /* 0x70-0x73 */ + {0x99, 0xCE}, {0x99, 0xCF}, {0x99, 0xD0}, {0x99, 0xD1}, /* 0x74-0x77 */ + {0x99, 0xD2}, {0x99, 0xD3}, {0x99, 0xD4}, {0x99, 0xD5}, /* 0x78-0x7B */ + {0x99, 0xD6}, {0x99, 0xD7}, {0x99, 0xD8}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x99, 0xD9}, {0x99, 0xDA}, {0x99, 0xDB}, {0x99, 0xDC}, /* 0x80-0x83 */ + {0x99, 0xDD}, {0x99, 0xDE}, {0x99, 0xDF}, {0x99, 0xE0}, /* 0x84-0x87 */ + {0x99, 0xE1}, {0x99, 0xE2}, {0x99, 0xE3}, {0x99, 0xE4}, /* 0x88-0x8B */ + {0x99, 0xE5}, {0x99, 0xE6}, {0x99, 0xE7}, {0x99, 0xE8}, /* 0x8C-0x8F */ + {0x99, 0xE9}, {0x99, 0xEA}, {0x99, 0xEB}, {0x99, 0xEC}, /* 0x90-0x93 */ + {0x99, 0xED}, {0x99, 0xEE}, {0x99, 0xEF}, {0x99, 0xF0}, /* 0x94-0x97 */ + {0x99, 0xF1}, {0x99, 0xF2}, {0x99, 0xF3}, {0x99, 0xF4}, /* 0x98-0x9B */ + {0x99, 0xF5}, {0x99, 0xF6}, {0x99, 0xF7}, {0x99, 0xF8}, /* 0x9C-0x9F */ + {0x99, 0xF9}, {0x76, 0x1B}, {0x76, 0x3C}, {0x76, 0x22}, /* 0xA0-0xA3 */ + {0x76, 0x20}, {0x76, 0x40}, {0x76, 0x2D}, {0x76, 0x30}, /* 0xA4-0xA7 */ + {0x76, 0x3F}, {0x76, 0x35}, {0x76, 0x43}, {0x76, 0x3E}, /* 0xA8-0xAB */ + {0x76, 0x33}, {0x76, 0x4D}, {0x76, 0x5E}, {0x76, 0x54}, /* 0xAC-0xAF */ + {0x76, 0x5C}, {0x76, 0x56}, {0x76, 0x6B}, {0x76, 0x6F}, /* 0xB0-0xB3 */ + {0x7F, 0xCA}, {0x7A, 0xE6}, {0x7A, 0x78}, {0x7A, 0x79}, /* 0xB4-0xB7 */ + {0x7A, 0x80}, {0x7A, 0x86}, {0x7A, 0x88}, {0x7A, 0x95}, /* 0xB8-0xBB */ + {0x7A, 0xA6}, {0x7A, 0xA0}, {0x7A, 0xAC}, {0x7A, 0xA8}, /* 0xBC-0xBF */ + {0x7A, 0xAD}, {0x7A, 0xB3}, {0x88, 0x64}, {0x88, 0x69}, /* 0xC0-0xC3 */ + {0x88, 0x72}, {0x88, 0x7D}, {0x88, 0x7F}, {0x88, 0x82}, /* 0xC4-0xC7 */ + {0x88, 0xA2}, {0x88, 0xC6}, {0x88, 0xB7}, {0x88, 0xBC}, /* 0xC8-0xCB */ + {0x88, 0xC9}, {0x88, 0xE2}, {0x88, 0xCE}, {0x88, 0xE3}, /* 0xCC-0xCF */ + {0x88, 0xE5}, {0x88, 0xF1}, {0x89, 0x1A}, {0x88, 0xFC}, /* 0xD0-0xD3 */ + {0x88, 0xE8}, {0x88, 0xFE}, {0x88, 0xF0}, {0x89, 0x21}, /* 0xD4-0xD7 */ + {0x89, 0x19}, {0x89, 0x13}, {0x89, 0x1B}, {0x89, 0x0A}, /* 0xD8-0xDB */ + {0x89, 0x34}, {0x89, 0x2B}, {0x89, 0x36}, {0x89, 0x41}, /* 0xDC-0xDF */ + {0x89, 0x66}, {0x89, 0x7B}, {0x75, 0x8B}, {0x80, 0xE5}, /* 0xE0-0xE3 */ + {0x76, 0xB2}, {0x76, 0xB4}, {0x77, 0xDC}, {0x80, 0x12}, /* 0xE4-0xE7 */ + {0x80, 0x14}, {0x80, 0x16}, {0x80, 0x1C}, {0x80, 0x20}, /* 0xE8-0xEB */ + {0x80, 0x22}, {0x80, 0x25}, {0x80, 0x26}, {0x80, 0x27}, /* 0xEC-0xEF */ + {0x80, 0x29}, {0x80, 0x28}, {0x80, 0x31}, {0x80, 0x0B}, /* 0xF0-0xF3 */ + {0x80, 0x35}, {0x80, 0x43}, {0x80, 0x46}, {0x80, 0x4D}, /* 0xF4-0xF7 */ + {0x80, 0x52}, {0x80, 0x69}, {0x80, 0x71}, {0x89, 0x83}, /* 0xF8-0xFB */ + {0x98, 0x78}, {0x98, 0x80}, {0x98, 0x83}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x99, 0xFA}, {0x99, 0xFB}, {0x99, 0xFC}, {0x99, 0xFD}, /* 0x40-0x43 */ + {0x99, 0xFE}, {0x99, 0xFF}, {0x9A, 0x00}, {0x9A, 0x01}, /* 0x44-0x47 */ + {0x9A, 0x02}, {0x9A, 0x03}, {0x9A, 0x04}, {0x9A, 0x05}, /* 0x48-0x4B */ + {0x9A, 0x06}, {0x9A, 0x07}, {0x9A, 0x08}, {0x9A, 0x09}, /* 0x4C-0x4F */ + {0x9A, 0x0A}, {0x9A, 0x0B}, {0x9A, 0x0C}, {0x9A, 0x0D}, /* 0x50-0x53 */ + {0x9A, 0x0E}, {0x9A, 0x0F}, {0x9A, 0x10}, {0x9A, 0x11}, /* 0x54-0x57 */ + {0x9A, 0x12}, {0x9A, 0x13}, {0x9A, 0x14}, {0x9A, 0x15}, /* 0x58-0x5B */ + {0x9A, 0x16}, {0x9A, 0x17}, {0x9A, 0x18}, {0x9A, 0x19}, /* 0x5C-0x5F */ + {0x9A, 0x1A}, {0x9A, 0x1B}, {0x9A, 0x1C}, {0x9A, 0x1D}, /* 0x60-0x63 */ + {0x9A, 0x1E}, {0x9A, 0x1F}, {0x9A, 0x20}, {0x9A, 0x21}, /* 0x64-0x67 */ + {0x9A, 0x22}, {0x9A, 0x23}, {0x9A, 0x24}, {0x9A, 0x25}, /* 0x68-0x6B */ + {0x9A, 0x26}, {0x9A, 0x27}, {0x9A, 0x28}, {0x9A, 0x29}, /* 0x6C-0x6F */ + {0x9A, 0x2A}, {0x9A, 0x2B}, {0x9A, 0x2C}, {0x9A, 0x2D}, /* 0x70-0x73 */ + {0x9A, 0x2E}, {0x9A, 0x2F}, {0x9A, 0x30}, {0x9A, 0x31}, /* 0x74-0x77 */ + {0x9A, 0x32}, {0x9A, 0x33}, {0x9A, 0x34}, {0x9A, 0x35}, /* 0x78-0x7B */ + {0x9A, 0x36}, {0x9A, 0x37}, {0x9A, 0x38}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9A, 0x39}, {0x9A, 0x3A}, {0x9A, 0x3B}, {0x9A, 0x3C}, /* 0x80-0x83 */ + {0x9A, 0x3D}, {0x9A, 0x3E}, {0x9A, 0x3F}, {0x9A, 0x40}, /* 0x84-0x87 */ + {0x9A, 0x41}, {0x9A, 0x42}, {0x9A, 0x43}, {0x9A, 0x44}, /* 0x88-0x8B */ + {0x9A, 0x45}, {0x9A, 0x46}, {0x9A, 0x47}, {0x9A, 0x48}, /* 0x8C-0x8F */ + {0x9A, 0x49}, {0x9A, 0x4A}, {0x9A, 0x4B}, {0x9A, 0x4C}, /* 0x90-0x93 */ + {0x9A, 0x4D}, {0x9A, 0x4E}, {0x9A, 0x4F}, {0x9A, 0x50}, /* 0x94-0x97 */ + {0x9A, 0x51}, {0x9A, 0x52}, {0x9A, 0x53}, {0x9A, 0x54}, /* 0x98-0x9B */ + {0x9A, 0x55}, {0x9A, 0x56}, {0x9A, 0x57}, {0x9A, 0x58}, /* 0x9C-0x9F */ + {0x9A, 0x59}, {0x98, 0x89}, {0x98, 0x8C}, {0x98, 0x8D}, /* 0xA0-0xA3 */ + {0x98, 0x8F}, {0x98, 0x94}, {0x98, 0x9A}, {0x98, 0x9B}, /* 0xA4-0xA7 */ + {0x98, 0x9E}, {0x98, 0x9F}, {0x98, 0xA1}, {0x98, 0xA2}, /* 0xA8-0xAB */ + {0x98, 0xA5}, {0x98, 0xA6}, {0x86, 0x4D}, {0x86, 0x54}, /* 0xAC-0xAF */ + {0x86, 0x6C}, {0x86, 0x6E}, {0x86, 0x7F}, {0x86, 0x7A}, /* 0xB0-0xB3 */ + {0x86, 0x7C}, {0x86, 0x7B}, {0x86, 0xA8}, {0x86, 0x8D}, /* 0xB4-0xB7 */ + {0x86, 0x8B}, {0x86, 0xAC}, {0x86, 0x9D}, {0x86, 0xA7}, /* 0xB8-0xBB */ + {0x86, 0xA3}, {0x86, 0xAA}, {0x86, 0x93}, {0x86, 0xA9}, /* 0xBC-0xBF */ + {0x86, 0xB6}, {0x86, 0xC4}, {0x86, 0xB5}, {0x86, 0xCE}, /* 0xC0-0xC3 */ + {0x86, 0xB0}, {0x86, 0xBA}, {0x86, 0xB1}, {0x86, 0xAF}, /* 0xC4-0xC7 */ + {0x86, 0xC9}, {0x86, 0xCF}, {0x86, 0xB4}, {0x86, 0xE9}, /* 0xC8-0xCB */ + {0x86, 0xF1}, {0x86, 0xF2}, {0x86, 0xED}, {0x86, 0xF3}, /* 0xCC-0xCF */ + {0x86, 0xD0}, {0x87, 0x13}, {0x86, 0xDE}, {0x86, 0xF4}, /* 0xD0-0xD3 */ + {0x86, 0xDF}, {0x86, 0xD8}, {0x86, 0xD1}, {0x87, 0x03}, /* 0xD4-0xD7 */ + {0x87, 0x07}, {0x86, 0xF8}, {0x87, 0x08}, {0x87, 0x0A}, /* 0xD8-0xDB */ + {0x87, 0x0D}, {0x87, 0x09}, {0x87, 0x23}, {0x87, 0x3B}, /* 0xDC-0xDF */ + {0x87, 0x1E}, {0x87, 0x25}, {0x87, 0x2E}, {0x87, 0x1A}, /* 0xE0-0xE3 */ + {0x87, 0x3E}, {0x87, 0x48}, {0x87, 0x34}, {0x87, 0x31}, /* 0xE4-0xE7 */ + {0x87, 0x29}, {0x87, 0x37}, {0x87, 0x3F}, {0x87, 0x82}, /* 0xE8-0xEB */ + {0x87, 0x22}, {0x87, 0x7D}, {0x87, 0x7E}, {0x87, 0x7B}, /* 0xEC-0xEF */ + {0x87, 0x60}, {0x87, 0x70}, {0x87, 0x4C}, {0x87, 0x6E}, /* 0xF0-0xF3 */ + {0x87, 0x8B}, {0x87, 0x53}, {0x87, 0x63}, {0x87, 0x7C}, /* 0xF4-0xF7 */ + {0x87, 0x64}, {0x87, 0x59}, {0x87, 0x65}, {0x87, 0x93}, /* 0xF8-0xFB */ + {0x87, 0xAF}, {0x87, 0xA8}, {0x87, 0xD2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9A, 0x5A}, {0x9A, 0x5B}, {0x9A, 0x5C}, {0x9A, 0x5D}, /* 0x40-0x43 */ + {0x9A, 0x5E}, {0x9A, 0x5F}, {0x9A, 0x60}, {0x9A, 0x61}, /* 0x44-0x47 */ + {0x9A, 0x62}, {0x9A, 0x63}, {0x9A, 0x64}, {0x9A, 0x65}, /* 0x48-0x4B */ + {0x9A, 0x66}, {0x9A, 0x67}, {0x9A, 0x68}, {0x9A, 0x69}, /* 0x4C-0x4F */ + {0x9A, 0x6A}, {0x9A, 0x6B}, {0x9A, 0x72}, {0x9A, 0x83}, /* 0x50-0x53 */ + {0x9A, 0x89}, {0x9A, 0x8D}, {0x9A, 0x8E}, {0x9A, 0x94}, /* 0x54-0x57 */ + {0x9A, 0x95}, {0x9A, 0x99}, {0x9A, 0xA6}, {0x9A, 0xA9}, /* 0x58-0x5B */ + {0x9A, 0xAA}, {0x9A, 0xAB}, {0x9A, 0xAC}, {0x9A, 0xAD}, /* 0x5C-0x5F */ + {0x9A, 0xAE}, {0x9A, 0xAF}, {0x9A, 0xB2}, {0x9A, 0xB3}, /* 0x60-0x63 */ + {0x9A, 0xB4}, {0x9A, 0xB5}, {0x9A, 0xB9}, {0x9A, 0xBB}, /* 0x64-0x67 */ + {0x9A, 0xBD}, {0x9A, 0xBE}, {0x9A, 0xBF}, {0x9A, 0xC3}, /* 0x68-0x6B */ + {0x9A, 0xC4}, {0x9A, 0xC6}, {0x9A, 0xC7}, {0x9A, 0xC8}, /* 0x6C-0x6F */ + {0x9A, 0xC9}, {0x9A, 0xCA}, {0x9A, 0xCD}, {0x9A, 0xCE}, /* 0x70-0x73 */ + {0x9A, 0xCF}, {0x9A, 0xD0}, {0x9A, 0xD2}, {0x9A, 0xD4}, /* 0x74-0x77 */ + {0x9A, 0xD5}, {0x9A, 0xD6}, {0x9A, 0xD7}, {0x9A, 0xD9}, /* 0x78-0x7B */ + {0x9A, 0xDA}, {0x9A, 0xDB}, {0x9A, 0xDC}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9A, 0xDD}, {0x9A, 0xDE}, {0x9A, 0xE0}, {0x9A, 0xE2}, /* 0x80-0x83 */ + {0x9A, 0xE3}, {0x9A, 0xE4}, {0x9A, 0xE5}, {0x9A, 0xE7}, /* 0x84-0x87 */ + {0x9A, 0xE8}, {0x9A, 0xE9}, {0x9A, 0xEA}, {0x9A, 0xEC}, /* 0x88-0x8B */ + {0x9A, 0xEE}, {0x9A, 0xF0}, {0x9A, 0xF1}, {0x9A, 0xF2}, /* 0x8C-0x8F */ + {0x9A, 0xF3}, {0x9A, 0xF4}, {0x9A, 0xF5}, {0x9A, 0xF6}, /* 0x90-0x93 */ + {0x9A, 0xF7}, {0x9A, 0xF8}, {0x9A, 0xFA}, {0x9A, 0xFC}, /* 0x94-0x97 */ + {0x9A, 0xFD}, {0x9A, 0xFE}, {0x9A, 0xFF}, {0x9B, 0x00}, /* 0x98-0x9B */ + {0x9B, 0x01}, {0x9B, 0x02}, {0x9B, 0x04}, {0x9B, 0x05}, /* 0x9C-0x9F */ + {0x9B, 0x06}, {0x87, 0xC6}, {0x87, 0x88}, {0x87, 0x85}, /* 0xA0-0xA3 */ + {0x87, 0xAD}, {0x87, 0x97}, {0x87, 0x83}, {0x87, 0xAB}, /* 0xA4-0xA7 */ + {0x87, 0xE5}, {0x87, 0xAC}, {0x87, 0xB5}, {0x87, 0xB3}, /* 0xA8-0xAB */ + {0x87, 0xCB}, {0x87, 0xD3}, {0x87, 0xBD}, {0x87, 0xD1}, /* 0xAC-0xAF */ + {0x87, 0xC0}, {0x87, 0xCA}, {0x87, 0xDB}, {0x87, 0xEA}, /* 0xB0-0xB3 */ + {0x87, 0xE0}, {0x87, 0xEE}, {0x88, 0x16}, {0x88, 0x13}, /* 0xB4-0xB7 */ + {0x87, 0xFE}, {0x88, 0x0A}, {0x88, 0x1B}, {0x88, 0x21}, /* 0xB8-0xBB */ + {0x88, 0x39}, {0x88, 0x3C}, {0x7F, 0x36}, {0x7F, 0x42}, /* 0xBC-0xBF */ + {0x7F, 0x44}, {0x7F, 0x45}, {0x82, 0x10}, {0x7A, 0xFA}, /* 0xC0-0xC3 */ + {0x7A, 0xFD}, {0x7B, 0x08}, {0x7B, 0x03}, {0x7B, 0x04}, /* 0xC4-0xC7 */ + {0x7B, 0x15}, {0x7B, 0x0A}, {0x7B, 0x2B}, {0x7B, 0x0F}, /* 0xC8-0xCB */ + {0x7B, 0x47}, {0x7B, 0x38}, {0x7B, 0x2A}, {0x7B, 0x19}, /* 0xCC-0xCF */ + {0x7B, 0x2E}, {0x7B, 0x31}, {0x7B, 0x20}, {0x7B, 0x25}, /* 0xD0-0xD3 */ + {0x7B, 0x24}, {0x7B, 0x33}, {0x7B, 0x3E}, {0x7B, 0x1E}, /* 0xD4-0xD7 */ + {0x7B, 0x58}, {0x7B, 0x5A}, {0x7B, 0x45}, {0x7B, 0x75}, /* 0xD8-0xDB */ + {0x7B, 0x4C}, {0x7B, 0x5D}, {0x7B, 0x60}, {0x7B, 0x6E}, /* 0xDC-0xDF */ + {0x7B, 0x7B}, {0x7B, 0x62}, {0x7B, 0x72}, {0x7B, 0x71}, /* 0xE0-0xE3 */ + {0x7B, 0x90}, {0x7B, 0xA6}, {0x7B, 0xA7}, {0x7B, 0xB8}, /* 0xE4-0xE7 */ + {0x7B, 0xAC}, {0x7B, 0x9D}, {0x7B, 0xA8}, {0x7B, 0x85}, /* 0xE8-0xEB */ + {0x7B, 0xAA}, {0x7B, 0x9C}, {0x7B, 0xA2}, {0x7B, 0xAB}, /* 0xEC-0xEF */ + {0x7B, 0xB4}, {0x7B, 0xD1}, {0x7B, 0xC1}, {0x7B, 0xCC}, /* 0xF0-0xF3 */ + {0x7B, 0xDD}, {0x7B, 0xDA}, {0x7B, 0xE5}, {0x7B, 0xE6}, /* 0xF4-0xF7 */ + {0x7B, 0xEA}, {0x7C, 0x0C}, {0x7B, 0xFE}, {0x7B, 0xFC}, /* 0xF8-0xFB */ + {0x7C, 0x0F}, {0x7C, 0x16}, {0x7C, 0x0B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9B, 0x07}, {0x9B, 0x09}, {0x9B, 0x0A}, {0x9B, 0x0B}, /* 0x40-0x43 */ + {0x9B, 0x0C}, {0x9B, 0x0D}, {0x9B, 0x0E}, {0x9B, 0x10}, /* 0x44-0x47 */ + {0x9B, 0x11}, {0x9B, 0x12}, {0x9B, 0x14}, {0x9B, 0x15}, /* 0x48-0x4B */ + {0x9B, 0x16}, {0x9B, 0x17}, {0x9B, 0x18}, {0x9B, 0x19}, /* 0x4C-0x4F */ + {0x9B, 0x1A}, {0x9B, 0x1B}, {0x9B, 0x1C}, {0x9B, 0x1D}, /* 0x50-0x53 */ + {0x9B, 0x1E}, {0x9B, 0x20}, {0x9B, 0x21}, {0x9B, 0x22}, /* 0x54-0x57 */ + {0x9B, 0x24}, {0x9B, 0x25}, {0x9B, 0x26}, {0x9B, 0x27}, /* 0x58-0x5B */ + {0x9B, 0x28}, {0x9B, 0x29}, {0x9B, 0x2A}, {0x9B, 0x2B}, /* 0x5C-0x5F */ + {0x9B, 0x2C}, {0x9B, 0x2D}, {0x9B, 0x2E}, {0x9B, 0x30}, /* 0x60-0x63 */ + {0x9B, 0x31}, {0x9B, 0x33}, {0x9B, 0x34}, {0x9B, 0x35}, /* 0x64-0x67 */ + {0x9B, 0x36}, {0x9B, 0x37}, {0x9B, 0x38}, {0x9B, 0x39}, /* 0x68-0x6B */ + {0x9B, 0x3A}, {0x9B, 0x3D}, {0x9B, 0x3E}, {0x9B, 0x3F}, /* 0x6C-0x6F */ + {0x9B, 0x40}, {0x9B, 0x46}, {0x9B, 0x4A}, {0x9B, 0x4B}, /* 0x70-0x73 */ + {0x9B, 0x4C}, {0x9B, 0x4E}, {0x9B, 0x50}, {0x9B, 0x52}, /* 0x74-0x77 */ + {0x9B, 0x53}, {0x9B, 0x55}, {0x9B, 0x56}, {0x9B, 0x57}, /* 0x78-0x7B */ + {0x9B, 0x58}, {0x9B, 0x59}, {0x9B, 0x5A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9B, 0x5B}, {0x9B, 0x5C}, {0x9B, 0x5D}, {0x9B, 0x5E}, /* 0x80-0x83 */ + {0x9B, 0x5F}, {0x9B, 0x60}, {0x9B, 0x61}, {0x9B, 0x62}, /* 0x84-0x87 */ + {0x9B, 0x63}, {0x9B, 0x64}, {0x9B, 0x65}, {0x9B, 0x66}, /* 0x88-0x8B */ + {0x9B, 0x67}, {0x9B, 0x68}, {0x9B, 0x69}, {0x9B, 0x6A}, /* 0x8C-0x8F */ + {0x9B, 0x6B}, {0x9B, 0x6C}, {0x9B, 0x6D}, {0x9B, 0x6E}, /* 0x90-0x93 */ + {0x9B, 0x6F}, {0x9B, 0x70}, {0x9B, 0x71}, {0x9B, 0x72}, /* 0x94-0x97 */ + {0x9B, 0x73}, {0x9B, 0x74}, {0x9B, 0x75}, {0x9B, 0x76}, /* 0x98-0x9B */ + {0x9B, 0x77}, {0x9B, 0x78}, {0x9B, 0x79}, {0x9B, 0x7A}, /* 0x9C-0x9F */ + {0x9B, 0x7B}, {0x7C, 0x1F}, {0x7C, 0x2A}, {0x7C, 0x26}, /* 0xA0-0xA3 */ + {0x7C, 0x38}, {0x7C, 0x41}, {0x7C, 0x40}, {0x81, 0xFE}, /* 0xA4-0xA7 */ + {0x82, 0x01}, {0x82, 0x02}, {0x82, 0x04}, {0x81, 0xEC}, /* 0xA8-0xAB */ + {0x88, 0x44}, {0x82, 0x21}, {0x82, 0x22}, {0x82, 0x23}, /* 0xAC-0xAF */ + {0x82, 0x2D}, {0x82, 0x2F}, {0x82, 0x28}, {0x82, 0x2B}, /* 0xB0-0xB3 */ + {0x82, 0x38}, {0x82, 0x3B}, {0x82, 0x33}, {0x82, 0x34}, /* 0xB4-0xB7 */ + {0x82, 0x3E}, {0x82, 0x44}, {0x82, 0x49}, {0x82, 0x4B}, /* 0xB8-0xBB */ + {0x82, 0x4F}, {0x82, 0x5A}, {0x82, 0x5F}, {0x82, 0x68}, /* 0xBC-0xBF */ + {0x88, 0x7E}, {0x88, 0x85}, {0x88, 0x88}, {0x88, 0xD8}, /* 0xC0-0xC3 */ + {0x88, 0xDF}, {0x89, 0x5E}, {0x7F, 0x9D}, {0x7F, 0x9F}, /* 0xC4-0xC7 */ + {0x7F, 0xA7}, {0x7F, 0xAF}, {0x7F, 0xB0}, {0x7F, 0xB2}, /* 0xC8-0xCB */ + {0x7C, 0x7C}, {0x65, 0x49}, {0x7C, 0x91}, {0x7C, 0x9D}, /* 0xCC-0xCF */ + {0x7C, 0x9C}, {0x7C, 0x9E}, {0x7C, 0xA2}, {0x7C, 0xB2}, /* 0xD0-0xD3 */ + {0x7C, 0xBC}, {0x7C, 0xBD}, {0x7C, 0xC1}, {0x7C, 0xC7}, /* 0xD4-0xD7 */ + {0x7C, 0xCC}, {0x7C, 0xCD}, {0x7C, 0xC8}, {0x7C, 0xC5}, /* 0xD8-0xDB */ + {0x7C, 0xD7}, {0x7C, 0xE8}, {0x82, 0x6E}, {0x66, 0xA8}, /* 0xDC-0xDF */ + {0x7F, 0xBF}, {0x7F, 0xCE}, {0x7F, 0xD5}, {0x7F, 0xE5}, /* 0xE0-0xE3 */ + {0x7F, 0xE1}, {0x7F, 0xE6}, {0x7F, 0xE9}, {0x7F, 0xEE}, /* 0xE4-0xE7 */ + {0x7F, 0xF3}, {0x7C, 0xF8}, {0x7D, 0x77}, {0x7D, 0xA6}, /* 0xE8-0xEB */ + {0x7D, 0xAE}, {0x7E, 0x47}, {0x7E, 0x9B}, {0x9E, 0xB8}, /* 0xEC-0xEF */ + {0x9E, 0xB4}, {0x8D, 0x73}, {0x8D, 0x84}, {0x8D, 0x94}, /* 0xF0-0xF3 */ + {0x8D, 0x91}, {0x8D, 0xB1}, {0x8D, 0x67}, {0x8D, 0x6D}, /* 0xF4-0xF7 */ + {0x8C, 0x47}, {0x8C, 0x49}, {0x91, 0x4A}, {0x91, 0x50}, /* 0xF8-0xFB */ + {0x91, 0x4E}, {0x91, 0x4F}, {0x91, 0x64}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9B, 0x7C}, {0x9B, 0x7D}, {0x9B, 0x7E}, {0x9B, 0x7F}, /* 0x40-0x43 */ + {0x9B, 0x80}, {0x9B, 0x81}, {0x9B, 0x82}, {0x9B, 0x83}, /* 0x44-0x47 */ + {0x9B, 0x84}, {0x9B, 0x85}, {0x9B, 0x86}, {0x9B, 0x87}, /* 0x48-0x4B */ + {0x9B, 0x88}, {0x9B, 0x89}, {0x9B, 0x8A}, {0x9B, 0x8B}, /* 0x4C-0x4F */ + {0x9B, 0x8C}, {0x9B, 0x8D}, {0x9B, 0x8E}, {0x9B, 0x8F}, /* 0x50-0x53 */ + {0x9B, 0x90}, {0x9B, 0x91}, {0x9B, 0x92}, {0x9B, 0x93}, /* 0x54-0x57 */ + {0x9B, 0x94}, {0x9B, 0x95}, {0x9B, 0x96}, {0x9B, 0x97}, /* 0x58-0x5B */ + {0x9B, 0x98}, {0x9B, 0x99}, {0x9B, 0x9A}, {0x9B, 0x9B}, /* 0x5C-0x5F */ + {0x9B, 0x9C}, {0x9B, 0x9D}, {0x9B, 0x9E}, {0x9B, 0x9F}, /* 0x60-0x63 */ + {0x9B, 0xA0}, {0x9B, 0xA1}, {0x9B, 0xA2}, {0x9B, 0xA3}, /* 0x64-0x67 */ + {0x9B, 0xA4}, {0x9B, 0xA5}, {0x9B, 0xA6}, {0x9B, 0xA7}, /* 0x68-0x6B */ + {0x9B, 0xA8}, {0x9B, 0xA9}, {0x9B, 0xAA}, {0x9B, 0xAB}, /* 0x6C-0x6F */ + {0x9B, 0xAC}, {0x9B, 0xAD}, {0x9B, 0xAE}, {0x9B, 0xAF}, /* 0x70-0x73 */ + {0x9B, 0xB0}, {0x9B, 0xB1}, {0x9B, 0xB2}, {0x9B, 0xB3}, /* 0x74-0x77 */ + {0x9B, 0xB4}, {0x9B, 0xB5}, {0x9B, 0xB6}, {0x9B, 0xB7}, /* 0x78-0x7B */ + {0x9B, 0xB8}, {0x9B, 0xB9}, {0x9B, 0xBA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9B, 0xBB}, {0x9B, 0xBC}, {0x9B, 0xBD}, {0x9B, 0xBE}, /* 0x80-0x83 */ + {0x9B, 0xBF}, {0x9B, 0xC0}, {0x9B, 0xC1}, {0x9B, 0xC2}, /* 0x84-0x87 */ + {0x9B, 0xC3}, {0x9B, 0xC4}, {0x9B, 0xC5}, {0x9B, 0xC6}, /* 0x88-0x8B */ + {0x9B, 0xC7}, {0x9B, 0xC8}, {0x9B, 0xC9}, {0x9B, 0xCA}, /* 0x8C-0x8F */ + {0x9B, 0xCB}, {0x9B, 0xCC}, {0x9B, 0xCD}, {0x9B, 0xCE}, /* 0x90-0x93 */ + {0x9B, 0xCF}, {0x9B, 0xD0}, {0x9B, 0xD1}, {0x9B, 0xD2}, /* 0x94-0x97 */ + {0x9B, 0xD3}, {0x9B, 0xD4}, {0x9B, 0xD5}, {0x9B, 0xD6}, /* 0x98-0x9B */ + {0x9B, 0xD7}, {0x9B, 0xD8}, {0x9B, 0xD9}, {0x9B, 0xDA}, /* 0x9C-0x9F */ + {0x9B, 0xDB}, {0x91, 0x62}, {0x91, 0x61}, {0x91, 0x70}, /* 0xA0-0xA3 */ + {0x91, 0x69}, {0x91, 0x6F}, {0x91, 0x7D}, {0x91, 0x7E}, /* 0xA4-0xA7 */ + {0x91, 0x72}, {0x91, 0x74}, {0x91, 0x79}, {0x91, 0x8C}, /* 0xA8-0xAB */ + {0x91, 0x85}, {0x91, 0x90}, {0x91, 0x8D}, {0x91, 0x91}, /* 0xAC-0xAF */ + {0x91, 0xA2}, {0x91, 0xA3}, {0x91, 0xAA}, {0x91, 0xAD}, /* 0xB0-0xB3 */ + {0x91, 0xAE}, {0x91, 0xAF}, {0x91, 0xB5}, {0x91, 0xB4}, /* 0xB4-0xB7 */ + {0x91, 0xBA}, {0x8C, 0x55}, {0x9E, 0x7E}, {0x8D, 0xB8}, /* 0xB8-0xBB */ + {0x8D, 0xEB}, {0x8E, 0x05}, {0x8E, 0x59}, {0x8E, 0x69}, /* 0xBC-0xBF */ + {0x8D, 0xB5}, {0x8D, 0xBF}, {0x8D, 0xBC}, {0x8D, 0xBA}, /* 0xC0-0xC3 */ + {0x8D, 0xC4}, {0x8D, 0xD6}, {0x8D, 0xD7}, {0x8D, 0xDA}, /* 0xC4-0xC7 */ + {0x8D, 0xDE}, {0x8D, 0xCE}, {0x8D, 0xCF}, {0x8D, 0xDB}, /* 0xC8-0xCB */ + {0x8D, 0xC6}, {0x8D, 0xEC}, {0x8D, 0xF7}, {0x8D, 0xF8}, /* 0xCC-0xCF */ + {0x8D, 0xE3}, {0x8D, 0xF9}, {0x8D, 0xFB}, {0x8D, 0xE4}, /* 0xD0-0xD3 */ + {0x8E, 0x09}, {0x8D, 0xFD}, {0x8E, 0x14}, {0x8E, 0x1D}, /* 0xD4-0xD7 */ + {0x8E, 0x1F}, {0x8E, 0x2C}, {0x8E, 0x2E}, {0x8E, 0x23}, /* 0xD8-0xDB */ + {0x8E, 0x2F}, {0x8E, 0x3A}, {0x8E, 0x40}, {0x8E, 0x39}, /* 0xDC-0xDF */ + {0x8E, 0x35}, {0x8E, 0x3D}, {0x8E, 0x31}, {0x8E, 0x49}, /* 0xE0-0xE3 */ + {0x8E, 0x41}, {0x8E, 0x42}, {0x8E, 0x51}, {0x8E, 0x52}, /* 0xE4-0xE7 */ + {0x8E, 0x4A}, {0x8E, 0x70}, {0x8E, 0x76}, {0x8E, 0x7C}, /* 0xE8-0xEB */ + {0x8E, 0x6F}, {0x8E, 0x74}, {0x8E, 0x85}, {0x8E, 0x8F}, /* 0xEC-0xEF */ + {0x8E, 0x94}, {0x8E, 0x90}, {0x8E, 0x9C}, {0x8E, 0x9E}, /* 0xF0-0xF3 */ + {0x8C, 0x78}, {0x8C, 0x82}, {0x8C, 0x8A}, {0x8C, 0x85}, /* 0xF4-0xF7 */ + {0x8C, 0x98}, {0x8C, 0x94}, {0x65, 0x9B}, {0x89, 0xD6}, /* 0xF8-0xFB */ + {0x89, 0xDE}, {0x89, 0xDA}, {0x89, 0xDC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9B, 0xDC}, {0x9B, 0xDD}, {0x9B, 0xDE}, {0x9B, 0xDF}, /* 0x40-0x43 */ + {0x9B, 0xE0}, {0x9B, 0xE1}, {0x9B, 0xE2}, {0x9B, 0xE3}, /* 0x44-0x47 */ + {0x9B, 0xE4}, {0x9B, 0xE5}, {0x9B, 0xE6}, {0x9B, 0xE7}, /* 0x48-0x4B */ + {0x9B, 0xE8}, {0x9B, 0xE9}, {0x9B, 0xEA}, {0x9B, 0xEB}, /* 0x4C-0x4F */ + {0x9B, 0xEC}, {0x9B, 0xED}, {0x9B, 0xEE}, {0x9B, 0xEF}, /* 0x50-0x53 */ + {0x9B, 0xF0}, {0x9B, 0xF1}, {0x9B, 0xF2}, {0x9B, 0xF3}, /* 0x54-0x57 */ + {0x9B, 0xF4}, {0x9B, 0xF5}, {0x9B, 0xF6}, {0x9B, 0xF7}, /* 0x58-0x5B */ + {0x9B, 0xF8}, {0x9B, 0xF9}, {0x9B, 0xFA}, {0x9B, 0xFB}, /* 0x5C-0x5F */ + {0x9B, 0xFC}, {0x9B, 0xFD}, {0x9B, 0xFE}, {0x9B, 0xFF}, /* 0x60-0x63 */ + {0x9C, 0x00}, {0x9C, 0x01}, {0x9C, 0x02}, {0x9C, 0x03}, /* 0x64-0x67 */ + {0x9C, 0x04}, {0x9C, 0x05}, {0x9C, 0x06}, {0x9C, 0x07}, /* 0x68-0x6B */ + {0x9C, 0x08}, {0x9C, 0x09}, {0x9C, 0x0A}, {0x9C, 0x0B}, /* 0x6C-0x6F */ + {0x9C, 0x0C}, {0x9C, 0x0D}, {0x9C, 0x0E}, {0x9C, 0x0F}, /* 0x70-0x73 */ + {0x9C, 0x10}, {0x9C, 0x11}, {0x9C, 0x12}, {0x9C, 0x13}, /* 0x74-0x77 */ + {0x9C, 0x14}, {0x9C, 0x15}, {0x9C, 0x16}, {0x9C, 0x17}, /* 0x78-0x7B */ + {0x9C, 0x18}, {0x9C, 0x19}, {0x9C, 0x1A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9C, 0x1B}, {0x9C, 0x1C}, {0x9C, 0x1D}, {0x9C, 0x1E}, /* 0x80-0x83 */ + {0x9C, 0x1F}, {0x9C, 0x20}, {0x9C, 0x21}, {0x9C, 0x22}, /* 0x84-0x87 */ + {0x9C, 0x23}, {0x9C, 0x24}, {0x9C, 0x25}, {0x9C, 0x26}, /* 0x88-0x8B */ + {0x9C, 0x27}, {0x9C, 0x28}, {0x9C, 0x29}, {0x9C, 0x2A}, /* 0x8C-0x8F */ + {0x9C, 0x2B}, {0x9C, 0x2C}, {0x9C, 0x2D}, {0x9C, 0x2E}, /* 0x90-0x93 */ + {0x9C, 0x2F}, {0x9C, 0x30}, {0x9C, 0x31}, {0x9C, 0x32}, /* 0x94-0x97 */ + {0x9C, 0x33}, {0x9C, 0x34}, {0x9C, 0x35}, {0x9C, 0x36}, /* 0x98-0x9B */ + {0x9C, 0x37}, {0x9C, 0x38}, {0x9C, 0x39}, {0x9C, 0x3A}, /* 0x9C-0x9F */ + {0x9C, 0x3B}, {0x89, 0xE5}, {0x89, 0xEB}, {0x89, 0xEF}, /* 0xA0-0xA3 */ + {0x8A, 0x3E}, {0x8B, 0x26}, {0x97, 0x53}, {0x96, 0xE9}, /* 0xA4-0xA7 */ + {0x96, 0xF3}, {0x96, 0xEF}, {0x97, 0x06}, {0x97, 0x01}, /* 0xA8-0xAB */ + {0x97, 0x08}, {0x97, 0x0F}, {0x97, 0x0E}, {0x97, 0x2A}, /* 0xAC-0xAF */ + {0x97, 0x2D}, {0x97, 0x30}, {0x97, 0x3E}, {0x9F, 0x80}, /* 0xB0-0xB3 */ + {0x9F, 0x83}, {0x9F, 0x85}, {0x9F, 0x86}, {0x9F, 0x87}, /* 0xB4-0xB7 */ + {0x9F, 0x88}, {0x9F, 0x89}, {0x9F, 0x8A}, {0x9F, 0x8C}, /* 0xB8-0xBB */ + {0x9E, 0xFE}, {0x9F, 0x0B}, {0x9F, 0x0D}, {0x96, 0xB9}, /* 0xBC-0xBF */ + {0x96, 0xBC}, {0x96, 0xBD}, {0x96, 0xCE}, {0x96, 0xD2}, /* 0xC0-0xC3 */ + {0x77, 0xBF}, {0x96, 0xE0}, {0x92, 0x8E}, {0x92, 0xAE}, /* 0xC4-0xC7 */ + {0x92, 0xC8}, {0x93, 0x3E}, {0x93, 0x6A}, {0x93, 0xCA}, /* 0xC8-0xCB */ + {0x93, 0x8F}, {0x94, 0x3E}, {0x94, 0x6B}, {0x9C, 0x7F}, /* 0xCC-0xCF */ + {0x9C, 0x82}, {0x9C, 0x85}, {0x9C, 0x86}, {0x9C, 0x87}, /* 0xD0-0xD3 */ + {0x9C, 0x88}, {0x7A, 0x23}, {0x9C, 0x8B}, {0x9C, 0x8E}, /* 0xD4-0xD7 */ + {0x9C, 0x90}, {0x9C, 0x91}, {0x9C, 0x92}, {0x9C, 0x94}, /* 0xD8-0xDB */ + {0x9C, 0x95}, {0x9C, 0x9A}, {0x9C, 0x9B}, {0x9C, 0x9E}, /* 0xDC-0xDF */ + {0x9C, 0x9F}, {0x9C, 0xA0}, {0x9C, 0xA1}, {0x9C, 0xA2}, /* 0xE0-0xE3 */ + {0x9C, 0xA3}, {0x9C, 0xA5}, {0x9C, 0xA6}, {0x9C, 0xA7}, /* 0xE4-0xE7 */ + {0x9C, 0xA8}, {0x9C, 0xA9}, {0x9C, 0xAB}, {0x9C, 0xAD}, /* 0xE8-0xEB */ + {0x9C, 0xAE}, {0x9C, 0xB0}, {0x9C, 0xB1}, {0x9C, 0xB2}, /* 0xEC-0xEF */ + {0x9C, 0xB3}, {0x9C, 0xB4}, {0x9C, 0xB5}, {0x9C, 0xB6}, /* 0xF0-0xF3 */ + {0x9C, 0xB7}, {0x9C, 0xBA}, {0x9C, 0xBB}, {0x9C, 0xBC}, /* 0xF4-0xF7 */ + {0x9C, 0xBD}, {0x9C, 0xC4}, {0x9C, 0xC5}, {0x9C, 0xC6}, /* 0xF8-0xFB */ + {0x9C, 0xC7}, {0x9C, 0xCA}, {0x9C, 0xCB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9C, 0x3C}, {0x9C, 0x3D}, {0x9C, 0x3E}, {0x9C, 0x3F}, /* 0x40-0x43 */ + {0x9C, 0x40}, {0x9C, 0x41}, {0x9C, 0x42}, {0x9C, 0x43}, /* 0x44-0x47 */ + {0x9C, 0x44}, {0x9C, 0x45}, {0x9C, 0x46}, {0x9C, 0x47}, /* 0x48-0x4B */ + {0x9C, 0x48}, {0x9C, 0x49}, {0x9C, 0x4A}, {0x9C, 0x4B}, /* 0x4C-0x4F */ + {0x9C, 0x4C}, {0x9C, 0x4D}, {0x9C, 0x4E}, {0x9C, 0x4F}, /* 0x50-0x53 */ + {0x9C, 0x50}, {0x9C, 0x51}, {0x9C, 0x52}, {0x9C, 0x53}, /* 0x54-0x57 */ + {0x9C, 0x54}, {0x9C, 0x55}, {0x9C, 0x56}, {0x9C, 0x57}, /* 0x58-0x5B */ + {0x9C, 0x58}, {0x9C, 0x59}, {0x9C, 0x5A}, {0x9C, 0x5B}, /* 0x5C-0x5F */ + {0x9C, 0x5C}, {0x9C, 0x5D}, {0x9C, 0x5E}, {0x9C, 0x5F}, /* 0x60-0x63 */ + {0x9C, 0x60}, {0x9C, 0x61}, {0x9C, 0x62}, {0x9C, 0x63}, /* 0x64-0x67 */ + {0x9C, 0x64}, {0x9C, 0x65}, {0x9C, 0x66}, {0x9C, 0x67}, /* 0x68-0x6B */ + {0x9C, 0x68}, {0x9C, 0x69}, {0x9C, 0x6A}, {0x9C, 0x6B}, /* 0x6C-0x6F */ + {0x9C, 0x6C}, {0x9C, 0x6D}, {0x9C, 0x6E}, {0x9C, 0x6F}, /* 0x70-0x73 */ + {0x9C, 0x70}, {0x9C, 0x71}, {0x9C, 0x72}, {0x9C, 0x73}, /* 0x74-0x77 */ + {0x9C, 0x74}, {0x9C, 0x75}, {0x9C, 0x76}, {0x9C, 0x77}, /* 0x78-0x7B */ + {0x9C, 0x78}, {0x9C, 0x79}, {0x9C, 0x7A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9C, 0x7B}, {0x9C, 0x7D}, {0x9C, 0x7E}, {0x9C, 0x80}, /* 0x80-0x83 */ + {0x9C, 0x83}, {0x9C, 0x84}, {0x9C, 0x89}, {0x9C, 0x8A}, /* 0x84-0x87 */ + {0x9C, 0x8C}, {0x9C, 0x8F}, {0x9C, 0x93}, {0x9C, 0x96}, /* 0x88-0x8B */ + {0x9C, 0x97}, {0x9C, 0x98}, {0x9C, 0x99}, {0x9C, 0x9D}, /* 0x8C-0x8F */ + {0x9C, 0xAA}, {0x9C, 0xAC}, {0x9C, 0xAF}, {0x9C, 0xB9}, /* 0x90-0x93 */ + {0x9C, 0xBE}, {0x9C, 0xBF}, {0x9C, 0xC0}, {0x9C, 0xC1}, /* 0x94-0x97 */ + {0x9C, 0xC2}, {0x9C, 0xC8}, {0x9C, 0xC9}, {0x9C, 0xD1}, /* 0x98-0x9B */ + {0x9C, 0xD2}, {0x9C, 0xDA}, {0x9C, 0xDB}, {0x9C, 0xE0}, /* 0x9C-0x9F */ + {0x9C, 0xE1}, {0x9C, 0xCC}, {0x9C, 0xCD}, {0x9C, 0xCE}, /* 0xA0-0xA3 */ + {0x9C, 0xCF}, {0x9C, 0xD0}, {0x9C, 0xD3}, {0x9C, 0xD4}, /* 0xA4-0xA7 */ + {0x9C, 0xD5}, {0x9C, 0xD7}, {0x9C, 0xD8}, {0x9C, 0xD9}, /* 0xA8-0xAB */ + {0x9C, 0xDC}, {0x9C, 0xDD}, {0x9C, 0xDF}, {0x9C, 0xE2}, /* 0xAC-0xAF */ + {0x97, 0x7C}, {0x97, 0x85}, {0x97, 0x91}, {0x97, 0x92}, /* 0xB0-0xB3 */ + {0x97, 0x94}, {0x97, 0xAF}, {0x97, 0xAB}, {0x97, 0xA3}, /* 0xB4-0xB7 */ + {0x97, 0xB2}, {0x97, 0xB4}, {0x9A, 0xB1}, {0x9A, 0xB0}, /* 0xB8-0xBB */ + {0x9A, 0xB7}, {0x9E, 0x58}, {0x9A, 0xB6}, {0x9A, 0xBA}, /* 0xBC-0xBF */ + {0x9A, 0xBC}, {0x9A, 0xC1}, {0x9A, 0xC0}, {0x9A, 0xC5}, /* 0xC0-0xC3 */ + {0x9A, 0xC2}, {0x9A, 0xCB}, {0x9A, 0xCC}, {0x9A, 0xD1}, /* 0xC4-0xC7 */ + {0x9B, 0x45}, {0x9B, 0x43}, {0x9B, 0x47}, {0x9B, 0x49}, /* 0xC8-0xCB */ + {0x9B, 0x48}, {0x9B, 0x4D}, {0x9B, 0x51}, {0x98, 0xE8}, /* 0xCC-0xCF */ + {0x99, 0x0D}, {0x99, 0x2E}, {0x99, 0x55}, {0x99, 0x54}, /* 0xD0-0xD3 */ + {0x9A, 0xDF}, {0x9A, 0xE1}, {0x9A, 0xE6}, {0x9A, 0xEF}, /* 0xD4-0xD7 */ + {0x9A, 0xEB}, {0x9A, 0xFB}, {0x9A, 0xED}, {0x9A, 0xF9}, /* 0xD8-0xDB */ + {0x9B, 0x08}, {0x9B, 0x0F}, {0x9B, 0x13}, {0x9B, 0x1F}, /* 0xDC-0xDF */ + {0x9B, 0x23}, {0x9E, 0xBD}, {0x9E, 0xBE}, {0x7E, 0x3B}, /* 0xE0-0xE3 */ + {0x9E, 0x82}, {0x9E, 0x87}, {0x9E, 0x88}, {0x9E, 0x8B}, /* 0xE4-0xE7 */ + {0x9E, 0x92}, {0x93, 0xD6}, {0x9E, 0x9D}, {0x9E, 0x9F}, /* 0xE8-0xEB */ + {0x9E, 0xDB}, {0x9E, 0xDC}, {0x9E, 0xDD}, {0x9E, 0xE0}, /* 0xEC-0xEF */ + {0x9E, 0xDF}, {0x9E, 0xE2}, {0x9E, 0xE9}, {0x9E, 0xE7}, /* 0xF0-0xF3 */ + {0x9E, 0xE5}, {0x9E, 0xEA}, {0x9E, 0xEF}, {0x9F, 0x22}, /* 0xF4-0xF7 */ + {0x9F, 0x2C}, {0x9F, 0x2F}, {0x9F, 0x39}, {0x9F, 0x37}, /* 0xF8-0xFB */ + {0x9F, 0x3D}, {0x9F, 0x3E}, {0x9F, 0x44}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9C, 0xE3}, {0x9C, 0xE4}, {0x9C, 0xE5}, {0x9C, 0xE6}, /* 0x40-0x43 */ + {0x9C, 0xE7}, {0x9C, 0xE8}, {0x9C, 0xE9}, {0x9C, 0xEA}, /* 0x44-0x47 */ + {0x9C, 0xEB}, {0x9C, 0xEC}, {0x9C, 0xED}, {0x9C, 0xEE}, /* 0x48-0x4B */ + {0x9C, 0xEF}, {0x9C, 0xF0}, {0x9C, 0xF1}, {0x9C, 0xF2}, /* 0x4C-0x4F */ + {0x9C, 0xF3}, {0x9C, 0xF4}, {0x9C, 0xF5}, {0x9C, 0xF6}, /* 0x50-0x53 */ + {0x9C, 0xF7}, {0x9C, 0xF8}, {0x9C, 0xF9}, {0x9C, 0xFA}, /* 0x54-0x57 */ + {0x9C, 0xFB}, {0x9C, 0xFC}, {0x9C, 0xFD}, {0x9C, 0xFE}, /* 0x58-0x5B */ + {0x9C, 0xFF}, {0x9D, 0x00}, {0x9D, 0x01}, {0x9D, 0x02}, /* 0x5C-0x5F */ + {0x9D, 0x03}, {0x9D, 0x04}, {0x9D, 0x05}, {0x9D, 0x06}, /* 0x60-0x63 */ + {0x9D, 0x07}, {0x9D, 0x08}, {0x9D, 0x09}, {0x9D, 0x0A}, /* 0x64-0x67 */ + {0x9D, 0x0B}, {0x9D, 0x0C}, {0x9D, 0x0D}, {0x9D, 0x0E}, /* 0x68-0x6B */ + {0x9D, 0x0F}, {0x9D, 0x10}, {0x9D, 0x11}, {0x9D, 0x12}, /* 0x6C-0x6F */ + {0x9D, 0x13}, {0x9D, 0x14}, {0x9D, 0x15}, {0x9D, 0x16}, /* 0x70-0x73 */ + {0x9D, 0x17}, {0x9D, 0x18}, {0x9D, 0x19}, {0x9D, 0x1A}, /* 0x74-0x77 */ + {0x9D, 0x1B}, {0x9D, 0x1C}, {0x9D, 0x1D}, {0x9D, 0x1E}, /* 0x78-0x7B */ + {0x9D, 0x1F}, {0x9D, 0x20}, {0x9D, 0x21}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9D, 0x22}, {0x9D, 0x23}, {0x9D, 0x24}, {0x9D, 0x25}, /* 0x80-0x83 */ + {0x9D, 0x26}, {0x9D, 0x27}, {0x9D, 0x28}, {0x9D, 0x29}, /* 0x84-0x87 */ + {0x9D, 0x2A}, {0x9D, 0x2B}, {0x9D, 0x2C}, {0x9D, 0x2D}, /* 0x88-0x8B */ + {0x9D, 0x2E}, {0x9D, 0x2F}, {0x9D, 0x30}, {0x9D, 0x31}, /* 0x8C-0x8F */ + {0x9D, 0x32}, {0x9D, 0x33}, {0x9D, 0x34}, {0x9D, 0x35}, /* 0x90-0x93 */ + {0x9D, 0x36}, {0x9D, 0x37}, {0x9D, 0x38}, {0x9D, 0x39}, /* 0x94-0x97 */ + {0x9D, 0x3A}, {0x9D, 0x3B}, {0x9D, 0x3C}, {0x9D, 0x3D}, /* 0x98-0x9B */ + {0x9D, 0x3E}, {0x9D, 0x3F}, {0x9D, 0x40}, {0x9D, 0x41}, /* 0x9C-0x9F */ + {0x9D, 0x42}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9D, 0x43}, {0x9D, 0x44}, {0x9D, 0x45}, {0x9D, 0x46}, /* 0x40-0x43 */ + {0x9D, 0x47}, {0x9D, 0x48}, {0x9D, 0x49}, {0x9D, 0x4A}, /* 0x44-0x47 */ + {0x9D, 0x4B}, {0x9D, 0x4C}, {0x9D, 0x4D}, {0x9D, 0x4E}, /* 0x48-0x4B */ + {0x9D, 0x4F}, {0x9D, 0x50}, {0x9D, 0x51}, {0x9D, 0x52}, /* 0x4C-0x4F */ + {0x9D, 0x53}, {0x9D, 0x54}, {0x9D, 0x55}, {0x9D, 0x56}, /* 0x50-0x53 */ + {0x9D, 0x57}, {0x9D, 0x58}, {0x9D, 0x59}, {0x9D, 0x5A}, /* 0x54-0x57 */ + {0x9D, 0x5B}, {0x9D, 0x5C}, {0x9D, 0x5D}, {0x9D, 0x5E}, /* 0x58-0x5B */ + {0x9D, 0x5F}, {0x9D, 0x60}, {0x9D, 0x61}, {0x9D, 0x62}, /* 0x5C-0x5F */ + {0x9D, 0x63}, {0x9D, 0x64}, {0x9D, 0x65}, {0x9D, 0x66}, /* 0x60-0x63 */ + {0x9D, 0x67}, {0x9D, 0x68}, {0x9D, 0x69}, {0x9D, 0x6A}, /* 0x64-0x67 */ + {0x9D, 0x6B}, {0x9D, 0x6C}, {0x9D, 0x6D}, {0x9D, 0x6E}, /* 0x68-0x6B */ + {0x9D, 0x6F}, {0x9D, 0x70}, {0x9D, 0x71}, {0x9D, 0x72}, /* 0x6C-0x6F */ + {0x9D, 0x73}, {0x9D, 0x74}, {0x9D, 0x75}, {0x9D, 0x76}, /* 0x70-0x73 */ + {0x9D, 0x77}, {0x9D, 0x78}, {0x9D, 0x79}, {0x9D, 0x7A}, /* 0x74-0x77 */ + {0x9D, 0x7B}, {0x9D, 0x7C}, {0x9D, 0x7D}, {0x9D, 0x7E}, /* 0x78-0x7B */ + {0x9D, 0x7F}, {0x9D, 0x80}, {0x9D, 0x81}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9D, 0x82}, {0x9D, 0x83}, {0x9D, 0x84}, {0x9D, 0x85}, /* 0x80-0x83 */ + {0x9D, 0x86}, {0x9D, 0x87}, {0x9D, 0x88}, {0x9D, 0x89}, /* 0x84-0x87 */ + {0x9D, 0x8A}, {0x9D, 0x8B}, {0x9D, 0x8C}, {0x9D, 0x8D}, /* 0x88-0x8B */ + {0x9D, 0x8E}, {0x9D, 0x8F}, {0x9D, 0x90}, {0x9D, 0x91}, /* 0x8C-0x8F */ + {0x9D, 0x92}, {0x9D, 0x93}, {0x9D, 0x94}, {0x9D, 0x95}, /* 0x90-0x93 */ + {0x9D, 0x96}, {0x9D, 0x97}, {0x9D, 0x98}, {0x9D, 0x99}, /* 0x94-0x97 */ + {0x9D, 0x9A}, {0x9D, 0x9B}, {0x9D, 0x9C}, {0x9D, 0x9D}, /* 0x98-0x9B */ + {0x9D, 0x9E}, {0x9D, 0x9F}, {0x9D, 0xA0}, {0x9D, 0xA1}, /* 0x9C-0x9F */ + {0x9D, 0xA2}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9D, 0xA3}, {0x9D, 0xA4}, {0x9D, 0xA5}, {0x9D, 0xA6}, /* 0x40-0x43 */ + {0x9D, 0xA7}, {0x9D, 0xA8}, {0x9D, 0xA9}, {0x9D, 0xAA}, /* 0x44-0x47 */ + {0x9D, 0xAB}, {0x9D, 0xAC}, {0x9D, 0xAD}, {0x9D, 0xAE}, /* 0x48-0x4B */ + {0x9D, 0xAF}, {0x9D, 0xB0}, {0x9D, 0xB1}, {0x9D, 0xB2}, /* 0x4C-0x4F */ + {0x9D, 0xB3}, {0x9D, 0xB4}, {0x9D, 0xB5}, {0x9D, 0xB6}, /* 0x50-0x53 */ + {0x9D, 0xB7}, {0x9D, 0xB8}, {0x9D, 0xB9}, {0x9D, 0xBA}, /* 0x54-0x57 */ + {0x9D, 0xBB}, {0x9D, 0xBC}, {0x9D, 0xBD}, {0x9D, 0xBE}, /* 0x58-0x5B */ + {0x9D, 0xBF}, {0x9D, 0xC0}, {0x9D, 0xC1}, {0x9D, 0xC2}, /* 0x5C-0x5F */ + {0x9D, 0xC3}, {0x9D, 0xC4}, {0x9D, 0xC5}, {0x9D, 0xC6}, /* 0x60-0x63 */ + {0x9D, 0xC7}, {0x9D, 0xC8}, {0x9D, 0xC9}, {0x9D, 0xCA}, /* 0x64-0x67 */ + {0x9D, 0xCB}, {0x9D, 0xCC}, {0x9D, 0xCD}, {0x9D, 0xCE}, /* 0x68-0x6B */ + {0x9D, 0xCF}, {0x9D, 0xD0}, {0x9D, 0xD1}, {0x9D, 0xD2}, /* 0x6C-0x6F */ + {0x9D, 0xD3}, {0x9D, 0xD4}, {0x9D, 0xD5}, {0x9D, 0xD6}, /* 0x70-0x73 */ + {0x9D, 0xD7}, {0x9D, 0xD8}, {0x9D, 0xD9}, {0x9D, 0xDA}, /* 0x74-0x77 */ + {0x9D, 0xDB}, {0x9D, 0xDC}, {0x9D, 0xDD}, {0x9D, 0xDE}, /* 0x78-0x7B */ + {0x9D, 0xDF}, {0x9D, 0xE0}, {0x9D, 0xE1}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9D, 0xE2}, {0x9D, 0xE3}, {0x9D, 0xE4}, {0x9D, 0xE5}, /* 0x80-0x83 */ + {0x9D, 0xE6}, {0x9D, 0xE7}, {0x9D, 0xE8}, {0x9D, 0xE9}, /* 0x84-0x87 */ + {0x9D, 0xEA}, {0x9D, 0xEB}, {0x9D, 0xEC}, {0x9D, 0xED}, /* 0x88-0x8B */ + {0x9D, 0xEE}, {0x9D, 0xEF}, {0x9D, 0xF0}, {0x9D, 0xF1}, /* 0x8C-0x8F */ + {0x9D, 0xF2}, {0x9D, 0xF3}, {0x9D, 0xF4}, {0x9D, 0xF5}, /* 0x90-0x93 */ + {0x9D, 0xF6}, {0x9D, 0xF7}, {0x9D, 0xF8}, {0x9D, 0xF9}, /* 0x94-0x97 */ + {0x9D, 0xFA}, {0x9D, 0xFB}, {0x9D, 0xFC}, {0x9D, 0xFD}, /* 0x98-0x9B */ + {0x9D, 0xFE}, {0x9D, 0xFF}, {0x9E, 0x00}, {0x9E, 0x01}, /* 0x9C-0x9F */ + {0x9E, 0x02}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9E, 0x03}, {0x9E, 0x04}, {0x9E, 0x05}, {0x9E, 0x06}, /* 0x40-0x43 */ + {0x9E, 0x07}, {0x9E, 0x08}, {0x9E, 0x09}, {0x9E, 0x0A}, /* 0x44-0x47 */ + {0x9E, 0x0B}, {0x9E, 0x0C}, {0x9E, 0x0D}, {0x9E, 0x0E}, /* 0x48-0x4B */ + {0x9E, 0x0F}, {0x9E, 0x10}, {0x9E, 0x11}, {0x9E, 0x12}, /* 0x4C-0x4F */ + {0x9E, 0x13}, {0x9E, 0x14}, {0x9E, 0x15}, {0x9E, 0x16}, /* 0x50-0x53 */ + {0x9E, 0x17}, {0x9E, 0x18}, {0x9E, 0x19}, {0x9E, 0x1A}, /* 0x54-0x57 */ + {0x9E, 0x1B}, {0x9E, 0x1C}, {0x9E, 0x1D}, {0x9E, 0x1E}, /* 0x58-0x5B */ + {0x9E, 0x24}, {0x9E, 0x27}, {0x9E, 0x2E}, {0x9E, 0x30}, /* 0x5C-0x5F */ + {0x9E, 0x34}, {0x9E, 0x3B}, {0x9E, 0x3C}, {0x9E, 0x40}, /* 0x60-0x63 */ + {0x9E, 0x4D}, {0x9E, 0x50}, {0x9E, 0x52}, {0x9E, 0x53}, /* 0x64-0x67 */ + {0x9E, 0x54}, {0x9E, 0x56}, {0x9E, 0x59}, {0x9E, 0x5D}, /* 0x68-0x6B */ + {0x9E, 0x5F}, {0x9E, 0x60}, {0x9E, 0x61}, {0x9E, 0x62}, /* 0x6C-0x6F */ + {0x9E, 0x65}, {0x9E, 0x6E}, {0x9E, 0x6F}, {0x9E, 0x72}, /* 0x70-0x73 */ + {0x9E, 0x74}, {0x9E, 0x75}, {0x9E, 0x76}, {0x9E, 0x77}, /* 0x74-0x77 */ + {0x9E, 0x78}, {0x9E, 0x79}, {0x9E, 0x7A}, {0x9E, 0x7B}, /* 0x78-0x7B */ + {0x9E, 0x7C}, {0x9E, 0x7D}, {0x9E, 0x80}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9E, 0x81}, {0x9E, 0x83}, {0x9E, 0x84}, {0x9E, 0x85}, /* 0x80-0x83 */ + {0x9E, 0x86}, {0x9E, 0x89}, {0x9E, 0x8A}, {0x9E, 0x8C}, /* 0x84-0x87 */ + {0x9E, 0x8D}, {0x9E, 0x8E}, {0x9E, 0x8F}, {0x9E, 0x90}, /* 0x88-0x8B */ + {0x9E, 0x91}, {0x9E, 0x94}, {0x9E, 0x95}, {0x9E, 0x96}, /* 0x8C-0x8F */ + {0x9E, 0x97}, {0x9E, 0x98}, {0x9E, 0x99}, {0x9E, 0x9A}, /* 0x90-0x93 */ + {0x9E, 0x9B}, {0x9E, 0x9C}, {0x9E, 0x9E}, {0x9E, 0xA0}, /* 0x94-0x97 */ + {0x9E, 0xA1}, {0x9E, 0xA2}, {0x9E, 0xA3}, {0x9E, 0xA4}, /* 0x98-0x9B */ + {0x9E, 0xA5}, {0x9E, 0xA7}, {0x9E, 0xA8}, {0x9E, 0xA9}, /* 0x9C-0x9F */ + {0x9E, 0xAA}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9E, 0xAB}, {0x9E, 0xAC}, {0x9E, 0xAD}, {0x9E, 0xAE}, /* 0x40-0x43 */ + {0x9E, 0xAF}, {0x9E, 0xB0}, {0x9E, 0xB1}, {0x9E, 0xB2}, /* 0x44-0x47 */ + {0x9E, 0xB3}, {0x9E, 0xB5}, {0x9E, 0xB6}, {0x9E, 0xB7}, /* 0x48-0x4B */ + {0x9E, 0xB9}, {0x9E, 0xBA}, {0x9E, 0xBC}, {0x9E, 0xBF}, /* 0x4C-0x4F */ + {0x9E, 0xC0}, {0x9E, 0xC1}, {0x9E, 0xC2}, {0x9E, 0xC3}, /* 0x50-0x53 */ + {0x9E, 0xC5}, {0x9E, 0xC6}, {0x9E, 0xC7}, {0x9E, 0xC8}, /* 0x54-0x57 */ + {0x9E, 0xCA}, {0x9E, 0xCB}, {0x9E, 0xCC}, {0x9E, 0xD0}, /* 0x58-0x5B */ + {0x9E, 0xD2}, {0x9E, 0xD3}, {0x9E, 0xD5}, {0x9E, 0xD6}, /* 0x5C-0x5F */ + {0x9E, 0xD7}, {0x9E, 0xD9}, {0x9E, 0xDA}, {0x9E, 0xDE}, /* 0x60-0x63 */ + {0x9E, 0xE1}, {0x9E, 0xE3}, {0x9E, 0xE4}, {0x9E, 0xE6}, /* 0x64-0x67 */ + {0x9E, 0xE8}, {0x9E, 0xEB}, {0x9E, 0xEC}, {0x9E, 0xED}, /* 0x68-0x6B */ + {0x9E, 0xEE}, {0x9E, 0xF0}, {0x9E, 0xF1}, {0x9E, 0xF2}, /* 0x6C-0x6F */ + {0x9E, 0xF3}, {0x9E, 0xF4}, {0x9E, 0xF5}, {0x9E, 0xF6}, /* 0x70-0x73 */ + {0x9E, 0xF7}, {0x9E, 0xF8}, {0x9E, 0xFA}, {0x9E, 0xFD}, /* 0x74-0x77 */ + {0x9E, 0xFF}, {0x9F, 0x00}, {0x9F, 0x01}, {0x9F, 0x02}, /* 0x78-0x7B */ + {0x9F, 0x03}, {0x9F, 0x04}, {0x9F, 0x05}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9F, 0x06}, {0x9F, 0x07}, {0x9F, 0x08}, {0x9F, 0x09}, /* 0x80-0x83 */ + {0x9F, 0x0A}, {0x9F, 0x0C}, {0x9F, 0x0F}, {0x9F, 0x11}, /* 0x84-0x87 */ + {0x9F, 0x12}, {0x9F, 0x14}, {0x9F, 0x15}, {0x9F, 0x16}, /* 0x88-0x8B */ + {0x9F, 0x18}, {0x9F, 0x1A}, {0x9F, 0x1B}, {0x9F, 0x1C}, /* 0x8C-0x8F */ + {0x9F, 0x1D}, {0x9F, 0x1E}, {0x9F, 0x1F}, {0x9F, 0x21}, /* 0x90-0x93 */ + {0x9F, 0x23}, {0x9F, 0x24}, {0x9F, 0x25}, {0x9F, 0x26}, /* 0x94-0x97 */ + {0x9F, 0x27}, {0x9F, 0x28}, {0x9F, 0x29}, {0x9F, 0x2A}, /* 0x98-0x9B */ + {0x9F, 0x2B}, {0x9F, 0x2D}, {0x9F, 0x2E}, {0x9F, 0x30}, /* 0x9C-0x9F */ + {0x9F, 0x31}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x9F, 0x32}, {0x9F, 0x33}, {0x9F, 0x34}, {0x9F, 0x35}, /* 0x40-0x43 */ + {0x9F, 0x36}, {0x9F, 0x38}, {0x9F, 0x3A}, {0x9F, 0x3C}, /* 0x44-0x47 */ + {0x9F, 0x3F}, {0x9F, 0x40}, {0x9F, 0x41}, {0x9F, 0x42}, /* 0x48-0x4B */ + {0x9F, 0x43}, {0x9F, 0x45}, {0x9F, 0x46}, {0x9F, 0x47}, /* 0x4C-0x4F */ + {0x9F, 0x48}, {0x9F, 0x49}, {0x9F, 0x4A}, {0x9F, 0x4B}, /* 0x50-0x53 */ + {0x9F, 0x4C}, {0x9F, 0x4D}, {0x9F, 0x4E}, {0x9F, 0x4F}, /* 0x54-0x57 */ + {0x9F, 0x52}, {0x9F, 0x53}, {0x9F, 0x54}, {0x9F, 0x55}, /* 0x58-0x5B */ + {0x9F, 0x56}, {0x9F, 0x57}, {0x9F, 0x58}, {0x9F, 0x59}, /* 0x5C-0x5F */ + {0x9F, 0x5A}, {0x9F, 0x5B}, {0x9F, 0x5C}, {0x9F, 0x5D}, /* 0x60-0x63 */ + {0x9F, 0x5E}, {0x9F, 0x5F}, {0x9F, 0x60}, {0x9F, 0x61}, /* 0x64-0x67 */ + {0x9F, 0x62}, {0x9F, 0x63}, {0x9F, 0x64}, {0x9F, 0x65}, /* 0x68-0x6B */ + {0x9F, 0x66}, {0x9F, 0x67}, {0x9F, 0x68}, {0x9F, 0x69}, /* 0x6C-0x6F */ + {0x9F, 0x6A}, {0x9F, 0x6B}, {0x9F, 0x6C}, {0x9F, 0x6D}, /* 0x70-0x73 */ + {0x9F, 0x6E}, {0x9F, 0x6F}, {0x9F, 0x70}, {0x9F, 0x71}, /* 0x74-0x77 */ + {0x9F, 0x72}, {0x9F, 0x73}, {0x9F, 0x74}, {0x9F, 0x75}, /* 0x78-0x7B */ + {0x9F, 0x76}, {0x9F, 0x77}, {0x9F, 0x78}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x9F, 0x79}, {0x9F, 0x7A}, {0x9F, 0x7B}, {0x9F, 0x7C}, /* 0x80-0x83 */ + {0x9F, 0x7D}, {0x9F, 0x7E}, {0x9F, 0x81}, {0x9F, 0x82}, /* 0x84-0x87 */ + {0x9F, 0x8D}, {0x9F, 0x8E}, {0x9F, 0x8F}, {0x9F, 0x90}, /* 0x88-0x8B */ + {0x9F, 0x91}, {0x9F, 0x92}, {0x9F, 0x93}, {0x9F, 0x94}, /* 0x8C-0x8F */ + {0x9F, 0x95}, {0x9F, 0x96}, {0x9F, 0x97}, {0x9F, 0x98}, /* 0x90-0x93 */ + {0x9F, 0x9C}, {0x9F, 0x9D}, {0x9F, 0x9E}, {0x9F, 0xA1}, /* 0x94-0x97 */ + {0x9F, 0xA2}, {0x9F, 0xA3}, {0x9F, 0xA4}, {0x9F, 0xA5}, /* 0x98-0x9B */ + {0xF9, 0x2C}, {0xF9, 0x79}, {0xF9, 0x95}, {0xF9, 0xE7}, /* 0x9C-0x9F */ + {0xF9, 0xF1}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0xFA, 0x0C}, {0xFA, 0x0D}, {0xFA, 0x0E}, {0xFA, 0x0F}, /* 0x40-0x43 */ + {0xFA, 0x11}, {0xFA, 0x13}, {0xFA, 0x14}, {0xFA, 0x18}, /* 0x44-0x47 */ + {0xFA, 0x1F}, {0xFA, 0x20}, {0xFA, 0x21}, {0xFA, 0x23}, /* 0x48-0x4B */ + {0xFA, 0x24}, {0xFA, 0x27}, {0xFA, 0x28}, {0xFA, 0x29}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_81, c2u_82, c2u_83, c2u_84, c2u_85, c2u_86, c2u_87, + c2u_88, c2u_89, c2u_8A, c2u_8B, c2u_8C, c2u_8D, c2u_8E, c2u_8F, + c2u_90, c2u_91, c2u_92, c2u_93, c2u_94, c2u_95, c2u_96, c2u_97, + c2u_98, c2u_99, c2u_9A, c2u_9B, c2u_9C, c2u_9D, c2u_9E, c2u_9F, + c2u_A0, c2u_A1, c2u_A2, c2u_A3, c2u_A4, c2u_A5, c2u_A6, c2u_A7, + c2u_A8, c2u_A9, c2u_AA, c2u_AB, c2u_AC, c2u_AD, c2u_AE, c2u_AF, + c2u_B0, c2u_B1, c2u_B2, c2u_B3, c2u_B4, c2u_B5, c2u_B6, c2u_B7, + c2u_B8, c2u_B9, c2u_BA, c2u_BB, c2u_BC, c2u_BD, c2u_BE, c2u_BF, + c2u_C0, c2u_C1, c2u_C2, c2u_C3, c2u_C4, c2u_C5, c2u_C6, c2u_C7, + c2u_C8, c2u_C9, c2u_CA, c2u_CB, c2u_CC, c2u_CD, c2u_CE, c2u_CF, + c2u_D0, c2u_D1, c2u_D2, c2u_D3, c2u_D4, c2u_D5, c2u_D6, c2u_D7, + c2u_D8, c2u_D9, c2u_DA, c2u_DB, c2u_DC, c2u_DD, c2u_DE, c2u_DF, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, c2u_EB, c2u_EC, c2u_ED, c2u_EE, c2u_EF, + c2u_F0, c2u_F1, c2u_F2, c2u_F3, c2u_F4, c2u_F5, c2u_F6, c2u_F7, + c2u_F8, c2u_F9, c2u_FA, c2u_FB, c2u_FC, c2u_FD, c2u_FE, NULL, +}; + +static unsigned char u2c_01[512] = { + 0x3F, 0x3F, 0xA8, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA5, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA7, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA9, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xA8, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xA8, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xA8, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xB1, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA3, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xA8, 0xAB, 0x3F, 0x3F, 0xA8, 0xAF, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xA8, 0xB3, 0x3F, 0x3F, 0xA8, 0xB5, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xA8, 0xB6, 0x3F, 0x3F, 0xA8, 0xB7, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xA8, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_02[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xA8, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xA8, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xA6, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xA1, 0xA5, 0xA8, 0x40, 0xA8, 0x41, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xA8, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_03[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xA6, 0xA1, 0xA6, 0xA2, 0xA6, 0xA3, /* 0x90-0x93 */ + 0xA6, 0xA4, 0xA6, 0xA5, 0xA6, 0xA6, 0xA6, 0xA7, /* 0x94-0x97 */ + 0xA6, 0xA8, 0xA6, 0xA9, 0xA6, 0xAA, 0xA6, 0xAB, /* 0x98-0x9B */ + 0xA6, 0xAC, 0xA6, 0xAD, 0xA6, 0xAE, 0xA6, 0xAF, /* 0x9C-0x9F */ + 0xA6, 0xB0, 0xA6, 0xB1, 0x3F, 0x3F, 0xA6, 0xB2, /* 0xA0-0xA3 */ + 0xA6, 0xB3, 0xA6, 0xB4, 0xA6, 0xB5, 0xA6, 0xB6, /* 0xA4-0xA7 */ + 0xA6, 0xB7, 0xA6, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xA6, 0xC1, 0xA6, 0xC2, 0xA6, 0xC3, /* 0xB0-0xB3 */ + 0xA6, 0xC4, 0xA6, 0xC5, 0xA6, 0xC6, 0xA6, 0xC7, /* 0xB4-0xB7 */ + 0xA6, 0xC8, 0xA6, 0xC9, 0xA6, 0xCA, 0xA6, 0xCB, /* 0xB8-0xBB */ + 0xA6, 0xCC, 0xA6, 0xCD, 0xA6, 0xCE, 0xA6, 0xCF, /* 0xBC-0xBF */ + 0xA6, 0xD0, 0xA6, 0xD1, 0x3F, 0x3F, 0xA6, 0xD2, /* 0xC0-0xC3 */ + 0xA6, 0xD3, 0xA6, 0xD4, 0xA6, 0xD5, 0xA6, 0xD6, /* 0xC4-0xC7 */ + 0xA6, 0xD7, 0xA6, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_04[512] = { + 0x3F, 0x3F, 0xA7, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xA7, 0xA1, 0xA7, 0xA2, 0xA7, 0xA3, 0xA7, 0xA4, /* 0x10-0x13 */ + 0xA7, 0xA5, 0xA7, 0xA6, 0xA7, 0xA8, 0xA7, 0xA9, /* 0x14-0x17 */ + 0xA7, 0xAA, 0xA7, 0xAB, 0xA7, 0xAC, 0xA7, 0xAD, /* 0x18-0x1B */ + 0xA7, 0xAE, 0xA7, 0xAF, 0xA7, 0xB0, 0xA7, 0xB1, /* 0x1C-0x1F */ + 0xA7, 0xB2, 0xA7, 0xB3, 0xA7, 0xB4, 0xA7, 0xB5, /* 0x20-0x23 */ + 0xA7, 0xB6, 0xA7, 0xB7, 0xA7, 0xB8, 0xA7, 0xB9, /* 0x24-0x27 */ + 0xA7, 0xBA, 0xA7, 0xBB, 0xA7, 0xBC, 0xA7, 0xBD, /* 0x28-0x2B */ + 0xA7, 0xBE, 0xA7, 0xBF, 0xA7, 0xC0, 0xA7, 0xC1, /* 0x2C-0x2F */ + 0xA7, 0xD1, 0xA7, 0xD2, 0xA7, 0xD3, 0xA7, 0xD4, /* 0x30-0x33 */ + 0xA7, 0xD5, 0xA7, 0xD6, 0xA7, 0xD8, 0xA7, 0xD9, /* 0x34-0x37 */ + 0xA7, 0xDA, 0xA7, 0xDB, 0xA7, 0xDC, 0xA7, 0xDD, /* 0x38-0x3B */ + 0xA7, 0xDE, 0xA7, 0xDF, 0xA7, 0xE0, 0xA7, 0xE1, /* 0x3C-0x3F */ + 0xA7, 0xE2, 0xA7, 0xE3, 0xA7, 0xE4, 0xA7, 0xE5, /* 0x40-0x43 */ + 0xA7, 0xE6, 0xA7, 0xE7, 0xA7, 0xE8, 0xA7, 0xE9, /* 0x44-0x47 */ + 0xA7, 0xEA, 0xA7, 0xEB, 0xA7, 0xEC, 0xA7, 0xED, /* 0x48-0x4B */ + 0xA7, 0xEE, 0xA7, 0xEF, 0xA7, 0xF0, 0xA7, 0xF1, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xA7, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_20[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xA9, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x43, /* 0x10-0x13 */ + 0xA1, 0xAA, 0xA8, 0x44, 0xA1, 0xAC, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xA1, 0xAE, 0xA1, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xA1, 0xB0, 0xA1, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xA8, 0x45, 0xA1, 0xAD, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xA1, 0xEB, 0x3F, 0x3F, 0xA1, 0xE4, 0xA1, 0xE5, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xA8, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF9, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_21[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xE6, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA8, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xA8, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xED, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xA9, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA2, 0xF1, 0xA2, 0xF2, 0xA2, 0xF3, 0xA2, 0xF4, /* 0x60-0x63 */ + 0xA2, 0xF5, 0xA2, 0xF6, 0xA2, 0xF7, 0xA2, 0xF8, /* 0x64-0x67 */ + 0xA2, 0xF9, 0xA2, 0xFA, 0xA2, 0xFB, 0xA2, 0xFC, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xA2, 0xA1, 0xA2, 0xA2, 0xA2, 0xA3, 0xA2, 0xA4, /* 0x70-0x73 */ + 0xA2, 0xA5, 0xA2, 0xA6, 0xA2, 0xA7, 0xA2, 0xA8, /* 0x74-0x77 */ + 0xA2, 0xA9, 0xA2, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xA1, 0xFB, 0xA1, 0xFC, 0xA1, 0xFA, 0xA1, 0xFD, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x49, 0xA8, 0x4A, /* 0x94-0x97 */ + 0xA8, 0x4B, 0xA8, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_22[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xA1, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xC7, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xA1, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xA8, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xCC, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xA1, 0xD8, 0xA1, 0xDE, 0xA8, 0x4E, /* 0x1C-0x1F */ + 0xA1, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x4F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xA1, 0xCE, 0x3F, 0x3F, 0xA1, 0xC4, /* 0x24-0x27 */ + 0xA1, 0xC5, 0xA1, 0xC9, 0xA1, 0xC8, 0xA1, 0xD2, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD3, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xA1, 0xE0, 0xA1, 0xDF, 0xA1, 0xC3, 0xA1, 0xCB, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xA1, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xA1, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xA1, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x50, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA1, 0xD9, 0xA1, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xA1, 0xDC, 0xA1, 0xDD, 0xA8, 0x51, 0xA8, 0x52, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xDA, 0xA1, 0xDB, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xA8, 0x92, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xA1, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xA1, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x53, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_23[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD0, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_24[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA2, 0xD9, 0xA2, 0xDA, 0xA2, 0xDB, 0xA2, 0xDC, /* 0x60-0x63 */ + 0xA2, 0xDD, 0xA2, 0xDE, 0xA2, 0xDF, 0xA2, 0xE0, /* 0x64-0x67 */ + 0xA2, 0xE1, 0xA2, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xA2, 0xC5, 0xA2, 0xC6, 0xA2, 0xC7, 0xA2, 0xC8, /* 0x74-0x77 */ + 0xA2, 0xC9, 0xA2, 0xCA, 0xA2, 0xCB, 0xA2, 0xCC, /* 0x78-0x7B */ + 0xA2, 0xCD, 0xA2, 0xCE, 0xA2, 0xCF, 0xA2, 0xD0, /* 0x7C-0x7F */ + + 0xA2, 0xD1, 0xA2, 0xD2, 0xA2, 0xD3, 0xA2, 0xD4, /* 0x80-0x83 */ + 0xA2, 0xD5, 0xA2, 0xD6, 0xA2, 0xD7, 0xA2, 0xD8, /* 0x84-0x87 */ + 0xA2, 0xB1, 0xA2, 0xB2, 0xA2, 0xB3, 0xA2, 0xB4, /* 0x88-0x8B */ + 0xA2, 0xB5, 0xA2, 0xB6, 0xA2, 0xB7, 0xA2, 0xB8, /* 0x8C-0x8F */ + 0xA2, 0xB9, 0xA2, 0xBA, 0xA2, 0xBB, 0xA2, 0xBC, /* 0x90-0x93 */ + 0xA2, 0xBD, 0xA2, 0xBE, 0xA2, 0xBF, 0xA2, 0xC0, /* 0x94-0x97 */ + 0xA2, 0xC1, 0xA2, 0xC2, 0xA2, 0xC3, 0xA2, 0xC4, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_25[512] = { + 0xA9, 0xA4, 0xA9, 0xA5, 0xA9, 0xA6, 0xA9, 0xA7, /* 0x00-0x03 */ + 0xA9, 0xA8, 0xA9, 0xA9, 0xA9, 0xAA, 0xA9, 0xAB, /* 0x04-0x07 */ + 0xA9, 0xAC, 0xA9, 0xAD, 0xA9, 0xAE, 0xA9, 0xAF, /* 0x08-0x0B */ + 0xA9, 0xB0, 0xA9, 0xB1, 0xA9, 0xB2, 0xA9, 0xB3, /* 0x0C-0x0F */ + 0xA9, 0xB4, 0xA9, 0xB5, 0xA9, 0xB6, 0xA9, 0xB7, /* 0x10-0x13 */ + 0xA9, 0xB8, 0xA9, 0xB9, 0xA9, 0xBA, 0xA9, 0xBB, /* 0x14-0x17 */ + 0xA9, 0xBC, 0xA9, 0xBD, 0xA9, 0xBE, 0xA9, 0xBF, /* 0x18-0x1B */ + 0xA9, 0xC0, 0xA9, 0xC1, 0xA9, 0xC2, 0xA9, 0xC3, /* 0x1C-0x1F */ + 0xA9, 0xC4, 0xA9, 0xC5, 0xA9, 0xC6, 0xA9, 0xC7, /* 0x20-0x23 */ + 0xA9, 0xC8, 0xA9, 0xC9, 0xA9, 0xCA, 0xA9, 0xCB, /* 0x24-0x27 */ + 0xA9, 0xCC, 0xA9, 0xCD, 0xA9, 0xCE, 0xA9, 0xCF, /* 0x28-0x2B */ + 0xA9, 0xD0, 0xA9, 0xD1, 0xA9, 0xD2, 0xA9, 0xD3, /* 0x2C-0x2F */ + 0xA9, 0xD4, 0xA9, 0xD5, 0xA9, 0xD6, 0xA9, 0xD7, /* 0x30-0x33 */ + 0xA9, 0xD8, 0xA9, 0xD9, 0xA9, 0xDA, 0xA9, 0xDB, /* 0x34-0x37 */ + 0xA9, 0xDC, 0xA9, 0xDD, 0xA9, 0xDE, 0xA9, 0xDF, /* 0x38-0x3B */ + 0xA9, 0xE0, 0xA9, 0xE1, 0xA9, 0xE2, 0xA9, 0xE3, /* 0x3C-0x3F */ + 0xA9, 0xE4, 0xA9, 0xE5, 0xA9, 0xE6, 0xA9, 0xE7, /* 0x40-0x43 */ + 0xA9, 0xE8, 0xA9, 0xE9, 0xA9, 0xEA, 0xA9, 0xEB, /* 0x44-0x47 */ + 0xA9, 0xEC, 0xA9, 0xED, 0xA9, 0xEE, 0xA9, 0xEF, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xA8, 0x54, 0xA8, 0x55, 0xA8, 0x56, 0xA8, 0x57, /* 0x50-0x53 */ + 0xA8, 0x58, 0xA8, 0x59, 0xA8, 0x5A, 0xA8, 0x5B, /* 0x54-0x57 */ + 0xA8, 0x5C, 0xA8, 0x5D, 0xA8, 0x5E, 0xA8, 0x5F, /* 0x58-0x5B */ + 0xA8, 0x60, 0xA8, 0x61, 0xA8, 0x62, 0xA8, 0x63, /* 0x5C-0x5F */ + 0xA8, 0x64, 0xA8, 0x65, 0xA8, 0x66, 0xA8, 0x67, /* 0x60-0x63 */ + 0xA8, 0x68, 0xA8, 0x69, 0xA8, 0x6A, 0xA8, 0x6B, /* 0x64-0x67 */ + 0xA8, 0x6C, 0xA8, 0x6D, 0xA8, 0x6E, 0xA8, 0x6F, /* 0x68-0x6B */ + 0xA8, 0x70, 0xA8, 0x71, 0xA8, 0x72, 0xA8, 0x73, /* 0x6C-0x6F */ + 0xA8, 0x74, 0xA8, 0x75, 0xA8, 0x76, 0xA8, 0x77, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xA8, 0x78, 0xA8, 0x79, 0xA8, 0x7A, /* 0x80-0x83 */ + 0xA8, 0x7B, 0xA8, 0x7C, 0xA8, 0x7D, 0xA8, 0x7E, /* 0x84-0x87 */ + 0xA8, 0x80, 0xA8, 0x81, 0xA8, 0x82, 0xA8, 0x83, /* 0x88-0x8B */ + 0xA8, 0x84, 0xA8, 0x85, 0xA8, 0x86, 0xA8, 0x87, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x88, /* 0x90-0x93 */ + 0xA8, 0x89, 0xA8, 0x8A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xA1, 0xF6, 0xA1, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF8, 0xA1, 0xF7, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xA8, 0x8B, 0xA8, 0x8C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF4, 0xA1, 0xF3, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF0, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF2, 0xA1, 0xF1, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x8D, 0xA8, 0x8E, /* 0xE0-0xE3 */ + 0xA8, 0x8F, 0xA8, 0x90, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_26[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA1, 0xEF, 0xA1, 0xEE, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xA8, 0x91, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xA1, 0xE2, 0x3F, 0x3F, 0xA1, 0xE1, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_30[512] = { + 0xA1, 0xA1, 0xA1, 0xA2, 0xA1, 0xA3, 0xA1, 0xA8, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA1, 0xA9, 0xA9, 0x65, 0xA9, 0x96, /* 0x04-0x07 */ + 0xA1, 0xB4, 0xA1, 0xB5, 0xA1, 0xB6, 0xA1, 0xB7, /* 0x08-0x0B */ + 0xA1, 0xB8, 0xA1, 0xB9, 0xA1, 0xBA, 0xA1, 0xBB, /* 0x0C-0x0F */ + 0xA1, 0xBE, 0xA1, 0xBF, 0xA8, 0x93, 0xA1, 0xFE, /* 0x10-0x13 */ + 0xA1, 0xB2, 0xA1, 0xB3, 0xA1, 0xBC, 0xA1, 0xBD, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xA8, 0x94, 0xA8, 0x95, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xA9, 0x40, 0xA9, 0x41, 0xA9, 0x42, /* 0x20-0x23 */ + 0xA9, 0x43, 0xA9, 0x44, 0xA9, 0x45, 0xA9, 0x46, /* 0x24-0x27 */ + 0xA9, 0x47, 0xA9, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA3, /* 0x40-0x43 */ + 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA6, 0xA4, 0xA7, /* 0x44-0x47 */ + 0xA4, 0xA8, 0xA4, 0xA9, 0xA4, 0xAA, 0xA4, 0xAB, /* 0x48-0x4B */ + 0xA4, 0xAC, 0xA4, 0xAD, 0xA4, 0xAE, 0xA4, 0xAF, /* 0x4C-0x4F */ + 0xA4, 0xB0, 0xA4, 0xB1, 0xA4, 0xB2, 0xA4, 0xB3, /* 0x50-0x53 */ + 0xA4, 0xB4, 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB7, /* 0x54-0x57 */ + 0xA4, 0xB8, 0xA4, 0xB9, 0xA4, 0xBA, 0xA4, 0xBB, /* 0x58-0x5B */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0xA4, 0xBF, /* 0x5C-0x5F */ + 0xA4, 0xC0, 0xA4, 0xC1, 0xA4, 0xC2, 0xA4, 0xC3, /* 0x60-0x63 */ + 0xA4, 0xC4, 0xA4, 0xC5, 0xA4, 0xC6, 0xA4, 0xC7, /* 0x64-0x67 */ + 0xA4, 0xC8, 0xA4, 0xC9, 0xA4, 0xCA, 0xA4, 0xCB, /* 0x68-0x6B */ + 0xA4, 0xCC, 0xA4, 0xCD, 0xA4, 0xCE, 0xA4, 0xCF, /* 0x6C-0x6F */ + 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xD2, 0xA4, 0xD3, /* 0x70-0x73 */ + 0xA4, 0xD4, 0xA4, 0xD5, 0xA4, 0xD6, 0xA4, 0xD7, /* 0x74-0x77 */ + 0xA4, 0xD8, 0xA4, 0xD9, 0xA4, 0xDA, 0xA4, 0xDB, /* 0x78-0x7B */ + 0xA4, 0xDC, 0xA4, 0xDD, 0xA4, 0xDE, 0xA4, 0xDF, /* 0x7C-0x7F */ + + 0xA4, 0xE0, 0xA4, 0xE1, 0xA4, 0xE2, 0xA4, 0xE3, /* 0x80-0x83 */ + 0xA4, 0xE4, 0xA4, 0xE5, 0xA4, 0xE6, 0xA4, 0xE7, /* 0x84-0x87 */ + 0xA4, 0xE8, 0xA4, 0xE9, 0xA4, 0xEA, 0xA4, 0xEB, /* 0x88-0x8B */ + 0xA4, 0xEC, 0xA4, 0xED, 0xA4, 0xEE, 0xA4, 0xEF, /* 0x8C-0x8F */ + 0xA4, 0xF0, 0xA4, 0xF1, 0xA4, 0xF2, 0xA4, 0xF3, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x61, /* 0x98-0x9B */ + 0xA9, 0x62, 0xA9, 0x66, 0xA9, 0x67, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xA5, 0xA1, 0xA5, 0xA2, 0xA5, 0xA3, /* 0xA0-0xA3 */ + 0xA5, 0xA4, 0xA5, 0xA5, 0xA5, 0xA6, 0xA5, 0xA7, /* 0xA4-0xA7 */ + 0xA5, 0xA8, 0xA5, 0xA9, 0xA5, 0xAA, 0xA5, 0xAB, /* 0xA8-0xAB */ + 0xA5, 0xAC, 0xA5, 0xAD, 0xA5, 0xAE, 0xA5, 0xAF, /* 0xAC-0xAF */ + 0xA5, 0xB0, 0xA5, 0xB1, 0xA5, 0xB2, 0xA5, 0xB3, /* 0xB0-0xB3 */ + 0xA5, 0xB4, 0xA5, 0xB5, 0xA5, 0xB6, 0xA5, 0xB7, /* 0xB4-0xB7 */ + 0xA5, 0xB8, 0xA5, 0xB9, 0xA5, 0xBA, 0xA5, 0xBB, /* 0xB8-0xBB */ + 0xA5, 0xBC, 0xA5, 0xBD, 0xA5, 0xBE, 0xA5, 0xBF, /* 0xBC-0xBF */ + 0xA5, 0xC0, 0xA5, 0xC1, 0xA5, 0xC2, 0xA5, 0xC3, /* 0xC0-0xC3 */ + 0xA5, 0xC4, 0xA5, 0xC5, 0xA5, 0xC6, 0xA5, 0xC7, /* 0xC4-0xC7 */ + 0xA5, 0xC8, 0xA5, 0xC9, 0xA5, 0xCA, 0xA5, 0xCB, /* 0xC8-0xCB */ + 0xA5, 0xCC, 0xA5, 0xCD, 0xA5, 0xCE, 0xA5, 0xCF, /* 0xCC-0xCF */ + 0xA5, 0xD0, 0xA5, 0xD1, 0xA5, 0xD2, 0xA5, 0xD3, /* 0xD0-0xD3 */ + 0xA5, 0xD4, 0xA5, 0xD5, 0xA5, 0xD6, 0xA5, 0xD7, /* 0xD4-0xD7 */ + 0xA5, 0xD8, 0xA5, 0xD9, 0xA5, 0xDA, 0xA5, 0xDB, /* 0xD8-0xDB */ + 0xA5, 0xDC, 0xA5, 0xDD, 0xA5, 0xDE, 0xA5, 0xDF, /* 0xDC-0xDF */ + 0xA5, 0xE0, 0xA5, 0xE1, 0xA5, 0xE2, 0xA5, 0xE3, /* 0xE0-0xE3 */ + 0xA5, 0xE4, 0xA5, 0xE5, 0xA5, 0xE6, 0xA5, 0xE7, /* 0xE4-0xE7 */ + 0xA5, 0xE8, 0xA5, 0xE9, 0xA5, 0xEA, 0xA5, 0xEB, /* 0xE8-0xEB */ + 0xA5, 0xEC, 0xA5, 0xED, 0xA5, 0xEE, 0xA5, 0xEF, /* 0xEC-0xEF */ + 0xA5, 0xF0, 0xA5, 0xF1, 0xA5, 0xF2, 0xA5, 0xF3, /* 0xF0-0xF3 */ + 0xA5, 0xF4, 0xA5, 0xF5, 0xA5, 0xF6, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xA9, 0x60, 0xA9, 0x63, 0xA9, 0x64, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_31[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA8, 0xC5, 0xA8, 0xC6, 0xA8, 0xC7, /* 0x04-0x07 */ + 0xA8, 0xC8, 0xA8, 0xC9, 0xA8, 0xCA, 0xA8, 0xCB, /* 0x08-0x0B */ + 0xA8, 0xCC, 0xA8, 0xCD, 0xA8, 0xCE, 0xA8, 0xCF, /* 0x0C-0x0F */ + 0xA8, 0xD0, 0xA8, 0xD1, 0xA8, 0xD2, 0xA8, 0xD3, /* 0x10-0x13 */ + 0xA8, 0xD4, 0xA8, 0xD5, 0xA8, 0xD6, 0xA8, 0xD7, /* 0x14-0x17 */ + 0xA8, 0xD8, 0xA8, 0xD9, 0xA8, 0xDA, 0xA8, 0xDB, /* 0x18-0x1B */ + 0xA8, 0xDC, 0xA8, 0xDD, 0xA8, 0xDE, 0xA8, 0xDF, /* 0x1C-0x1F */ + 0xA8, 0xE0, 0xA8, 0xE1, 0xA8, 0xE2, 0xA8, 0xE3, /* 0x20-0x23 */ + 0xA8, 0xE4, 0xA8, 0xE5, 0xA8, 0xE6, 0xA8, 0xE7, /* 0x24-0x27 */ + 0xA8, 0xE8, 0xA8, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_32[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xA2, 0xE5, 0xA2, 0xE6, 0xA2, 0xE7, 0xA2, 0xE8, /* 0x20-0x23 */ + 0xA2, 0xE9, 0xA2, 0xEA, 0xA2, 0xEB, 0xA2, 0xEC, /* 0x24-0x27 */ + 0xA2, 0xED, 0xA2, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xA9, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x49, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_33[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x4A, 0xA9, 0x4B, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xA9, 0x4C, 0xA9, 0x4D, 0xA9, 0x4E, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xA9, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xA9, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x51, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xA9, 0x52, 0xA9, 0x53, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xA9, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4E[512] = { + 0xD2, 0xBB, 0xB6, 0xA1, 0x81, 0x40, 0xC6, 0xDF, /* 0x00-0x03 */ + 0x81, 0x41, 0x81, 0x42, 0x81, 0x43, 0xCD, 0xF2, /* 0x04-0x07 */ + 0xD5, 0xC9, 0xC8, 0xFD, 0xC9, 0xCF, 0xCF, 0xC2, /* 0x08-0x0B */ + 0xD8, 0xA2, 0xB2, 0xBB, 0xD3, 0xEB, 0x81, 0x44, /* 0x0C-0x0F */ + 0xD8, 0xA4, 0xB3, 0xF3, 0x81, 0x45, 0xD7, 0xA8, /* 0x10-0x13 */ + 0xC7, 0xD2, 0xD8, 0xA7, 0xCA, 0xC0, 0x81, 0x46, /* 0x14-0x17 */ + 0xC7, 0xF0, 0xB1, 0xFB, 0xD2, 0xB5, 0xB4, 0xD4, /* 0x18-0x1B */ + 0xB6, 0xAB, 0xCB, 0xBF, 0xD8, 0xA9, 0x81, 0x47, /* 0x1C-0x1F */ + 0x81, 0x48, 0x81, 0x49, 0xB6, 0xAA, 0x81, 0x4A, /* 0x20-0x23 */ + 0xC1, 0xBD, 0xD1, 0xCF, 0x81, 0x4B, 0xC9, 0xA5, /* 0x24-0x27 */ + 0xD8, 0xAD, 0x81, 0x4C, 0xB8, 0xF6, 0xD1, 0xBE, /* 0x28-0x2B */ + 0xE3, 0xDC, 0xD6, 0xD0, 0x81, 0x4D, 0x81, 0x4E, /* 0x2C-0x2F */ + 0xB7, 0xE1, 0x81, 0x4F, 0xB4, 0xAE, 0x81, 0x50, /* 0x30-0x33 */ + 0xC1, 0xD9, 0x81, 0x51, 0xD8, 0xBC, 0x81, 0x52, /* 0x34-0x37 */ + 0xCD, 0xE8, 0xB5, 0xA4, 0xCE, 0xAA, 0xD6, 0xF7, /* 0x38-0x3B */ + 0x81, 0x53, 0xC0, 0xF6, 0xBE, 0xD9, 0xD8, 0xAF, /* 0x3C-0x3F */ + 0x81, 0x54, 0x81, 0x55, 0x81, 0x56, 0xC4, 0xCB, /* 0x40-0x43 */ + 0x81, 0x57, 0xBE, 0xC3, 0x81, 0x58, 0xD8, 0xB1, /* 0x44-0x47 */ + 0xC3, 0xB4, 0xD2, 0xE5, 0x81, 0x59, 0xD6, 0xAE, /* 0x48-0x4B */ + 0xCE, 0xDA, 0xD5, 0xA7, 0xBA, 0xF5, 0xB7, 0xA6, /* 0x4C-0x4F */ + 0xC0, 0xD6, 0x81, 0x5A, 0xC6, 0xB9, 0xC5, 0xD2, /* 0x50-0x53 */ + 0xC7, 0xC7, 0x81, 0x5B, 0xB9, 0xD4, 0x81, 0x5C, /* 0x54-0x57 */ + 0xB3, 0xCB, 0xD2, 0xD2, 0x81, 0x5D, 0x81, 0x5E, /* 0x58-0x5B */ + 0xD8, 0xBF, 0xBE, 0xC5, 0xC6, 0xF2, 0xD2, 0xB2, /* 0x5C-0x5F */ + 0xCF, 0xB0, 0xCF, 0xE7, 0x81, 0x5F, 0x81, 0x60, /* 0x60-0x63 */ + 0x81, 0x61, 0x81, 0x62, 0xCA, 0xE9, 0x81, 0x63, /* 0x64-0x67 */ + 0x81, 0x64, 0xD8, 0xC0, 0x81, 0x65, 0x81, 0x66, /* 0x68-0x6B */ + 0x81, 0x67, 0x81, 0x68, 0x81, 0x69, 0x81, 0x6A, /* 0x6C-0x6F */ + 0xC2, 0xF2, 0xC2, 0xD2, 0x81, 0x6B, 0xC8, 0xE9, /* 0x70-0x73 */ + 0x81, 0x6C, 0x81, 0x6D, 0x81, 0x6E, 0x81, 0x6F, /* 0x74-0x77 */ + 0x81, 0x70, 0x81, 0x71, 0x81, 0x72, 0x81, 0x73, /* 0x78-0x7B */ + 0x81, 0x74, 0x81, 0x75, 0xC7, 0xAC, 0x81, 0x76, /* 0x7C-0x7F */ + + 0x81, 0x77, 0x81, 0x78, 0x81, 0x79, 0x81, 0x7A, /* 0x80-0x83 */ + 0x81, 0x7B, 0x81, 0x7C, 0xC1, 0xCB, 0x81, 0x7D, /* 0x84-0x87 */ + 0xD3, 0xE8, 0xD5, 0xF9, 0x81, 0x7E, 0xCA, 0xC2, /* 0x88-0x8B */ + 0xB6, 0xFE, 0xD8, 0xA1, 0xD3, 0xDA, 0xBF, 0xF7, /* 0x8C-0x8F */ + 0x81, 0x80, 0xD4, 0xC6, 0xBB, 0xA5, 0xD8, 0xC1, /* 0x90-0x93 */ + 0xCE, 0xE5, 0xBE, 0xAE, 0x81, 0x81, 0x81, 0x82, /* 0x94-0x97 */ + 0xD8, 0xA8, 0x81, 0x83, 0xD1, 0xC7, 0xD0, 0xA9, /* 0x98-0x9B */ + 0x81, 0x84, 0x81, 0x85, 0x81, 0x86, 0xD8, 0xBD, /* 0x9C-0x9F */ + 0xD9, 0xEF, 0xCD, 0xF6, 0xBF, 0xBA, 0x81, 0x87, /* 0xA0-0xA3 */ + 0xBD, 0xBB, 0xBA, 0xA5, 0xD2, 0xE0, 0xB2, 0xFA, /* 0xA4-0xA7 */ + 0xBA, 0xE0, 0xC4, 0xB6, 0x81, 0x88, 0xCF, 0xED, /* 0xA8-0xAB */ + 0xBE, 0xA9, 0xCD, 0xA4, 0xC1, 0xC1, 0x81, 0x89, /* 0xAC-0xAF */ + 0x81, 0x8A, 0x81, 0x8B, 0xC7, 0xD7, 0xD9, 0xF1, /* 0xB0-0xB3 */ + 0x81, 0x8C, 0xD9, 0xF4, 0x81, 0x8D, 0x81, 0x8E, /* 0xB4-0xB7 */ + 0x81, 0x8F, 0x81, 0x90, 0xC8, 0xCB, 0xD8, 0xE9, /* 0xB8-0xBB */ + 0x81, 0x91, 0x81, 0x92, 0x81, 0x93, 0xD2, 0xDA, /* 0xBC-0xBF */ + 0xCA, 0xB2, 0xC8, 0xCA, 0xD8, 0xEC, 0xD8, 0xEA, /* 0xC0-0xC3 */ + 0xD8, 0xC6, 0xBD, 0xF6, 0xC6, 0xCD, 0xB3, 0xF0, /* 0xC4-0xC7 */ + 0x81, 0x94, 0xD8, 0xEB, 0xBD, 0xF1, 0xBD, 0xE9, /* 0xC8-0xCB */ + 0x81, 0x95, 0xC8, 0xD4, 0xB4, 0xD3, 0x81, 0x96, /* 0xCC-0xCF */ + 0x81, 0x97, 0xC2, 0xD8, 0x81, 0x98, 0xB2, 0xD6, /* 0xD0-0xD3 */ + 0xD7, 0xD0, 0xCA, 0xCB, 0xCB, 0xFB, 0xD5, 0xCC, /* 0xD4-0xD7 */ + 0xB8, 0xB6, 0xCF, 0xC9, 0x81, 0x99, 0x81, 0x9A, /* 0xD8-0xDB */ + 0x81, 0x9B, 0xD9, 0xDA, 0xD8, 0xF0, 0xC7, 0xAA, /* 0xDC-0xDF */ + 0x81, 0x9C, 0xD8, 0xEE, 0x81, 0x9D, 0xB4, 0xFA, /* 0xE0-0xE3 */ + 0xC1, 0xEE, 0xD2, 0xD4, 0x81, 0x9E, 0x81, 0x9F, /* 0xE4-0xE7 */ + 0xD8, 0xED, 0x81, 0xA0, 0xD2, 0xC7, 0xD8, 0xEF, /* 0xE8-0xEB */ + 0xC3, 0xC7, 0x81, 0xA1, 0x81, 0xA2, 0x81, 0xA3, /* 0xEC-0xEF */ + 0xD1, 0xF6, 0x81, 0xA4, 0xD6, 0xD9, 0xD8, 0xF2, /* 0xF0-0xF3 */ + 0x81, 0xA5, 0xD8, 0xF5, 0xBC, 0xFE, 0xBC, 0xDB, /* 0xF4-0xF7 */ + 0x81, 0xA6, 0x81, 0xA7, 0x81, 0xA8, 0xC8, 0xCE, /* 0xF8-0xFB */ + 0x81, 0xA9, 0xB7, 0xDD, 0x81, 0xAA, 0xB7, 0xC2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0x81, 0xAB, 0xC6, 0xF3, 0x81, 0xAC, 0x81, 0xAD, /* 0x00-0x03 */ + 0x81, 0xAE, 0x81, 0xAF, 0x81, 0xB0, 0x81, 0xB1, /* 0x04-0x07 */ + 0x81, 0xB2, 0xD8, 0xF8, 0xD2, 0xC1, 0x81, 0xB3, /* 0x08-0x0B */ + 0x81, 0xB4, 0xCE, 0xE9, 0xBC, 0xBF, 0xB7, 0xFC, /* 0x0C-0x0F */ + 0xB7, 0xA5, 0xD0, 0xDD, 0x81, 0xB5, 0x81, 0xB6, /* 0x10-0x13 */ + 0x81, 0xB7, 0x81, 0xB8, 0x81, 0xB9, 0xD6, 0xDA, /* 0x14-0x17 */ + 0xD3, 0xC5, 0xBB, 0xEF, 0xBB, 0xE1, 0xD8, 0xF1, /* 0x18-0x1B */ + 0x81, 0xBA, 0x81, 0xBB, 0xC9, 0xA1, 0xCE, 0xB0, /* 0x1C-0x1F */ + 0xB4, 0xAB, 0x81, 0xBC, 0xD8, 0xF3, 0x81, 0xBD, /* 0x20-0x23 */ + 0xC9, 0xCB, 0xD8, 0xF6, 0xC2, 0xD7, 0xD8, 0xF7, /* 0x24-0x27 */ + 0x81, 0xBE, 0x81, 0xBF, 0xCE, 0xB1, 0xD8, 0xF9, /* 0x28-0x2B */ + 0x81, 0xC0, 0x81, 0xC1, 0x81, 0xC2, 0xB2, 0xAE, /* 0x2C-0x2F */ + 0xB9, 0xC0, 0x81, 0xC3, 0xD9, 0xA3, 0x81, 0xC4, /* 0x30-0x33 */ + 0xB0, 0xE9, 0x81, 0xC5, 0xC1, 0xE6, 0x81, 0xC6, /* 0x34-0x37 */ + 0xC9, 0xEC, 0x81, 0xC7, 0xCB, 0xC5, 0x81, 0xC8, /* 0x38-0x3B */ + 0xCB, 0xC6, 0xD9, 0xA4, 0x81, 0xC9, 0x81, 0xCA, /* 0x3C-0x3F */ + 0x81, 0xCB, 0x81, 0xCC, 0x81, 0xCD, 0xB5, 0xE8, /* 0x40-0x43 */ + 0x81, 0xCE, 0x81, 0xCF, 0xB5, 0xAB, 0x81, 0xD0, /* 0x44-0x47 */ + 0x81, 0xD1, 0x81, 0xD2, 0x81, 0xD3, 0x81, 0xD4, /* 0x48-0x4B */ + 0x81, 0xD5, 0xCE, 0xBB, 0xB5, 0xCD, 0xD7, 0xA1, /* 0x4C-0x4F */ + 0xD7, 0xF4, 0xD3, 0xD3, 0x81, 0xD6, 0xCC, 0xE5, /* 0x50-0x53 */ + 0x81, 0xD7, 0xBA, 0xCE, 0x81, 0xD8, 0xD9, 0xA2, /* 0x54-0x57 */ + 0xD9, 0xDC, 0xD3, 0xE0, 0xD8, 0xFD, 0xB7, 0xF0, /* 0x58-0x5B */ + 0xD7, 0xF7, 0xD8, 0xFE, 0xD8, 0xFA, 0xD9, 0xA1, /* 0x5C-0x5F */ + 0xC4, 0xE3, 0x81, 0xD9, 0x81, 0xDA, 0xD3, 0xB6, /* 0x60-0x63 */ + 0xD8, 0xF4, 0xD9, 0xDD, 0x81, 0xDB, 0xD8, 0xFB, /* 0x64-0x67 */ + 0x81, 0xDC, 0xC5, 0xE5, 0x81, 0xDD, 0x81, 0xDE, /* 0x68-0x6B */ + 0xC0, 0xD0, 0x81, 0xDF, 0x81, 0xE0, 0xD1, 0xF0, /* 0x6C-0x6F */ + 0xB0, 0xDB, 0x81, 0xE1, 0x81, 0xE2, 0xBC, 0xD1, /* 0x70-0x73 */ + 0xD9, 0xA6, 0x81, 0xE3, 0xD9, 0xA5, 0x81, 0xE4, /* 0x74-0x77 */ + 0x81, 0xE5, 0x81, 0xE6, 0x81, 0xE7, 0xD9, 0xAC, /* 0x78-0x7B */ + 0xD9, 0xAE, 0x81, 0xE8, 0xD9, 0xAB, 0xCA, 0xB9, /* 0x7C-0x7F */ + + 0x81, 0xE9, 0x81, 0xEA, 0x81, 0xEB, 0xD9, 0xA9, /* 0x80-0x83 */ + 0xD6, 0xB6, 0x81, 0xEC, 0x81, 0xED, 0x81, 0xEE, /* 0x84-0x87 */ + 0xB3, 0xDE, 0xD9, 0xA8, 0x81, 0xEF, 0xC0, 0xFD, /* 0x88-0x8B */ + 0x81, 0xF0, 0xCA, 0xCC, 0x81, 0xF1, 0xD9, 0xAA, /* 0x8C-0x8F */ + 0x81, 0xF2, 0xD9, 0xA7, 0x81, 0xF3, 0x81, 0xF4, /* 0x90-0x93 */ + 0xD9, 0xB0, 0x81, 0xF5, 0x81, 0xF6, 0xB6, 0xB1, /* 0x94-0x97 */ + 0x81, 0xF7, 0x81, 0xF8, 0x81, 0xF9, 0xB9, 0xA9, /* 0x98-0x9B */ + 0x81, 0xFA, 0xD2, 0xC0, 0x81, 0xFB, 0x81, 0xFC, /* 0x9C-0x9F */ + 0xCF, 0xC0, 0x81, 0xFD, 0x81, 0xFE, 0xC2, 0xC2, /* 0xA0-0xA3 */ + 0x82, 0x40, 0xBD, 0xC4, 0xD5, 0xEC, 0xB2, 0xE0, /* 0xA4-0xA7 */ + 0xC7, 0xC8, 0xBF, 0xEB, 0xD9, 0xAD, 0x82, 0x41, /* 0xA8-0xAB */ + 0xD9, 0xAF, 0x82, 0x42, 0xCE, 0xEA, 0xBA, 0xEE, /* 0xAC-0xAF */ + 0x82, 0x43, 0x82, 0x44, 0x82, 0x45, 0x82, 0x46, /* 0xB0-0xB3 */ + 0x82, 0x47, 0xC7, 0xD6, 0x82, 0x48, 0x82, 0x49, /* 0xB4-0xB7 */ + 0x82, 0x4A, 0x82, 0x4B, 0x82, 0x4C, 0x82, 0x4D, /* 0xB8-0xBB */ + 0x82, 0x4E, 0x82, 0x4F, 0x82, 0x50, 0xB1, 0xE3, /* 0xBC-0xBF */ + 0x82, 0x51, 0x82, 0x52, 0x82, 0x53, 0xB4, 0xD9, /* 0xC0-0xC3 */ + 0xB6, 0xED, 0xD9, 0xB4, 0x82, 0x54, 0x82, 0x55, /* 0xC4-0xC7 */ + 0x82, 0x56, 0x82, 0x57, 0xBF, 0xA1, 0x82, 0x58, /* 0xC8-0xCB */ + 0x82, 0x59, 0x82, 0x5A, 0xD9, 0xDE, 0xC7, 0xCE, /* 0xCC-0xCF */ + 0xC0, 0xFE, 0xD9, 0xB8, 0x82, 0x5B, 0x82, 0x5C, /* 0xD0-0xD3 */ + 0x82, 0x5D, 0x82, 0x5E, 0x82, 0x5F, 0xCB, 0xD7, /* 0xD4-0xD7 */ + 0xB7, 0xFD, 0x82, 0x60, 0xD9, 0xB5, 0x82, 0x61, /* 0xD8-0xDB */ + 0xD9, 0xB7, 0xB1, 0xA3, 0xD3, 0xE1, 0xD9, 0xB9, /* 0xDC-0xDF */ + 0x82, 0x62, 0xD0, 0xC5, 0x82, 0x63, 0xD9, 0xB6, /* 0xE0-0xE3 */ + 0x82, 0x64, 0x82, 0x65, 0xD9, 0xB1, 0x82, 0x66, /* 0xE4-0xE7 */ + 0xD9, 0xB2, 0xC1, 0xA9, 0xD9, 0xB3, 0x82, 0x67, /* 0xE8-0xEB */ + 0x82, 0x68, 0xBC, 0xF3, 0xD0, 0xDE, 0xB8, 0xA9, /* 0xEC-0xEF */ + 0x82, 0x69, 0xBE, 0xE3, 0x82, 0x6A, 0xD9, 0xBD, /* 0xF0-0xF3 */ + 0x82, 0x6B, 0x82, 0x6C, 0x82, 0x6D, 0x82, 0x6E, /* 0xF4-0xF7 */ + 0xD9, 0xBA, 0x82, 0x6F, 0xB0, 0xB3, 0x82, 0x70, /* 0xF8-0xFB */ + 0x82, 0x71, 0x82, 0x72, 0xD9, 0xC2, 0x82, 0x73, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0x82, 0x74, 0x82, 0x75, 0x82, 0x76, 0x82, 0x77, /* 0x00-0x03 */ + 0x82, 0x78, 0x82, 0x79, 0x82, 0x7A, 0x82, 0x7B, /* 0x04-0x07 */ + 0x82, 0x7C, 0x82, 0x7D, 0x82, 0x7E, 0x82, 0x80, /* 0x08-0x0B */ + 0xD9, 0xC4, 0xB1, 0xB6, 0x82, 0x81, 0xD9, 0xBF, /* 0x0C-0x0F */ + 0x82, 0x82, 0x82, 0x83, 0xB5, 0xB9, 0x82, 0x84, /* 0x10-0x13 */ + 0xBE, 0xF3, 0x82, 0x85, 0x82, 0x86, 0x82, 0x87, /* 0x14-0x17 */ + 0xCC, 0xC8, 0xBA, 0xF2, 0xD2, 0xD0, 0x82, 0x88, /* 0x18-0x1B */ + 0xD9, 0xC3, 0x82, 0x89, 0x82, 0x8A, 0xBD, 0xE8, /* 0x1C-0x1F */ + 0x82, 0x8B, 0xB3, 0xAB, 0x82, 0x8C, 0x82, 0x8D, /* 0x20-0x23 */ + 0x82, 0x8E, 0xD9, 0xC5, 0xBE, 0xEB, 0x82, 0x8F, /* 0x24-0x27 */ + 0xD9, 0xC6, 0xD9, 0xBB, 0xC4, 0xDF, 0x82, 0x90, /* 0x28-0x2B */ + 0xD9, 0xBE, 0xD9, 0xC1, 0xD9, 0xC0, 0x82, 0x91, /* 0x2C-0x2F */ + 0x82, 0x92, 0x82, 0x93, 0x82, 0x94, 0x82, 0x95, /* 0x30-0x33 */ + 0x82, 0x96, 0x82, 0x97, 0x82, 0x98, 0x82, 0x99, /* 0x34-0x37 */ + 0x82, 0x9A, 0x82, 0x9B, 0xD5, 0xAE, 0x82, 0x9C, /* 0x38-0x3B */ + 0xD6, 0xB5, 0x82, 0x9D, 0xC7, 0xE3, 0x82, 0x9E, /* 0x3C-0x3F */ + 0x82, 0x9F, 0x82, 0xA0, 0x82, 0xA1, 0xD9, 0xC8, /* 0x40-0x43 */ + 0x82, 0xA2, 0x82, 0xA3, 0x82, 0xA4, 0xBC, 0xD9, /* 0x44-0x47 */ + 0xD9, 0xCA, 0x82, 0xA5, 0x82, 0xA6, 0x82, 0xA7, /* 0x48-0x4B */ + 0xD9, 0xBC, 0x82, 0xA8, 0xD9, 0xCB, 0xC6, 0xAB, /* 0x4C-0x4F */ + 0x82, 0xA9, 0x82, 0xAA, 0x82, 0xAB, 0x82, 0xAC, /* 0x50-0x53 */ + 0x82, 0xAD, 0xD9, 0xC9, 0x82, 0xAE, 0x82, 0xAF, /* 0x54-0x57 */ + 0x82, 0xB0, 0x82, 0xB1, 0xD7, 0xF6, 0x82, 0xB2, /* 0x58-0x5B */ + 0xCD, 0xA3, 0x82, 0xB3, 0x82, 0xB4, 0x82, 0xB5, /* 0x5C-0x5F */ + 0x82, 0xB6, 0x82, 0xB7, 0x82, 0xB8, 0x82, 0xB9, /* 0x60-0x63 */ + 0x82, 0xBA, 0xBD, 0xA1, 0x82, 0xBB, 0x82, 0xBC, /* 0x64-0x67 */ + 0x82, 0xBD, 0x82, 0xBE, 0x82, 0xBF, 0x82, 0xC0, /* 0x68-0x6B */ + 0xD9, 0xCC, 0x82, 0xC1, 0x82, 0xC2, 0x82, 0xC3, /* 0x6C-0x6F */ + 0x82, 0xC4, 0x82, 0xC5, 0x82, 0xC6, 0x82, 0xC7, /* 0x70-0x73 */ + 0x82, 0xC8, 0x82, 0xC9, 0xC5, 0xBC, 0xCD, 0xB5, /* 0x74-0x77 */ + 0x82, 0xCA, 0x82, 0xCB, 0x82, 0xCC, 0xD9, 0xCD, /* 0x78-0x7B */ + 0x82, 0xCD, 0x82, 0xCE, 0xD9, 0xC7, 0xB3, 0xA5, /* 0x7C-0x7F */ + + 0xBF, 0xFE, 0x82, 0xCF, 0x82, 0xD0, 0x82, 0xD1, /* 0x80-0x83 */ + 0x82, 0xD2, 0xB8, 0xB5, 0x82, 0xD3, 0x82, 0xD4, /* 0x84-0x87 */ + 0xC0, 0xFC, 0x82, 0xD5, 0x82, 0xD6, 0x82, 0xD7, /* 0x88-0x8B */ + 0x82, 0xD8, 0xB0, 0xF8, 0x82, 0xD9, 0x82, 0xDA, /* 0x8C-0x8F */ + 0x82, 0xDB, 0x82, 0xDC, 0x82, 0xDD, 0x82, 0xDE, /* 0x90-0x93 */ + 0x82, 0xDF, 0x82, 0xE0, 0x82, 0xE1, 0x82, 0xE2, /* 0x94-0x97 */ + 0x82, 0xE3, 0x82, 0xE4, 0x82, 0xE5, 0x82, 0xE6, /* 0x98-0x9B */ + 0x82, 0xE7, 0x82, 0xE8, 0x82, 0xE9, 0x82, 0xEA, /* 0x9C-0x9F */ + 0x82, 0xEB, 0x82, 0xEC, 0x82, 0xED, 0xB4, 0xF6, /* 0xA0-0xA3 */ + 0x82, 0xEE, 0xD9, 0xCE, 0x82, 0xEF, 0xD9, 0xCF, /* 0xA4-0xA7 */ + 0xB4, 0xA2, 0xD9, 0xD0, 0x82, 0xF0, 0x82, 0xF1, /* 0xA8-0xAB */ + 0xB4, 0xDF, 0x82, 0xF2, 0x82, 0xF3, 0x82, 0xF4, /* 0xAC-0xAF */ + 0x82, 0xF5, 0x82, 0xF6, 0xB0, 0xC1, 0x82, 0xF7, /* 0xB0-0xB3 */ + 0x82, 0xF8, 0x82, 0xF9, 0x82, 0xFA, 0x82, 0xFB, /* 0xB4-0xB7 */ + 0x82, 0xFC, 0x82, 0xFD, 0xD9, 0xD1, 0xC9, 0xB5, /* 0xB8-0xBB */ + 0x82, 0xFE, 0x83, 0x40, 0x83, 0x41, 0x83, 0x42, /* 0xBC-0xBF */ + 0x83, 0x43, 0x83, 0x44, 0x83, 0x45, 0x83, 0x46, /* 0xC0-0xC3 */ + 0x83, 0x47, 0x83, 0x48, 0x83, 0x49, 0x83, 0x4A, /* 0xC4-0xC7 */ + 0x83, 0x4B, 0x83, 0x4C, 0x83, 0x4D, 0x83, 0x4E, /* 0xC8-0xCB */ + 0x83, 0x4F, 0x83, 0x50, 0x83, 0x51, 0xCF, 0xF1, /* 0xCC-0xCF */ + 0x83, 0x52, 0x83, 0x53, 0x83, 0x54, 0x83, 0x55, /* 0xD0-0xD3 */ + 0x83, 0x56, 0x83, 0x57, 0xD9, 0xD2, 0x83, 0x58, /* 0xD4-0xD7 */ + 0x83, 0x59, 0x83, 0x5A, 0xC1, 0xC5, 0x83, 0x5B, /* 0xD8-0xDB */ + 0x83, 0x5C, 0x83, 0x5D, 0x83, 0x5E, 0x83, 0x5F, /* 0xDC-0xDF */ + 0x83, 0x60, 0x83, 0x61, 0x83, 0x62, 0x83, 0x63, /* 0xE0-0xE3 */ + 0x83, 0x64, 0x83, 0x65, 0xD9, 0xD6, 0xC9, 0xAE, /* 0xE4-0xE7 */ + 0x83, 0x66, 0x83, 0x67, 0x83, 0x68, 0x83, 0x69, /* 0xE8-0xEB */ + 0xD9, 0xD5, 0xD9, 0xD4, 0xD9, 0xD7, 0x83, 0x6A, /* 0xEC-0xEF */ + 0x83, 0x6B, 0x83, 0x6C, 0x83, 0x6D, 0xCB, 0xDB, /* 0xF0-0xF3 */ + 0x83, 0x6E, 0xBD, 0xA9, 0x83, 0x6F, 0x83, 0x70, /* 0xF4-0xF7 */ + 0x83, 0x71, 0x83, 0x72, 0x83, 0x73, 0xC6, 0xA7, /* 0xF8-0xFB */ + 0x83, 0x74, 0x83, 0x75, 0x83, 0x76, 0x83, 0x77, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0x83, 0x78, 0x83, 0x79, 0x83, 0x7A, 0x83, 0x7B, /* 0x00-0x03 */ + 0x83, 0x7C, 0x83, 0x7D, 0xD9, 0xD3, 0xD9, 0xD8, /* 0x04-0x07 */ + 0x83, 0x7E, 0x83, 0x80, 0x83, 0x81, 0xD9, 0xD9, /* 0x08-0x0B */ + 0x83, 0x82, 0x83, 0x83, 0x83, 0x84, 0x83, 0x85, /* 0x0C-0x0F */ + 0x83, 0x86, 0x83, 0x87, 0xC8, 0xE5, 0x83, 0x88, /* 0x10-0x13 */ + 0x83, 0x89, 0x83, 0x8A, 0x83, 0x8B, 0x83, 0x8C, /* 0x14-0x17 */ + 0x83, 0x8D, 0x83, 0x8E, 0x83, 0x8F, 0x83, 0x90, /* 0x18-0x1B */ + 0x83, 0x91, 0x83, 0x92, 0x83, 0x93, 0x83, 0x94, /* 0x1C-0x1F */ + 0x83, 0x95, 0xC0, 0xDC, 0x83, 0x96, 0x83, 0x97, /* 0x20-0x23 */ + 0x83, 0x98, 0x83, 0x99, 0x83, 0x9A, 0x83, 0x9B, /* 0x24-0x27 */ + 0x83, 0x9C, 0x83, 0x9D, 0x83, 0x9E, 0x83, 0x9F, /* 0x28-0x2B */ + 0x83, 0xA0, 0x83, 0xA1, 0x83, 0xA2, 0x83, 0xA3, /* 0x2C-0x2F */ + 0x83, 0xA4, 0x83, 0xA5, 0x83, 0xA6, 0x83, 0xA7, /* 0x30-0x33 */ + 0x83, 0xA8, 0x83, 0xA9, 0x83, 0xAA, 0x83, 0xAB, /* 0x34-0x37 */ + 0x83, 0xAC, 0x83, 0xAD, 0x83, 0xAE, 0x83, 0xAF, /* 0x38-0x3B */ + 0x83, 0xB0, 0x83, 0xB1, 0x83, 0xB2, 0xB6, 0xF9, /* 0x3C-0x3F */ + 0xD8, 0xA3, 0xD4, 0xCA, 0x83, 0xB3, 0xD4, 0xAA, /* 0x40-0x43 */ + 0xD0, 0xD6, 0xB3, 0xE4, 0xD5, 0xD7, 0x83, 0xB4, /* 0x44-0x47 */ + 0xCF, 0xC8, 0xB9, 0xE2, 0x83, 0xB5, 0xBF, 0xCB, /* 0x48-0x4B */ + 0x83, 0xB6, 0xC3, 0xE2, 0x83, 0xB7, 0x83, 0xB8, /* 0x4C-0x4F */ + 0x83, 0xB9, 0xB6, 0xD2, 0x83, 0xBA, 0x83, 0xBB, /* 0x50-0x53 */ + 0xCD, 0xC3, 0xD9, 0xEE, 0xD9, 0xF0, 0x83, 0xBC, /* 0x54-0x57 */ + 0x83, 0xBD, 0x83, 0xBE, 0xB5, 0xB3, 0x83, 0xBF, /* 0x58-0x5B */ + 0xB6, 0xB5, 0x83, 0xC0, 0x83, 0xC1, 0x83, 0xC2, /* 0x5C-0x5F */ + 0x83, 0xC3, 0x83, 0xC4, 0xBE, 0xA4, 0x83, 0xC5, /* 0x60-0x63 */ + 0x83, 0xC6, 0xC8, 0xEB, 0x83, 0xC7, 0x83, 0xC8, /* 0x64-0x67 */ + 0xC8, 0xAB, 0x83, 0xC9, 0x83, 0xCA, 0xB0, 0xCB, /* 0x68-0x6B */ + 0xB9, 0xAB, 0xC1, 0xF9, 0xD9, 0xE2, 0x83, 0xCB, /* 0x6C-0x6F */ + 0xC0, 0xBC, 0xB9, 0xB2, 0x83, 0xCC, 0xB9, 0xD8, /* 0x70-0x73 */ + 0xD0, 0xCB, 0xB1, 0xF8, 0xC6, 0xE4, 0xBE, 0xDF, /* 0x74-0x77 */ + 0xB5, 0xE4, 0xD7, 0xC8, 0x83, 0xCD, 0xD1, 0xF8, /* 0x78-0x7B */ + 0xBC, 0xE6, 0xCA, 0xDE, 0x83, 0xCE, 0x83, 0xCF, /* 0x7C-0x7F */ + + 0xBC, 0xBD, 0xD9, 0xE6, 0xD8, 0xE7, 0x83, 0xD0, /* 0x80-0x83 */ + 0x83, 0xD1, 0xC4, 0xDA, 0x83, 0xD2, 0x83, 0xD3, /* 0x84-0x87 */ + 0xB8, 0xD4, 0xC8, 0xBD, 0x83, 0xD4, 0x83, 0xD5, /* 0x88-0x8B */ + 0xB2, 0xE1, 0xD4, 0xD9, 0x83, 0xD6, 0x83, 0xD7, /* 0x8C-0x8F */ + 0x83, 0xD8, 0x83, 0xD9, 0xC3, 0xB0, 0x83, 0xDA, /* 0x90-0x93 */ + 0x83, 0xDB, 0xC3, 0xE1, 0xDA, 0xA2, 0xC8, 0xDF, /* 0x94-0x97 */ + 0x83, 0xDC, 0xD0, 0xB4, 0x83, 0xDD, 0xBE, 0xFC, /* 0x98-0x9B */ + 0xC5, 0xA9, 0x83, 0xDE, 0x83, 0xDF, 0x83, 0xE0, /* 0x9C-0x9F */ + 0xB9, 0xDA, 0x83, 0xE1, 0xDA, 0xA3, 0x83, 0xE2, /* 0xA0-0xA3 */ + 0xD4, 0xA9, 0xDA, 0xA4, 0x83, 0xE3, 0x83, 0xE4, /* 0xA4-0xA7 */ + 0x83, 0xE5, 0x83, 0xE6, 0x83, 0xE7, 0xD9, 0xFB, /* 0xA8-0xAB */ + 0xB6, 0xAC, 0x83, 0xE8, 0x83, 0xE9, 0xB7, 0xEB, /* 0xAC-0xAF */ + 0xB1, 0xF9, 0xD9, 0xFC, 0xB3, 0xE5, 0xBE, 0xF6, /* 0xB0-0xB3 */ + 0x83, 0xEA, 0xBF, 0xF6, 0xD2, 0xB1, 0xC0, 0xE4, /* 0xB4-0xB7 */ + 0x83, 0xEB, 0x83, 0xEC, 0x83, 0xED, 0xB6, 0xB3, /* 0xB8-0xBB */ + 0xD9, 0xFE, 0xD9, 0xFD, 0x83, 0xEE, 0x83, 0xEF, /* 0xBC-0xBF */ + 0xBE, 0xBB, 0x83, 0xF0, 0x83, 0xF1, 0x83, 0xF2, /* 0xC0-0xC3 */ + 0xC6, 0xE0, 0x83, 0xF3, 0xD7, 0xBC, 0xDA, 0xA1, /* 0xC4-0xC7 */ + 0x83, 0xF4, 0xC1, 0xB9, 0x83, 0xF5, 0xB5, 0xF2, /* 0xC8-0xCB */ + 0xC1, 0xE8, 0x83, 0xF6, 0x83, 0xF7, 0xBC, 0xF5, /* 0xCC-0xCF */ + 0x83, 0xF8, 0xB4, 0xD5, 0x83, 0xF9, 0x83, 0xFA, /* 0xD0-0xD3 */ + 0x83, 0xFB, 0x83, 0xFC, 0x83, 0xFD, 0x83, 0xFE, /* 0xD4-0xD7 */ + 0x84, 0x40, 0x84, 0x41, 0x84, 0x42, 0xC1, 0xDD, /* 0xD8-0xDB */ + 0x84, 0x43, 0xC4, 0xFD, 0x84, 0x44, 0x84, 0x45, /* 0xDC-0xDF */ + 0xBC, 0xB8, 0xB7, 0xB2, 0x84, 0x46, 0x84, 0x47, /* 0xE0-0xE3 */ + 0xB7, 0xEF, 0x84, 0x48, 0x84, 0x49, 0x84, 0x4A, /* 0xE4-0xE7 */ + 0x84, 0x4B, 0x84, 0x4C, 0x84, 0x4D, 0xD9, 0xEC, /* 0xE8-0xEB */ + 0x84, 0x4E, 0xC6, 0xBE, 0x84, 0x4F, 0xBF, 0xAD, /* 0xEC-0xEF */ + 0xBB, 0xCB, 0x84, 0x50, 0x84, 0x51, 0xB5, 0xCA, /* 0xF0-0xF3 */ + 0x84, 0x52, 0xDB, 0xC9, 0xD0, 0xD7, 0x84, 0x53, /* 0xF4-0xF7 */ + 0xCD, 0xB9, 0xB0, 0xBC, 0xB3, 0xF6, 0xBB, 0xF7, /* 0xF8-0xFB */ + 0xDB, 0xCA, 0xBA, 0xAF, 0x84, 0x54, 0xD4, 0xE4, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0xB5, 0xB6, 0xB5, 0xF3, 0xD8, 0xD6, 0xC8, 0xD0, /* 0x00-0x03 */ + 0x84, 0x55, 0x84, 0x56, 0xB7, 0xD6, 0xC7, 0xD0, /* 0x04-0x07 */ + 0xD8, 0xD7, 0x84, 0x57, 0xBF, 0xAF, 0x84, 0x58, /* 0x08-0x0B */ + 0x84, 0x59, 0xDB, 0xBB, 0xD8, 0xD8, 0x84, 0x5A, /* 0x0C-0x0F */ + 0x84, 0x5B, 0xD0, 0xCC, 0xBB, 0xAE, 0x84, 0x5C, /* 0x10-0x13 */ + 0x84, 0x5D, 0x84, 0x5E, 0xEB, 0xBE, 0xC1, 0xD0, /* 0x14-0x17 */ + 0xC1, 0xF5, 0xD4, 0xF2, 0xB8, 0xD5, 0xB4, 0xB4, /* 0x18-0x1B */ + 0x84, 0x5F, 0xB3, 0xF5, 0x84, 0x60, 0x84, 0x61, /* 0x1C-0x1F */ + 0xC9, 0xBE, 0x84, 0x62, 0x84, 0x63, 0x84, 0x64, /* 0x20-0x23 */ + 0xC5, 0xD0, 0x84, 0x65, 0x84, 0x66, 0x84, 0x67, /* 0x24-0x27 */ + 0xC5, 0xD9, 0xC0, 0xFB, 0x84, 0x68, 0xB1, 0xF0, /* 0x28-0x2B */ + 0x84, 0x69, 0xD8, 0xD9, 0xB9, 0xCE, 0x84, 0x6A, /* 0x2C-0x2F */ + 0xB5, 0xBD, 0x84, 0x6B, 0x84, 0x6C, 0xD8, 0xDA, /* 0x30-0x33 */ + 0x84, 0x6D, 0x84, 0x6E, 0xD6, 0xC6, 0xCB, 0xA2, /* 0x34-0x37 */ + 0xC8, 0xAF, 0xC9, 0xB2, 0xB4, 0xCC, 0xBF, 0xCC, /* 0x38-0x3B */ + 0x84, 0x6F, 0xB9, 0xF4, 0x84, 0x70, 0xD8, 0xDB, /* 0x3C-0x3F */ + 0xD8, 0xDC, 0xB6, 0xE7, 0xBC, 0xC1, 0xCC, 0xEA, /* 0x40-0x43 */ + 0x84, 0x71, 0x84, 0x72, 0x84, 0x73, 0x84, 0x74, /* 0x44-0x47 */ + 0x84, 0x75, 0x84, 0x76, 0xCF, 0xF7, 0x84, 0x77, /* 0x48-0x4B */ + 0xD8, 0xDD, 0xC7, 0xB0, 0x84, 0x78, 0x84, 0x79, /* 0x4C-0x4F */ + 0xB9, 0xD0, 0xBD, 0xA3, 0x84, 0x7A, 0x84, 0x7B, /* 0x50-0x53 */ + 0xCC, 0xDE, 0x84, 0x7C, 0xC6, 0xCA, 0x84, 0x7D, /* 0x54-0x57 */ + 0x84, 0x7E, 0x84, 0x80, 0x84, 0x81, 0x84, 0x82, /* 0x58-0x5B */ + 0xD8, 0xE0, 0x84, 0x83, 0xD8, 0xDE, 0x84, 0x84, /* 0x5C-0x5F */ + 0x84, 0x85, 0xD8, 0xDF, 0x84, 0x86, 0x84, 0x87, /* 0x60-0x63 */ + 0x84, 0x88, 0xB0, 0xFE, 0x84, 0x89, 0xBE, 0xE7, /* 0x64-0x67 */ + 0x84, 0x8A, 0xCA, 0xA3, 0xBC, 0xF4, 0x84, 0x8B, /* 0x68-0x6B */ + 0x84, 0x8C, 0x84, 0x8D, 0x84, 0x8E, 0xB8, 0xB1, /* 0x6C-0x6F */ + 0x84, 0x8F, 0x84, 0x90, 0xB8, 0xEE, 0x84, 0x91, /* 0x70-0x73 */ + 0x84, 0x92, 0x84, 0x93, 0x84, 0x94, 0x84, 0x95, /* 0x74-0x77 */ + 0x84, 0x96, 0x84, 0x97, 0x84, 0x98, 0x84, 0x99, /* 0x78-0x7B */ + 0x84, 0x9A, 0xD8, 0xE2, 0x84, 0x9B, 0xBD, 0xCB, /* 0x7C-0x7F */ + + 0x84, 0x9C, 0xD8, 0xE4, 0xD8, 0xE3, 0x84, 0x9D, /* 0x80-0x83 */ + 0x84, 0x9E, 0x84, 0x9F, 0x84, 0xA0, 0x84, 0xA1, /* 0x84-0x87 */ + 0xC5, 0xFC, 0x84, 0xA2, 0x84, 0xA3, 0x84, 0xA4, /* 0x88-0x8B */ + 0x84, 0xA5, 0x84, 0xA6, 0x84, 0xA7, 0x84, 0xA8, /* 0x8C-0x8F */ + 0xD8, 0xE5, 0x84, 0xA9, 0x84, 0xAA, 0xD8, 0xE6, /* 0x90-0x93 */ + 0x84, 0xAB, 0x84, 0xAC, 0x84, 0xAD, 0x84, 0xAE, /* 0x94-0x97 */ + 0x84, 0xAF, 0x84, 0xB0, 0x84, 0xB1, 0xC1, 0xA6, /* 0x98-0x9B */ + 0x84, 0xB2, 0xC8, 0xB0, 0xB0, 0xEC, 0xB9, 0xA6, /* 0x9C-0x9F */ + 0xBC, 0xD3, 0xCE, 0xF1, 0xDB, 0xBD, 0xC1, 0xD3, /* 0xA0-0xA3 */ + 0x84, 0xB3, 0x84, 0xB4, 0x84, 0xB5, 0x84, 0xB6, /* 0xA4-0xA7 */ + 0xB6, 0xAF, 0xD6, 0xFA, 0xC5, 0xAC, 0xBD, 0xD9, /* 0xA8-0xAB */ + 0xDB, 0xBE, 0xDB, 0xBF, 0x84, 0xB7, 0x84, 0xB8, /* 0xAC-0xAF */ + 0x84, 0xB9, 0xC0, 0xF8, 0xBE, 0xA2, 0xC0, 0xCD, /* 0xB0-0xB3 */ + 0x84, 0xBA, 0x84, 0xBB, 0x84, 0xBC, 0x84, 0xBD, /* 0xB4-0xB7 */ + 0x84, 0xBE, 0x84, 0xBF, 0x84, 0xC0, 0x84, 0xC1, /* 0xB8-0xBB */ + 0x84, 0xC2, 0x84, 0xC3, 0xDB, 0xC0, 0xCA, 0xC6, /* 0xBC-0xBF */ + 0x84, 0xC4, 0x84, 0xC5, 0x84, 0xC6, 0xB2, 0xAA, /* 0xC0-0xC3 */ + 0x84, 0xC7, 0x84, 0xC8, 0x84, 0xC9, 0xD3, 0xC2, /* 0xC4-0xC7 */ + 0x84, 0xCA, 0xC3, 0xE3, 0x84, 0xCB, 0xD1, 0xAB, /* 0xC8-0xCB */ + 0x84, 0xCC, 0x84, 0xCD, 0x84, 0xCE, 0x84, 0xCF, /* 0xCC-0xCF */ + 0xDB, 0xC2, 0x84, 0xD0, 0xC0, 0xD5, 0x84, 0xD1, /* 0xD0-0xD3 */ + 0x84, 0xD2, 0x84, 0xD3, 0xDB, 0xC3, 0x84, 0xD4, /* 0xD4-0xD7 */ + 0xBF, 0xB1, 0x84, 0xD5, 0x84, 0xD6, 0x84, 0xD7, /* 0xD8-0xDB */ + 0x84, 0xD8, 0x84, 0xD9, 0x84, 0xDA, 0xC4, 0xBC, /* 0xDC-0xDF */ + 0x84, 0xDB, 0x84, 0xDC, 0x84, 0xDD, 0x84, 0xDE, /* 0xE0-0xE3 */ + 0xC7, 0xDA, 0x84, 0xDF, 0x84, 0xE0, 0x84, 0xE1, /* 0xE4-0xE7 */ + 0x84, 0xE2, 0x84, 0xE3, 0x84, 0xE4, 0x84, 0xE5, /* 0xE8-0xEB */ + 0x84, 0xE6, 0x84, 0xE7, 0x84, 0xE8, 0x84, 0xE9, /* 0xEC-0xEF */ + 0xDB, 0xC4, 0x84, 0xEA, 0x84, 0xEB, 0x84, 0xEC, /* 0xF0-0xF3 */ + 0x84, 0xED, 0x84, 0xEE, 0x84, 0xEF, 0x84, 0xF0, /* 0xF4-0xF7 */ + 0x84, 0xF1, 0xD9, 0xE8, 0xC9, 0xD7, 0x84, 0xF2, /* 0xF8-0xFB */ + 0x84, 0xF3, 0x84, 0xF4, 0xB9, 0xB4, 0xCE, 0xF0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0xD4, 0xC8, 0x84, 0xF5, 0x84, 0xF6, 0x84, 0xF7, /* 0x00-0x03 */ + 0x84, 0xF8, 0xB0, 0xFC, 0xB4, 0xD2, 0x84, 0xF9, /* 0x04-0x07 */ + 0xD0, 0xD9, 0x84, 0xFA, 0x84, 0xFB, 0x84, 0xFC, /* 0x08-0x0B */ + 0x84, 0xFD, 0xD9, 0xE9, 0x84, 0xFE, 0xDE, 0xCB, /* 0x0C-0x0F */ + 0xD9, 0xEB, 0x85, 0x40, 0x85, 0x41, 0x85, 0x42, /* 0x10-0x13 */ + 0x85, 0x43, 0xD8, 0xB0, 0xBB, 0xAF, 0xB1, 0xB1, /* 0x14-0x17 */ + 0x85, 0x44, 0xB3, 0xD7, 0xD8, 0xCE, 0x85, 0x45, /* 0x18-0x1B */ + 0x85, 0x46, 0xD4, 0xD1, 0x85, 0x47, 0x85, 0x48, /* 0x1C-0x1F */ + 0xBD, 0xB3, 0xBF, 0xEF, 0x85, 0x49, 0xCF, 0xBB, /* 0x20-0x23 */ + 0x85, 0x4A, 0x85, 0x4B, 0xD8, 0xD0, 0x85, 0x4C, /* 0x24-0x27 */ + 0x85, 0x4D, 0x85, 0x4E, 0xB7, 0xCB, 0x85, 0x4F, /* 0x28-0x2B */ + 0x85, 0x50, 0x85, 0x51, 0xD8, 0xD1, 0x85, 0x52, /* 0x2C-0x2F */ + 0x85, 0x53, 0x85, 0x54, 0x85, 0x55, 0x85, 0x56, /* 0x30-0x33 */ + 0x85, 0x57, 0x85, 0x58, 0x85, 0x59, 0x85, 0x5A, /* 0x34-0x37 */ + 0x85, 0x5B, 0xC6, 0xA5, 0xC7, 0xF8, 0xD2, 0xBD, /* 0x38-0x3B */ + 0x85, 0x5C, 0x85, 0x5D, 0xD8, 0xD2, 0xC4, 0xE4, /* 0x3C-0x3F */ + 0x85, 0x5E, 0xCA, 0xAE, 0x85, 0x5F, 0xC7, 0xA7, /* 0x40-0x43 */ + 0x85, 0x60, 0xD8, 0xA6, 0x85, 0x61, 0xC9, 0xFD, /* 0x44-0x47 */ + 0xCE, 0xE7, 0xBB, 0xDC, 0xB0, 0xEB, 0x85, 0x62, /* 0x48-0x4B */ + 0x85, 0x63, 0x85, 0x64, 0xBB, 0xAA, 0xD0, 0xAD, /* 0x4C-0x4F */ + 0x85, 0x65, 0xB1, 0xB0, 0xD7, 0xE4, 0xD7, 0xBF, /* 0x50-0x53 */ + 0x85, 0x66, 0xB5, 0xA5, 0xC2, 0xF4, 0xC4, 0xCF, /* 0x54-0x57 */ + 0x85, 0x67, 0x85, 0x68, 0xB2, 0xA9, 0x85, 0x69, /* 0x58-0x5B */ + 0xB2, 0xB7, 0x85, 0x6A, 0xB1, 0xE5, 0xDF, 0xB2, /* 0x5C-0x5F */ + 0xD5, 0xBC, 0xBF, 0xA8, 0xC2, 0xAC, 0xD8, 0xD5, /* 0x60-0x63 */ + 0xC2, 0xB1, 0x85, 0x6B, 0xD8, 0xD4, 0xCE, 0xD4, /* 0x64-0x67 */ + 0x85, 0x6C, 0xDA, 0xE0, 0x85, 0x6D, 0xCE, 0xC0, /* 0x68-0x6B */ + 0x85, 0x6E, 0x85, 0x6F, 0xD8, 0xB4, 0xC3, 0xAE, /* 0x6C-0x6F */ + 0xD3, 0xA1, 0xCE, 0xA3, 0x85, 0x70, 0xBC, 0xB4, /* 0x70-0x73 */ + 0xC8, 0xB4, 0xC2, 0xD1, 0x85, 0x71, 0xBE, 0xED, /* 0x74-0x77 */ + 0xD0, 0xB6, 0x85, 0x72, 0xDA, 0xE1, 0x85, 0x73, /* 0x78-0x7B */ + 0x85, 0x74, 0x85, 0x75, 0x85, 0x76, 0xC7, 0xE4, /* 0x7C-0x7F */ + + 0x85, 0x77, 0x85, 0x78, 0xB3, 0xA7, 0x85, 0x79, /* 0x80-0x83 */ + 0xB6, 0xF2, 0xCC, 0xFC, 0xC0, 0xFA, 0x85, 0x7A, /* 0x84-0x87 */ + 0x85, 0x7B, 0xC0, 0xF7, 0x85, 0x7C, 0xD1, 0xB9, /* 0x88-0x8B */ + 0xD1, 0xE1, 0xD8, 0xC7, 0x85, 0x7D, 0x85, 0x7E, /* 0x8C-0x8F */ + 0x85, 0x80, 0x85, 0x81, 0x85, 0x82, 0x85, 0x83, /* 0x90-0x93 */ + 0x85, 0x84, 0xB2, 0xDE, 0x85, 0x85, 0x85, 0x86, /* 0x94-0x97 */ + 0xC0, 0xE5, 0x85, 0x87, 0xBA, 0xF1, 0x85, 0x88, /* 0x98-0x9B */ + 0x85, 0x89, 0xD8, 0xC8, 0x85, 0x8A, 0xD4, 0xAD, /* 0x9C-0x9F */ + 0x85, 0x8B, 0x85, 0x8C, 0xCF, 0xE1, 0xD8, 0xC9, /* 0xA0-0xA3 */ + 0x85, 0x8D, 0xD8, 0xCA, 0xCF, 0xC3, 0x85, 0x8E, /* 0xA4-0xA7 */ + 0xB3, 0xF8, 0xBE, 0xC7, 0x85, 0x8F, 0x85, 0x90, /* 0xA8-0xAB */ + 0x85, 0x91, 0x85, 0x92, 0xD8, 0xCB, 0x85, 0x93, /* 0xAC-0xAF */ + 0x85, 0x94, 0x85, 0x95, 0x85, 0x96, 0x85, 0x97, /* 0xB0-0xB3 */ + 0x85, 0x98, 0x85, 0x99, 0xDB, 0xCC, 0x85, 0x9A, /* 0xB4-0xB7 */ + 0x85, 0x9B, 0x85, 0x9C, 0x85, 0x9D, 0xC8, 0xA5, /* 0xB8-0xBB */ + 0x85, 0x9E, 0x85, 0x9F, 0x85, 0xA0, 0xCF, 0xD8, /* 0xBC-0xBF */ + 0x85, 0xA1, 0xC8, 0xFE, 0xB2, 0xCE, 0x85, 0xA2, /* 0xC0-0xC3 */ + 0x85, 0xA3, 0x85, 0xA4, 0x85, 0xA5, 0x85, 0xA6, /* 0xC4-0xC7 */ + 0xD3, 0xD6, 0xB2, 0xE6, 0xBC, 0xB0, 0xD3, 0xD1, /* 0xC8-0xCB */ + 0xCB, 0xAB, 0xB7, 0xB4, 0x85, 0xA7, 0x85, 0xA8, /* 0xCC-0xCF */ + 0x85, 0xA9, 0xB7, 0xA2, 0x85, 0xAA, 0x85, 0xAB, /* 0xD0-0xD3 */ + 0xCA, 0xE5, 0x85, 0xAC, 0xC8, 0xA1, 0xCA, 0xDC, /* 0xD4-0xD7 */ + 0xB1, 0xE4, 0xD0, 0xF0, 0x85, 0xAD, 0xC5, 0xD1, /* 0xD8-0xDB */ + 0x85, 0xAE, 0x85, 0xAF, 0x85, 0xB0, 0xDB, 0xC5, /* 0xDC-0xDF */ + 0xB5, 0xFE, 0x85, 0xB1, 0x85, 0xB2, 0xBF, 0xDA, /* 0xE0-0xE3 */ + 0xB9, 0xC5, 0xBE, 0xE4, 0xC1, 0xED, 0x85, 0xB3, /* 0xE4-0xE7 */ + 0xDF, 0xB6, 0xDF, 0xB5, 0xD6, 0xBB, 0xBD, 0xD0, /* 0xE8-0xEB */ + 0xD5, 0xD9, 0xB0, 0xC8, 0xB6, 0xA3, 0xBF, 0xC9, /* 0xEC-0xEF */ + 0xCC, 0xA8, 0xDF, 0xB3, 0xCA, 0xB7, 0xD3, 0xD2, /* 0xF0-0xF3 */ + 0x85, 0xB4, 0xD8, 0xCF, 0xD2, 0xB6, 0xBA, 0xC5, /* 0xF4-0xF7 */ + 0xCB, 0xBE, 0xCC, 0xBE, 0x85, 0xB5, 0xDF, 0xB7, /* 0xF8-0xFB */ + 0xB5, 0xF0, 0xDF, 0xB4, 0x85, 0xB6, 0x85, 0xB7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_54[512] = { + 0x85, 0xB8, 0xD3, 0xF5, 0x85, 0xB9, 0xB3, 0xD4, /* 0x00-0x03 */ + 0xB8, 0xF7, 0x85, 0xBA, 0xDF, 0xBA, 0x85, 0xBB, /* 0x04-0x07 */ + 0xBA, 0xCF, 0xBC, 0xAA, 0xB5, 0xF5, 0x85, 0xBC, /* 0x08-0x0B */ + 0xCD, 0xAC, 0xC3, 0xFB, 0xBA, 0xF3, 0xC0, 0xF4, /* 0x0C-0x0F */ + 0xCD, 0xC2, 0xCF, 0xF2, 0xDF, 0xB8, 0xCF, 0xC5, /* 0x10-0x13 */ + 0x85, 0xBD, 0xC2, 0xC0, 0xDF, 0xB9, 0xC2, 0xF0, /* 0x14-0x17 */ + 0x85, 0xBE, 0x85, 0xBF, 0x85, 0xC0, 0xBE, 0xFD, /* 0x18-0x1B */ + 0x85, 0xC1, 0xC1, 0xDF, 0xCD, 0xCC, 0xD2, 0xF7, /* 0x1C-0x1F */ + 0xB7, 0xCD, 0xDF, 0xC1, 0x85, 0xC2, 0xDF, 0xC4, /* 0x20-0x23 */ + 0x85, 0xC3, 0x85, 0xC4, 0xB7, 0xF1, 0xB0, 0xC9, /* 0x24-0x27 */ + 0xB6, 0xD6, 0xB7, 0xD4, 0x85, 0xC5, 0xBA, 0xAC, /* 0x28-0x2B */ + 0xCC, 0xFD, 0xBF, 0xD4, 0xCB, 0xB1, 0xC6, 0xF4, /* 0x2C-0x2F */ + 0x85, 0xC6, 0xD6, 0xA8, 0xDF, 0xC5, 0x85, 0xC7, /* 0x30-0x33 */ + 0xCE, 0xE2, 0xB3, 0xB3, 0x85, 0xC8, 0x85, 0xC9, /* 0x34-0x37 */ + 0xCE, 0xFC, 0xB4, 0xB5, 0x85, 0xCA, 0xCE, 0xC7, /* 0x38-0x3B */ + 0xBA, 0xF0, 0x85, 0xCB, 0xCE, 0xE1, 0x85, 0xCC, /* 0x3C-0x3F */ + 0xD1, 0xBD, 0x85, 0xCD, 0x85, 0xCE, 0xDF, 0xC0, /* 0x40-0x43 */ + 0x85, 0xCF, 0x85, 0xD0, 0xB4, 0xF4, 0x85, 0xD1, /* 0x44-0x47 */ + 0xB3, 0xCA, 0x85, 0xD2, 0xB8, 0xE6, 0xDF, 0xBB, /* 0x48-0x4B */ + 0x85, 0xD3, 0x85, 0xD4, 0x85, 0xD5, 0x85, 0xD6, /* 0x4C-0x4F */ + 0xC4, 0xC5, 0x85, 0xD7, 0xDF, 0xBC, 0xDF, 0xBD, /* 0x50-0x53 */ + 0xDF, 0xBE, 0xC5, 0xBB, 0xDF, 0xBF, 0xDF, 0xC2, /* 0x54-0x57 */ + 0xD4, 0xB1, 0xDF, 0xC3, 0x85, 0xD8, 0xC7, 0xBA, /* 0x58-0x5B */ + 0xCE, 0xD8, 0x85, 0xD9, 0x85, 0xDA, 0x85, 0xDB, /* 0x5C-0x5F */ + 0x85, 0xDC, 0x85, 0xDD, 0xC4, 0xD8, 0x85, 0xDE, /* 0x60-0x63 */ + 0xDF, 0xCA, 0x85, 0xDF, 0xDF, 0xCF, 0x85, 0xE0, /* 0x64-0x67 */ + 0xD6, 0xDC, 0x85, 0xE1, 0x85, 0xE2, 0x85, 0xE3, /* 0x68-0x6B */ + 0x85, 0xE4, 0x85, 0xE5, 0x85, 0xE6, 0x85, 0xE7, /* 0x6C-0x6F */ + 0x85, 0xE8, 0xDF, 0xC9, 0xDF, 0xDA, 0xCE, 0xB6, /* 0x70-0x73 */ + 0x85, 0xE9, 0xBA, 0xC7, 0xDF, 0xCE, 0xDF, 0xC8, /* 0x74-0x77 */ + 0xC5, 0xDE, 0x85, 0xEA, 0x85, 0xEB, 0xC9, 0xEB, /* 0x78-0x7B */ + 0xBA, 0xF4, 0xC3, 0xFC, 0x85, 0xEC, 0x85, 0xED, /* 0x7C-0x7F */ + + 0xBE, 0xD7, 0x85, 0xEE, 0xDF, 0xC6, 0x85, 0xEF, /* 0x80-0x83 */ + 0xDF, 0xCD, 0x85, 0xF0, 0xC5, 0xD8, 0x85, 0xF1, /* 0x84-0x87 */ + 0x85, 0xF2, 0x85, 0xF3, 0x85, 0xF4, 0xD5, 0xA6, /* 0x88-0x8B */ + 0xBA, 0xCD, 0x85, 0xF5, 0xBE, 0xCC, 0xD3, 0xBD, /* 0x8C-0x8F */ + 0xB8, 0xC0, 0x85, 0xF6, 0xD6, 0xE4, 0x85, 0xF7, /* 0x90-0x93 */ + 0xDF, 0xC7, 0xB9, 0xBE, 0xBF, 0xA7, 0x85, 0xF8, /* 0x94-0x97 */ + 0x85, 0xF9, 0xC1, 0xFC, 0xDF, 0xCB, 0xDF, 0xCC, /* 0x98-0x9B */ + 0x85, 0xFA, 0xDF, 0xD0, 0x85, 0xFB, 0x85, 0xFC, /* 0x9C-0x9F */ + 0x85, 0xFD, 0x85, 0xFE, 0x86, 0x40, 0xDF, 0xDB, /* 0xA0-0xA3 */ + 0xDF, 0xE5, 0x86, 0x41, 0xDF, 0xD7, 0xDF, 0xD6, /* 0xA4-0xA7 */ + 0xD7, 0xC9, 0xDF, 0xE3, 0xDF, 0xE4, 0xE5, 0xEB, /* 0xA8-0xAB */ + 0xD2, 0xA7, 0xDF, 0xD2, 0x86, 0x42, 0xBF, 0xA9, /* 0xAC-0xAF */ + 0x86, 0x43, 0xD4, 0xDB, 0x86, 0x44, 0xBF, 0xC8, /* 0xB0-0xB3 */ + 0xDF, 0xD4, 0x86, 0x45, 0x86, 0x46, 0x86, 0x47, /* 0xB4-0xB7 */ + 0xCF, 0xCC, 0x86, 0x48, 0x86, 0x49, 0xDF, 0xDD, /* 0xB8-0xBB */ + 0x86, 0x4A, 0xD1, 0xCA, 0x86, 0x4B, 0xDF, 0xDE, /* 0xBC-0xBF */ + 0xB0, 0xA7, 0xC6, 0xB7, 0xDF, 0xD3, 0x86, 0x4C, /* 0xC0-0xC3 */ + 0xBA, 0xE5, 0x86, 0x4D, 0xB6, 0xDF, 0xCD, 0xDB, /* 0xC4-0xC7 */ + 0xB9, 0xFE, 0xD4, 0xD5, 0x86, 0x4E, 0x86, 0x4F, /* 0xC8-0xCB */ + 0xDF, 0xDF, 0xCF, 0xEC, 0xB0, 0xA5, 0xDF, 0xE7, /* 0xCC-0xCF */ + 0xDF, 0xD1, 0xD1, 0xC6, 0xDF, 0xD5, 0xDF, 0xD8, /* 0xD0-0xD3 */ + 0xDF, 0xD9, 0xDF, 0xDC, 0x86, 0x50, 0xBB, 0xA9, /* 0xD4-0xD7 */ + 0x86, 0x51, 0xDF, 0xE0, 0xDF, 0xE1, 0x86, 0x52, /* 0xD8-0xDB */ + 0xDF, 0xE2, 0xDF, 0xE6, 0xDF, 0xE8, 0xD3, 0xB4, /* 0xDC-0xDF */ + 0x86, 0x53, 0x86, 0x54, 0x86, 0x55, 0x86, 0x56, /* 0xE0-0xE3 */ + 0x86, 0x57, 0xB8, 0xE7, 0xC5, 0xB6, 0xDF, 0xEA, /* 0xE4-0xE7 */ + 0xC9, 0xDA, 0xC1, 0xA8, 0xC4, 0xC4, 0x86, 0x58, /* 0xE8-0xEB */ + 0x86, 0x59, 0xBF, 0xDE, 0xCF, 0xF8, 0x86, 0x5A, /* 0xEC-0xEF */ + 0x86, 0x5B, 0x86, 0x5C, 0xD5, 0xDC, 0xDF, 0xEE, /* 0xF0-0xF3 */ + 0x86, 0x5D, 0x86, 0x5E, 0x86, 0x5F, 0x86, 0x60, /* 0xF4-0xF7 */ + 0x86, 0x61, 0x86, 0x62, 0xB2, 0xB8, 0x86, 0x63, /* 0xF8-0xFB */ + 0xBA, 0xDF, 0xDF, 0xEC, 0x86, 0x64, 0xDB, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x86, 0x65, 0xD1, 0xE4, 0x86, 0x66, 0x86, 0x67, /* 0x00-0x03 */ + 0x86, 0x68, 0x86, 0x69, 0xCB, 0xF4, 0xB4, 0xBD, /* 0x04-0x07 */ + 0x86, 0x6A, 0xB0, 0xA6, 0x86, 0x6B, 0x86, 0x6C, /* 0x08-0x0B */ + 0x86, 0x6D, 0x86, 0x6E, 0x86, 0x6F, 0xDF, 0xF1, /* 0x0C-0x0F */ + 0xCC, 0xC6, 0xDF, 0xF2, 0x86, 0x70, 0x86, 0x71, /* 0x10-0x13 */ + 0xDF, 0xED, 0x86, 0x72, 0x86, 0x73, 0x86, 0x74, /* 0x14-0x17 */ + 0x86, 0x75, 0x86, 0x76, 0x86, 0x77, 0xDF, 0xE9, /* 0x18-0x1B */ + 0x86, 0x78, 0x86, 0x79, 0x86, 0x7A, 0x86, 0x7B, /* 0x1C-0x1F */ + 0xDF, 0xEB, 0x86, 0x7C, 0xDF, 0xEF, 0xDF, 0xF0, /* 0x20-0x23 */ + 0xBB, 0xBD, 0x86, 0x7D, 0x86, 0x7E, 0xDF, 0xF3, /* 0x24-0x27 */ + 0x86, 0x80, 0x86, 0x81, 0xDF, 0xF4, 0x86, 0x82, /* 0x28-0x2B */ + 0xBB, 0xA3, 0x86, 0x83, 0xCA, 0xDB, 0xCE, 0xA8, /* 0x2C-0x2F */ + 0xE0, 0xA7, 0xB3, 0xAA, 0x86, 0x84, 0xE0, 0xA6, /* 0x30-0x33 */ + 0x86, 0x85, 0x86, 0x86, 0x86, 0x87, 0xE0, 0xA1, /* 0x34-0x37 */ + 0x86, 0x88, 0x86, 0x89, 0x86, 0x8A, 0x86, 0x8B, /* 0x38-0x3B */ + 0xDF, 0xFE, 0x86, 0x8C, 0xCD, 0xD9, 0xDF, 0xFC, /* 0x3C-0x3F */ + 0x86, 0x8D, 0xDF, 0xFA, 0x86, 0x8E, 0xBF, 0xD0, /* 0x40-0x43 */ + 0xD7, 0xC4, 0x86, 0x8F, 0xC9, 0xCC, 0x86, 0x90, /* 0x44-0x47 */ + 0x86, 0x91, 0xDF, 0xF8, 0xB0, 0xA1, 0x86, 0x92, /* 0x48-0x4B */ + 0x86, 0x93, 0x86, 0x94, 0x86, 0x95, 0x86, 0x96, /* 0x4C-0x4F */ + 0xDF, 0xFD, 0x86, 0x97, 0x86, 0x98, 0x86, 0x99, /* 0x50-0x53 */ + 0x86, 0x9A, 0xDF, 0xFB, 0xE0, 0xA2, 0x86, 0x9B, /* 0x54-0x57 */ + 0x86, 0x9C, 0x86, 0x9D, 0x86, 0x9E, 0x86, 0x9F, /* 0x58-0x5B */ + 0xE0, 0xA8, 0x86, 0xA0, 0x86, 0xA1, 0x86, 0xA2, /* 0x5C-0x5F */ + 0x86, 0xA3, 0xB7, 0xC8, 0x86, 0xA4, 0x86, 0xA5, /* 0x60-0x63 */ + 0xC6, 0xA1, 0xC9, 0xB6, 0xC0, 0xB2, 0xDF, 0xF5, /* 0x64-0x67 */ + 0x86, 0xA6, 0x86, 0xA7, 0xC5, 0xBE, 0x86, 0xA8, /* 0x68-0x6B */ + 0xD8, 0xC4, 0xDF, 0xF9, 0xC4, 0xF6, 0x86, 0xA9, /* 0x6C-0x6F */ + 0x86, 0xAA, 0x86, 0xAB, 0x86, 0xAC, 0x86, 0xAD, /* 0x70-0x73 */ + 0x86, 0xAE, 0xE0, 0xA3, 0xE0, 0xA4, 0xE0, 0xA5, /* 0x74-0x77 */ + 0xD0, 0xA5, 0x86, 0xAF, 0x86, 0xB0, 0xE0, 0xB4, /* 0x78-0x7B */ + 0xCC, 0xE4, 0x86, 0xB1, 0xE0, 0xB1, 0x86, 0xB2, /* 0x7C-0x7F */ + + 0xBF, 0xA6, 0xE0, 0xAF, 0xCE, 0xB9, 0xE0, 0xAB, /* 0x80-0x83 */ + 0xC9, 0xC6, 0x86, 0xB3, 0x86, 0xB4, 0xC0, 0xAE, /* 0x84-0x87 */ + 0xE0, 0xAE, 0xBA, 0xED, 0xBA, 0xB0, 0xE0, 0xA9, /* 0x88-0x8B */ + 0x86, 0xB5, 0x86, 0xB6, 0x86, 0xB7, 0xDF, 0xF6, /* 0x8C-0x8F */ + 0x86, 0xB8, 0xE0, 0xB3, 0x86, 0xB9, 0x86, 0xBA, /* 0x90-0x93 */ + 0xE0, 0xB8, 0x86, 0xBB, 0x86, 0xBC, 0x86, 0xBD, /* 0x94-0x97 */ + 0xB4, 0xAD, 0xE0, 0xB9, 0x86, 0xBE, 0x86, 0xBF, /* 0x98-0x9B */ + 0xCF, 0xB2, 0xBA, 0xC8, 0x86, 0xC0, 0xE0, 0xB0, /* 0x9C-0x9F */ + 0x86, 0xC1, 0x86, 0xC2, 0x86, 0xC3, 0x86, 0xC4, /* 0xA0-0xA3 */ + 0x86, 0xC5, 0x86, 0xC6, 0x86, 0xC7, 0xD0, 0xFA, /* 0xA4-0xA7 */ + 0x86, 0xC8, 0x86, 0xC9, 0x86, 0xCA, 0x86, 0xCB, /* 0xA8-0xAB */ + 0x86, 0xCC, 0x86, 0xCD, 0x86, 0xCE, 0x86, 0xCF, /* 0xAC-0xAF */ + 0x86, 0xD0, 0xE0, 0xAC, 0x86, 0xD1, 0xD4, 0xFB, /* 0xB0-0xB3 */ + 0x86, 0xD2, 0xDF, 0xF7, 0x86, 0xD3, 0xC5, 0xE7, /* 0xB4-0xB7 */ + 0x86, 0xD4, 0xE0, 0xAD, 0x86, 0xD5, 0xD3, 0xF7, /* 0xB8-0xBB */ + 0x86, 0xD6, 0xE0, 0xB6, 0xE0, 0xB7, 0x86, 0xD7, /* 0xBC-0xBF */ + 0x86, 0xD8, 0x86, 0xD9, 0x86, 0xDA, 0x86, 0xDB, /* 0xC0-0xC3 */ + 0xE0, 0xC4, 0xD0, 0xE1, 0x86, 0xDC, 0x86, 0xDD, /* 0xC4-0xC7 */ + 0x86, 0xDE, 0xE0, 0xBC, 0x86, 0xDF, 0x86, 0xE0, /* 0xC8-0xCB */ + 0xE0, 0xC9, 0xE0, 0xCA, 0x86, 0xE1, 0x86, 0xE2, /* 0xCC-0xCF */ + 0x86, 0xE3, 0xE0, 0xBE, 0xE0, 0xAA, 0xC9, 0xA4, /* 0xD0-0xD3 */ + 0xE0, 0xC1, 0x86, 0xE4, 0xE0, 0xB2, 0x86, 0xE5, /* 0xD4-0xD7 */ + 0x86, 0xE6, 0x86, 0xE7, 0x86, 0xE8, 0x86, 0xE9, /* 0xD8-0xDB */ + 0xCA, 0xC8, 0xE0, 0xC3, 0x86, 0xEA, 0xE0, 0xB5, /* 0xDC-0xDF */ + 0x86, 0xEB, 0xCE, 0xCB, 0x86, 0xEC, 0xCB, 0xC3, /* 0xE0-0xE3 */ + 0xE0, 0xCD, 0xE0, 0xC6, 0xE0, 0xC2, 0x86, 0xED, /* 0xE4-0xE7 */ + 0xE0, 0xCB, 0x86, 0xEE, 0xE0, 0xBA, 0xE0, 0xBF, /* 0xE8-0xEB */ + 0xE0, 0xC0, 0x86, 0xEF, 0x86, 0xF0, 0xE0, 0xC5, /* 0xEC-0xEF */ + 0x86, 0xF1, 0x86, 0xF2, 0xE0, 0xC7, 0xE0, 0xC8, /* 0xF0-0xF3 */ + 0x86, 0xF3, 0xE0, 0xCC, 0x86, 0xF4, 0xE0, 0xBB, /* 0xF4-0xF7 */ + 0x86, 0xF5, 0x86, 0xF6, 0x86, 0xF7, 0x86, 0xF8, /* 0xF8-0xFB */ + 0x86, 0xF9, 0xCB, 0xD4, 0xE0, 0xD5, 0x86, 0xFA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0xE0, 0xD6, 0xE0, 0xD2, 0x86, 0xFB, 0x86, 0xFC, /* 0x00-0x03 */ + 0x86, 0xFD, 0x86, 0xFE, 0x87, 0x40, 0x87, 0x41, /* 0x04-0x07 */ + 0xE0, 0xD0, 0xBC, 0xCE, 0x87, 0x42, 0x87, 0x43, /* 0x08-0x0B */ + 0xE0, 0xD1, 0x87, 0x44, 0xB8, 0xC2, 0xD8, 0xC5, /* 0x0C-0x0F */ + 0x87, 0x45, 0x87, 0x46, 0x87, 0x47, 0x87, 0x48, /* 0x10-0x13 */ + 0x87, 0x49, 0x87, 0x4A, 0x87, 0x4B, 0x87, 0x4C, /* 0x14-0x17 */ + 0xD0, 0xEA, 0x87, 0x4D, 0x87, 0x4E, 0xC2, 0xEF, /* 0x18-0x1B */ + 0x87, 0x4F, 0x87, 0x50, 0xE0, 0xCF, 0xE0, 0xBD, /* 0x1C-0x1F */ + 0x87, 0x51, 0x87, 0x52, 0x87, 0x53, 0xE0, 0xD4, /* 0x20-0x23 */ + 0xE0, 0xD3, 0x87, 0x54, 0x87, 0x55, 0xE0, 0xD7, /* 0x24-0x27 */ + 0x87, 0x56, 0x87, 0x57, 0x87, 0x58, 0x87, 0x59, /* 0x28-0x2B */ + 0xE0, 0xDC, 0xE0, 0xD8, 0x87, 0x5A, 0x87, 0x5B, /* 0x2C-0x2F */ + 0x87, 0x5C, 0xD6, 0xF6, 0xB3, 0xB0, 0x87, 0x5D, /* 0x30-0x33 */ + 0xD7, 0xEC, 0x87, 0x5E, 0xCB, 0xBB, 0x87, 0x5F, /* 0x34-0x37 */ + 0x87, 0x60, 0xE0, 0xDA, 0x87, 0x61, 0xCE, 0xFB, /* 0x38-0x3B */ + 0x87, 0x62, 0x87, 0x63, 0x87, 0x64, 0xBA, 0xD9, /* 0x3C-0x3F */ + 0x87, 0x65, 0x87, 0x66, 0x87, 0x67, 0x87, 0x68, /* 0x40-0x43 */ + 0x87, 0x69, 0x87, 0x6A, 0x87, 0x6B, 0x87, 0x6C, /* 0x44-0x47 */ + 0x87, 0x6D, 0x87, 0x6E, 0x87, 0x6F, 0x87, 0x70, /* 0x48-0x4B */ + 0xE0, 0xE1, 0xE0, 0xDD, 0xD2, 0xAD, 0x87, 0x71, /* 0x4C-0x4F */ + 0x87, 0x72, 0x87, 0x73, 0x87, 0x74, 0x87, 0x75, /* 0x50-0x53 */ + 0xE0, 0xE2, 0x87, 0x76, 0x87, 0x77, 0xE0, 0xDB, /* 0x54-0x57 */ + 0xE0, 0xD9, 0xE0, 0xDF, 0x87, 0x78, 0x87, 0x79, /* 0x58-0x5B */ + 0xE0, 0xE0, 0x87, 0x7A, 0x87, 0x7B, 0x87, 0x7C, /* 0x5C-0x5F */ + 0x87, 0x7D, 0x87, 0x7E, 0xE0, 0xDE, 0x87, 0x80, /* 0x60-0x63 */ + 0xE0, 0xE4, 0x87, 0x81, 0x87, 0x82, 0x87, 0x83, /* 0x64-0x67 */ + 0xC6, 0xF7, 0xD8, 0xAC, 0xD4, 0xEB, 0xE0, 0xE6, /* 0x68-0x6B */ + 0xCA, 0xC9, 0x87, 0x84, 0x87, 0x85, 0x87, 0x86, /* 0x6C-0x6F */ + 0x87, 0x87, 0xE0, 0xE5, 0x87, 0x88, 0x87, 0x89, /* 0x70-0x73 */ + 0x87, 0x8A, 0x87, 0x8B, 0xB8, 0xC1, 0x87, 0x8C, /* 0x74-0x77 */ + 0x87, 0x8D, 0x87, 0x8E, 0x87, 0x8F, 0xE0, 0xE7, /* 0x78-0x7B */ + 0xE0, 0xE8, 0x87, 0x90, 0x87, 0x91, 0x87, 0x92, /* 0x7C-0x7F */ + + 0x87, 0x93, 0x87, 0x94, 0x87, 0x95, 0x87, 0x96, /* 0x80-0x83 */ + 0x87, 0x97, 0xE0, 0xE9, 0xE0, 0xE3, 0x87, 0x98, /* 0x84-0x87 */ + 0x87, 0x99, 0x87, 0x9A, 0x87, 0x9B, 0x87, 0x9C, /* 0x88-0x8B */ + 0x87, 0x9D, 0x87, 0x9E, 0xBA, 0xBF, 0xCC, 0xE7, /* 0x8C-0x8F */ + 0x87, 0x9F, 0x87, 0xA0, 0x87, 0xA1, 0xE0, 0xEA, /* 0x90-0x93 */ + 0x87, 0xA2, 0x87, 0xA3, 0x87, 0xA4, 0x87, 0xA5, /* 0x94-0x97 */ + 0x87, 0xA6, 0x87, 0xA7, 0x87, 0xA8, 0x87, 0xA9, /* 0x98-0x9B */ + 0x87, 0xAA, 0x87, 0xAB, 0x87, 0xAC, 0x87, 0xAD, /* 0x9C-0x9F */ + 0x87, 0xAE, 0x87, 0xAF, 0x87, 0xB0, 0xCF, 0xF9, /* 0xA0-0xA3 */ + 0x87, 0xB1, 0x87, 0xB2, 0x87, 0xB3, 0x87, 0xB4, /* 0xA4-0xA7 */ + 0x87, 0xB5, 0x87, 0xB6, 0x87, 0xB7, 0x87, 0xB8, /* 0xA8-0xAB */ + 0x87, 0xB9, 0x87, 0xBA, 0x87, 0xBB, 0xE0, 0xEB, /* 0xAC-0xAF */ + 0x87, 0xBC, 0x87, 0xBD, 0x87, 0xBE, 0x87, 0xBF, /* 0xB0-0xB3 */ + 0x87, 0xC0, 0x87, 0xC1, 0x87, 0xC2, 0xC8, 0xC2, /* 0xB4-0xB7 */ + 0x87, 0xC3, 0x87, 0xC4, 0x87, 0xC5, 0x87, 0xC6, /* 0xB8-0xBB */ + 0xBD, 0xC0, 0x87, 0xC7, 0x87, 0xC8, 0x87, 0xC9, /* 0xBC-0xBF */ + 0x87, 0xCA, 0x87, 0xCB, 0x87, 0xCC, 0x87, 0xCD, /* 0xC0-0xC3 */ + 0x87, 0xCE, 0x87, 0xCF, 0x87, 0xD0, 0x87, 0xD1, /* 0xC4-0xC7 */ + 0x87, 0xD2, 0x87, 0xD3, 0xC4, 0xD2, 0x87, 0xD4, /* 0xC8-0xCB */ + 0x87, 0xD5, 0x87, 0xD6, 0x87, 0xD7, 0x87, 0xD8, /* 0xCC-0xCF */ + 0x87, 0xD9, 0x87, 0xDA, 0x87, 0xDB, 0x87, 0xDC, /* 0xD0-0xD3 */ + 0xE0, 0xEC, 0x87, 0xDD, 0x87, 0xDE, 0xE0, 0xED, /* 0xD4-0xD7 */ + 0x87, 0xDF, 0x87, 0xE0, 0xC7, 0xF4, 0xCB, 0xC4, /* 0xD8-0xDB */ + 0x87, 0xE1, 0xE0, 0xEE, 0xBB, 0xD8, 0xD8, 0xB6, /* 0xDC-0xDF */ + 0xD2, 0xF2, 0xE0, 0xEF, 0xCD, 0xC5, 0x87, 0xE2, /* 0xE0-0xE3 */ + 0xB6, 0xDA, 0x87, 0xE3, 0x87, 0xE4, 0x87, 0xE5, /* 0xE4-0xE7 */ + 0x87, 0xE6, 0x87, 0xE7, 0x87, 0xE8, 0xE0, 0xF1, /* 0xE8-0xEB */ + 0x87, 0xE9, 0xD4, 0xB0, 0x87, 0xEA, 0x87, 0xEB, /* 0xEC-0xEF */ + 0xC0, 0xA7, 0xB4, 0xD1, 0x87, 0xEC, 0x87, 0xED, /* 0xF0-0xF3 */ + 0xCE, 0xA7, 0xE0, 0xF0, 0x87, 0xEE, 0x87, 0xEF, /* 0xF4-0xF7 */ + 0x87, 0xF0, 0xE0, 0xF2, 0xB9, 0xCC, 0x87, 0xF1, /* 0xF8-0xFB */ + 0x87, 0xF2, 0xB9, 0xFA, 0xCD, 0xBC, 0xE0, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x87, 0xF3, 0x87, 0xF4, 0x87, 0xF5, 0xC6, 0xD4, /* 0x00-0x03 */ + 0xE0, 0xF4, 0x87, 0xF6, 0xD4, 0xB2, 0x87, 0xF7, /* 0x04-0x07 */ + 0xC8, 0xA6, 0xE0, 0xF6, 0xE0, 0xF5, 0x87, 0xF8, /* 0x08-0x0B */ + 0x87, 0xF9, 0x87, 0xFA, 0x87, 0xFB, 0x87, 0xFC, /* 0x0C-0x0F */ + 0x87, 0xFD, 0x87, 0xFE, 0x88, 0x40, 0x88, 0x41, /* 0x10-0x13 */ + 0x88, 0x42, 0x88, 0x43, 0x88, 0x44, 0x88, 0x45, /* 0x14-0x17 */ + 0x88, 0x46, 0x88, 0x47, 0x88, 0x48, 0x88, 0x49, /* 0x18-0x1B */ + 0xE0, 0xF7, 0x88, 0x4A, 0x88, 0x4B, 0xCD, 0xC1, /* 0x1C-0x1F */ + 0x88, 0x4C, 0x88, 0x4D, 0x88, 0x4E, 0xCA, 0xA5, /* 0x20-0x23 */ + 0x88, 0x4F, 0x88, 0x50, 0x88, 0x51, 0x88, 0x52, /* 0x24-0x27 */ + 0xD4, 0xDA, 0xDB, 0xD7, 0xDB, 0xD9, 0x88, 0x53, /* 0x28-0x2B */ + 0xDB, 0xD8, 0xB9, 0xE7, 0xDB, 0xDC, 0xDB, 0xDD, /* 0x2C-0x2F */ + 0xB5, 0xD8, 0x88, 0x54, 0x88, 0x55, 0xDB, 0xDA, /* 0x30-0x33 */ + 0x88, 0x56, 0x88, 0x57, 0x88, 0x58, 0x88, 0x59, /* 0x34-0x37 */ + 0x88, 0x5A, 0xDB, 0xDB, 0xB3, 0xA1, 0xDB, 0xDF, /* 0x38-0x3B */ + 0x88, 0x5B, 0x88, 0x5C, 0xBB, 0xF8, 0x88, 0x5D, /* 0x3C-0x3F */ + 0xD6, 0xB7, 0x88, 0x5E, 0xDB, 0xE0, 0x88, 0x5F, /* 0x40-0x43 */ + 0x88, 0x60, 0x88, 0x61, 0x88, 0x62, 0xBE, 0xF9, /* 0x44-0x47 */ + 0x88, 0x63, 0x88, 0x64, 0xB7, 0xBB, 0x88, 0x65, /* 0x48-0x4B */ + 0xDB, 0xD0, 0xCC, 0xAE, 0xBF, 0xB2, 0xBB, 0xB5, /* 0x4C-0x4F */ + 0xD7, 0xF8, 0xBF, 0xD3, 0x88, 0x66, 0x88, 0x67, /* 0x50-0x53 */ + 0x88, 0x68, 0x88, 0x69, 0x88, 0x6A, 0xBF, 0xE9, /* 0x54-0x57 */ + 0x88, 0x6B, 0x88, 0x6C, 0xBC, 0xE1, 0xCC, 0xB3, /* 0x58-0x5B */ + 0xDB, 0xDE, 0xB0, 0xD3, 0xCE, 0xEB, 0xB7, 0xD8, /* 0x5C-0x5F */ + 0xD7, 0xB9, 0xC6, 0xC2, 0x88, 0x6D, 0x88, 0x6E, /* 0x60-0x63 */ + 0xC0, 0xA4, 0x88, 0x6F, 0xCC, 0xB9, 0x88, 0x70, /* 0x64-0x67 */ + 0xDB, 0xE7, 0xDB, 0xE1, 0xC6, 0xBA, 0xDB, 0xE3, /* 0x68-0x6B */ + 0x88, 0x71, 0xDB, 0xE8, 0x88, 0x72, 0xC5, 0xF7, /* 0x6C-0x6F */ + 0x88, 0x73, 0x88, 0x74, 0x88, 0x75, 0xDB, 0xEA, /* 0x70-0x73 */ + 0x88, 0x76, 0x88, 0x77, 0xDB, 0xE9, 0xBF, 0xC0, /* 0x74-0x77 */ + 0x88, 0x78, 0x88, 0x79, 0x88, 0x7A, 0xDB, 0xE6, /* 0x78-0x7B */ + 0xDB, 0xE5, 0x88, 0x7B, 0x88, 0x7C, 0x88, 0x7D, /* 0x7C-0x7F */ + + 0x88, 0x7E, 0x88, 0x80, 0xB4, 0xB9, 0xC0, 0xAC, /* 0x80-0x83 */ + 0xC2, 0xA2, 0xDB, 0xE2, 0xDB, 0xE4, 0x88, 0x81, /* 0x84-0x87 */ + 0x88, 0x82, 0x88, 0x83, 0x88, 0x84, 0xD0, 0xCD, /* 0x88-0x8B */ + 0xDB, 0xED, 0x88, 0x85, 0x88, 0x86, 0x88, 0x87, /* 0x8C-0x8F */ + 0x88, 0x88, 0x88, 0x89, 0xC0, 0xDD, 0xDB, 0xF2, /* 0x90-0x93 */ + 0x88, 0x8A, 0x88, 0x8B, 0x88, 0x8C, 0x88, 0x8D, /* 0x94-0x97 */ + 0x88, 0x8E, 0x88, 0x8F, 0x88, 0x90, 0xB6, 0xE2, /* 0x98-0x9B */ + 0x88, 0x91, 0x88, 0x92, 0x88, 0x93, 0x88, 0x94, /* 0x9C-0x9F */ + 0xDB, 0xF3, 0xDB, 0xD2, 0xB9, 0xB8, 0xD4, 0xAB, /* 0xA0-0xA3 */ + 0xDB, 0xEC, 0x88, 0x95, 0xBF, 0xD1, 0xDB, 0xF0, /* 0xA4-0xA7 */ + 0x88, 0x96, 0xDB, 0xD1, 0x88, 0x97, 0xB5, 0xE6, /* 0xA8-0xAB */ + 0x88, 0x98, 0xDB, 0xEB, 0xBF, 0xE5, 0x88, 0x99, /* 0xAC-0xAF */ + 0x88, 0x9A, 0x88, 0x9B, 0xDB, 0xEE, 0x88, 0x9C, /* 0xB0-0xB3 */ + 0xDB, 0xF1, 0x88, 0x9D, 0x88, 0x9E, 0x88, 0x9F, /* 0xB4-0xB7 */ + 0xDB, 0xF9, 0x88, 0xA0, 0x88, 0xA1, 0x88, 0xA2, /* 0xB8-0xBB */ + 0x88, 0xA3, 0x88, 0xA4, 0x88, 0xA5, 0x88, 0xA6, /* 0xBC-0xBF */ + 0x88, 0xA7, 0x88, 0xA8, 0xB9, 0xA1, 0xB0, 0xA3, /* 0xC0-0xC3 */ + 0x88, 0xA9, 0x88, 0xAA, 0x88, 0xAB, 0x88, 0xAC, /* 0xC4-0xC7 */ + 0x88, 0xAD, 0x88, 0xAE, 0x88, 0xAF, 0xC2, 0xF1, /* 0xC8-0xCB */ + 0x88, 0xB0, 0x88, 0xB1, 0xB3, 0xC7, 0xDB, 0xEF, /* 0xCC-0xCF */ + 0x88, 0xB2, 0x88, 0xB3, 0xDB, 0xF8, 0x88, 0xB4, /* 0xD0-0xD3 */ + 0xC6, 0xD2, 0xDB, 0xF4, 0x88, 0xB5, 0x88, 0xB6, /* 0xD4-0xD7 */ + 0xDB, 0xF5, 0xDB, 0xF7, 0xDB, 0xF6, 0x88, 0xB7, /* 0xD8-0xDB */ + 0x88, 0xB8, 0xDB, 0xFE, 0x88, 0xB9, 0xD3, 0xF2, /* 0xDC-0xDF */ + 0xB2, 0xBA, 0x88, 0xBA, 0x88, 0xBB, 0x88, 0xBC, /* 0xE0-0xE3 */ + 0xDB, 0xFD, 0x88, 0xBD, 0x88, 0xBE, 0x88, 0xBF, /* 0xE4-0xE7 */ + 0x88, 0xC0, 0x88, 0xC1, 0x88, 0xC2, 0x88, 0xC3, /* 0xE8-0xEB */ + 0x88, 0xC4, 0xDC, 0xA4, 0x88, 0xC5, 0xDB, 0xFB, /* 0xEC-0xEF */ + 0x88, 0xC6, 0x88, 0xC7, 0x88, 0xC8, 0x88, 0xC9, /* 0xF0-0xF3 */ + 0xDB, 0xFA, 0x88, 0xCA, 0x88, 0xCB, 0x88, 0xCC, /* 0xF4-0xF7 */ + 0xDB, 0xFC, 0xC5, 0xE0, 0xBB, 0xF9, 0x88, 0xCD, /* 0xF8-0xFB */ + 0x88, 0xCE, 0xDC, 0xA3, 0x88, 0xCF, 0x88, 0xD0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0xDC, 0xA5, 0x88, 0xD1, 0xCC, 0xC3, 0x88, 0xD2, /* 0x00-0x03 */ + 0x88, 0xD3, 0x88, 0xD4, 0xB6, 0xD1, 0xDD, 0xC0, /* 0x04-0x07 */ + 0x88, 0xD5, 0x88, 0xD6, 0x88, 0xD7, 0xDC, 0xA1, /* 0x08-0x0B */ + 0x88, 0xD8, 0xDC, 0xA2, 0x88, 0xD9, 0x88, 0xDA, /* 0x0C-0x0F */ + 0x88, 0xDB, 0xC7, 0xB5, 0x88, 0xDC, 0x88, 0xDD, /* 0x10-0x13 */ + 0x88, 0xDE, 0xB6, 0xE9, 0x88, 0xDF, 0x88, 0xE0, /* 0x14-0x17 */ + 0x88, 0xE1, 0xDC, 0xA7, 0x88, 0xE2, 0x88, 0xE3, /* 0x18-0x1B */ + 0x88, 0xE4, 0x88, 0xE5, 0xDC, 0xA6, 0x88, 0xE6, /* 0x1C-0x1F */ + 0xDC, 0xA9, 0xB1, 0xA4, 0x88, 0xE7, 0x88, 0xE8, /* 0x20-0x23 */ + 0xB5, 0xCC, 0x88, 0xE9, 0x88, 0xEA, 0x88, 0xEB, /* 0x24-0x27 */ + 0x88, 0xEC, 0x88, 0xED, 0xBF, 0xB0, 0x88, 0xEE, /* 0x28-0x2B */ + 0x88, 0xEF, 0x88, 0xF0, 0x88, 0xF1, 0x88, 0xF2, /* 0x2C-0x2F */ + 0xD1, 0xDF, 0x88, 0xF3, 0x88, 0xF4, 0x88, 0xF5, /* 0x30-0x33 */ + 0x88, 0xF6, 0xB6, 0xC2, 0x88, 0xF7, 0x88, 0xF8, /* 0x34-0x37 */ + 0x88, 0xF9, 0x88, 0xFA, 0x88, 0xFB, 0x88, 0xFC, /* 0x38-0x3B */ + 0x88, 0xFD, 0x88, 0xFE, 0x89, 0x40, 0x89, 0x41, /* 0x3C-0x3F */ + 0x89, 0x42, 0x89, 0x43, 0x89, 0x44, 0x89, 0x45, /* 0x40-0x43 */ + 0xDC, 0xA8, 0x89, 0x46, 0x89, 0x47, 0x89, 0x48, /* 0x44-0x47 */ + 0x89, 0x49, 0x89, 0x4A, 0x89, 0x4B, 0x89, 0x4C, /* 0x48-0x4B */ + 0xCB, 0xFA, 0xEB, 0xF3, 0x89, 0x4D, 0x89, 0x4E, /* 0x4C-0x4F */ + 0x89, 0x4F, 0xCB, 0xDC, 0x89, 0x50, 0x89, 0x51, /* 0x50-0x53 */ + 0xCB, 0xFE, 0x89, 0x52, 0x89, 0x53, 0x89, 0x54, /* 0x54-0x57 */ + 0xCC, 0xC1, 0x89, 0x55, 0x89, 0x56, 0x89, 0x57, /* 0x58-0x5B */ + 0x89, 0x58, 0x89, 0x59, 0xC8, 0xFB, 0x89, 0x5A, /* 0x5C-0x5F */ + 0x89, 0x5B, 0x89, 0x5C, 0x89, 0x5D, 0x89, 0x5E, /* 0x60-0x63 */ + 0x89, 0x5F, 0xDC, 0xAA, 0x89, 0x60, 0x89, 0x61, /* 0x64-0x67 */ + 0x89, 0x62, 0x89, 0x63, 0x89, 0x64, 0xCC, 0xEE, /* 0x68-0x6B */ + 0xDC, 0xAB, 0x89, 0x65, 0x89, 0x66, 0x89, 0x67, /* 0x6C-0x6F */ + 0x89, 0x68, 0x89, 0x69, 0x89, 0x6A, 0x89, 0x6B, /* 0x70-0x73 */ + 0x89, 0x6C, 0x89, 0x6D, 0x89, 0x6E, 0x89, 0x6F, /* 0x74-0x77 */ + 0x89, 0x70, 0x89, 0x71, 0x89, 0x72, 0x89, 0x73, /* 0x78-0x7B */ + 0x89, 0x74, 0x89, 0x75, 0xDB, 0xD3, 0x89, 0x76, /* 0x7C-0x7F */ + + 0xDC, 0xAF, 0xDC, 0xAC, 0x89, 0x77, 0xBE, 0xB3, /* 0x80-0x83 */ + 0x89, 0x78, 0xCA, 0xFB, 0x89, 0x79, 0x89, 0x7A, /* 0x84-0x87 */ + 0x89, 0x7B, 0xDC, 0xAD, 0x89, 0x7C, 0x89, 0x7D, /* 0x88-0x8B */ + 0x89, 0x7E, 0x89, 0x80, 0x89, 0x81, 0x89, 0x82, /* 0x8C-0x8F */ + 0x89, 0x83, 0x89, 0x84, 0xC9, 0xCA, 0xC4, 0xB9, /* 0x90-0x93 */ + 0x89, 0x85, 0x89, 0x86, 0x89, 0x87, 0x89, 0x88, /* 0x94-0x97 */ + 0x89, 0x89, 0xC7, 0xBD, 0xDC, 0xAE, 0x89, 0x8A, /* 0x98-0x9B */ + 0x89, 0x8B, 0x89, 0x8C, 0xD4, 0xF6, 0xD0, 0xE6, /* 0x9C-0x9F */ + 0x89, 0x8D, 0x89, 0x8E, 0x89, 0x8F, 0x89, 0x90, /* 0xA0-0xA3 */ + 0x89, 0x91, 0x89, 0x92, 0x89, 0x93, 0x89, 0x94, /* 0xA4-0xA7 */ + 0xC4, 0xAB, 0xB6, 0xD5, 0x89, 0x95, 0x89, 0x96, /* 0xA8-0xAB */ + 0x89, 0x97, 0x89, 0x98, 0x89, 0x99, 0x89, 0x9A, /* 0xAC-0xAF */ + 0x89, 0x9B, 0x89, 0x9C, 0x89, 0x9D, 0x89, 0x9E, /* 0xB0-0xB3 */ + 0x89, 0x9F, 0x89, 0xA0, 0x89, 0xA1, 0x89, 0xA2, /* 0xB4-0xB7 */ + 0x89, 0xA3, 0x89, 0xA4, 0x89, 0xA5, 0x89, 0xA6, /* 0xB8-0xBB */ + 0xDB, 0xD4, 0x89, 0xA7, 0x89, 0xA8, 0x89, 0xA9, /* 0xBC-0xBF */ + 0x89, 0xAA, 0xB1, 0xDA, 0x89, 0xAB, 0x89, 0xAC, /* 0xC0-0xC3 */ + 0x89, 0xAD, 0xDB, 0xD5, 0x89, 0xAE, 0x89, 0xAF, /* 0xC4-0xC7 */ + 0x89, 0xB0, 0x89, 0xB1, 0x89, 0xB2, 0x89, 0xB3, /* 0xC8-0xCB */ + 0x89, 0xB4, 0x89, 0xB5, 0x89, 0xB6, 0x89, 0xB7, /* 0xCC-0xCF */ + 0x89, 0xB8, 0xDB, 0xD6, 0x89, 0xB9, 0x89, 0xBA, /* 0xD0-0xD3 */ + 0x89, 0xBB, 0xBA, 0xBE, 0x89, 0xBC, 0x89, 0xBD, /* 0xD4-0xD7 */ + 0x89, 0xBE, 0x89, 0xBF, 0x89, 0xC0, 0x89, 0xC1, /* 0xD8-0xDB */ + 0x89, 0xC2, 0x89, 0xC3, 0x89, 0xC4, 0x89, 0xC5, /* 0xDC-0xDF */ + 0x89, 0xC6, 0x89, 0xC7, 0x89, 0xC8, 0x89, 0xC9, /* 0xE0-0xE3 */ + 0xC8, 0xC0, 0x89, 0xCA, 0x89, 0xCB, 0x89, 0xCC, /* 0xE4-0xE7 */ + 0x89, 0xCD, 0x89, 0xCE, 0x89, 0xCF, 0xCA, 0xBF, /* 0xE8-0xEB */ + 0xC8, 0xC9, 0x89, 0xD0, 0xD7, 0xB3, 0x89, 0xD1, /* 0xEC-0xEF */ + 0xC9, 0xF9, 0x89, 0xD2, 0x89, 0xD3, 0xBF, 0xC7, /* 0xF0-0xF3 */ + 0x89, 0xD4, 0x89, 0xD5, 0xBA, 0xF8, 0x89, 0xD6, /* 0xF4-0xF7 */ + 0x89, 0xD7, 0xD2, 0xBC, 0x89, 0xD8, 0x89, 0xD9, /* 0xF8-0xFB */ + 0x89, 0xDA, 0x89, 0xDB, 0x89, 0xDC, 0x89, 0xDD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x89, 0xDE, 0x89, 0xDF, 0xE2, 0xBA, 0x89, 0xE0, /* 0x00-0x03 */ + 0xB4, 0xA6, 0x89, 0xE1, 0x89, 0xE2, 0xB1, 0xB8, /* 0x04-0x07 */ + 0x89, 0xE3, 0x89, 0xE4, 0x89, 0xE5, 0x89, 0xE6, /* 0x08-0x0B */ + 0x89, 0xE7, 0xB8, 0xB4, 0x89, 0xE8, 0xCF, 0xC4, /* 0x0C-0x0F */ + 0x89, 0xE9, 0x89, 0xEA, 0x89, 0xEB, 0x89, 0xEC, /* 0x10-0x13 */ + 0xD9, 0xE7, 0xCF, 0xA6, 0xCD, 0xE2, 0x89, 0xED, /* 0x14-0x17 */ + 0x89, 0xEE, 0xD9, 0xED, 0xB6, 0xE0, 0x89, 0xEF, /* 0x18-0x1B */ + 0xD2, 0xB9, 0x89, 0xF0, 0x89, 0xF1, 0xB9, 0xBB, /* 0x1C-0x1F */ + 0x89, 0xF2, 0x89, 0xF3, 0x89, 0xF4, 0x89, 0xF5, /* 0x20-0x23 */ + 0xE2, 0xB9, 0xE2, 0xB7, 0x89, 0xF6, 0xB4, 0xF3, /* 0x24-0x27 */ + 0x89, 0xF7, 0xCC, 0xEC, 0xCC, 0xAB, 0xB7, 0xF2, /* 0x28-0x2B */ + 0x89, 0xF8, 0xD8, 0xB2, 0xD1, 0xEB, 0xBA, 0xBB, /* 0x2C-0x2F */ + 0x89, 0xF9, 0xCA, 0xA7, 0x89, 0xFA, 0x89, 0xFB, /* 0x30-0x33 */ + 0xCD, 0xB7, 0x89, 0xFC, 0x89, 0xFD, 0xD2, 0xC4, /* 0x34-0x37 */ + 0xBF, 0xE4, 0xBC, 0xD0, 0xB6, 0xE1, 0x89, 0xFE, /* 0x38-0x3B */ + 0xDE, 0xC5, 0x8A, 0x40, 0x8A, 0x41, 0x8A, 0x42, /* 0x3C-0x3F */ + 0x8A, 0x43, 0xDE, 0xC6, 0xDB, 0xBC, 0x8A, 0x44, /* 0x40-0x43 */ + 0xD1, 0xD9, 0x8A, 0x45, 0x8A, 0x46, 0xC6, 0xE6, /* 0x44-0x47 */ + 0xC4, 0xCE, 0xB7, 0xEE, 0x8A, 0x47, 0xB7, 0xDC, /* 0x48-0x4B */ + 0x8A, 0x48, 0x8A, 0x49, 0xBF, 0xFC, 0xD7, 0xE0, /* 0x4C-0x4F */ + 0x8A, 0x4A, 0xC6, 0xF5, 0x8A, 0x4B, 0x8A, 0x4C, /* 0x50-0x53 */ + 0xB1, 0xBC, 0xDE, 0xC8, 0xBD, 0xB1, 0xCC, 0xD7, /* 0x54-0x57 */ + 0xDE, 0xCA, 0x8A, 0x4D, 0xDE, 0xC9, 0x8A, 0x4E, /* 0x58-0x5B */ + 0x8A, 0x4F, 0x8A, 0x50, 0x8A, 0x51, 0x8A, 0x52, /* 0x5C-0x5F */ + 0xB5, 0xEC, 0x8A, 0x53, 0xC9, 0xDD, 0x8A, 0x54, /* 0x60-0x63 */ + 0x8A, 0x55, 0xB0, 0xC2, 0x8A, 0x56, 0x8A, 0x57, /* 0x64-0x67 */ + 0x8A, 0x58, 0x8A, 0x59, 0x8A, 0x5A, 0x8A, 0x5B, /* 0x68-0x6B */ + 0x8A, 0x5C, 0x8A, 0x5D, 0x8A, 0x5E, 0x8A, 0x5F, /* 0x6C-0x6F */ + 0x8A, 0x60, 0x8A, 0x61, 0x8A, 0x62, 0xC5, 0xAE, /* 0x70-0x73 */ + 0xC5, 0xAB, 0x8A, 0x63, 0xC4, 0xCC, 0x8A, 0x64, /* 0x74-0x77 */ + 0xBC, 0xE9, 0xCB, 0xFD, 0x8A, 0x65, 0x8A, 0x66, /* 0x78-0x7B */ + 0x8A, 0x67, 0xBA, 0xC3, 0x8A, 0x68, 0x8A, 0x69, /* 0x7C-0x7F */ + + 0x8A, 0x6A, 0xE5, 0xF9, 0xC8, 0xE7, 0xE5, 0xFA, /* 0x80-0x83 */ + 0xCD, 0xFD, 0x8A, 0x6B, 0xD7, 0xB1, 0xB8, 0xBE, /* 0x84-0x87 */ + 0xC2, 0xE8, 0x8A, 0x6C, 0xC8, 0xD1, 0x8A, 0x6D, /* 0x88-0x8B */ + 0x8A, 0x6E, 0xE5, 0xFB, 0x8A, 0x6F, 0x8A, 0x70, /* 0x8C-0x8F */ + 0x8A, 0x71, 0x8A, 0x72, 0xB6, 0xCA, 0xBC, 0xCB, /* 0x90-0x93 */ + 0x8A, 0x73, 0x8A, 0x74, 0xD1, 0xFD, 0xE6, 0xA1, /* 0x94-0x97 */ + 0x8A, 0x75, 0xC3, 0xEE, 0x8A, 0x76, 0x8A, 0x77, /* 0x98-0x9B */ + 0x8A, 0x78, 0x8A, 0x79, 0xE6, 0xA4, 0x8A, 0x7A, /* 0x9C-0x9F */ + 0x8A, 0x7B, 0x8A, 0x7C, 0x8A, 0x7D, 0xE5, 0xFE, /* 0xA0-0xA3 */ + 0xE6, 0xA5, 0xCD, 0xD7, 0x8A, 0x7E, 0x8A, 0x80, /* 0xA4-0xA7 */ + 0xB7, 0xC1, 0xE5, 0xFC, 0xE5, 0xFD, 0xE6, 0xA3, /* 0xA8-0xAB */ + 0x8A, 0x81, 0x8A, 0x82, 0xC4, 0xDD, 0xE6, 0xA8, /* 0xAC-0xAF */ + 0x8A, 0x83, 0x8A, 0x84, 0xE6, 0xA7, 0x8A, 0x85, /* 0xB0-0xB3 */ + 0x8A, 0x86, 0x8A, 0x87, 0x8A, 0x88, 0x8A, 0x89, /* 0xB4-0xB7 */ + 0x8A, 0x8A, 0xC3, 0xC3, 0x8A, 0x8B, 0xC6, 0xDE, /* 0xB8-0xBB */ + 0x8A, 0x8C, 0x8A, 0x8D, 0xE6, 0xAA, 0x8A, 0x8E, /* 0xBC-0xBF */ + 0x8A, 0x8F, 0x8A, 0x90, 0x8A, 0x91, 0x8A, 0x92, /* 0xC0-0xC3 */ + 0x8A, 0x93, 0x8A, 0x94, 0xC4, 0xB7, 0x8A, 0x95, /* 0xC4-0xC7 */ + 0x8A, 0x96, 0x8A, 0x97, 0xE6, 0xA2, 0xCA, 0xBC, /* 0xC8-0xCB */ + 0x8A, 0x98, 0x8A, 0x99, 0x8A, 0x9A, 0x8A, 0x9B, /* 0xCC-0xCF */ + 0xBD, 0xE3, 0xB9, 0xC3, 0xE6, 0xA6, 0xD0, 0xD5, /* 0xD0-0xD3 */ + 0xCE, 0xAF, 0x8A, 0x9C, 0x8A, 0x9D, 0xE6, 0xA9, /* 0xD4-0xD7 */ + 0xE6, 0xB0, 0x8A, 0x9E, 0xD2, 0xA6, 0x8A, 0x9F, /* 0xD8-0xDB */ + 0xBD, 0xAA, 0xE6, 0xAD, 0x8A, 0xA0, 0x8A, 0xA1, /* 0xDC-0xDF */ + 0x8A, 0xA2, 0x8A, 0xA3, 0x8A, 0xA4, 0xE6, 0xAF, /* 0xE0-0xE3 */ + 0x8A, 0xA5, 0xC0, 0xD1, 0x8A, 0xA6, 0x8A, 0xA7, /* 0xE4-0xE7 */ + 0xD2, 0xCC, 0x8A, 0xA8, 0x8A, 0xA9, 0x8A, 0xAA, /* 0xE8-0xEB */ + 0xBC, 0xA7, 0x8A, 0xAB, 0x8A, 0xAC, 0x8A, 0xAD, /* 0xEC-0xEF */ + 0x8A, 0xAE, 0x8A, 0xAF, 0x8A, 0xB0, 0x8A, 0xB1, /* 0xF0-0xF3 */ + 0x8A, 0xB2, 0x8A, 0xB3, 0x8A, 0xB4, 0x8A, 0xB5, /* 0xF4-0xF7 */ + 0x8A, 0xB6, 0xE6, 0xB1, 0x8A, 0xB7, 0xD2, 0xF6, /* 0xF8-0xFB */ + 0x8A, 0xB8, 0x8A, 0xB9, 0x8A, 0xBA, 0xD7, 0xCB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0x8A, 0xBB, 0xCD, 0xFE, 0x8A, 0xBC, 0xCD, 0xDE, /* 0x00-0x03 */ + 0xC2, 0xA6, 0xE6, 0xAB, 0xE6, 0xAC, 0xBD, 0xBF, /* 0x04-0x07 */ + 0xE6, 0xAE, 0xE6, 0xB3, 0x8A, 0xBD, 0x8A, 0xBE, /* 0x08-0x0B */ + 0xE6, 0xB2, 0x8A, 0xBF, 0x8A, 0xC0, 0x8A, 0xC1, /* 0x0C-0x0F */ + 0x8A, 0xC2, 0xE6, 0xB6, 0x8A, 0xC3, 0xE6, 0xB8, /* 0x10-0x13 */ + 0x8A, 0xC4, 0x8A, 0xC5, 0x8A, 0xC6, 0x8A, 0xC7, /* 0x14-0x17 */ + 0xC4, 0xEF, 0x8A, 0xC8, 0x8A, 0xC9, 0x8A, 0xCA, /* 0x18-0x1B */ + 0xC4, 0xC8, 0x8A, 0xCB, 0x8A, 0xCC, 0xBE, 0xEA, /* 0x1C-0x1F */ + 0xC9, 0xEF, 0x8A, 0xCD, 0x8A, 0xCE, 0xE6, 0xB7, /* 0x20-0x23 */ + 0x8A, 0xCF, 0xB6, 0xF0, 0x8A, 0xD0, 0x8A, 0xD1, /* 0x24-0x27 */ + 0x8A, 0xD2, 0xC3, 0xE4, 0x8A, 0xD3, 0x8A, 0xD4, /* 0x28-0x2B */ + 0x8A, 0xD5, 0x8A, 0xD6, 0x8A, 0xD7, 0x8A, 0xD8, /* 0x2C-0x2F */ + 0x8A, 0xD9, 0xD3, 0xE9, 0xE6, 0xB4, 0x8A, 0xDA, /* 0x30-0x33 */ + 0xE6, 0xB5, 0x8A, 0xDB, 0xC8, 0xA2, 0x8A, 0xDC, /* 0x34-0x37 */ + 0x8A, 0xDD, 0x8A, 0xDE, 0x8A, 0xDF, 0x8A, 0xE0, /* 0x38-0x3B */ + 0xE6, 0xBD, 0x8A, 0xE1, 0x8A, 0xE2, 0x8A, 0xE3, /* 0x3C-0x3F */ + 0xE6, 0xB9, 0x8A, 0xE4, 0x8A, 0xE5, 0x8A, 0xE6, /* 0x40-0x43 */ + 0x8A, 0xE7, 0x8A, 0xE8, 0xC6, 0xC5, 0x8A, 0xE9, /* 0x44-0x47 */ + 0x8A, 0xEA, 0xCD, 0xF1, 0xE6, 0xBB, 0x8A, 0xEB, /* 0x48-0x4B */ + 0x8A, 0xEC, 0x8A, 0xED, 0x8A, 0xEE, 0x8A, 0xEF, /* 0x4C-0x4F */ + 0x8A, 0xF0, 0x8A, 0xF1, 0x8A, 0xF2, 0x8A, 0xF3, /* 0x50-0x53 */ + 0x8A, 0xF4, 0xE6, 0xBC, 0x8A, 0xF5, 0x8A, 0xF6, /* 0x54-0x57 */ + 0x8A, 0xF7, 0x8A, 0xF8, 0xBB, 0xE9, 0x8A, 0xF9, /* 0x58-0x5B */ + 0x8A, 0xFA, 0x8A, 0xFB, 0x8A, 0xFC, 0x8A, 0xFD, /* 0x5C-0x5F */ + 0x8A, 0xFE, 0x8B, 0x40, 0xE6, 0xBE, 0x8B, 0x41, /* 0x60-0x63 */ + 0x8B, 0x42, 0x8B, 0x43, 0x8B, 0x44, 0xE6, 0xBA, /* 0x64-0x67 */ + 0x8B, 0x45, 0x8B, 0x46, 0xC0, 0xB7, 0x8B, 0x47, /* 0x68-0x6B */ + 0x8B, 0x48, 0x8B, 0x49, 0x8B, 0x4A, 0x8B, 0x4B, /* 0x6C-0x6F */ + 0x8B, 0x4C, 0x8B, 0x4D, 0x8B, 0x4E, 0x8B, 0x4F, /* 0x70-0x73 */ + 0xD3, 0xA4, 0xE6, 0xBF, 0xC9, 0xF4, 0xE6, 0xC3, /* 0x74-0x77 */ + 0x8B, 0x50, 0x8B, 0x51, 0xE6, 0xC4, 0x8B, 0x52, /* 0x78-0x7B */ + 0x8B, 0x53, 0x8B, 0x54, 0x8B, 0x55, 0xD0, 0xF6, /* 0x7C-0x7F */ + + 0x8B, 0x56, 0x8B, 0x57, 0x8B, 0x58, 0x8B, 0x59, /* 0x80-0x83 */ + 0x8B, 0x5A, 0x8B, 0x5B, 0x8B, 0x5C, 0x8B, 0x5D, /* 0x84-0x87 */ + 0x8B, 0x5E, 0x8B, 0x5F, 0x8B, 0x60, 0x8B, 0x61, /* 0x88-0x8B */ + 0x8B, 0x62, 0x8B, 0x63, 0x8B, 0x64, 0x8B, 0x65, /* 0x8C-0x8F */ + 0x8B, 0x66, 0x8B, 0x67, 0xC3, 0xBD, 0x8B, 0x68, /* 0x90-0x93 */ + 0x8B, 0x69, 0x8B, 0x6A, 0x8B, 0x6B, 0x8B, 0x6C, /* 0x94-0x97 */ + 0x8B, 0x6D, 0x8B, 0x6E, 0xC3, 0xC4, 0xE6, 0xC2, /* 0x98-0x9B */ + 0x8B, 0x6F, 0x8B, 0x70, 0x8B, 0x71, 0x8B, 0x72, /* 0x9C-0x9F */ + 0x8B, 0x73, 0x8B, 0x74, 0x8B, 0x75, 0x8B, 0x76, /* 0xA0-0xA3 */ + 0x8B, 0x77, 0x8B, 0x78, 0x8B, 0x79, 0x8B, 0x7A, /* 0xA4-0xA7 */ + 0x8B, 0x7B, 0x8B, 0x7C, 0xE6, 0xC1, 0x8B, 0x7D, /* 0xA8-0xAB */ + 0x8B, 0x7E, 0x8B, 0x80, 0x8B, 0x81, 0x8B, 0x82, /* 0xAC-0xAF */ + 0x8B, 0x83, 0x8B, 0x84, 0xE6, 0xC7, 0xCF, 0xB1, /* 0xB0-0xB3 */ + 0x8B, 0x85, 0xEB, 0xF4, 0x8B, 0x86, 0x8B, 0x87, /* 0xB4-0xB7 */ + 0xE6, 0xCA, 0x8B, 0x88, 0x8B, 0x89, 0x8B, 0x8A, /* 0xB8-0xBB */ + 0x8B, 0x8B, 0x8B, 0x8C, 0xE6, 0xC5, 0x8B, 0x8D, /* 0xBC-0xBF */ + 0x8B, 0x8E, 0xBC, 0xDE, 0xC9, 0xA9, 0x8B, 0x8F, /* 0xC0-0xC3 */ + 0x8B, 0x90, 0x8B, 0x91, 0x8B, 0x92, 0x8B, 0x93, /* 0xC4-0xC7 */ + 0x8B, 0x94, 0xBC, 0xB5, 0x8B, 0x95, 0x8B, 0x96, /* 0xC8-0xCB */ + 0xCF, 0xD3, 0x8B, 0x97, 0x8B, 0x98, 0x8B, 0x99, /* 0xCC-0xCF */ + 0x8B, 0x9A, 0x8B, 0x9B, 0xE6, 0xC8, 0x8B, 0x9C, /* 0xD0-0xD3 */ + 0xE6, 0xC9, 0x8B, 0x9D, 0xE6, 0xCE, 0x8B, 0x9E, /* 0xD4-0xD7 */ + 0xE6, 0xD0, 0x8B, 0x9F, 0x8B, 0xA0, 0x8B, 0xA1, /* 0xD8-0xDB */ + 0xE6, 0xD1, 0x8B, 0xA2, 0x8B, 0xA3, 0x8B, 0xA4, /* 0xDC-0xDF */ + 0xE6, 0xCB, 0xB5, 0xD5, 0x8B, 0xA5, 0xE6, 0xCC, /* 0xE0-0xE3 */ + 0x8B, 0xA6, 0x8B, 0xA7, 0xE6, 0xCF, 0x8B, 0xA8, /* 0xE4-0xE7 */ + 0x8B, 0xA9, 0xC4, 0xDB, 0x8B, 0xAA, 0xE6, 0xC6, /* 0xE8-0xEB */ + 0x8B, 0xAB, 0x8B, 0xAC, 0x8B, 0xAD, 0x8B, 0xAE, /* 0xEC-0xEF */ + 0x8B, 0xAF, 0xE6, 0xCD, 0x8B, 0xB0, 0x8B, 0xB1, /* 0xF0-0xF3 */ + 0x8B, 0xB2, 0x8B, 0xB3, 0x8B, 0xB4, 0x8B, 0xB5, /* 0xF4-0xF7 */ + 0x8B, 0xB6, 0x8B, 0xB7, 0x8B, 0xB8, 0x8B, 0xB9, /* 0xF8-0xFB */ + 0x8B, 0xBA, 0x8B, 0xBB, 0x8B, 0xBC, 0x8B, 0xBD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5B[512] = { + 0x8B, 0xBE, 0x8B, 0xBF, 0x8B, 0xC0, 0x8B, 0xC1, /* 0x00-0x03 */ + 0x8B, 0xC2, 0x8B, 0xC3, 0x8B, 0xC4, 0x8B, 0xC5, /* 0x04-0x07 */ + 0x8B, 0xC6, 0xE6, 0xD2, 0x8B, 0xC7, 0x8B, 0xC8, /* 0x08-0x0B */ + 0x8B, 0xC9, 0x8B, 0xCA, 0x8B, 0xCB, 0x8B, 0xCC, /* 0x0C-0x0F */ + 0x8B, 0xCD, 0x8B, 0xCE, 0x8B, 0xCF, 0x8B, 0xD0, /* 0x10-0x13 */ + 0x8B, 0xD1, 0x8B, 0xD2, 0xE6, 0xD4, 0xE6, 0xD3, /* 0x14-0x17 */ + 0x8B, 0xD3, 0x8B, 0xD4, 0x8B, 0xD5, 0x8B, 0xD6, /* 0x18-0x1B */ + 0x8B, 0xD7, 0x8B, 0xD8, 0x8B, 0xD9, 0x8B, 0xDA, /* 0x1C-0x1F */ + 0x8B, 0xDB, 0x8B, 0xDC, 0x8B, 0xDD, 0x8B, 0xDE, /* 0x20-0x23 */ + 0x8B, 0xDF, 0x8B, 0xE0, 0x8B, 0xE1, 0x8B, 0xE2, /* 0x24-0x27 */ + 0x8B, 0xE3, 0x8B, 0xE4, 0x8B, 0xE5, 0x8B, 0xE6, /* 0x28-0x2B */ + 0x8B, 0xE7, 0x8B, 0xE8, 0x8B, 0xE9, 0x8B, 0xEA, /* 0x2C-0x2F */ + 0x8B, 0xEB, 0x8B, 0xEC, 0xE6, 0xD5, 0x8B, 0xED, /* 0x30-0x33 */ + 0xD9, 0xF8, 0x8B, 0xEE, 0x8B, 0xEF, 0xE6, 0xD6, /* 0x34-0x37 */ + 0x8B, 0xF0, 0x8B, 0xF1, 0x8B, 0xF2, 0x8B, 0xF3, /* 0x38-0x3B */ + 0x8B, 0xF4, 0x8B, 0xF5, 0x8B, 0xF6, 0x8B, 0xF7, /* 0x3C-0x3F */ + 0xE6, 0xD7, 0x8B, 0xF8, 0x8B, 0xF9, 0x8B, 0xFA, /* 0x40-0x43 */ + 0x8B, 0xFB, 0x8B, 0xFC, 0x8B, 0xFD, 0x8B, 0xFE, /* 0x44-0x47 */ + 0x8C, 0x40, 0x8C, 0x41, 0x8C, 0x42, 0x8C, 0x43, /* 0x48-0x4B */ + 0x8C, 0x44, 0x8C, 0x45, 0x8C, 0x46, 0x8C, 0x47, /* 0x4C-0x4F */ + 0xD7, 0xD3, 0xE6, 0xDD, 0x8C, 0x48, 0xE6, 0xDE, /* 0x50-0x53 */ + 0xBF, 0xD7, 0xD4, 0xD0, 0x8C, 0x49, 0xD7, 0xD6, /* 0x54-0x57 */ + 0xB4, 0xE6, 0xCB, 0xEF, 0xE6, 0xDA, 0xD8, 0xC3, /* 0x58-0x5B */ + 0xD7, 0xCE, 0xD0, 0xA2, 0x8C, 0x4A, 0xC3, 0xCF, /* 0x5C-0x5F */ + 0x8C, 0x4B, 0x8C, 0x4C, 0xE6, 0xDF, 0xBC, 0xBE, /* 0x60-0x63 */ + 0xB9, 0xC2, 0xE6, 0xDB, 0xD1, 0xA7, 0x8C, 0x4D, /* 0x64-0x67 */ + 0x8C, 0x4E, 0xBA, 0xA2, 0xC2, 0xCF, 0x8C, 0x4F, /* 0x68-0x6B */ + 0xD8, 0xAB, 0x8C, 0x50, 0x8C, 0x51, 0x8C, 0x52, /* 0x6C-0x6F */ + 0xCA, 0xEB, 0xE5, 0xEE, 0x8C, 0x53, 0xE6, 0xDC, /* 0x70-0x73 */ + 0x8C, 0x54, 0xB7, 0xF5, 0x8C, 0x55, 0x8C, 0x56, /* 0x74-0x77 */ + 0x8C, 0x57, 0x8C, 0x58, 0xC8, 0xE6, 0x8C, 0x59, /* 0x78-0x7B */ + 0x8C, 0x5A, 0xC4, 0xF5, 0x8C, 0x5B, 0x8C, 0x5C, /* 0x7C-0x7F */ + + 0xE5, 0xB2, 0xC4, 0xFE, 0x8C, 0x5D, 0xCB, 0xFC, /* 0x80-0x83 */ + 0xE5, 0xB3, 0xD5, 0xAC, 0x8C, 0x5E, 0xD3, 0xEE, /* 0x84-0x87 */ + 0xCA, 0xD8, 0xB0, 0xB2, 0x8C, 0x5F, 0xCB, 0xCE, /* 0x88-0x8B */ + 0xCD, 0xEA, 0x8C, 0x60, 0x8C, 0x61, 0xBA, 0xEA, /* 0x8C-0x8F */ + 0x8C, 0x62, 0x8C, 0x63, 0x8C, 0x64, 0xE5, 0xB5, /* 0x90-0x93 */ + 0x8C, 0x65, 0xE5, 0xB4, 0x8C, 0x66, 0xD7, 0xDA, /* 0x94-0x97 */ + 0xB9, 0xD9, 0xD6, 0xE6, 0xB6, 0xA8, 0xCD, 0xF0, /* 0x98-0x9B */ + 0xD2, 0xCB, 0xB1, 0xA6, 0xCA, 0xB5, 0x8C, 0x67, /* 0x9C-0x9F */ + 0xB3, 0xE8, 0xC9, 0xF3, 0xBF, 0xCD, 0xD0, 0xFB, /* 0xA0-0xA3 */ + 0xCA, 0xD2, 0xE5, 0xB6, 0xBB, 0xC2, 0x8C, 0x68, /* 0xA4-0xA7 */ + 0x8C, 0x69, 0x8C, 0x6A, 0xCF, 0xDC, 0xB9, 0xAC, /* 0xA8-0xAB */ + 0x8C, 0x6B, 0x8C, 0x6C, 0x8C, 0x6D, 0x8C, 0x6E, /* 0xAC-0xAF */ + 0xD4, 0xD7, 0x8C, 0x6F, 0x8C, 0x70, 0xBA, 0xA6, /* 0xB0-0xB3 */ + 0xD1, 0xE7, 0xCF, 0xFC, 0xBC, 0xD2, 0x8C, 0x71, /* 0xB4-0xB7 */ + 0xE5, 0xB7, 0xC8, 0xDD, 0x8C, 0x72, 0x8C, 0x73, /* 0xB8-0xBB */ + 0x8C, 0x74, 0xBF, 0xED, 0xB1, 0xF6, 0xCB, 0xDE, /* 0xBC-0xBF */ + 0x8C, 0x75, 0x8C, 0x76, 0xBC, 0xC5, 0x8C, 0x77, /* 0xC0-0xC3 */ + 0xBC, 0xC4, 0xD2, 0xFA, 0xC3, 0xDC, 0xBF, 0xDC, /* 0xC4-0xC7 */ + 0x8C, 0x78, 0x8C, 0x79, 0x8C, 0x7A, 0x8C, 0x7B, /* 0xC8-0xCB */ + 0xB8, 0xBB, 0x8C, 0x7C, 0x8C, 0x7D, 0x8C, 0x7E, /* 0xCC-0xCF */ + 0xC3, 0xC2, 0x8C, 0x80, 0xBA, 0xAE, 0xD4, 0xA2, /* 0xD0-0xD3 */ + 0x8C, 0x81, 0x8C, 0x82, 0x8C, 0x83, 0x8C, 0x84, /* 0xD4-0xD7 */ + 0x8C, 0x85, 0x8C, 0x86, 0x8C, 0x87, 0x8C, 0x88, /* 0xD8-0xDB */ + 0x8C, 0x89, 0xC7, 0xDE, 0xC4, 0xAF, 0xB2, 0xEC, /* 0xDC-0xDF */ + 0x8C, 0x8A, 0xB9, 0xD1, 0x8C, 0x8B, 0x8C, 0x8C, /* 0xE0-0xE3 */ + 0xE5, 0xBB, 0xC1, 0xC8, 0x8C, 0x8D, 0x8C, 0x8E, /* 0xE4-0xE7 */ + 0xD5, 0xAF, 0x8C, 0x8F, 0x8C, 0x90, 0x8C, 0x91, /* 0xE8-0xEB */ + 0x8C, 0x92, 0x8C, 0x93, 0xE5, 0xBC, 0x8C, 0x94, /* 0xEC-0xEF */ + 0xE5, 0xBE, 0x8C, 0x95, 0x8C, 0x96, 0x8C, 0x97, /* 0xF0-0xF3 */ + 0x8C, 0x98, 0x8C, 0x99, 0x8C, 0x9A, 0x8C, 0x9B, /* 0xF4-0xF7 */ + 0xB4, 0xE7, 0xB6, 0xD4, 0xCB, 0xC2, 0xD1, 0xB0, /* 0xF8-0xFB */ + 0xB5, 0xBC, 0x8C, 0x9C, 0x8C, 0x9D, 0xCA, 0xD9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x8C, 0x9E, 0xB7, 0xE2, 0x8C, 0x9F, 0x8C, 0xA0, /* 0x00-0x03 */ + 0xC9, 0xE4, 0x8C, 0xA1, 0xBD, 0xAB, 0x8C, 0xA2, /* 0x04-0x07 */ + 0x8C, 0xA3, 0xCE, 0xBE, 0xD7, 0xF0, 0x8C, 0xA4, /* 0x08-0x0B */ + 0x8C, 0xA5, 0x8C, 0xA6, 0x8C, 0xA7, 0xD0, 0xA1, /* 0x0C-0x0F */ + 0x8C, 0xA8, 0xC9, 0xD9, 0x8C, 0xA9, 0x8C, 0xAA, /* 0x10-0x13 */ + 0xB6, 0xFB, 0xE6, 0xD8, 0xBC, 0xE2, 0x8C, 0xAB, /* 0x14-0x17 */ + 0xB3, 0xBE, 0x8C, 0xAC, 0xC9, 0xD0, 0x8C, 0xAD, /* 0x18-0x1B */ + 0xE6, 0xD9, 0xB3, 0xA2, 0x8C, 0xAE, 0x8C, 0xAF, /* 0x1C-0x1F */ + 0x8C, 0xB0, 0x8C, 0xB1, 0xDE, 0xCC, 0x8C, 0xB2, /* 0x20-0x23 */ + 0xD3, 0xC8, 0xDE, 0xCD, 0x8C, 0xB3, 0xD2, 0xA2, /* 0x24-0x27 */ + 0x8C, 0xB4, 0x8C, 0xB5, 0x8C, 0xB6, 0x8C, 0xB7, /* 0x28-0x2B */ + 0xDE, 0xCE, 0x8C, 0xB8, 0x8C, 0xB9, 0x8C, 0xBA, /* 0x2C-0x2F */ + 0x8C, 0xBB, 0xBE, 0xCD, 0x8C, 0xBC, 0x8C, 0xBD, /* 0x30-0x33 */ + 0xDE, 0xCF, 0x8C, 0xBE, 0x8C, 0xBF, 0x8C, 0xC0, /* 0x34-0x37 */ + 0xCA, 0xAC, 0xD2, 0xFC, 0xB3, 0xDF, 0xE5, 0xEA, /* 0x38-0x3B */ + 0xC4, 0xE1, 0xBE, 0xA1, 0xCE, 0xB2, 0xC4, 0xF2, /* 0x3C-0x3F */ + 0xBE, 0xD6, 0xC6, 0xA8, 0xB2, 0xE3, 0x8C, 0xC1, /* 0x40-0x43 */ + 0x8C, 0xC2, 0xBE, 0xD3, 0x8C, 0xC3, 0x8C, 0xC4, /* 0x44-0x47 */ + 0xC7, 0xFC, 0xCC, 0xEB, 0xBD, 0xEC, 0xCE, 0xDD, /* 0x48-0x4B */ + 0x8C, 0xC5, 0x8C, 0xC6, 0xCA, 0xBA, 0xC6, 0xC1, /* 0x4C-0x4F */ + 0xE5, 0xEC, 0xD0, 0xBC, 0x8C, 0xC7, 0x8C, 0xC8, /* 0x50-0x53 */ + 0x8C, 0xC9, 0xD5, 0xB9, 0x8C, 0xCA, 0x8C, 0xCB, /* 0x54-0x57 */ + 0x8C, 0xCC, 0xE5, 0xED, 0x8C, 0xCD, 0x8C, 0xCE, /* 0x58-0x5B */ + 0x8C, 0xCF, 0x8C, 0xD0, 0xCA, 0xF4, 0x8C, 0xD1, /* 0x5C-0x5F */ + 0xCD, 0xC0, 0xC2, 0xC5, 0x8C, 0xD2, 0xE5, 0xEF, /* 0x60-0x63 */ + 0x8C, 0xD3, 0xC2, 0xC4, 0xE5, 0xF0, 0x8C, 0xD4, /* 0x64-0x67 */ + 0x8C, 0xD5, 0x8C, 0xD6, 0x8C, 0xD7, 0x8C, 0xD8, /* 0x68-0x6B */ + 0x8C, 0xD9, 0x8C, 0xDA, 0xE5, 0xF8, 0xCD, 0xCD, /* 0x6C-0x6F */ + 0x8C, 0xDB, 0xC9, 0xBD, 0x8C, 0xDC, 0x8C, 0xDD, /* 0x70-0x73 */ + 0x8C, 0xDE, 0x8C, 0xDF, 0x8C, 0xE0, 0x8C, 0xE1, /* 0x74-0x77 */ + 0x8C, 0xE2, 0xD2, 0xD9, 0xE1, 0xA8, 0x8C, 0xE3, /* 0x78-0x7B */ + 0x8C, 0xE4, 0x8C, 0xE5, 0x8C, 0xE6, 0xD3, 0xEC, /* 0x7C-0x7F */ + + 0x8C, 0xE7, 0xCB, 0xEA, 0xC6, 0xF1, 0x8C, 0xE8, /* 0x80-0x83 */ + 0x8C, 0xE9, 0x8C, 0xEA, 0x8C, 0xEB, 0x8C, 0xEC, /* 0x84-0x87 */ + 0xE1, 0xAC, 0x8C, 0xED, 0x8C, 0xEE, 0x8C, 0xEF, /* 0x88-0x8B */ + 0xE1, 0xA7, 0xE1, 0xA9, 0x8C, 0xF0, 0x8C, 0xF1, /* 0x8C-0x8F */ + 0xE1, 0xAA, 0xE1, 0xAF, 0x8C, 0xF2, 0x8C, 0xF3, /* 0x90-0x93 */ + 0xB2, 0xED, 0x8C, 0xF4, 0xE1, 0xAB, 0xB8, 0xDA, /* 0x94-0x97 */ + 0xE1, 0xAD, 0xE1, 0xAE, 0xE1, 0xB0, 0xB5, 0xBA, /* 0x98-0x9B */ + 0xE1, 0xB1, 0x8C, 0xF5, 0x8C, 0xF6, 0x8C, 0xF7, /* 0x9C-0x9F */ + 0x8C, 0xF8, 0x8C, 0xF9, 0xE1, 0xB3, 0xE1, 0xB8, /* 0xA0-0xA3 */ + 0x8C, 0xFA, 0x8C, 0xFB, 0x8C, 0xFC, 0x8C, 0xFD, /* 0xA4-0xA7 */ + 0x8C, 0xFE, 0xD1, 0xD2, 0x8D, 0x40, 0xE1, 0xB6, /* 0xA8-0xAB */ + 0xE1, 0xB5, 0xC1, 0xEB, 0x8D, 0x41, 0x8D, 0x42, /* 0xAC-0xAF */ + 0x8D, 0x43, 0xE1, 0xB7, 0x8D, 0x44, 0xD4, 0xC0, /* 0xB0-0xB3 */ + 0x8D, 0x45, 0xE1, 0xB2, 0x8D, 0x46, 0xE1, 0xBA, /* 0xB4-0xB7 */ + 0xB0, 0xB6, 0x8D, 0x47, 0x8D, 0x48, 0x8D, 0x49, /* 0xB8-0xBB */ + 0x8D, 0x4A, 0xE1, 0xB4, 0x8D, 0x4B, 0xBF, 0xF9, /* 0xBC-0xBF */ + 0x8D, 0x4C, 0xE1, 0xB9, 0x8D, 0x4D, 0x8D, 0x4E, /* 0xC0-0xC3 */ + 0xE1, 0xBB, 0x8D, 0x4F, 0x8D, 0x50, 0x8D, 0x51, /* 0xC4-0xC7 */ + 0x8D, 0x52, 0x8D, 0x53, 0x8D, 0x54, 0xE1, 0xBE, /* 0xC8-0xCB */ + 0x8D, 0x55, 0x8D, 0x56, 0x8D, 0x57, 0x8D, 0x58, /* 0xCC-0xCF */ + 0x8D, 0x59, 0x8D, 0x5A, 0xE1, 0xBC, 0x8D, 0x5B, /* 0xD0-0xD3 */ + 0x8D, 0x5C, 0x8D, 0x5D, 0x8D, 0x5E, 0x8D, 0x5F, /* 0xD4-0xD7 */ + 0x8D, 0x60, 0xD6, 0xC5, 0x8D, 0x61, 0x8D, 0x62, /* 0xD8-0xDB */ + 0x8D, 0x63, 0x8D, 0x64, 0x8D, 0x65, 0x8D, 0x66, /* 0xDC-0xDF */ + 0x8D, 0x67, 0xCF, 0xBF, 0x8D, 0x68, 0x8D, 0x69, /* 0xE0-0xE3 */ + 0xE1, 0xBD, 0xE1, 0xBF, 0xC2, 0xCD, 0x8D, 0x6A, /* 0xE4-0xE7 */ + 0xB6, 0xEB, 0x8D, 0x6B, 0xD3, 0xF8, 0x8D, 0x6C, /* 0xE8-0xEB */ + 0x8D, 0x6D, 0xC7, 0xCD, 0x8D, 0x6E, 0x8D, 0x6F, /* 0xEC-0xEF */ + 0xB7, 0xE5, 0x8D, 0x70, 0x8D, 0x71, 0x8D, 0x72, /* 0xF0-0xF3 */ + 0x8D, 0x73, 0x8D, 0x74, 0x8D, 0x75, 0x8D, 0x76, /* 0xF4-0xF7 */ + 0x8D, 0x77, 0x8D, 0x78, 0x8D, 0x79, 0xBE, 0xFE, /* 0xF8-0xFB */ + 0x8D, 0x7A, 0x8D, 0x7B, 0x8D, 0x7C, 0x8D, 0x7D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0x8D, 0x7E, 0x8D, 0x80, 0xE1, 0xC0, 0xE1, 0xC1, /* 0x00-0x03 */ + 0x8D, 0x81, 0x8D, 0x82, 0xE1, 0xC7, 0xB3, 0xE7, /* 0x04-0x07 */ + 0x8D, 0x83, 0x8D, 0x84, 0x8D, 0x85, 0x8D, 0x86, /* 0x08-0x0B */ + 0x8D, 0x87, 0x8D, 0x88, 0xC6, 0xE9, 0x8D, 0x89, /* 0x0C-0x0F */ + 0x8D, 0x8A, 0x8D, 0x8B, 0x8D, 0x8C, 0x8D, 0x8D, /* 0x10-0x13 */ + 0xB4, 0xDE, 0x8D, 0x8E, 0xD1, 0xC2, 0x8D, 0x8F, /* 0x14-0x17 */ + 0x8D, 0x90, 0x8D, 0x91, 0x8D, 0x92, 0xE1, 0xC8, /* 0x18-0x1B */ + 0x8D, 0x93, 0x8D, 0x94, 0xE1, 0xC6, 0x8D, 0x95, /* 0x1C-0x1F */ + 0x8D, 0x96, 0x8D, 0x97, 0x8D, 0x98, 0x8D, 0x99, /* 0x20-0x23 */ + 0xE1, 0xC5, 0x8D, 0x9A, 0xE1, 0xC3, 0xE1, 0xC2, /* 0x24-0x27 */ + 0x8D, 0x9B, 0xB1, 0xC0, 0x8D, 0x9C, 0x8D, 0x9D, /* 0x28-0x2B */ + 0x8D, 0x9E, 0xD5, 0xB8, 0xE1, 0xC4, 0x8D, 0x9F, /* 0x2C-0x2F */ + 0x8D, 0xA0, 0x8D, 0xA1, 0x8D, 0xA2, 0x8D, 0xA3, /* 0x30-0x33 */ + 0xE1, 0xCB, 0x8D, 0xA4, 0x8D, 0xA5, 0x8D, 0xA6, /* 0x34-0x37 */ + 0x8D, 0xA7, 0x8D, 0xA8, 0x8D, 0xA9, 0x8D, 0xAA, /* 0x38-0x3B */ + 0x8D, 0xAB, 0xE1, 0xCC, 0xE1, 0xCA, 0x8D, 0xAC, /* 0x3C-0x3F */ + 0x8D, 0xAD, 0x8D, 0xAE, 0x8D, 0xAF, 0x8D, 0xB0, /* 0x40-0x43 */ + 0x8D, 0xB1, 0x8D, 0xB2, 0x8D, 0xB3, 0xEF, 0xFA, /* 0x44-0x47 */ + 0x8D, 0xB4, 0x8D, 0xB5, 0xE1, 0xD3, 0xE1, 0xD2, /* 0x48-0x4B */ + 0xC7, 0xB6, 0x8D, 0xB6, 0x8D, 0xB7, 0x8D, 0xB8, /* 0x4C-0x4F */ + 0x8D, 0xB9, 0x8D, 0xBA, 0x8D, 0xBB, 0x8D, 0xBC, /* 0x50-0x53 */ + 0x8D, 0xBD, 0x8D, 0xBE, 0x8D, 0xBF, 0x8D, 0xC0, /* 0x54-0x57 */ + 0xE1, 0xC9, 0x8D, 0xC1, 0x8D, 0xC2, 0xE1, 0xCE, /* 0x58-0x5B */ + 0x8D, 0xC3, 0xE1, 0xD0, 0x8D, 0xC4, 0x8D, 0xC5, /* 0x5C-0x5F */ + 0x8D, 0xC6, 0x8D, 0xC7, 0x8D, 0xC8, 0x8D, 0xC9, /* 0x60-0x63 */ + 0x8D, 0xCA, 0x8D, 0xCB, 0x8D, 0xCC, 0x8D, 0xCD, /* 0x64-0x67 */ + 0x8D, 0xCE, 0xE1, 0xD4, 0x8D, 0xCF, 0xE1, 0xD1, /* 0x68-0x6B */ + 0xE1, 0xCD, 0x8D, 0xD0, 0x8D, 0xD1, 0xE1, 0xCF, /* 0x6C-0x6F */ + 0x8D, 0xD2, 0x8D, 0xD3, 0x8D, 0xD4, 0x8D, 0xD5, /* 0x70-0x73 */ + 0xE1, 0xD5, 0x8D, 0xD6, 0x8D, 0xD7, 0x8D, 0xD8, /* 0x74-0x77 */ + 0x8D, 0xD9, 0x8D, 0xDA, 0x8D, 0xDB, 0x8D, 0xDC, /* 0x78-0x7B */ + 0x8D, 0xDD, 0x8D, 0xDE, 0x8D, 0xDF, 0x8D, 0xE0, /* 0x7C-0x7F */ + + 0x8D, 0xE1, 0x8D, 0xE2, 0xE1, 0xD6, 0x8D, 0xE3, /* 0x80-0x83 */ + 0x8D, 0xE4, 0x8D, 0xE5, 0x8D, 0xE6, 0x8D, 0xE7, /* 0x84-0x87 */ + 0x8D, 0xE8, 0x8D, 0xE9, 0x8D, 0xEA, 0x8D, 0xEB, /* 0x88-0x8B */ + 0x8D, 0xEC, 0x8D, 0xED, 0x8D, 0xEE, 0x8D, 0xEF, /* 0x8C-0x8F */ + 0x8D, 0xF0, 0x8D, 0xF1, 0x8D, 0xF2, 0x8D, 0xF3, /* 0x90-0x93 */ + 0x8D, 0xF4, 0x8D, 0xF5, 0x8D, 0xF6, 0x8D, 0xF7, /* 0x94-0x97 */ + 0x8D, 0xF8, 0xE1, 0xD7, 0x8D, 0xF9, 0x8D, 0xFA, /* 0x98-0x9B */ + 0x8D, 0xFB, 0xE1, 0xD8, 0x8D, 0xFC, 0x8D, 0xFD, /* 0x9C-0x9F */ + 0x8D, 0xFE, 0x8E, 0x40, 0x8E, 0x41, 0x8E, 0x42, /* 0xA0-0xA3 */ + 0x8E, 0x43, 0x8E, 0x44, 0x8E, 0x45, 0x8E, 0x46, /* 0xA4-0xA7 */ + 0x8E, 0x47, 0x8E, 0x48, 0x8E, 0x49, 0x8E, 0x4A, /* 0xA8-0xAB */ + 0x8E, 0x4B, 0x8E, 0x4C, 0x8E, 0x4D, 0x8E, 0x4E, /* 0xAC-0xAF */ + 0x8E, 0x4F, 0x8E, 0x50, 0x8E, 0x51, 0x8E, 0x52, /* 0xB0-0xB3 */ + 0x8E, 0x53, 0x8E, 0x54, 0x8E, 0x55, 0xE1, 0xDA, /* 0xB4-0xB7 */ + 0x8E, 0x56, 0x8E, 0x57, 0x8E, 0x58, 0x8E, 0x59, /* 0xB8-0xBB */ + 0x8E, 0x5A, 0x8E, 0x5B, 0x8E, 0x5C, 0x8E, 0x5D, /* 0xBC-0xBF */ + 0x8E, 0x5E, 0x8E, 0x5F, 0x8E, 0x60, 0x8E, 0x61, /* 0xC0-0xC3 */ + 0x8E, 0x62, 0xE1, 0xDB, 0x8E, 0x63, 0x8E, 0x64, /* 0xC4-0xC7 */ + 0x8E, 0x65, 0x8E, 0x66, 0x8E, 0x67, 0x8E, 0x68, /* 0xC8-0xCB */ + 0x8E, 0x69, 0xCE, 0xA1, 0x8E, 0x6A, 0x8E, 0x6B, /* 0xCC-0xCF */ + 0x8E, 0x6C, 0x8E, 0x6D, 0x8E, 0x6E, 0x8E, 0x6F, /* 0xD0-0xD3 */ + 0x8E, 0x70, 0x8E, 0x71, 0x8E, 0x72, 0x8E, 0x73, /* 0xD4-0xD7 */ + 0x8E, 0x74, 0x8E, 0x75, 0x8E, 0x76, 0xE7, 0xDD, /* 0xD8-0xDB */ + 0x8E, 0x77, 0xB4, 0xA8, 0xD6, 0xDD, 0x8E, 0x78, /* 0xDC-0xDF */ + 0x8E, 0x79, 0xD1, 0xB2, 0xB3, 0xB2, 0x8E, 0x7A, /* 0xE0-0xE3 */ + 0x8E, 0x7B, 0xB9, 0xA4, 0xD7, 0xF3, 0xC7, 0xC9, /* 0xE4-0xE7 */ + 0xBE, 0xDE, 0xB9, 0xAE, 0x8E, 0x7C, 0xCE, 0xD7, /* 0xE8-0xEB */ + 0x8E, 0x7D, 0x8E, 0x7E, 0xB2, 0xEE, 0xDB, 0xCF, /* 0xEC-0xEF */ + 0x8E, 0x80, 0xBC, 0xBA, 0xD2, 0xD1, 0xCB, 0xC8, /* 0xF0-0xF3 */ + 0xB0, 0xCD, 0x8E, 0x81, 0x8E, 0x82, 0xCF, 0xEF, /* 0xF4-0xF7 */ + 0x8E, 0x83, 0x8E, 0x84, 0x8E, 0x85, 0x8E, 0x86, /* 0xF8-0xFB */ + 0x8E, 0x87, 0xD9, 0xE3, 0xBD, 0xED, 0x8E, 0x88, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x8E, 0x89, 0xB1, 0xD2, 0xCA, 0xD0, 0xB2, 0xBC, /* 0x00-0x03 */ + 0x8E, 0x8A, 0xCB, 0xA7, 0xB7, 0xAB, 0x8E, 0x8B, /* 0x04-0x07 */ + 0xCA, 0xA6, 0x8E, 0x8C, 0x8E, 0x8D, 0x8E, 0x8E, /* 0x08-0x0B */ + 0xCF, 0xA3, 0x8E, 0x8F, 0x8E, 0x90, 0xE0, 0xF8, /* 0x0C-0x0F */ + 0xD5, 0xCA, 0xE0, 0xFB, 0x8E, 0x91, 0x8E, 0x92, /* 0x10-0x13 */ + 0xE0, 0xFA, 0xC5, 0xC1, 0xCC, 0xFB, 0x8E, 0x93, /* 0x14-0x17 */ + 0xC1, 0xB1, 0xE0, 0xF9, 0xD6, 0xE3, 0xB2, 0xAF, /* 0x18-0x1B */ + 0xD6, 0xC4, 0xB5, 0xDB, 0x8E, 0x94, 0x8E, 0x95, /* 0x1C-0x1F */ + 0x8E, 0x96, 0x8E, 0x97, 0x8E, 0x98, 0x8E, 0x99, /* 0x20-0x23 */ + 0x8E, 0x9A, 0x8E, 0x9B, 0xB4, 0xF8, 0xD6, 0xA1, /* 0x24-0x27 */ + 0x8E, 0x9C, 0x8E, 0x9D, 0x8E, 0x9E, 0x8E, 0x9F, /* 0x28-0x2B */ + 0x8E, 0xA0, 0xCF, 0xAF, 0xB0, 0xEF, 0x8E, 0xA1, /* 0x2C-0x2F */ + 0x8E, 0xA2, 0xE0, 0xFC, 0x8E, 0xA3, 0x8E, 0xA4, /* 0x30-0x33 */ + 0x8E, 0xA5, 0x8E, 0xA6, 0x8E, 0xA7, 0xE1, 0xA1, /* 0x34-0x37 */ + 0xB3, 0xA3, 0x8E, 0xA8, 0x8E, 0xA9, 0xE0, 0xFD, /* 0x38-0x3B */ + 0xE0, 0xFE, 0xC3, 0xB1, 0x8E, 0xAA, 0x8E, 0xAB, /* 0x3C-0x3F */ + 0x8E, 0xAC, 0x8E, 0xAD, 0xC3, 0xDD, 0x8E, 0xAE, /* 0x40-0x43 */ + 0xE1, 0xA2, 0xB7, 0xF9, 0x8E, 0xAF, 0x8E, 0xB0, /* 0x44-0x47 */ + 0x8E, 0xB1, 0x8E, 0xB2, 0x8E, 0xB3, 0x8E, 0xB4, /* 0x48-0x4B */ + 0xBB, 0xCF, 0x8E, 0xB5, 0x8E, 0xB6, 0x8E, 0xB7, /* 0x4C-0x4F */ + 0x8E, 0xB8, 0x8E, 0xB9, 0x8E, 0xBA, 0x8E, 0xBB, /* 0x50-0x53 */ + 0xE1, 0xA3, 0xC4, 0xBB, 0x8E, 0xBC, 0x8E, 0xBD, /* 0x54-0x57 */ + 0x8E, 0xBE, 0x8E, 0xBF, 0x8E, 0xC0, 0xE1, 0xA4, /* 0x58-0x5B */ + 0x8E, 0xC1, 0x8E, 0xC2, 0xE1, 0xA5, 0x8E, 0xC3, /* 0x5C-0x5F */ + 0x8E, 0xC4, 0xE1, 0xA6, 0xB4, 0xB1, 0x8E, 0xC5, /* 0x60-0x63 */ + 0x8E, 0xC6, 0x8E, 0xC7, 0x8E, 0xC8, 0x8E, 0xC9, /* 0x64-0x67 */ + 0x8E, 0xCA, 0x8E, 0xCB, 0x8E, 0xCC, 0x8E, 0xCD, /* 0x68-0x6B */ + 0x8E, 0xCE, 0x8E, 0xCF, 0x8E, 0xD0, 0x8E, 0xD1, /* 0x6C-0x6F */ + 0x8E, 0xD2, 0x8E, 0xD3, 0xB8, 0xC9, 0xC6, 0xBD, /* 0x70-0x73 */ + 0xC4, 0xEA, 0x8E, 0xD4, 0xB2, 0xA2, 0x8E, 0xD5, /* 0x74-0x77 */ + 0xD0, 0xD2, 0x8E, 0xD6, 0xE7, 0xDB, 0xBB, 0xC3, /* 0x78-0x7B */ + 0xD3, 0xD7, 0xD3, 0xC4, 0x8E, 0xD7, 0xB9, 0xE3, /* 0x7C-0x7F */ + + 0xE2, 0xCF, 0x8E, 0xD8, 0x8E, 0xD9, 0x8E, 0xDA, /* 0x80-0x83 */ + 0xD7, 0xAF, 0x8E, 0xDB, 0xC7, 0xEC, 0xB1, 0xD3, /* 0x84-0x87 */ + 0x8E, 0xDC, 0x8E, 0xDD, 0xB4, 0xB2, 0xE2, 0xD1, /* 0x88-0x8B */ + 0x8E, 0xDE, 0x8E, 0xDF, 0x8E, 0xE0, 0xD0, 0xF2, /* 0x8C-0x8F */ + 0xC2, 0xAE, 0xE2, 0xD0, 0x8E, 0xE1, 0xBF, 0xE2, /* 0x90-0x93 */ + 0xD3, 0xA6, 0xB5, 0xD7, 0xE2, 0xD2, 0xB5, 0xEA, /* 0x94-0x97 */ + 0x8E, 0xE2, 0xC3, 0xED, 0xB8, 0xFD, 0x8E, 0xE3, /* 0x98-0x9B */ + 0xB8, 0xAE, 0x8E, 0xE4, 0xC5, 0xD3, 0xB7, 0xCF, /* 0x9C-0x9F */ + 0xE2, 0xD4, 0x8E, 0xE5, 0x8E, 0xE6, 0x8E, 0xE7, /* 0xA0-0xA3 */ + 0x8E, 0xE8, 0xE2, 0xD3, 0xB6, 0xC8, 0xD7, 0xF9, /* 0xA4-0xA7 */ + 0x8E, 0xE9, 0x8E, 0xEA, 0x8E, 0xEB, 0x8E, 0xEC, /* 0xA8-0xAB */ + 0x8E, 0xED, 0xCD, 0xA5, 0x8E, 0xEE, 0x8E, 0xEF, /* 0xAC-0xAF */ + 0x8E, 0xF0, 0x8E, 0xF1, 0x8E, 0xF2, 0xE2, 0xD8, /* 0xB0-0xB3 */ + 0x8E, 0xF3, 0xE2, 0xD6, 0xCA, 0xFC, 0xBF, 0xB5, /* 0xB4-0xB7 */ + 0xD3, 0xB9, 0xE2, 0xD5, 0x8E, 0xF4, 0x8E, 0xF5, /* 0xB8-0xBB */ + 0x8E, 0xF6, 0x8E, 0xF7, 0xE2, 0xD7, 0x8E, 0xF8, /* 0xBC-0xBF */ + 0x8E, 0xF9, 0x8E, 0xFA, 0x8E, 0xFB, 0x8E, 0xFC, /* 0xC0-0xC3 */ + 0x8E, 0xFD, 0x8E, 0xFE, 0x8F, 0x40, 0x8F, 0x41, /* 0xC4-0xC7 */ + 0x8F, 0x42, 0xC1, 0xAE, 0xC0, 0xC8, 0x8F, 0x43, /* 0xC8-0xCB */ + 0x8F, 0x44, 0x8F, 0x45, 0x8F, 0x46, 0x8F, 0x47, /* 0xCC-0xCF */ + 0x8F, 0x48, 0xE2, 0xDB, 0xE2, 0xDA, 0xC0, 0xAA, /* 0xD0-0xD3 */ + 0x8F, 0x49, 0x8F, 0x4A, 0xC1, 0xCE, 0x8F, 0x4B, /* 0xD4-0xD7 */ + 0x8F, 0x4C, 0x8F, 0x4D, 0x8F, 0x4E, 0xE2, 0xDC, /* 0xD8-0xDB */ + 0x8F, 0x4F, 0x8F, 0x50, 0x8F, 0x51, 0x8F, 0x52, /* 0xDC-0xDF */ + 0x8F, 0x53, 0x8F, 0x54, 0x8F, 0x55, 0x8F, 0x56, /* 0xE0-0xE3 */ + 0x8F, 0x57, 0x8F, 0x58, 0x8F, 0x59, 0x8F, 0x5A, /* 0xE4-0xE7 */ + 0xE2, 0xDD, 0x8F, 0x5B, 0xE2, 0xDE, 0x8F, 0x5C, /* 0xE8-0xEB */ + 0x8F, 0x5D, 0x8F, 0x5E, 0x8F, 0x5F, 0x8F, 0x60, /* 0xEC-0xEF */ + 0x8F, 0x61, 0x8F, 0x62, 0x8F, 0x63, 0x8F, 0x64, /* 0xF0-0xF3 */ + 0xDB, 0xC8, 0x8F, 0x65, 0xD1, 0xD3, 0xCD, 0xA2, /* 0xF4-0xF7 */ + 0x8F, 0x66, 0x8F, 0x67, 0xBD, 0xA8, 0x8F, 0x68, /* 0xF8-0xFB */ + 0x8F, 0x69, 0x8F, 0x6A, 0xDE, 0xC3, 0xD8, 0xA5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0xBF, 0xAA, 0xDB, 0xCD, 0xD2, 0xEC, 0xC6, 0xFA, /* 0x00-0x03 */ + 0xC5, 0xAA, 0x8F, 0x6B, 0x8F, 0x6C, 0x8F, 0x6D, /* 0x04-0x07 */ + 0xDE, 0xC4, 0x8F, 0x6E, 0xB1, 0xD7, 0xDF, 0xAE, /* 0x08-0x0B */ + 0x8F, 0x6F, 0x8F, 0x70, 0x8F, 0x71, 0xCA, 0xBD, /* 0x0C-0x0F */ + 0x8F, 0x72, 0xDF, 0xB1, 0x8F, 0x73, 0xB9, 0xAD, /* 0x10-0x13 */ + 0x8F, 0x74, 0xD2, 0xFD, 0x8F, 0x75, 0xB8, 0xA5, /* 0x14-0x17 */ + 0xBA, 0xEB, 0x8F, 0x76, 0x8F, 0x77, 0xB3, 0xDA, /* 0x18-0x1B */ + 0x8F, 0x78, 0x8F, 0x79, 0x8F, 0x7A, 0xB5, 0xDC, /* 0x1C-0x1F */ + 0xD5, 0xC5, 0x8F, 0x7B, 0x8F, 0x7C, 0x8F, 0x7D, /* 0x20-0x23 */ + 0x8F, 0x7E, 0xC3, 0xD6, 0xCF, 0xD2, 0xBB, 0xA1, /* 0x24-0x27 */ + 0x8F, 0x80, 0xE5, 0xF3, 0xE5, 0xF2, 0x8F, 0x81, /* 0x28-0x2B */ + 0x8F, 0x82, 0xE5, 0xF4, 0x8F, 0x83, 0xCD, 0xE4, /* 0x2C-0x2F */ + 0x8F, 0x84, 0xC8, 0xF5, 0x8F, 0x85, 0x8F, 0x86, /* 0x30-0x33 */ + 0x8F, 0x87, 0x8F, 0x88, 0x8F, 0x89, 0x8F, 0x8A, /* 0x34-0x37 */ + 0x8F, 0x8B, 0xB5, 0xAF, 0xC7, 0xBF, 0x8F, 0x8C, /* 0x38-0x3B */ + 0xE5, 0xF6, 0x8F, 0x8D, 0x8F, 0x8E, 0x8F, 0x8F, /* 0x3C-0x3F */ + 0xEC, 0xB0, 0x8F, 0x90, 0x8F, 0x91, 0x8F, 0x92, /* 0x40-0x43 */ + 0x8F, 0x93, 0x8F, 0x94, 0x8F, 0x95, 0x8F, 0x96, /* 0x44-0x47 */ + 0x8F, 0x97, 0x8F, 0x98, 0x8F, 0x99, 0x8F, 0x9A, /* 0x48-0x4B */ + 0x8F, 0x9B, 0x8F, 0x9C, 0x8F, 0x9D, 0x8F, 0x9E, /* 0x4C-0x4F */ + 0xE5, 0xE6, 0x8F, 0x9F, 0xB9, 0xE9, 0xB5, 0xB1, /* 0x50-0x53 */ + 0x8F, 0xA0, 0xC2, 0xBC, 0xE5, 0xE8, 0xE5, 0xE7, /* 0x54-0x57 */ + 0xE5, 0xE9, 0x8F, 0xA1, 0x8F, 0xA2, 0x8F, 0xA3, /* 0x58-0x5B */ + 0x8F, 0xA4, 0xD2, 0xCD, 0x8F, 0xA5, 0x8F, 0xA6, /* 0x5C-0x5F */ + 0x8F, 0xA7, 0xE1, 0xEA, 0xD0, 0xCE, 0x8F, 0xA8, /* 0x60-0x63 */ + 0xCD, 0xAE, 0x8F, 0xA9, 0xD1, 0xE5, 0x8F, 0xAA, /* 0x64-0x67 */ + 0x8F, 0xAB, 0xB2, 0xCA, 0xB1, 0xEB, 0x8F, 0xAC, /* 0x68-0x6B */ + 0xB1, 0xF2, 0xC5, 0xED, 0x8F, 0xAD, 0x8F, 0xAE, /* 0x6C-0x6F */ + 0xD5, 0xC3, 0xD3, 0xB0, 0x8F, 0xAF, 0xE1, 0xDC, /* 0x70-0x73 */ + 0x8F, 0xB0, 0x8F, 0xB1, 0x8F, 0xB2, 0xE1, 0xDD, /* 0x74-0x77 */ + 0x8F, 0xB3, 0xD2, 0xDB, 0x8F, 0xB4, 0xB3, 0xB9, /* 0x78-0x7B */ + 0xB1, 0xCB, 0x8F, 0xB5, 0x8F, 0xB6, 0x8F, 0xB7, /* 0x7C-0x7F */ + + 0xCD, 0xF9, 0xD5, 0xF7, 0xE1, 0xDE, 0x8F, 0xB8, /* 0x80-0x83 */ + 0xBE, 0xB6, 0xB4, 0xFD, 0x8F, 0xB9, 0xE1, 0xDF, /* 0x84-0x87 */ + 0xBA, 0xDC, 0xE1, 0xE0, 0xBB, 0xB2, 0xC2, 0xC9, /* 0x88-0x8B */ + 0xE1, 0xE1, 0x8F, 0xBA, 0x8F, 0xBB, 0x8F, 0xBC, /* 0x8C-0x8F */ + 0xD0, 0xEC, 0x8F, 0xBD, 0xCD, 0xBD, 0x8F, 0xBE, /* 0x90-0x93 */ + 0x8F, 0xBF, 0xE1, 0xE2, 0x8F, 0xC0, 0xB5, 0xC3, /* 0x94-0x97 */ + 0xC5, 0xC7, 0xE1, 0xE3, 0x8F, 0xC1, 0x8F, 0xC2, /* 0x98-0x9B */ + 0xE1, 0xE4, 0x8F, 0xC3, 0x8F, 0xC4, 0x8F, 0xC5, /* 0x9C-0x9F */ + 0x8F, 0xC6, 0xD3, 0xF9, 0x8F, 0xC7, 0x8F, 0xC8, /* 0xA0-0xA3 */ + 0x8F, 0xC9, 0x8F, 0xCA, 0x8F, 0xCB, 0x8F, 0xCC, /* 0xA4-0xA7 */ + 0xE1, 0xE5, 0x8F, 0xCD, 0xD1, 0xAD, 0x8F, 0xCE, /* 0xA8-0xAB */ + 0x8F, 0xCF, 0xE1, 0xE6, 0xCE, 0xA2, 0x8F, 0xD0, /* 0xAC-0xAF */ + 0x8F, 0xD1, 0x8F, 0xD2, 0x8F, 0xD3, 0x8F, 0xD4, /* 0xB0-0xB3 */ + 0x8F, 0xD5, 0xE1, 0xE7, 0x8F, 0xD6, 0xB5, 0xC2, /* 0xB4-0xB7 */ + 0x8F, 0xD7, 0x8F, 0xD8, 0x8F, 0xD9, 0x8F, 0xDA, /* 0xB8-0xBB */ + 0xE1, 0xE8, 0xBB, 0xD5, 0x8F, 0xDB, 0x8F, 0xDC, /* 0xBC-0xBF */ + 0x8F, 0xDD, 0x8F, 0xDE, 0x8F, 0xDF, 0xD0, 0xC4, /* 0xC0-0xC3 */ + 0xE2, 0xE0, 0xB1, 0xD8, 0xD2, 0xE4, 0x8F, 0xE0, /* 0xC4-0xC7 */ + 0x8F, 0xE1, 0xE2, 0xE1, 0x8F, 0xE2, 0x8F, 0xE3, /* 0xC8-0xCB */ + 0xBC, 0xC9, 0xC8, 0xCC, 0x8F, 0xE4, 0xE2, 0xE3, /* 0xCC-0xCF */ + 0xEC, 0xFE, 0xEC, 0xFD, 0xDF, 0xAF, 0x8F, 0xE5, /* 0xD0-0xD3 */ + 0x8F, 0xE6, 0x8F, 0xE7, 0xE2, 0xE2, 0xD6, 0xBE, /* 0xD4-0xD7 */ + 0xCD, 0xFC, 0xC3, 0xA6, 0x8F, 0xE8, 0x8F, 0xE9, /* 0xD8-0xDB */ + 0x8F, 0xEA, 0xE3, 0xC3, 0x8F, 0xEB, 0x8F, 0xEC, /* 0xDC-0xDF */ + 0xD6, 0xD2, 0xE2, 0xE7, 0x8F, 0xED, 0x8F, 0xEE, /* 0xE0-0xE3 */ + 0xE2, 0xE8, 0x8F, 0xEF, 0x8F, 0xF0, 0xD3, 0xC7, /* 0xE4-0xE7 */ + 0x8F, 0xF1, 0x8F, 0xF2, 0xE2, 0xEC, 0xBF, 0xEC, /* 0xE8-0xEB */ + 0x8F, 0xF3, 0xE2, 0xED, 0xE2, 0xE5, 0x8F, 0xF4, /* 0xEC-0xEF */ + 0x8F, 0xF5, 0xB3, 0xC0, 0x8F, 0xF6, 0x8F, 0xF7, /* 0xF0-0xF3 */ + 0x8F, 0xF8, 0xC4, 0xEE, 0x8F, 0xF9, 0x8F, 0xFA, /* 0xF4-0xF7 */ + 0xE2, 0xEE, 0x8F, 0xFB, 0x8F, 0xFC, 0xD0, 0xC3, /* 0xF8-0xFB */ + 0x8F, 0xFD, 0xBA, 0xF6, 0xE2, 0xE9, 0xB7, 0xDE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0xBB, 0xB3, 0xCC, 0xAC, 0xCB, 0xCB, 0xE2, 0xE4, /* 0x00-0x03 */ + 0xE2, 0xE6, 0xE2, 0xEA, 0xE2, 0xEB, 0x8F, 0xFE, /* 0x04-0x07 */ + 0x90, 0x40, 0x90, 0x41, 0xE2, 0xF7, 0x90, 0x42, /* 0x08-0x0B */ + 0x90, 0x43, 0xE2, 0xF4, 0xD4, 0xF5, 0xE2, 0xF3, /* 0x0C-0x0F */ + 0x90, 0x44, 0x90, 0x45, 0xC5, 0xAD, 0x90, 0x46, /* 0x10-0x13 */ + 0xD5, 0xFA, 0xC5, 0xC2, 0xB2, 0xC0, 0x90, 0x47, /* 0x14-0x17 */ + 0x90, 0x48, 0xE2, 0xEF, 0x90, 0x49, 0xE2, 0xF2, /* 0x18-0x1B */ + 0xC1, 0xAF, 0xCB, 0xBC, 0x90, 0x4A, 0x90, 0x4B, /* 0x1C-0x1F */ + 0xB5, 0xA1, 0xE2, 0xF9, 0x90, 0x4C, 0x90, 0x4D, /* 0x20-0x23 */ + 0x90, 0x4E, 0xBC, 0xB1, 0xE2, 0xF1, 0xD0, 0xD4, /* 0x24-0x27 */ + 0xD4, 0xB9, 0xE2, 0xF5, 0xB9, 0xD6, 0xE2, 0xF6, /* 0x28-0x2B */ + 0x90, 0x4F, 0x90, 0x50, 0x90, 0x51, 0xC7, 0xD3, /* 0x2C-0x2F */ + 0x90, 0x52, 0x90, 0x53, 0x90, 0x54, 0x90, 0x55, /* 0x30-0x33 */ + 0x90, 0x56, 0xE2, 0xF0, 0x90, 0x57, 0x90, 0x58, /* 0x34-0x37 */ + 0x90, 0x59, 0x90, 0x5A, 0x90, 0x5B, 0xD7, 0xDC, /* 0x38-0x3B */ + 0xED, 0xA1, 0x90, 0x5C, 0x90, 0x5D, 0xE2, 0xF8, /* 0x3C-0x3F */ + 0x90, 0x5E, 0xED, 0xA5, 0xE2, 0xFE, 0xCA, 0xD1, /* 0x40-0x43 */ + 0x90, 0x5F, 0x90, 0x60, 0x90, 0x61, 0x90, 0x62, /* 0x44-0x47 */ + 0x90, 0x63, 0x90, 0x64, 0x90, 0x65, 0xC1, 0xB5, /* 0x48-0x4B */ + 0x90, 0x66, 0xBB, 0xD0, 0x90, 0x67, 0x90, 0x68, /* 0x4C-0x4F */ + 0xBF, 0xD6, 0x90, 0x69, 0xBA, 0xE3, 0x90, 0x6A, /* 0x50-0x53 */ + 0x90, 0x6B, 0xCB, 0xA1, 0x90, 0x6C, 0x90, 0x6D, /* 0x54-0x57 */ + 0x90, 0x6E, 0xED, 0xA6, 0xED, 0xA3, 0x90, 0x6F, /* 0x58-0x5B */ + 0x90, 0x70, 0xED, 0xA2, 0x90, 0x71, 0x90, 0x72, /* 0x5C-0x5F */ + 0x90, 0x73, 0x90, 0x74, 0xBB, 0xD6, 0xED, 0xA7, /* 0x60-0x63 */ + 0xD0, 0xF4, 0x90, 0x75, 0x90, 0x76, 0xED, 0xA4, /* 0x64-0x67 */ + 0xBA, 0xDE, 0xB6, 0xF7, 0xE3, 0xA1, 0xB6, 0xB2, /* 0x68-0x6B */ + 0xCC, 0xF1, 0xB9, 0xA7, 0x90, 0x77, 0xCF, 0xA2, /* 0x6C-0x6F */ + 0xC7, 0xA1, 0x90, 0x78, 0x90, 0x79, 0xBF, 0xD2, /* 0x70-0x73 */ + 0x90, 0x7A, 0x90, 0x7B, 0xB6, 0xF1, 0x90, 0x7C, /* 0x74-0x77 */ + 0xE2, 0xFA, 0xE2, 0xFB, 0xE2, 0xFD, 0xE2, 0xFC, /* 0x78-0x7B */ + 0xC4, 0xD5, 0xE3, 0xA2, 0x90, 0x7D, 0xD3, 0xC1, /* 0x7C-0x7F */ + + 0x90, 0x7E, 0x90, 0x80, 0x90, 0x81, 0xE3, 0xA7, /* 0x80-0x83 */ + 0xC7, 0xC4, 0x90, 0x82, 0x90, 0x83, 0x90, 0x84, /* 0x84-0x87 */ + 0x90, 0x85, 0xCF, 0xA4, 0x90, 0x86, 0x90, 0x87, /* 0x88-0x8B */ + 0xE3, 0xA9, 0xBA, 0xB7, 0x90, 0x88, 0x90, 0x89, /* 0x8C-0x8F */ + 0x90, 0x8A, 0x90, 0x8B, 0xE3, 0xA8, 0x90, 0x8C, /* 0x90-0x93 */ + 0xBB, 0xDA, 0x90, 0x8D, 0xE3, 0xA3, 0x90, 0x8E, /* 0x94-0x97 */ + 0x90, 0x8F, 0x90, 0x90, 0xE3, 0xA4, 0xE3, 0xAA, /* 0x98-0x9B */ + 0x90, 0x91, 0xE3, 0xA6, 0x90, 0x92, 0xCE, 0xF2, /* 0x9C-0x9F */ + 0xD3, 0xC6, 0x90, 0x93, 0x90, 0x94, 0xBB, 0xBC, /* 0xA0-0xA3 */ + 0x90, 0x95, 0x90, 0x96, 0xD4, 0xC3, 0x90, 0x97, /* 0xA4-0xA7 */ + 0xC4, 0xFA, 0x90, 0x98, 0x90, 0x99, 0xED, 0xA8, /* 0xA8-0xAB */ + 0xD0, 0xFC, 0xE3, 0xA5, 0x90, 0x9A, 0xC3, 0xF5, /* 0xAC-0xAF */ + 0x90, 0x9B, 0xE3, 0xAD, 0xB1, 0xAF, 0x90, 0x9C, /* 0xB0-0xB3 */ + 0xE3, 0xB2, 0x90, 0x9D, 0x90, 0x9E, 0x90, 0x9F, /* 0xB4-0xB7 */ + 0xBC, 0xC2, 0x90, 0xA0, 0x90, 0xA1, 0xE3, 0xAC, /* 0xB8-0xBB */ + 0xB5, 0xBF, 0x90, 0xA2, 0x90, 0xA3, 0x90, 0xA4, /* 0xBC-0xBF */ + 0x90, 0xA5, 0x90, 0xA6, 0x90, 0xA7, 0x90, 0xA8, /* 0xC0-0xC3 */ + 0x90, 0xA9, 0xC7, 0xE9, 0xE3, 0xB0, 0x90, 0xAA, /* 0xC4-0xC7 */ + 0x90, 0xAB, 0x90, 0xAC, 0xBE, 0xAA, 0xCD, 0xEF, /* 0xC8-0xCB */ + 0x90, 0xAD, 0x90, 0xAE, 0x90, 0xAF, 0x90, 0xB0, /* 0xCC-0xCF */ + 0x90, 0xB1, 0xBB, 0xF3, 0x90, 0xB2, 0x90, 0xB3, /* 0xD0-0xD3 */ + 0x90, 0xB4, 0xCC, 0xE8, 0x90, 0xB5, 0x90, 0xB6, /* 0xD4-0xD7 */ + 0xE3, 0xAF, 0x90, 0xB7, 0xE3, 0xB1, 0x90, 0xB8, /* 0xD8-0xDB */ + 0xCF, 0xA7, 0xE3, 0xAE, 0x90, 0xB9, 0xCE, 0xA9, /* 0xDC-0xDF */ + 0xBB, 0xDD, 0x90, 0xBA, 0x90, 0xBB, 0x90, 0xBC, /* 0xE0-0xE3 */ + 0x90, 0xBD, 0x90, 0xBE, 0xB5, 0xEB, 0xBE, 0xE5, /* 0xE4-0xE7 */ + 0xB2, 0xD2, 0xB3, 0xCD, 0x90, 0xBF, 0xB1, 0xB9, /* 0xE8-0xEB */ + 0xE3, 0xAB, 0xB2, 0xD1, 0xB5, 0xAC, 0xB9, 0xDF, /* 0xEC-0xEF */ + 0xB6, 0xE8, 0x90, 0xC0, 0x90, 0xC1, 0xCF, 0xEB, /* 0xF0-0xF3 */ + 0xE3, 0xB7, 0x90, 0xC2, 0xBB, 0xCC, 0x90, 0xC3, /* 0xF4-0xF7 */ + 0x90, 0xC4, 0xC8, 0xC7, 0xD0, 0xCA, 0x90, 0xC5, /* 0xF8-0xFB */ + 0x90, 0xC6, 0x90, 0xC7, 0x90, 0xC8, 0x90, 0xC9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_61[512] = { + 0xE3, 0xB8, 0xB3, 0xEE, 0x90, 0xCA, 0x90, 0xCB, /* 0x00-0x03 */ + 0x90, 0xCC, 0x90, 0xCD, 0xED, 0xA9, 0x90, 0xCE, /* 0x04-0x07 */ + 0xD3, 0xFA, 0xD3, 0xE4, 0x90, 0xCF, 0x90, 0xD0, /* 0x08-0x0B */ + 0x90, 0xD1, 0xED, 0xAA, 0xE3, 0xB9, 0xD2, 0xE2, /* 0x0C-0x0F */ + 0x90, 0xD2, 0x90, 0xD3, 0x90, 0xD4, 0x90, 0xD5, /* 0x10-0x13 */ + 0x90, 0xD6, 0xE3, 0xB5, 0x90, 0xD7, 0x90, 0xD8, /* 0x14-0x17 */ + 0x90, 0xD9, 0x90, 0xDA, 0xD3, 0xDE, 0x90, 0xDB, /* 0x18-0x1B */ + 0x90, 0xDC, 0x90, 0xDD, 0x90, 0xDE, 0xB8, 0xD0, /* 0x1C-0x1F */ + 0xE3, 0xB3, 0x90, 0xDF, 0x90, 0xE0, 0xE3, 0xB6, /* 0x20-0x23 */ + 0xB7, 0xDF, 0x90, 0xE1, 0xE3, 0xB4, 0xC0, 0xA2, /* 0x24-0x27 */ + 0x90, 0xE2, 0x90, 0xE3, 0x90, 0xE4, 0xE3, 0xBA, /* 0x28-0x2B */ + 0x90, 0xE5, 0x90, 0xE6, 0x90, 0xE7, 0x90, 0xE8, /* 0x2C-0x2F */ + 0x90, 0xE9, 0x90, 0xEA, 0x90, 0xEB, 0x90, 0xEC, /* 0x30-0x33 */ + 0x90, 0xED, 0x90, 0xEE, 0x90, 0xEF, 0x90, 0xF0, /* 0x34-0x37 */ + 0x90, 0xF1, 0x90, 0xF2, 0x90, 0xF3, 0x90, 0xF4, /* 0x38-0x3B */ + 0x90, 0xF5, 0x90, 0xF6, 0x90, 0xF7, 0xD4, 0xB8, /* 0x3C-0x3F */ + 0x90, 0xF8, 0x90, 0xF9, 0x90, 0xFA, 0x90, 0xFB, /* 0x40-0x43 */ + 0x90, 0xFC, 0x90, 0xFD, 0x90, 0xFE, 0x91, 0x40, /* 0x44-0x47 */ + 0xB4, 0xC8, 0x91, 0x41, 0xE3, 0xBB, 0x91, 0x42, /* 0x48-0x4B */ + 0xBB, 0xC5, 0x91, 0x43, 0xC9, 0xF7, 0x91, 0x44, /* 0x4C-0x4F */ + 0x91, 0x45, 0xC9, 0xE5, 0x91, 0x46, 0x91, 0x47, /* 0x50-0x53 */ + 0x91, 0x48, 0xC4, 0xBD, 0x91, 0x49, 0x91, 0x4A, /* 0x54-0x57 */ + 0x91, 0x4B, 0x91, 0x4C, 0x91, 0x4D, 0x91, 0x4E, /* 0x58-0x5B */ + 0x91, 0x4F, 0xED, 0xAB, 0x91, 0x50, 0x91, 0x51, /* 0x5C-0x5F */ + 0x91, 0x52, 0x91, 0x53, 0xC2, 0xFD, 0x91, 0x54, /* 0x60-0x63 */ + 0x91, 0x55, 0x91, 0x56, 0x91, 0x57, 0xBB, 0xDB, /* 0x64-0x67 */ + 0xBF, 0xAE, 0x91, 0x58, 0x91, 0x59, 0x91, 0x5A, /* 0x68-0x6B */ + 0x91, 0x5B, 0x91, 0x5C, 0x91, 0x5D, 0x91, 0x5E, /* 0x6C-0x6F */ + 0xCE, 0xBF, 0x91, 0x5F, 0x91, 0x60, 0x91, 0x61, /* 0x70-0x73 */ + 0x91, 0x62, 0xE3, 0xBC, 0x91, 0x63, 0xBF, 0xB6, /* 0x74-0x77 */ + 0x91, 0x64, 0x91, 0x65, 0x91, 0x66, 0x91, 0x67, /* 0x78-0x7B */ + 0x91, 0x68, 0x91, 0x69, 0x91, 0x6A, 0x91, 0x6B, /* 0x7C-0x7F */ + + 0x91, 0x6C, 0x91, 0x6D, 0x91, 0x6E, 0x91, 0x6F, /* 0x80-0x83 */ + 0x91, 0x70, 0x91, 0x71, 0x91, 0x72, 0x91, 0x73, /* 0x84-0x87 */ + 0x91, 0x74, 0x91, 0x75, 0x91, 0x76, 0xB1, 0xEF, /* 0x88-0x8B */ + 0x91, 0x77, 0x91, 0x78, 0xD4, 0xF7, 0x91, 0x79, /* 0x8C-0x8F */ + 0x91, 0x7A, 0x91, 0x7B, 0x91, 0x7C, 0x91, 0x7D, /* 0x90-0x93 */ + 0xE3, 0xBE, 0x91, 0x7E, 0x91, 0x80, 0x91, 0x81, /* 0x94-0x97 */ + 0x91, 0x82, 0x91, 0x83, 0x91, 0x84, 0x91, 0x85, /* 0x98-0x9B */ + 0x91, 0x86, 0xED, 0xAD, 0x91, 0x87, 0x91, 0x88, /* 0x9C-0x9F */ + 0x91, 0x89, 0x91, 0x8A, 0x91, 0x8B, 0x91, 0x8C, /* 0xA0-0xA3 */ + 0x91, 0x8D, 0x91, 0x8E, 0x91, 0x8F, 0xE3, 0xBF, /* 0xA4-0xA7 */ + 0xBA, 0xA9, 0xED, 0xAC, 0x91, 0x90, 0x91, 0x91, /* 0xA8-0xAB */ + 0xE3, 0xBD, 0x91, 0x92, 0x91, 0x93, 0x91, 0x94, /* 0xAC-0xAF */ + 0x91, 0x95, 0x91, 0x96, 0x91, 0x97, 0x91, 0x98, /* 0xB0-0xB3 */ + 0x91, 0x99, 0x91, 0x9A, 0x91, 0x9B, 0xE3, 0xC0, /* 0xB4-0xB7 */ + 0x91, 0x9C, 0x91, 0x9D, 0x91, 0x9E, 0x91, 0x9F, /* 0xB8-0xBB */ + 0x91, 0xA0, 0x91, 0xA1, 0xBA, 0xB6, 0x91, 0xA2, /* 0xBC-0xBF */ + 0x91, 0xA3, 0x91, 0xA4, 0xB6, 0xAE, 0x91, 0xA5, /* 0xC0-0xC3 */ + 0x91, 0xA6, 0x91, 0xA7, 0x91, 0xA8, 0x91, 0xA9, /* 0xC4-0xC7 */ + 0xD0, 0xB8, 0x91, 0xAA, 0xB0, 0xC3, 0xED, 0xAE, /* 0xC8-0xCB */ + 0x91, 0xAB, 0x91, 0xAC, 0x91, 0xAD, 0x91, 0xAE, /* 0xCC-0xCF */ + 0x91, 0xAF, 0xED, 0xAF, 0xC0, 0xC1, 0x91, 0xB0, /* 0xD0-0xD3 */ + 0xE3, 0xC1, 0x91, 0xB1, 0x91, 0xB2, 0x91, 0xB3, /* 0xD4-0xD7 */ + 0x91, 0xB4, 0x91, 0xB5, 0x91, 0xB6, 0x91, 0xB7, /* 0xD8-0xDB */ + 0x91, 0xB8, 0x91, 0xB9, 0x91, 0xBA, 0x91, 0xBB, /* 0xDC-0xDF */ + 0x91, 0xBC, 0x91, 0xBD, 0x91, 0xBE, 0x91, 0xBF, /* 0xE0-0xE3 */ + 0x91, 0xC0, 0x91, 0xC1, 0xC5, 0xB3, 0x91, 0xC2, /* 0xE4-0xE7 */ + 0x91, 0xC3, 0x91, 0xC4, 0x91, 0xC5, 0x91, 0xC6, /* 0xE8-0xEB */ + 0x91, 0xC7, 0x91, 0xC8, 0x91, 0xC9, 0x91, 0xCA, /* 0xEC-0xEF */ + 0x91, 0xCB, 0x91, 0xCC, 0x91, 0xCD, 0x91, 0xCE, /* 0xF0-0xF3 */ + 0x91, 0xCF, 0xE3, 0xC2, 0x91, 0xD0, 0x91, 0xD1, /* 0xF4-0xF7 */ + 0x91, 0xD2, 0x91, 0xD3, 0x91, 0xD4, 0x91, 0xD5, /* 0xF8-0xFB */ + 0x91, 0xD6, 0x91, 0xD7, 0x91, 0xD8, 0xDC, 0xB2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0x91, 0xD9, 0x91, 0xDA, 0x91, 0xDB, 0x91, 0xDC, /* 0x00-0x03 */ + 0x91, 0xDD, 0x91, 0xDE, 0xED, 0xB0, 0x91, 0xDF, /* 0x04-0x07 */ + 0xB8, 0xEA, 0x91, 0xE0, 0xCE, 0xEC, 0xEA, 0xA7, /* 0x08-0x0B */ + 0xD0, 0xE7, 0xCA, 0xF9, 0xC8, 0xD6, 0xCF, 0xB7, /* 0x0C-0x0F */ + 0xB3, 0xC9, 0xCE, 0xD2, 0xBD, 0xE4, 0x91, 0xE1, /* 0x10-0x13 */ + 0x91, 0xE2, 0xE3, 0xDE, 0xBB, 0xF2, 0xEA, 0xA8, /* 0x14-0x17 */ + 0xD5, 0xBD, 0x91, 0xE3, 0xC6, 0xDD, 0xEA, 0xA9, /* 0x18-0x1B */ + 0x91, 0xE4, 0x91, 0xE5, 0x91, 0xE6, 0xEA, 0xAA, /* 0x1C-0x1F */ + 0x91, 0xE7, 0xEA, 0xAC, 0xEA, 0xAB, 0x91, 0xE8, /* 0x20-0x23 */ + 0xEA, 0xAE, 0xEA, 0xAD, 0x91, 0xE9, 0x91, 0xEA, /* 0x24-0x27 */ + 0x91, 0xEB, 0x91, 0xEC, 0xBD, 0xD8, 0x91, 0xED, /* 0x28-0x2B */ + 0xEA, 0xAF, 0x91, 0xEE, 0xC2, 0xBE, 0x91, 0xEF, /* 0x2C-0x2F */ + 0x91, 0xF0, 0x91, 0xF1, 0x91, 0xF2, 0xB4, 0xC1, /* 0x30-0x33 */ + 0xB4, 0xF7, 0x91, 0xF3, 0x91, 0xF4, 0xBB, 0xA7, /* 0x34-0x37 */ + 0x91, 0xF5, 0x91, 0xF6, 0x91, 0xF7, 0x91, 0xF8, /* 0x38-0x3B */ + 0x91, 0xF9, 0xEC, 0xE6, 0xEC, 0xE5, 0xB7, 0xBF, /* 0x3C-0x3F */ + 0xCB, 0xF9, 0xB1, 0xE2, 0x91, 0xFA, 0xEC, 0xE7, /* 0x40-0x43 */ + 0x91, 0xFB, 0x91, 0xFC, 0x91, 0xFD, 0xC9, 0xC8, /* 0x44-0x47 */ + 0xEC, 0xE8, 0xEC, 0xE9, 0x91, 0xFE, 0xCA, 0xD6, /* 0x48-0x4B */ + 0xDE, 0xD0, 0xB2, 0xC5, 0xD4, 0xFA, 0x92, 0x40, /* 0x4C-0x4F */ + 0x92, 0x41, 0xC6, 0xCB, 0xB0, 0xC7, 0xB4, 0xF2, /* 0x50-0x53 */ + 0xC8, 0xD3, 0x92, 0x42, 0x92, 0x43, 0x92, 0x44, /* 0x54-0x57 */ + 0xCD, 0xD0, 0x92, 0x45, 0x92, 0x46, 0xBF, 0xB8, /* 0x58-0x5B */ + 0x92, 0x47, 0x92, 0x48, 0x92, 0x49, 0x92, 0x4A, /* 0x5C-0x5F */ + 0x92, 0x4B, 0x92, 0x4C, 0x92, 0x4D, 0xBF, 0xDB, /* 0x60-0x63 */ + 0x92, 0x4E, 0x92, 0x4F, 0xC7, 0xA4, 0xD6, 0xB4, /* 0x64-0x67 */ + 0x92, 0x50, 0xC0, 0xA9, 0xDE, 0xD1, 0xC9, 0xA8, /* 0x68-0x6B */ + 0xD1, 0xEF, 0xC5, 0xA4, 0xB0, 0xE7, 0xB3, 0xB6, /* 0x6C-0x6F */ + 0xC8, 0xC5, 0x92, 0x51, 0x92, 0x52, 0xB0, 0xE2, /* 0x70-0x73 */ + 0x92, 0x53, 0x92, 0x54, 0xB7, 0xF6, 0x92, 0x55, /* 0x74-0x77 */ + 0x92, 0x56, 0xC5, 0xFA, 0x92, 0x57, 0x92, 0x58, /* 0x78-0x7B */ + 0xB6, 0xF3, 0x92, 0x59, 0xD5, 0xD2, 0xB3, 0xD0, /* 0x7C-0x7F */ + + 0xBC, 0xBC, 0x92, 0x5A, 0x92, 0x5B, 0x92, 0x5C, /* 0x80-0x83 */ + 0xB3, 0xAD, 0x92, 0x5D, 0x92, 0x5E, 0x92, 0x5F, /* 0x84-0x87 */ + 0x92, 0x60, 0xBE, 0xF1, 0xB0, 0xD1, 0x92, 0x61, /* 0x88-0x8B */ + 0x92, 0x62, 0x92, 0x63, 0x92, 0x64, 0x92, 0x65, /* 0x8C-0x8F */ + 0x92, 0x66, 0xD2, 0xD6, 0xCA, 0xE3, 0xD7, 0xA5, /* 0x90-0x93 */ + 0x92, 0x67, 0xCD, 0xB6, 0xB6, 0xB6, 0xBF, 0xB9, /* 0x94-0x97 */ + 0xD5, 0xDB, 0x92, 0x68, 0xB8, 0xA7, 0xC5, 0xD7, /* 0x98-0x9B */ + 0x92, 0x69, 0x92, 0x6A, 0x92, 0x6B, 0xDE, 0xD2, /* 0x9C-0x9F */ + 0xBF, 0xD9, 0xC2, 0xD5, 0xC7, 0xC0, 0x92, 0x6C, /* 0xA0-0xA3 */ + 0xBB, 0xA4, 0xB1, 0xA8, 0x92, 0x6D, 0x92, 0x6E, /* 0xA4-0xA7 */ + 0xC5, 0xEA, 0x92, 0x6F, 0x92, 0x70, 0xC5, 0xFB, /* 0xA8-0xAB */ + 0xCC, 0xA7, 0x92, 0x71, 0x92, 0x72, 0x92, 0x73, /* 0xAC-0xAF */ + 0x92, 0x74, 0xB1, 0xA7, 0x92, 0x75, 0x92, 0x76, /* 0xB0-0xB3 */ + 0x92, 0x77, 0xB5, 0xD6, 0x92, 0x78, 0x92, 0x79, /* 0xB4-0xB7 */ + 0x92, 0x7A, 0xC4, 0xA8, 0x92, 0x7B, 0xDE, 0xD3, /* 0xB8-0xBB */ + 0xD1, 0xBA, 0xB3, 0xE9, 0x92, 0x7C, 0xC3, 0xF2, /* 0xBC-0xBF */ + 0x92, 0x7D, 0x92, 0x7E, 0xB7, 0xF7, 0x92, 0x80, /* 0xC0-0xC3 */ + 0xD6, 0xF4, 0xB5, 0xA3, 0xB2, 0xF0, 0xC4, 0xB4, /* 0xC4-0xC7 */ + 0xC4, 0xE9, 0xC0, 0xAD, 0xDE, 0xD4, 0x92, 0x81, /* 0xC8-0xCB */ + 0xB0, 0xE8, 0xC5, 0xC4, 0xC1, 0xE0, 0x92, 0x82, /* 0xCC-0xCF */ + 0xB9, 0xD5, 0x92, 0x83, 0xBE, 0xDC, 0xCD, 0xD8, /* 0xD0-0xD3 */ + 0xB0, 0xCE, 0x92, 0x84, 0xCD, 0xCF, 0xDE, 0xD6, /* 0xD4-0xD7 */ + 0xBE, 0xD0, 0xD7, 0xBE, 0xDE, 0xD5, 0xD5, 0xD0, /* 0xD8-0xDB */ + 0xB0, 0xDD, 0x92, 0x85, 0x92, 0x86, 0xC4, 0xE2, /* 0xDC-0xDF */ + 0x92, 0x87, 0x92, 0x88, 0xC2, 0xA3, 0xBC, 0xF0, /* 0xE0-0xE3 */ + 0x92, 0x89, 0xD3, 0xB5, 0xC0, 0xB9, 0xC5, 0xA1, /* 0xE4-0xE7 */ + 0xB2, 0xA6, 0xD4, 0xF1, 0x92, 0x8A, 0x92, 0x8B, /* 0xE8-0xEB */ + 0xC0, 0xA8, 0xCA, 0xC3, 0xDE, 0xD7, 0xD5, 0xFC, /* 0xEC-0xEF */ + 0x92, 0x8C, 0xB9, 0xB0, 0x92, 0x8D, 0xC8, 0xAD, /* 0xF0-0xF3 */ + 0xCB, 0xA9, 0x92, 0x8E, 0xDE, 0xD9, 0xBF, 0xBD, /* 0xF4-0xF7 */ + 0x92, 0x8F, 0x92, 0x90, 0x92, 0x91, 0x92, 0x92, /* 0xF8-0xFB */ + 0xC6, 0xB4, 0xD7, 0xA7, 0xCA, 0xB0, 0xC4, 0xC3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0x92, 0x93, 0xB3, 0xD6, 0xB9, 0xD2, 0x92, 0x94, /* 0x00-0x03 */ + 0x92, 0x95, 0x92, 0x96, 0x92, 0x97, 0xD6, 0xB8, /* 0x04-0x07 */ + 0xEA, 0xFC, 0xB0, 0xB4, 0x92, 0x98, 0x92, 0x99, /* 0x08-0x0B */ + 0x92, 0x9A, 0x92, 0x9B, 0xBF, 0xE6, 0x92, 0x9C, /* 0x0C-0x0F */ + 0x92, 0x9D, 0xCC, 0xF4, 0x92, 0x9E, 0x92, 0x9F, /* 0x10-0x13 */ + 0x92, 0xA0, 0x92, 0xA1, 0xCD, 0xDA, 0x92, 0xA2, /* 0x14-0x17 */ + 0x92, 0xA3, 0x92, 0xA4, 0xD6, 0xBF, 0xC2, 0xCE, /* 0x18-0x1B */ + 0x92, 0xA5, 0xCE, 0xCE, 0xCC, 0xA2, 0xD0, 0xAE, /* 0x1C-0x1F */ + 0xC4, 0xD3, 0xB5, 0xB2, 0xDE, 0xD8, 0xD5, 0xF5, /* 0x20-0x23 */ + 0xBC, 0xB7, 0xBB, 0xD3, 0x92, 0xA6, 0x92, 0xA7, /* 0x24-0x27 */ + 0xB0, 0xA4, 0x92, 0xA8, 0xC5, 0xB2, 0xB4, 0xEC, /* 0x28-0x2B */ + 0x92, 0xA9, 0x92, 0xAA, 0x92, 0xAB, 0xD5, 0xF1, /* 0x2C-0x2F */ + 0x92, 0xAC, 0x92, 0xAD, 0xEA, 0xFD, 0x92, 0xAE, /* 0x30-0x33 */ + 0x92, 0xAF, 0x92, 0xB0, 0x92, 0xB1, 0x92, 0xB2, /* 0x34-0x37 */ + 0x92, 0xB3, 0xDE, 0xDA, 0xCD, 0xA6, 0x92, 0xB4, /* 0x38-0x3B */ + 0x92, 0xB5, 0xCD, 0xEC, 0x92, 0xB6, 0x92, 0xB7, /* 0x3C-0x3F */ + 0x92, 0xB8, 0x92, 0xB9, 0xCE, 0xE6, 0xDE, 0xDC, /* 0x40-0x43 */ + 0x92, 0xBA, 0xCD, 0xB1, 0xC0, 0xA6, 0x92, 0xBB, /* 0x44-0x47 */ + 0x92, 0xBC, 0xD7, 0xBD, 0x92, 0xBD, 0xDE, 0xDB, /* 0x48-0x4B */ + 0xB0, 0xC6, 0xBA, 0xB4, 0xC9, 0xD3, 0xC4, 0xF3, /* 0x4C-0x4F */ + 0xBE, 0xE8, 0x92, 0xBE, 0x92, 0xBF, 0x92, 0xC0, /* 0x50-0x53 */ + 0x92, 0xC1, 0xB2, 0xB6, 0x92, 0xC2, 0x92, 0xC3, /* 0x54-0x57 */ + 0x92, 0xC4, 0x92, 0xC5, 0x92, 0xC6, 0x92, 0xC7, /* 0x58-0x5B */ + 0x92, 0xC8, 0x92, 0xC9, 0xC0, 0xCC, 0xCB, 0xF0, /* 0x5C-0x5F */ + 0x92, 0xCA, 0xBC, 0xF1, 0xBB, 0xBB, 0xB5, 0xB7, /* 0x60-0x63 */ + 0x92, 0xCB, 0x92, 0xCC, 0x92, 0xCD, 0xC5, 0xF5, /* 0x64-0x67 */ + 0x92, 0xCE, 0xDE, 0xE6, 0x92, 0xCF, 0x92, 0xD0, /* 0x68-0x6B */ + 0x92, 0xD1, 0xDE, 0xE3, 0xBE, 0xDD, 0x92, 0xD2, /* 0x6C-0x6F */ + 0x92, 0xD3, 0xDE, 0xDF, 0x92, 0xD4, 0x92, 0xD5, /* 0x70-0x73 */ + 0x92, 0xD6, 0x92, 0xD7, 0xB4, 0xB7, 0xBD, 0xDD, /* 0x74-0x77 */ + 0x92, 0xD8, 0x92, 0xD9, 0xDE, 0xE0, 0xC4, 0xED, /* 0x78-0x7B */ + 0x92, 0xDA, 0x92, 0xDB, 0x92, 0xDC, 0x92, 0xDD, /* 0x7C-0x7F */ + + 0xCF, 0xC6, 0x92, 0xDE, 0xB5, 0xE0, 0x92, 0xDF, /* 0x80-0x83 */ + 0x92, 0xE0, 0x92, 0xE1, 0x92, 0xE2, 0xB6, 0xDE, /* 0x84-0x87 */ + 0xCA, 0xDA, 0xB5, 0xF4, 0xDE, 0xE5, 0x92, 0xE3, /* 0x88-0x8B */ + 0xD5, 0xC6, 0x92, 0xE4, 0xDE, 0xE1, 0xCC, 0xCD, /* 0x8C-0x8F */ + 0xC6, 0xFE, 0x92, 0xE5, 0xC5, 0xC5, 0x92, 0xE6, /* 0x90-0x93 */ + 0x92, 0xE7, 0x92, 0xE8, 0xD2, 0xB4, 0x92, 0xE9, /* 0x94-0x97 */ + 0xBE, 0xF2, 0x92, 0xEA, 0x92, 0xEB, 0x92, 0xEC, /* 0x98-0x9B */ + 0x92, 0xED, 0x92, 0xEE, 0x92, 0xEF, 0x92, 0xF0, /* 0x9C-0x9F */ + 0xC2, 0xD3, 0x92, 0xF1, 0xCC, 0xBD, 0xB3, 0xB8, /* 0xA0-0xA3 */ + 0x92, 0xF2, 0xBD, 0xD3, 0x92, 0xF3, 0xBF, 0xD8, /* 0xA4-0xA7 */ + 0xCD, 0xC6, 0xD1, 0xDA, 0xB4, 0xEB, 0x92, 0xF4, /* 0xA8-0xAB */ + 0xDE, 0xE4, 0xDE, 0xDD, 0xDE, 0xE7, 0x92, 0xF5, /* 0xAC-0xAF */ + 0xEA, 0xFE, 0x92, 0xF6, 0x92, 0xF7, 0xC2, 0xB0, /* 0xB0-0xB3 */ + 0xDE, 0xE2, 0x92, 0xF8, 0x92, 0xF9, 0xD6, 0xC0, /* 0xB4-0xB7 */ + 0xB5, 0xA7, 0x92, 0xFA, 0xB2, 0xF4, 0x92, 0xFB, /* 0xB8-0xBB */ + 0xDE, 0xE8, 0x92, 0xFC, 0xDE, 0xF2, 0x92, 0xFD, /* 0xBC-0xBF */ + 0x92, 0xFE, 0x93, 0x40, 0x93, 0x41, 0x93, 0x42, /* 0xC0-0xC3 */ + 0xDE, 0xED, 0x93, 0x43, 0xDE, 0xF1, 0x93, 0x44, /* 0xC4-0xC7 */ + 0x93, 0x45, 0xC8, 0xE0, 0x93, 0x46, 0x93, 0x47, /* 0xC8-0xCB */ + 0x93, 0x48, 0xD7, 0xE1, 0xDE, 0xEF, 0xC3, 0xE8, /* 0xCC-0xCF */ + 0xCC, 0xE1, 0x93, 0x49, 0xB2, 0xE5, 0x93, 0x4A, /* 0xD0-0xD3 */ + 0x93, 0x4B, 0x93, 0x4C, 0xD2, 0xBE, 0x93, 0x4D, /* 0xD4-0xD7 */ + 0x93, 0x4E, 0x93, 0x4F, 0x93, 0x50, 0x93, 0x51, /* 0xD8-0xDB */ + 0x93, 0x52, 0x93, 0x53, 0xDE, 0xEE, 0x93, 0x54, /* 0xDC-0xDF */ + 0xDE, 0xEB, 0xCE, 0xD5, 0x93, 0x55, 0xB4, 0xA7, /* 0xE0-0xE3 */ + 0x93, 0x56, 0x93, 0x57, 0x93, 0x58, 0x93, 0x59, /* 0xE4-0xE7 */ + 0x93, 0x5A, 0xBF, 0xAB, 0xBE, 0xBE, 0x93, 0x5B, /* 0xE8-0xEB */ + 0x93, 0x5C, 0xBD, 0xD2, 0x93, 0x5D, 0x93, 0x5E, /* 0xEC-0xEF */ + 0x93, 0x5F, 0x93, 0x60, 0xDE, 0xE9, 0x93, 0x61, /* 0xF0-0xF3 */ + 0xD4, 0xAE, 0x93, 0x62, 0xDE, 0xDE, 0x93, 0x63, /* 0xF4-0xF7 */ + 0xDE, 0xEA, 0x93, 0x64, 0x93, 0x65, 0x93, 0x66, /* 0xF8-0xFB */ + 0x93, 0x67, 0xC0, 0xBF, 0x93, 0x68, 0xDE, 0xEC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_64[512] = { + 0xB2, 0xF3, 0xB8, 0xE9, 0xC2, 0xA7, 0x93, 0x69, /* 0x00-0x03 */ + 0x93, 0x6A, 0xBD, 0xC1, 0x93, 0x6B, 0x93, 0x6C, /* 0x04-0x07 */ + 0x93, 0x6D, 0x93, 0x6E, 0x93, 0x6F, 0xDE, 0xF5, /* 0x08-0x0B */ + 0xDE, 0xF8, 0x93, 0x70, 0x93, 0x71, 0xB2, 0xAB, /* 0x0C-0x0F */ + 0xB4, 0xA4, 0x93, 0x72, 0x93, 0x73, 0xB4, 0xEA, /* 0x10-0x13 */ + 0xC9, 0xA6, 0x93, 0x74, 0x93, 0x75, 0x93, 0x76, /* 0x14-0x17 */ + 0x93, 0x77, 0x93, 0x78, 0x93, 0x79, 0xDE, 0xF6, /* 0x18-0x1B */ + 0xCB, 0xD1, 0x93, 0x7A, 0xB8, 0xE3, 0x93, 0x7B, /* 0x1C-0x1F */ + 0xDE, 0xF7, 0xDE, 0xFA, 0x93, 0x7C, 0x93, 0x7D, /* 0x20-0x23 */ + 0x93, 0x7E, 0x93, 0x80, 0xDE, 0xF9, 0x93, 0x81, /* 0x24-0x27 */ + 0x93, 0x82, 0x93, 0x83, 0xCC, 0xC2, 0x93, 0x84, /* 0x28-0x2B */ + 0xB0, 0xE1, 0xB4, 0xEE, 0x93, 0x85, 0x93, 0x86, /* 0x2C-0x2F */ + 0x93, 0x87, 0x93, 0x88, 0x93, 0x89, 0x93, 0x8A, /* 0x30-0x33 */ + 0xE5, 0xBA, 0x93, 0x8B, 0x93, 0x8C, 0x93, 0x8D, /* 0x34-0x37 */ + 0x93, 0x8E, 0x93, 0x8F, 0xD0, 0xAF, 0x93, 0x90, /* 0x38-0x3B */ + 0x93, 0x91, 0xB2, 0xEB, 0x93, 0x92, 0xEB, 0xA1, /* 0x3C-0x3F */ + 0x93, 0x93, 0xDE, 0xF4, 0x93, 0x94, 0x93, 0x95, /* 0x40-0x43 */ + 0xC9, 0xE3, 0xDE, 0xF3, 0xB0, 0xDA, 0xD2, 0xA1, /* 0x44-0x47 */ + 0xB1, 0xF7, 0x93, 0x96, 0xCC, 0xAF, 0x93, 0x97, /* 0x48-0x4B */ + 0x93, 0x98, 0x93, 0x99, 0x93, 0x9A, 0x93, 0x9B, /* 0x4C-0x4F */ + 0x93, 0x9C, 0x93, 0x9D, 0xDE, 0xF0, 0x93, 0x9E, /* 0x50-0x53 */ + 0xCB, 0xA4, 0x93, 0x9F, 0x93, 0xA0, 0x93, 0xA1, /* 0x54-0x57 */ + 0xD5, 0xAA, 0x93, 0xA2, 0x93, 0xA3, 0x93, 0xA4, /* 0x58-0x5B */ + 0x93, 0xA5, 0x93, 0xA6, 0xDE, 0xFB, 0x93, 0xA7, /* 0x5C-0x5F */ + 0x93, 0xA8, 0x93, 0xA9, 0x93, 0xAA, 0x93, 0xAB, /* 0x60-0x63 */ + 0x93, 0xAC, 0x93, 0xAD, 0x93, 0xAE, 0xB4, 0xDD, /* 0x64-0x67 */ + 0x93, 0xAF, 0xC4, 0xA6, 0x93, 0xB0, 0x93, 0xB1, /* 0x68-0x6B */ + 0x93, 0xB2, 0xDE, 0xFD, 0x93, 0xB3, 0x93, 0xB4, /* 0x6C-0x6F */ + 0x93, 0xB5, 0x93, 0xB6, 0x93, 0xB7, 0x93, 0xB8, /* 0x70-0x73 */ + 0x93, 0xB9, 0x93, 0xBA, 0x93, 0xBB, 0x93, 0xBC, /* 0x74-0x77 */ + 0xC3, 0xFE, 0xC4, 0xA1, 0xDF, 0xA1, 0x93, 0xBD, /* 0x78-0x7B */ + 0x93, 0xBE, 0x93, 0xBF, 0x93, 0xC0, 0x93, 0xC1, /* 0x7C-0x7F */ + + 0x93, 0xC2, 0x93, 0xC3, 0xC1, 0xCC, 0x93, 0xC4, /* 0x80-0x83 */ + 0xDE, 0xFC, 0xBE, 0xEF, 0x93, 0xC5, 0xC6, 0xB2, /* 0x84-0x87 */ + 0x93, 0xC6, 0x93, 0xC7, 0x93, 0xC8, 0x93, 0xC9, /* 0x88-0x8B */ + 0x93, 0xCA, 0x93, 0xCB, 0x93, 0xCC, 0x93, 0xCD, /* 0x8C-0x8F */ + 0x93, 0xCE, 0xB3, 0xC5, 0xC8, 0xF6, 0x93, 0xCF, /* 0x90-0x93 */ + 0x93, 0xD0, 0xCB, 0xBA, 0xDE, 0xFE, 0x93, 0xD1, /* 0x94-0x97 */ + 0x93, 0xD2, 0xDF, 0xA4, 0x93, 0xD3, 0x93, 0xD4, /* 0x98-0x9B */ + 0x93, 0xD5, 0x93, 0xD6, 0xD7, 0xB2, 0x93, 0xD7, /* 0x9C-0x9F */ + 0x93, 0xD8, 0x93, 0xD9, 0x93, 0xDA, 0x93, 0xDB, /* 0xA0-0xA3 */ + 0xB3, 0xB7, 0x93, 0xDC, 0x93, 0xDD, 0x93, 0xDE, /* 0xA4-0xA7 */ + 0x93, 0xDF, 0xC1, 0xC3, 0x93, 0xE0, 0x93, 0xE1, /* 0xA8-0xAB */ + 0xC7, 0xCB, 0xB2, 0xA5, 0xB4, 0xE9, 0x93, 0xE2, /* 0xAC-0xAF */ + 0xD7, 0xAB, 0x93, 0xE3, 0x93, 0xE4, 0x93, 0xE5, /* 0xB0-0xB3 */ + 0x93, 0xE6, 0xC4, 0xEC, 0x93, 0xE7, 0xDF, 0xA2, /* 0xB4-0xB7 */ + 0xDF, 0xA3, 0x93, 0xE8, 0xDF, 0xA5, 0x93, 0xE9, /* 0xB8-0xBB */ + 0xBA, 0xB3, 0x93, 0xEA, 0x93, 0xEB, 0x93, 0xEC, /* 0xBC-0xBF */ + 0xDF, 0xA6, 0x93, 0xED, 0xC0, 0xDE, 0x93, 0xEE, /* 0xC0-0xC3 */ + 0x93, 0xEF, 0xC9, 0xC3, 0x93, 0xF0, 0x93, 0xF1, /* 0xC4-0xC7 */ + 0x93, 0xF2, 0x93, 0xF3, 0x93, 0xF4, 0x93, 0xF5, /* 0xC8-0xCB */ + 0x93, 0xF6, 0xB2, 0xD9, 0xC7, 0xE6, 0x93, 0xF7, /* 0xCC-0xCF */ + 0xDF, 0xA7, 0x93, 0xF8, 0xC7, 0xDC, 0x93, 0xF9, /* 0xD0-0xD3 */ + 0x93, 0xFA, 0x93, 0xFB, 0x93, 0xFC, 0xDF, 0xA8, /* 0xD4-0xD7 */ + 0xEB, 0xA2, 0x93, 0xFD, 0x93, 0xFE, 0x94, 0x40, /* 0xD8-0xDB */ + 0x94, 0x41, 0x94, 0x42, 0xCB, 0xD3, 0x94, 0x43, /* 0xDC-0xDF */ + 0x94, 0x44, 0x94, 0x45, 0xDF, 0xAA, 0x94, 0x46, /* 0xE0-0xE3 */ + 0xDF, 0xA9, 0x94, 0x47, 0xB2, 0xC1, 0x94, 0x48, /* 0xE4-0xE7 */ + 0x94, 0x49, 0x94, 0x4A, 0x94, 0x4B, 0x94, 0x4C, /* 0xE8-0xEB */ + 0x94, 0x4D, 0x94, 0x4E, 0x94, 0x4F, 0x94, 0x50, /* 0xEC-0xEF */ + 0x94, 0x51, 0x94, 0x52, 0x94, 0x53, 0x94, 0x54, /* 0xF0-0xF3 */ + 0x94, 0x55, 0x94, 0x56, 0x94, 0x57, 0x94, 0x58, /* 0xF4-0xF7 */ + 0x94, 0x59, 0x94, 0x5A, 0x94, 0x5B, 0x94, 0x5C, /* 0xF8-0xFB */ + 0x94, 0x5D, 0x94, 0x5E, 0x94, 0x5F, 0x94, 0x60, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0xC5, 0xCA, 0x94, 0x61, 0x94, 0x62, 0x94, 0x63, /* 0x00-0x03 */ + 0x94, 0x64, 0x94, 0x65, 0x94, 0x66, 0x94, 0x67, /* 0x04-0x07 */ + 0x94, 0x68, 0xDF, 0xAB, 0x94, 0x69, 0x94, 0x6A, /* 0x08-0x0B */ + 0x94, 0x6B, 0x94, 0x6C, 0x94, 0x6D, 0x94, 0x6E, /* 0x0C-0x0F */ + 0x94, 0x6F, 0x94, 0x70, 0xD4, 0xDC, 0x94, 0x71, /* 0x10-0x13 */ + 0x94, 0x72, 0x94, 0x73, 0x94, 0x74, 0x94, 0x75, /* 0x14-0x17 */ + 0xC8, 0xC1, 0x94, 0x76, 0x94, 0x77, 0x94, 0x78, /* 0x18-0x1B */ + 0x94, 0x79, 0x94, 0x7A, 0x94, 0x7B, 0x94, 0x7C, /* 0x1C-0x1F */ + 0x94, 0x7D, 0x94, 0x7E, 0x94, 0x80, 0x94, 0x81, /* 0x20-0x23 */ + 0x94, 0x82, 0xDF, 0xAC, 0x94, 0x83, 0x94, 0x84, /* 0x24-0x27 */ + 0x94, 0x85, 0x94, 0x86, 0x94, 0x87, 0xBE, 0xF0, /* 0x28-0x2B */ + 0x94, 0x88, 0x94, 0x89, 0xDF, 0xAD, 0xD6, 0xA7, /* 0x2C-0x2F */ + 0x94, 0x8A, 0x94, 0x8B, 0x94, 0x8C, 0x94, 0x8D, /* 0x30-0x33 */ + 0xEA, 0xB7, 0xEB, 0xB6, 0xCA, 0xD5, 0x94, 0x8E, /* 0x34-0x37 */ + 0xD8, 0xFC, 0xB8, 0xC4, 0x94, 0x8F, 0xB9, 0xA5, /* 0x38-0x3B */ + 0x94, 0x90, 0x94, 0x91, 0xB7, 0xC5, 0xD5, 0xFE, /* 0x3C-0x3F */ + 0x94, 0x92, 0x94, 0x93, 0x94, 0x94, 0x94, 0x95, /* 0x40-0x43 */ + 0x94, 0x96, 0xB9, 0xCA, 0x94, 0x97, 0x94, 0x98, /* 0x44-0x47 */ + 0xD0, 0xA7, 0xF4, 0xCD, 0x94, 0x99, 0x94, 0x9A, /* 0x48-0x4B */ + 0xB5, 0xD0, 0x94, 0x9B, 0x94, 0x9C, 0xC3, 0xF4, /* 0x4C-0x4F */ + 0x94, 0x9D, 0xBE, 0xC8, 0x94, 0x9E, 0x94, 0x9F, /* 0x50-0x53 */ + 0x94, 0xA0, 0xEB, 0xB7, 0xB0, 0xBD, 0x94, 0xA1, /* 0x54-0x57 */ + 0x94, 0xA2, 0xBD, 0xCC, 0x94, 0xA3, 0xC1, 0xB2, /* 0x58-0x5B */ + 0x94, 0xA4, 0xB1, 0xD6, 0xB3, 0xA8, 0x94, 0xA5, /* 0x5C-0x5F */ + 0x94, 0xA6, 0x94, 0xA7, 0xB8, 0xD2, 0xC9, 0xA2, /* 0x60-0x63 */ + 0x94, 0xA8, 0x94, 0xA9, 0xB6, 0xD8, 0x94, 0xAA, /* 0x64-0x67 */ + 0x94, 0xAB, 0x94, 0xAC, 0x94, 0xAD, 0xEB, 0xB8, /* 0x68-0x6B */ + 0xBE, 0xB4, 0x94, 0xAE, 0x94, 0xAF, 0x94, 0xB0, /* 0x6C-0x6F */ + 0xCA, 0xFD, 0x94, 0xB1, 0xC7, 0xC3, 0x94, 0xB2, /* 0x70-0x73 */ + 0xD5, 0xFB, 0x94, 0xB3, 0x94, 0xB4, 0xB7, 0xF3, /* 0x74-0x77 */ + 0x94, 0xB5, 0x94, 0xB6, 0x94, 0xB7, 0x94, 0xB8, /* 0x78-0x7B */ + 0x94, 0xB9, 0x94, 0xBA, 0x94, 0xBB, 0x94, 0xBC, /* 0x7C-0x7F */ + + 0x94, 0xBD, 0x94, 0xBE, 0x94, 0xBF, 0x94, 0xC0, /* 0x80-0x83 */ + 0x94, 0xC1, 0x94, 0xC2, 0x94, 0xC3, 0xCE, 0xC4, /* 0x84-0x87 */ + 0x94, 0xC4, 0x94, 0xC5, 0x94, 0xC6, 0xD5, 0xAB, /* 0x88-0x8B */ + 0xB1, 0xF3, 0x94, 0xC7, 0x94, 0xC8, 0x94, 0xC9, /* 0x8C-0x8F */ + 0xEC, 0xB3, 0xB0, 0xDF, 0x94, 0xCA, 0xEC, 0xB5, /* 0x90-0x93 */ + 0x94, 0xCB, 0x94, 0xCC, 0x94, 0xCD, 0xB6, 0xB7, /* 0x94-0x97 */ + 0x94, 0xCE, 0xC1, 0xCF, 0x94, 0xCF, 0xF5, 0xFA, /* 0x98-0x9B */ + 0xD0, 0xB1, 0x94, 0xD0, 0x94, 0xD1, 0xD5, 0xE5, /* 0x9C-0x9F */ + 0x94, 0xD2, 0xCE, 0xD3, 0x94, 0xD3, 0x94, 0xD4, /* 0xA0-0xA3 */ + 0xBD, 0xEF, 0xB3, 0xE2, 0x94, 0xD5, 0xB8, 0xAB, /* 0xA4-0xA7 */ + 0x94, 0xD6, 0xD5, 0xB6, 0x94, 0xD7, 0xED, 0xBD, /* 0xA8-0xAB */ + 0x94, 0xD8, 0xB6, 0xCF, 0x94, 0xD9, 0xCB, 0xB9, /* 0xAC-0xAF */ + 0xD0, 0xC2, 0x94, 0xDA, 0x94, 0xDB, 0x94, 0xDC, /* 0xB0-0xB3 */ + 0x94, 0xDD, 0x94, 0xDE, 0x94, 0xDF, 0x94, 0xE0, /* 0xB4-0xB7 */ + 0x94, 0xE1, 0xB7, 0xBD, 0x94, 0xE2, 0x94, 0xE3, /* 0xB8-0xBB */ + 0xEC, 0xB6, 0xCA, 0xA9, 0x94, 0xE4, 0x94, 0xE5, /* 0xBC-0xBF */ + 0x94, 0xE6, 0xC5, 0xD4, 0x94, 0xE7, 0xEC, 0xB9, /* 0xC0-0xC3 */ + 0xEC, 0xB8, 0xC2, 0xC3, 0xEC, 0xB7, 0x94, 0xE8, /* 0xC4-0xC7 */ + 0x94, 0xE9, 0x94, 0xEA, 0x94, 0xEB, 0xD0, 0xFD, /* 0xC8-0xCB */ + 0xEC, 0xBA, 0x94, 0xEC, 0xEC, 0xBB, 0xD7, 0xE5, /* 0xCC-0xCF */ + 0x94, 0xED, 0x94, 0xEE, 0xEC, 0xBC, 0x94, 0xEF, /* 0xD0-0xD3 */ + 0x94, 0xF0, 0x94, 0xF1, 0xEC, 0xBD, 0xC6, 0xEC, /* 0xD4-0xD7 */ + 0x94, 0xF2, 0x94, 0xF3, 0x94, 0xF4, 0x94, 0xF5, /* 0xD8-0xDB */ + 0x94, 0xF6, 0x94, 0xF7, 0x94, 0xF8, 0x94, 0xF9, /* 0xDC-0xDF */ + 0xCE, 0xDE, 0x94, 0xFA, 0xBC, 0xC8, 0x94, 0xFB, /* 0xE0-0xE3 */ + 0x94, 0xFC, 0xC8, 0xD5, 0xB5, 0xA9, 0xBE, 0xC9, /* 0xE4-0xE7 */ + 0xD6, 0xBC, 0xD4, 0xE7, 0x94, 0xFD, 0x94, 0xFE, /* 0xE8-0xEB */ + 0xD1, 0xAE, 0xD0, 0xF1, 0xEA, 0xB8, 0xEA, 0xB9, /* 0xEC-0xEF */ + 0xEA, 0xBA, 0xBA, 0xB5, 0x95, 0x40, 0x95, 0x41, /* 0xF0-0xF3 */ + 0x95, 0x42, 0x95, 0x43, 0xCA, 0xB1, 0xBF, 0xF5, /* 0xF4-0xF7 */ + 0x95, 0x44, 0x95, 0x45, 0xCD, 0xFA, 0x95, 0x46, /* 0xF8-0xFB */ + 0x95, 0x47, 0x95, 0x48, 0x95, 0x49, 0x95, 0x4A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0xEA, 0xC0, 0x95, 0x4B, 0xB0, 0xBA, 0xEA, 0xBE, /* 0x00-0x03 */ + 0x95, 0x4C, 0x95, 0x4D, 0xC0, 0xA5, 0x95, 0x4E, /* 0x04-0x07 */ + 0x95, 0x4F, 0x95, 0x50, 0xEA, 0xBB, 0x95, 0x51, /* 0x08-0x0B */ + 0xB2, 0xFD, 0x95, 0x52, 0xC3, 0xF7, 0xBB, 0xE8, /* 0x0C-0x0F */ + 0x95, 0x53, 0x95, 0x54, 0x95, 0x55, 0xD2, 0xD7, /* 0x10-0x13 */ + 0xCE, 0xF4, 0xEA, 0xBF, 0x95, 0x56, 0x95, 0x57, /* 0x14-0x17 */ + 0x95, 0x58, 0xEA, 0xBC, 0x95, 0x59, 0x95, 0x5A, /* 0x18-0x1B */ + 0x95, 0x5B, 0xEA, 0xC3, 0x95, 0x5C, 0xD0, 0xC7, /* 0x1C-0x1F */ + 0xD3, 0xB3, 0x95, 0x5D, 0x95, 0x5E, 0x95, 0x5F, /* 0x20-0x23 */ + 0x95, 0x60, 0xB4, 0xBA, 0x95, 0x61, 0xC3, 0xC1, /* 0x24-0x27 */ + 0xD7, 0xF2, 0x95, 0x62, 0x95, 0x63, 0x95, 0x64, /* 0x28-0x2B */ + 0x95, 0x65, 0xD5, 0xD1, 0x95, 0x66, 0xCA, 0xC7, /* 0x2C-0x2F */ + 0x95, 0x67, 0xEA, 0xC5, 0x95, 0x68, 0x95, 0x69, /* 0x30-0x33 */ + 0xEA, 0xC4, 0xEA, 0xC7, 0xEA, 0xC6, 0x95, 0x6A, /* 0x34-0x37 */ + 0x95, 0x6B, 0x95, 0x6C, 0x95, 0x6D, 0x95, 0x6E, /* 0x38-0x3B */ + 0xD6, 0xE7, 0x95, 0x6F, 0xCF, 0xD4, 0x95, 0x70, /* 0x3C-0x3F */ + 0x95, 0x71, 0xEA, 0xCB, 0x95, 0x72, 0xBB, 0xCE, /* 0x40-0x43 */ + 0x95, 0x73, 0x95, 0x74, 0x95, 0x75, 0x95, 0x76, /* 0x44-0x47 */ + 0x95, 0x77, 0x95, 0x78, 0x95, 0x79, 0xBD, 0xFA, /* 0x48-0x4B */ + 0xC9, 0xCE, 0x95, 0x7A, 0x95, 0x7B, 0xEA, 0xCC, /* 0x4C-0x4F */ + 0x95, 0x7C, 0x95, 0x7D, 0xC9, 0xB9, 0xCF, 0xFE, /* 0x50-0x53 */ + 0xEA, 0xCA, 0xD4, 0xCE, 0xEA, 0xCD, 0xEA, 0xCF, /* 0x54-0x57 */ + 0x95, 0x7E, 0x95, 0x80, 0xCD, 0xED, 0x95, 0x81, /* 0x58-0x5B */ + 0x95, 0x82, 0x95, 0x83, 0x95, 0x84, 0xEA, 0xC9, /* 0x5C-0x5F */ + 0x95, 0x85, 0xEA, 0xCE, 0x95, 0x86, 0x95, 0x87, /* 0x60-0x63 */ + 0xCE, 0xEE, 0x95, 0x88, 0xBB, 0xDE, 0x95, 0x89, /* 0x64-0x67 */ + 0xB3, 0xBF, 0x95, 0x8A, 0x95, 0x8B, 0x95, 0x8C, /* 0x68-0x6B */ + 0x95, 0x8D, 0x95, 0x8E, 0xC6, 0xD5, 0xBE, 0xB0, /* 0x6C-0x6F */ + 0xCE, 0xFA, 0x95, 0x8F, 0x95, 0x90, 0x95, 0x91, /* 0x70-0x73 */ + 0xC7, 0xE7, 0x95, 0x92, 0xBE, 0xA7, 0xEA, 0xD0, /* 0x74-0x77 */ + 0x95, 0x93, 0x95, 0x94, 0xD6, 0xC7, 0x95, 0x95, /* 0x78-0x7B */ + 0x95, 0x96, 0x95, 0x97, 0xC1, 0xC0, 0x95, 0x98, /* 0x7C-0x7F */ + + 0x95, 0x99, 0x95, 0x9A, 0xD4, 0xDD, 0x95, 0x9B, /* 0x80-0x83 */ + 0xEA, 0xD1, 0x95, 0x9C, 0x95, 0x9D, 0xCF, 0xBE, /* 0x84-0x87 */ + 0x95, 0x9E, 0x95, 0x9F, 0x95, 0xA0, 0x95, 0xA1, /* 0x88-0x8B */ + 0xEA, 0xD2, 0x95, 0xA2, 0x95, 0xA3, 0x95, 0xA4, /* 0x8C-0x8F */ + 0x95, 0xA5, 0xCA, 0xEE, 0x95, 0xA6, 0x95, 0xA7, /* 0x90-0x93 */ + 0x95, 0xA8, 0x95, 0xA9, 0xC5, 0xAF, 0xB0, 0xB5, /* 0x94-0x97 */ + 0x95, 0xAA, 0x95, 0xAB, 0x95, 0xAC, 0x95, 0xAD, /* 0x98-0x9B */ + 0x95, 0xAE, 0xEA, 0xD4, 0x95, 0xAF, 0x95, 0xB0, /* 0x9C-0x9F */ + 0x95, 0xB1, 0x95, 0xB2, 0x95, 0xB3, 0x95, 0xB4, /* 0xA0-0xA3 */ + 0x95, 0xB5, 0x95, 0xB6, 0x95, 0xB7, 0xEA, 0xD3, /* 0xA4-0xA7 */ + 0xF4, 0xDF, 0x95, 0xB8, 0x95, 0xB9, 0x95, 0xBA, /* 0xA8-0xAB */ + 0x95, 0xBB, 0x95, 0xBC, 0xC4, 0xBA, 0x95, 0xBD, /* 0xAC-0xAF */ + 0x95, 0xBE, 0x95, 0xBF, 0x95, 0xC0, 0x95, 0xC1, /* 0xB0-0xB3 */ + 0xB1, 0xA9, 0x95, 0xC2, 0x95, 0xC3, 0x95, 0xC4, /* 0xB4-0xB7 */ + 0x95, 0xC5, 0xE5, 0xDF, 0x95, 0xC6, 0x95, 0xC7, /* 0xB8-0xBB */ + 0x95, 0xC8, 0x95, 0xC9, 0xEA, 0xD5, 0x95, 0xCA, /* 0xBC-0xBF */ + 0x95, 0xCB, 0x95, 0xCC, 0x95, 0xCD, 0x95, 0xCE, /* 0xC0-0xC3 */ + 0x95, 0xCF, 0x95, 0xD0, 0x95, 0xD1, 0x95, 0xD2, /* 0xC4-0xC7 */ + 0x95, 0xD3, 0x95, 0xD4, 0x95, 0xD5, 0x95, 0xD6, /* 0xC8-0xCB */ + 0x95, 0xD7, 0x95, 0xD8, 0x95, 0xD9, 0x95, 0xDA, /* 0xCC-0xCF */ + 0x95, 0xDB, 0x95, 0xDC, 0x95, 0xDD, 0x95, 0xDE, /* 0xD0-0xD3 */ + 0x95, 0xDF, 0x95, 0xE0, 0x95, 0xE1, 0x95, 0xE2, /* 0xD4-0xD7 */ + 0x95, 0xE3, 0xCA, 0xEF, 0x95, 0xE4, 0xEA, 0xD6, /* 0xD8-0xDB */ + 0xEA, 0xD7, 0xC6, 0xD8, 0x95, 0xE5, 0x95, 0xE6, /* 0xDC-0xDF */ + 0x95, 0xE7, 0x95, 0xE8, 0x95, 0xE9, 0x95, 0xEA, /* 0xE0-0xE3 */ + 0x95, 0xEB, 0x95, 0xEC, 0xEA, 0xD8, 0x95, 0xED, /* 0xE4-0xE7 */ + 0x95, 0xEE, 0xEA, 0xD9, 0x95, 0xEF, 0x95, 0xF0, /* 0xE8-0xEB */ + 0x95, 0xF1, 0x95, 0xF2, 0x95, 0xF3, 0x95, 0xF4, /* 0xEC-0xEF */ + 0xD4, 0xBB, 0x95, 0xF5, 0xC7, 0xFA, 0xD2, 0xB7, /* 0xF0-0xF3 */ + 0xB8, 0xFC, 0x95, 0xF6, 0x95, 0xF7, 0xEA, 0xC2, /* 0xF4-0xF7 */ + 0x95, 0xF8, 0xB2, 0xDC, 0x95, 0xF9, 0x95, 0xFA, /* 0xF8-0xFB */ + 0xC2, 0xFC, 0x95, 0xFB, 0xD4, 0xF8, 0xCC, 0xE6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0xD7, 0xEE, 0x95, 0xFC, 0x95, 0xFD, 0x95, 0xFE, /* 0x00-0x03 */ + 0x96, 0x40, 0x96, 0x41, 0x96, 0x42, 0x96, 0x43, /* 0x04-0x07 */ + 0xD4, 0xC2, 0xD3, 0xD0, 0xEB, 0xC3, 0xC5, 0xF3, /* 0x08-0x0B */ + 0x96, 0x44, 0xB7, 0xFE, 0x96, 0x45, 0x96, 0x46, /* 0x0C-0x0F */ + 0xEB, 0xD4, 0x96, 0x47, 0x96, 0x48, 0x96, 0x49, /* 0x10-0x13 */ + 0xCB, 0xB7, 0xEB, 0xDE, 0x96, 0x4A, 0xC0, 0xCA, /* 0x14-0x17 */ + 0x96, 0x4B, 0x96, 0x4C, 0x96, 0x4D, 0xCD, 0xFB, /* 0x18-0x1B */ + 0x96, 0x4E, 0xB3, 0xAF, 0x96, 0x4F, 0xC6, 0xDA, /* 0x1C-0x1F */ + 0x96, 0x50, 0x96, 0x51, 0x96, 0x52, 0x96, 0x53, /* 0x20-0x23 */ + 0x96, 0x54, 0x96, 0x55, 0xEB, 0xFC, 0x96, 0x56, /* 0x24-0x27 */ + 0xC4, 0xBE, 0x96, 0x57, 0xCE, 0xB4, 0xC4, 0xA9, /* 0x28-0x2B */ + 0xB1, 0xBE, 0xD4, 0xFD, 0x96, 0x58, 0xCA, 0xF5, /* 0x2C-0x2F */ + 0x96, 0x59, 0xD6, 0xEC, 0x96, 0x5A, 0x96, 0x5B, /* 0x30-0x33 */ + 0xC6, 0xD3, 0xB6, 0xE4, 0x96, 0x5C, 0x96, 0x5D, /* 0x34-0x37 */ + 0x96, 0x5E, 0x96, 0x5F, 0xBB, 0xFA, 0x96, 0x60, /* 0x38-0x3B */ + 0x96, 0x61, 0xD0, 0xE0, 0x96, 0x62, 0x96, 0x63, /* 0x3C-0x3F */ + 0xC9, 0xB1, 0x96, 0x64, 0xD4, 0xD3, 0xC8, 0xA8, /* 0x40-0x43 */ + 0x96, 0x65, 0x96, 0x66, 0xB8, 0xCB, 0x96, 0x67, /* 0x44-0x47 */ + 0xE8, 0xBE, 0xC9, 0xBC, 0x96, 0x68, 0x96, 0x69, /* 0x48-0x4B */ + 0xE8, 0xBB, 0x96, 0x6A, 0xC0, 0xEE, 0xD0, 0xD3, /* 0x4C-0x4F */ + 0xB2, 0xC4, 0xB4, 0xE5, 0x96, 0x6B, 0xE8, 0xBC, /* 0x50-0x53 */ + 0x96, 0x6C, 0x96, 0x6D, 0xD5, 0xC8, 0x96, 0x6E, /* 0x54-0x57 */ + 0x96, 0x6F, 0x96, 0x70, 0x96, 0x71, 0x96, 0x72, /* 0x58-0x5B */ + 0xB6, 0xC5, 0x96, 0x73, 0xE8, 0xBD, 0xCA, 0xF8, /* 0x5C-0x5F */ + 0xB8, 0xDC, 0xCC, 0xF5, 0x96, 0x74, 0x96, 0x75, /* 0x60-0x63 */ + 0x96, 0x76, 0xC0, 0xB4, 0x96, 0x77, 0x96, 0x78, /* 0x64-0x67 */ + 0xD1, 0xEE, 0xE8, 0xBF, 0xE8, 0xC2, 0x96, 0x79, /* 0x68-0x6B */ + 0x96, 0x7A, 0xBA, 0xBC, 0x96, 0x7B, 0xB1, 0xAD, /* 0x6C-0x6F */ + 0xBD, 0xDC, 0x96, 0x7C, 0xEA, 0xBD, 0xE8, 0xC3, /* 0x70-0x73 */ + 0x96, 0x7D, 0xE8, 0xC6, 0x96, 0x7E, 0xE8, 0xCB, /* 0x74-0x77 */ + 0x96, 0x80, 0x96, 0x81, 0x96, 0x82, 0x96, 0x83, /* 0x78-0x7B */ + 0xE8, 0xCC, 0x96, 0x84, 0xCB, 0xC9, 0xB0, 0xE5, /* 0x7C-0x7F */ + + 0x96, 0x85, 0xBC, 0xAB, 0x96, 0x86, 0x96, 0x87, /* 0x80-0x83 */ + 0xB9, 0xB9, 0x96, 0x88, 0x96, 0x89, 0xE8, 0xC1, /* 0x84-0x87 */ + 0x96, 0x8A, 0xCD, 0xF7, 0x96, 0x8B, 0xE8, 0xCA, /* 0x88-0x8B */ + 0x96, 0x8C, 0x96, 0x8D, 0x96, 0x8E, 0x96, 0x8F, /* 0x8C-0x8F */ + 0xCE, 0xF6, 0x96, 0x90, 0x96, 0x91, 0x96, 0x92, /* 0x90-0x93 */ + 0x96, 0x93, 0xD5, 0xED, 0x96, 0x94, 0xC1, 0xD6, /* 0x94-0x97 */ + 0xE8, 0xC4, 0x96, 0x95, 0xC3, 0xB6, 0x96, 0x96, /* 0x98-0x9B */ + 0xB9, 0xFB, 0xD6, 0xA6, 0xE8, 0xC8, 0x96, 0x97, /* 0x9C-0x9F */ + 0x96, 0x98, 0x96, 0x99, 0xCA, 0xE0, 0xD4, 0xE6, /* 0xA0-0xA3 */ + 0x96, 0x9A, 0xE8, 0xC0, 0x96, 0x9B, 0xE8, 0xC5, /* 0xA4-0xA7 */ + 0xE8, 0xC7, 0x96, 0x9C, 0xC7, 0xB9, 0xB7, 0xE3, /* 0xA8-0xAB */ + 0x96, 0x9D, 0xE8, 0xC9, 0x96, 0x9E, 0xBF, 0xDD, /* 0xAC-0xAF */ + 0xE8, 0xD2, 0x96, 0x9F, 0x96, 0xA0, 0xE8, 0xD7, /* 0xB0-0xB3 */ + 0x96, 0xA1, 0xE8, 0xD5, 0xBC, 0xDC, 0xBC, 0xCF, /* 0xB4-0xB7 */ + 0xE8, 0xDB, 0x96, 0xA2, 0x96, 0xA3, 0x96, 0xA4, /* 0xB8-0xBB */ + 0x96, 0xA5, 0x96, 0xA6, 0x96, 0xA7, 0x96, 0xA8, /* 0xBC-0xBF */ + 0x96, 0xA9, 0xE8, 0xDE, 0x96, 0xAA, 0xE8, 0xDA, /* 0xC0-0xC3 */ + 0xB1, 0xFA, 0x96, 0xAB, 0x96, 0xAC, 0x96, 0xAD, /* 0xC4-0xC7 */ + 0x96, 0xAE, 0x96, 0xAF, 0x96, 0xB0, 0x96, 0xB1, /* 0xC8-0xCB */ + 0x96, 0xB2, 0x96, 0xB3, 0x96, 0xB4, 0xB0, 0xD8, /* 0xCC-0xCF */ + 0xC4, 0xB3, 0xB8, 0xCC, 0xC6, 0xE2, 0xC8, 0xBE, /* 0xD0-0xD3 */ + 0xC8, 0xE1, 0x96, 0xB5, 0x96, 0xB6, 0x96, 0xB7, /* 0xD4-0xD7 */ + 0xE8, 0xCF, 0xE8, 0xD4, 0xE8, 0xD6, 0x96, 0xB8, /* 0xD8-0xDB */ + 0xB9, 0xF1, 0xE8, 0xD8, 0xD7, 0xF5, 0x96, 0xB9, /* 0xDC-0xDF */ + 0xC4, 0xFB, 0x96, 0xBA, 0xE8, 0xDC, 0x96, 0xBB, /* 0xE0-0xE3 */ + 0x96, 0xBC, 0xB2, 0xE9, 0x96, 0xBD, 0x96, 0xBE, /* 0xE4-0xE7 */ + 0x96, 0xBF, 0xE8, 0xD1, 0x96, 0xC0, 0x96, 0xC1, /* 0xE8-0xEB */ + 0xBC, 0xED, 0x96, 0xC2, 0x96, 0xC3, 0xBF, 0xC2, /* 0xEC-0xEF */ + 0xE8, 0xCD, 0xD6, 0xF9, 0x96, 0xC4, 0xC1, 0xF8, /* 0xF0-0xF3 */ + 0xB2, 0xF1, 0x96, 0xC5, 0x96, 0xC6, 0x96, 0xC7, /* 0xF4-0xF7 */ + 0x96, 0xC8, 0x96, 0xC9, 0x96, 0xCA, 0x96, 0xCB, /* 0xF8-0xFB */ + 0x96, 0xCC, 0xE8, 0xDF, 0x96, 0xCD, 0xCA, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0xE8, 0xD9, 0x96, 0xCE, 0x96, 0xCF, 0x96, 0xD0, /* 0x00-0x03 */ + 0x96, 0xD1, 0xD5, 0xA4, 0x96, 0xD2, 0xB1, 0xEA, /* 0x04-0x07 */ + 0xD5, 0xBB, 0xE8, 0xCE, 0xE8, 0xD0, 0xB6, 0xB0, /* 0x08-0x0B */ + 0xE8, 0xD3, 0x96, 0xD3, 0xE8, 0xDD, 0xC0, 0xB8, /* 0x0C-0x0F */ + 0x96, 0xD4, 0xCA, 0xF7, 0x96, 0xD5, 0xCB, 0xA8, /* 0x10-0x13 */ + 0x96, 0xD6, 0x96, 0xD7, 0xC6, 0xDC, 0xC0, 0xF5, /* 0x14-0x17 */ + 0x96, 0xD8, 0x96, 0xD9, 0x96, 0xDA, 0x96, 0xDB, /* 0x18-0x1B */ + 0x96, 0xDC, 0xE8, 0xE9, 0x96, 0xDD, 0x96, 0xDE, /* 0x1C-0x1F */ + 0x96, 0xDF, 0xD0, 0xA3, 0x96, 0xE0, 0x96, 0xE1, /* 0x20-0x23 */ + 0x96, 0xE2, 0x96, 0xE3, 0x96, 0xE4, 0x96, 0xE5, /* 0x24-0x27 */ + 0x96, 0xE6, 0xE8, 0xF2, 0xD6, 0xEA, 0x96, 0xE7, /* 0x28-0x2B */ + 0x96, 0xE8, 0x96, 0xE9, 0x96, 0xEA, 0x96, 0xEB, /* 0x2C-0x2F */ + 0x96, 0xEC, 0x96, 0xED, 0xE8, 0xE0, 0xE8, 0xE1, /* 0x30-0x33 */ + 0x96, 0xEE, 0x96, 0xEF, 0x96, 0xF0, 0xD1, 0xF9, /* 0x34-0x37 */ + 0xBA, 0xCB, 0xB8, 0xF9, 0x96, 0xF1, 0x96, 0xF2, /* 0x38-0x3B */ + 0xB8, 0xF1, 0xD4, 0xD4, 0xE8, 0xEF, 0x96, 0xF3, /* 0x3C-0x3F */ + 0xE8, 0xEE, 0xE8, 0xEC, 0xB9, 0xF0, 0xCC, 0xD2, /* 0x40-0x43 */ + 0xE8, 0xE6, 0xCE, 0xA6, 0xBF, 0xF2, 0x96, 0xF4, /* 0x44-0x47 */ + 0xB0, 0xB8, 0xE8, 0xF1, 0xE8, 0xF0, 0x96, 0xF5, /* 0x48-0x4B */ + 0xD7, 0xC0, 0x96, 0xF6, 0xE8, 0xE4, 0x96, 0xF7, /* 0x4C-0x4F */ + 0xCD, 0xA9, 0xC9, 0xA3, 0x96, 0xF8, 0xBB, 0xB8, /* 0x50-0x53 */ + 0xBD, 0xDB, 0xE8, 0xEA, 0x96, 0xF9, 0x96, 0xFA, /* 0x54-0x57 */ + 0x96, 0xFB, 0x96, 0xFC, 0x96, 0xFD, 0x96, 0xFE, /* 0x58-0x5B */ + 0x97, 0x40, 0x97, 0x41, 0x97, 0x42, 0x97, 0x43, /* 0x5C-0x5F */ + 0xE8, 0xE2, 0xE8, 0xE3, 0xE8, 0xE5, 0xB5, 0xB5, /* 0x60-0x63 */ + 0xE8, 0xE7, 0xC7, 0xC5, 0xE8, 0xEB, 0xE8, 0xED, /* 0x64-0x67 */ + 0xBD, 0xB0, 0xD7, 0xAE, 0x97, 0x44, 0xE8, 0xF8, /* 0x68-0x6B */ + 0x97, 0x45, 0x97, 0x46, 0x97, 0x47, 0x97, 0x48, /* 0x6C-0x6F */ + 0x97, 0x49, 0x97, 0x4A, 0x97, 0x4B, 0x97, 0x4C, /* 0x70-0x73 */ + 0xE8, 0xF5, 0x97, 0x4D, 0xCD, 0xB0, 0xE8, 0xF6, /* 0x74-0x77 */ + 0x97, 0x4E, 0x97, 0x4F, 0x97, 0x50, 0x97, 0x51, /* 0x78-0x7B */ + 0x97, 0x52, 0x97, 0x53, 0x97, 0x54, 0x97, 0x55, /* 0x7C-0x7F */ + + 0x97, 0x56, 0xC1, 0xBA, 0x97, 0x57, 0xE8, 0xE8, /* 0x80-0x83 */ + 0x97, 0x58, 0xC3, 0xB7, 0xB0, 0xF0, 0x97, 0x59, /* 0x84-0x87 */ + 0x97, 0x5A, 0x97, 0x5B, 0x97, 0x5C, 0x97, 0x5D, /* 0x88-0x8B */ + 0x97, 0x5E, 0x97, 0x5F, 0x97, 0x60, 0xE8, 0xF4, /* 0x8C-0x8F */ + 0x97, 0x61, 0x97, 0x62, 0x97, 0x63, 0xE8, 0xF7, /* 0x90-0x93 */ + 0x97, 0x64, 0x97, 0x65, 0x97, 0x66, 0xB9, 0xA3, /* 0x94-0x97 */ + 0x97, 0x67, 0x97, 0x68, 0x97, 0x69, 0x97, 0x6A, /* 0x98-0x9B */ + 0x97, 0x6B, 0x97, 0x6C, 0x97, 0x6D, 0x97, 0x6E, /* 0x9C-0x9F */ + 0x97, 0x6F, 0x97, 0x70, 0xC9, 0xD2, 0x97, 0x71, /* 0xA0-0xA3 */ + 0x97, 0x72, 0x97, 0x73, 0xC3, 0xCE, 0xCE, 0xE0, /* 0xA4-0xA7 */ + 0xC0, 0xE6, 0x97, 0x74, 0x97, 0x75, 0x97, 0x76, /* 0xA8-0xAB */ + 0x97, 0x77, 0xCB, 0xF3, 0x97, 0x78, 0xCC, 0xDD, /* 0xAC-0xAF */ + 0xD0, 0xB5, 0x97, 0x79, 0x97, 0x7A, 0xCA, 0xE1, /* 0xB0-0xB3 */ + 0x97, 0x7B, 0xE8, 0xF3, 0x97, 0x7C, 0x97, 0x7D, /* 0xB4-0xB7 */ + 0x97, 0x7E, 0x97, 0x80, 0x97, 0x81, 0x97, 0x82, /* 0xB8-0xBB */ + 0x97, 0x83, 0x97, 0x84, 0x97, 0x85, 0x97, 0x86, /* 0xBC-0xBF */ + 0xBC, 0xEC, 0x97, 0x87, 0xE8, 0xF9, 0x97, 0x88, /* 0xC0-0xC3 */ + 0x97, 0x89, 0x97, 0x8A, 0x97, 0x8B, 0x97, 0x8C, /* 0xC4-0xC7 */ + 0x97, 0x8D, 0xC3, 0xDE, 0x97, 0x8E, 0xC6, 0xE5, /* 0xC8-0xCB */ + 0x97, 0x8F, 0xB9, 0xF7, 0x97, 0x90, 0x97, 0x91, /* 0xCC-0xCF */ + 0x97, 0x92, 0x97, 0x93, 0xB0, 0xF4, 0x97, 0x94, /* 0xD0-0xD3 */ + 0x97, 0x95, 0xD7, 0xD8, 0x97, 0x96, 0x97, 0x97, /* 0xD4-0xD7 */ + 0xBC, 0xAC, 0x97, 0x98, 0xC5, 0xEF, 0x97, 0x99, /* 0xD8-0xDB */ + 0x97, 0x9A, 0x97, 0x9B, 0x97, 0x9C, 0x97, 0x9D, /* 0xDC-0xDF */ + 0xCC, 0xC4, 0x97, 0x9E, 0x97, 0x9F, 0xE9, 0xA6, /* 0xE0-0xE3 */ + 0x97, 0xA0, 0x97, 0xA1, 0x97, 0xA2, 0x97, 0xA3, /* 0xE4-0xE7 */ + 0x97, 0xA4, 0x97, 0xA5, 0x97, 0xA6, 0x97, 0xA7, /* 0xE8-0xEB */ + 0x97, 0xA8, 0x97, 0xA9, 0xC9, 0xAD, 0x97, 0xAA, /* 0xEC-0xEF */ + 0xE9, 0xA2, 0xC0, 0xE2, 0x97, 0xAB, 0x97, 0xAC, /* 0xF0-0xF3 */ + 0x97, 0xAD, 0xBF, 0xC3, 0x97, 0xAE, 0x97, 0xAF, /* 0xF4-0xF7 */ + 0x97, 0xB0, 0xE8, 0xFE, 0xB9, 0xD7, 0x97, 0xB1, /* 0xF8-0xFB */ + 0xE8, 0xFB, 0x97, 0xB2, 0x97, 0xB3, 0x97, 0xB4, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_69[512] = { + 0x97, 0xB5, 0xE9, 0xA4, 0x97, 0xB6, 0x97, 0xB7, /* 0x00-0x03 */ + 0x97, 0xB8, 0xD2, 0xCE, 0x97, 0xB9, 0x97, 0xBA, /* 0x04-0x07 */ + 0x97, 0xBB, 0x97, 0xBC, 0x97, 0xBD, 0xE9, 0xA3, /* 0x08-0x0B */ + 0x97, 0xBE, 0xD6, 0xB2, 0xD7, 0xB5, 0x97, 0xBF, /* 0x0C-0x0F */ + 0xE9, 0xA7, 0x97, 0xC0, 0xBD, 0xB7, 0x97, 0xC1, /* 0x10-0x13 */ + 0x97, 0xC2, 0x97, 0xC3, 0x97, 0xC4, 0x97, 0xC5, /* 0x14-0x17 */ + 0x97, 0xC6, 0x97, 0xC7, 0x97, 0xC8, 0x97, 0xC9, /* 0x18-0x1B */ + 0x97, 0xCA, 0x97, 0xCB, 0x97, 0xCC, 0xE8, 0xFC, /* 0x1C-0x1F */ + 0xE8, 0xFD, 0x97, 0xCD, 0x97, 0xCE, 0x97, 0xCF, /* 0x20-0x23 */ + 0xE9, 0xA1, 0x97, 0xD0, 0x97, 0xD1, 0x97, 0xD2, /* 0x24-0x27 */ + 0x97, 0xD3, 0x97, 0xD4, 0x97, 0xD5, 0x97, 0xD6, /* 0x28-0x2B */ + 0x97, 0xD7, 0xCD, 0xD6, 0x97, 0xD8, 0x97, 0xD9, /* 0x2C-0x2F */ + 0xD2, 0xAC, 0x97, 0xDA, 0x97, 0xDB, 0x97, 0xDC, /* 0x30-0x33 */ + 0xE9, 0xB2, 0x97, 0xDD, 0x97, 0xDE, 0x97, 0xDF, /* 0x34-0x37 */ + 0x97, 0xE0, 0xE9, 0xA9, 0x97, 0xE1, 0x97, 0xE2, /* 0x38-0x3B */ + 0x97, 0xE3, 0xB4, 0xAA, 0x97, 0xE4, 0xB4, 0xBB, /* 0x3C-0x3F */ + 0x97, 0xE5, 0x97, 0xE6, 0xE9, 0xAB, 0x97, 0xE7, /* 0x40-0x43 */ + 0x97, 0xE8, 0x97, 0xE9, 0x97, 0xEA, 0x97, 0xEB, /* 0x44-0x47 */ + 0x97, 0xEC, 0x97, 0xED, 0x97, 0xEE, 0x97, 0xEF, /* 0x48-0x4B */ + 0x97, 0xF0, 0x97, 0xF1, 0x97, 0xF2, 0x97, 0xF3, /* 0x4C-0x4F */ + 0x97, 0xF4, 0x97, 0xF5, 0x97, 0xF6, 0x97, 0xF7, /* 0x50-0x53 */ + 0xD0, 0xA8, 0x97, 0xF8, 0x97, 0xF9, 0xE9, 0xA5, /* 0x54-0x57 */ + 0x97, 0xFA, 0x97, 0xFB, 0xB3, 0xFE, 0x97, 0xFC, /* 0x58-0x5B */ + 0x97, 0xFD, 0xE9, 0xAC, 0xC0, 0xE3, 0x97, 0xFE, /* 0x5C-0x5F */ + 0xE9, 0xAA, 0x98, 0x40, 0x98, 0x41, 0xE9, 0xB9, /* 0x60-0x63 */ + 0x98, 0x42, 0x98, 0x43, 0xE9, 0xB8, 0x98, 0x44, /* 0x64-0x67 */ + 0x98, 0x45, 0x98, 0x46, 0x98, 0x47, 0xE9, 0xAE, /* 0x68-0x6B */ + 0x98, 0x48, 0x98, 0x49, 0xE8, 0xFA, 0x98, 0x4A, /* 0x6C-0x6F */ + 0x98, 0x4B, 0xE9, 0xA8, 0x98, 0x4C, 0x98, 0x4D, /* 0x70-0x73 */ + 0x98, 0x4E, 0x98, 0x4F, 0x98, 0x50, 0xBF, 0xAC, /* 0x74-0x77 */ + 0xE9, 0xB1, 0xE9, 0xBA, 0x98, 0x51, 0x98, 0x52, /* 0x78-0x7B */ + 0xC2, 0xA5, 0x98, 0x53, 0x98, 0x54, 0x98, 0x55, /* 0x7C-0x7F */ + + 0xE9, 0xAF, 0x98, 0x56, 0xB8, 0xC5, 0x98, 0x57, /* 0x80-0x83 */ + 0xE9, 0xAD, 0x98, 0x58, 0xD3, 0xDC, 0xE9, 0xB4, /* 0x84-0x87 */ + 0xE9, 0xB5, 0xE9, 0xB7, 0x98, 0x59, 0x98, 0x5A, /* 0x88-0x8B */ + 0x98, 0x5B, 0xE9, 0xC7, 0x98, 0x5C, 0x98, 0x5D, /* 0x8C-0x8F */ + 0x98, 0x5E, 0x98, 0x5F, 0x98, 0x60, 0x98, 0x61, /* 0x90-0x93 */ + 0xC0, 0xC6, 0xE9, 0xC5, 0x98, 0x62, 0x98, 0x63, /* 0x94-0x97 */ + 0xE9, 0xB0, 0x98, 0x64, 0x98, 0x65, 0xE9, 0xBB, /* 0x98-0x9B */ + 0xB0, 0xF1, 0x98, 0x66, 0x98, 0x67, 0x98, 0x68, /* 0x9C-0x9F */ + 0x98, 0x69, 0x98, 0x6A, 0x98, 0x6B, 0x98, 0x6C, /* 0xA0-0xA3 */ + 0x98, 0x6D, 0x98, 0x6E, 0x98, 0x6F, 0xE9, 0xBC, /* 0xA4-0xA7 */ + 0xD5, 0xA5, 0x98, 0x70, 0x98, 0x71, 0xE9, 0xBE, /* 0xA8-0xAB */ + 0x98, 0x72, 0xE9, 0xBF, 0x98, 0x73, 0x98, 0x74, /* 0xAC-0xAF */ + 0x98, 0x75, 0xE9, 0xC1, 0x98, 0x76, 0x98, 0x77, /* 0xB0-0xB3 */ + 0xC1, 0xF1, 0x98, 0x78, 0x98, 0x79, 0xC8, 0xB6, /* 0xB4-0xB7 */ + 0x98, 0x7A, 0x98, 0x7B, 0x98, 0x7C, 0xE9, 0xBD, /* 0xB8-0xBB */ + 0x98, 0x7D, 0x98, 0x7E, 0x98, 0x80, 0x98, 0x81, /* 0xBC-0xBF */ + 0x98, 0x82, 0xE9, 0xC2, 0x98, 0x83, 0x98, 0x84, /* 0xC0-0xC3 */ + 0x98, 0x85, 0x98, 0x86, 0x98, 0x87, 0x98, 0x88, /* 0xC4-0xC7 */ + 0x98, 0x89, 0x98, 0x8A, 0xE9, 0xC3, 0x98, 0x8B, /* 0xC8-0xCB */ + 0xE9, 0xB3, 0x98, 0x8C, 0xE9, 0xB6, 0x98, 0x8D, /* 0xCC-0xCF */ + 0xBB, 0xB1, 0x98, 0x8E, 0x98, 0x8F, 0x98, 0x90, /* 0xD0-0xD3 */ + 0xE9, 0xC0, 0x98, 0x91, 0x98, 0x92, 0x98, 0x93, /* 0xD4-0xD7 */ + 0x98, 0x94, 0x98, 0x95, 0x98, 0x96, 0xBC, 0xF7, /* 0xD8-0xDB */ + 0x98, 0x97, 0x98, 0x98, 0x98, 0x99, 0xE9, 0xC4, /* 0xDC-0xDF */ + 0xE9, 0xC6, 0x98, 0x9A, 0x98, 0x9B, 0x98, 0x9C, /* 0xE0-0xE3 */ + 0x98, 0x9D, 0x98, 0x9E, 0x98, 0x9F, 0x98, 0xA0, /* 0xE4-0xE7 */ + 0x98, 0xA1, 0x98, 0xA2, 0x98, 0xA3, 0x98, 0xA4, /* 0xE8-0xEB */ + 0x98, 0xA5, 0xE9, 0xCA, 0x98, 0xA6, 0x98, 0xA7, /* 0xEC-0xEF */ + 0x98, 0xA8, 0x98, 0xA9, 0xE9, 0xCE, 0x98, 0xAA, /* 0xF0-0xF3 */ + 0x98, 0xAB, 0x98, 0xAC, 0x98, 0xAD, 0x98, 0xAE, /* 0xF4-0xF7 */ + 0x98, 0xAF, 0x98, 0xB0, 0x98, 0xB1, 0x98, 0xB2, /* 0xF8-0xFB */ + 0x98, 0xB3, 0xB2, 0xDB, 0x98, 0xB4, 0xE9, 0xC8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0x98, 0xB5, 0x98, 0xB6, 0x98, 0xB7, 0x98, 0xB8, /* 0x00-0x03 */ + 0x98, 0xB9, 0x98, 0xBA, 0x98, 0xBB, 0x98, 0xBC, /* 0x04-0x07 */ + 0x98, 0xBD, 0x98, 0xBE, 0xB7, 0xAE, 0x98, 0xBF, /* 0x08-0x0B */ + 0x98, 0xC0, 0x98, 0xC1, 0x98, 0xC2, 0x98, 0xC3, /* 0x0C-0x0F */ + 0x98, 0xC4, 0x98, 0xC5, 0x98, 0xC6, 0x98, 0xC7, /* 0x10-0x13 */ + 0x98, 0xC8, 0x98, 0xC9, 0x98, 0xCA, 0xE9, 0xCB, /* 0x14-0x17 */ + 0xE9, 0xCC, 0x98, 0xCB, 0x98, 0xCC, 0x98, 0xCD, /* 0x18-0x1B */ + 0x98, 0xCE, 0x98, 0xCF, 0x98, 0xD0, 0xD5, 0xC1, /* 0x1C-0x1F */ + 0x98, 0xD1, 0xC4, 0xA3, 0x98, 0xD2, 0x98, 0xD3, /* 0x20-0x23 */ + 0x98, 0xD4, 0x98, 0xD5, 0x98, 0xD6, 0x98, 0xD7, /* 0x24-0x27 */ + 0xE9, 0xD8, 0x98, 0xD8, 0xBA, 0xE1, 0x98, 0xD9, /* 0x28-0x2B */ + 0x98, 0xDA, 0x98, 0xDB, 0x98, 0xDC, 0xE9, 0xC9, /* 0x2C-0x2F */ + 0x98, 0xDD, 0xD3, 0xA3, 0x98, 0xDE, 0x98, 0xDF, /* 0x30-0x33 */ + 0x98, 0xE0, 0xE9, 0xD4, 0x98, 0xE1, 0x98, 0xE2, /* 0x34-0x37 */ + 0x98, 0xE3, 0x98, 0xE4, 0x98, 0xE5, 0x98, 0xE6, /* 0x38-0x3B */ + 0x98, 0xE7, 0xE9, 0xD7, 0xE9, 0xD0, 0x98, 0xE8, /* 0x3C-0x3F */ + 0x98, 0xE9, 0x98, 0xEA, 0x98, 0xEB, 0x98, 0xEC, /* 0x40-0x43 */ + 0xE9, 0xCF, 0x98, 0xED, 0x98, 0xEE, 0xC7, 0xC1, /* 0x44-0x47 */ + 0x98, 0xEF, 0x98, 0xF0, 0x98, 0xF1, 0x98, 0xF2, /* 0x48-0x4B */ + 0x98, 0xF3, 0x98, 0xF4, 0x98, 0xF5, 0x98, 0xF6, /* 0x4C-0x4F */ + 0xE9, 0xD2, 0x98, 0xF7, 0x98, 0xF8, 0x98, 0xF9, /* 0x50-0x53 */ + 0x98, 0xFA, 0x98, 0xFB, 0x98, 0xFC, 0x98, 0xFD, /* 0x54-0x57 */ + 0xE9, 0xD9, 0xB3, 0xC8, 0x98, 0xFE, 0xE9, 0xD3, /* 0x58-0x5B */ + 0x99, 0x40, 0x99, 0x41, 0x99, 0x42, 0x99, 0x43, /* 0x5C-0x5F */ + 0x99, 0x44, 0xCF, 0xF0, 0x99, 0x45, 0x99, 0x46, /* 0x60-0x63 */ + 0x99, 0x47, 0xE9, 0xCD, 0x99, 0x48, 0x99, 0x49, /* 0x64-0x67 */ + 0x99, 0x4A, 0x99, 0x4B, 0x99, 0x4C, 0x99, 0x4D, /* 0x68-0x6B */ + 0x99, 0x4E, 0x99, 0x4F, 0x99, 0x50, 0x99, 0x51, /* 0x6C-0x6F */ + 0x99, 0x52, 0xB3, 0xF7, 0x99, 0x53, 0x99, 0x54, /* 0x70-0x73 */ + 0x99, 0x55, 0x99, 0x56, 0x99, 0x57, 0x99, 0x58, /* 0x74-0x77 */ + 0x99, 0x59, 0xE9, 0xD6, 0x99, 0x5A, 0x99, 0x5B, /* 0x78-0x7B */ + 0xE9, 0xDA, 0x99, 0x5C, 0x99, 0x5D, 0x99, 0x5E, /* 0x7C-0x7F */ + + 0xCC, 0xB4, 0x99, 0x5F, 0x99, 0x60, 0x99, 0x61, /* 0x80-0x83 */ + 0xCF, 0xAD, 0x99, 0x62, 0x99, 0x63, 0x99, 0x64, /* 0x84-0x87 */ + 0x99, 0x65, 0x99, 0x66, 0x99, 0x67, 0x99, 0x68, /* 0x88-0x8B */ + 0x99, 0x69, 0x99, 0x6A, 0xE9, 0xD5, 0x99, 0x6B, /* 0x8C-0x8F */ + 0xE9, 0xDC, 0xE9, 0xDB, 0x99, 0x6C, 0x99, 0x6D, /* 0x90-0x93 */ + 0x99, 0x6E, 0x99, 0x6F, 0x99, 0x70, 0xE9, 0xDE, /* 0x94-0x97 */ + 0x99, 0x71, 0x99, 0x72, 0x99, 0x73, 0x99, 0x74, /* 0x98-0x9B */ + 0x99, 0x75, 0x99, 0x76, 0x99, 0x77, 0x99, 0x78, /* 0x9C-0x9F */ + 0xE9, 0xD1, 0x99, 0x79, 0x99, 0x7A, 0x99, 0x7B, /* 0xA0-0xA3 */ + 0x99, 0x7C, 0x99, 0x7D, 0x99, 0x7E, 0x99, 0x80, /* 0xA4-0xA7 */ + 0x99, 0x81, 0xE9, 0xDD, 0x99, 0x82, 0xE9, 0xDF, /* 0xA8-0xAB */ + 0xC3, 0xCA, 0x99, 0x83, 0x99, 0x84, 0x99, 0x85, /* 0xAC-0xAF */ + 0x99, 0x86, 0x99, 0x87, 0x99, 0x88, 0x99, 0x89, /* 0xB0-0xB3 */ + 0x99, 0x8A, 0x99, 0x8B, 0x99, 0x8C, 0x99, 0x8D, /* 0xB4-0xB7 */ + 0x99, 0x8E, 0x99, 0x8F, 0x99, 0x90, 0x99, 0x91, /* 0xB8-0xBB */ + 0x99, 0x92, 0x99, 0x93, 0x99, 0x94, 0x99, 0x95, /* 0xBC-0xBF */ + 0x99, 0x96, 0x99, 0x97, 0x99, 0x98, 0x99, 0x99, /* 0xC0-0xC3 */ + 0x99, 0x9A, 0x99, 0x9B, 0x99, 0x9C, 0x99, 0x9D, /* 0xC4-0xC7 */ + 0x99, 0x9E, 0x99, 0x9F, 0x99, 0xA0, 0x99, 0xA1, /* 0xC8-0xCB */ + 0x99, 0xA2, 0x99, 0xA3, 0x99, 0xA4, 0x99, 0xA5, /* 0xCC-0xCF */ + 0x99, 0xA6, 0x99, 0xA7, 0x99, 0xA8, 0x99, 0xA9, /* 0xD0-0xD3 */ + 0x99, 0xAA, 0x99, 0xAB, 0x99, 0xAC, 0x99, 0xAD, /* 0xD4-0xD7 */ + 0x99, 0xAE, 0x99, 0xAF, 0x99, 0xB0, 0x99, 0xB1, /* 0xD8-0xDB */ + 0x99, 0xB2, 0x99, 0xB3, 0x99, 0xB4, 0x99, 0xB5, /* 0xDC-0xDF */ + 0x99, 0xB6, 0x99, 0xB7, 0x99, 0xB8, 0x99, 0xB9, /* 0xE0-0xE3 */ + 0x99, 0xBA, 0x99, 0xBB, 0x99, 0xBC, 0x99, 0xBD, /* 0xE4-0xE7 */ + 0x99, 0xBE, 0x99, 0xBF, 0x99, 0xC0, 0x99, 0xC1, /* 0xE8-0xEB */ + 0x99, 0xC2, 0x99, 0xC3, 0x99, 0xC4, 0x99, 0xC5, /* 0xEC-0xEF */ + 0x99, 0xC6, 0x99, 0xC7, 0x99, 0xC8, 0x99, 0xC9, /* 0xF0-0xF3 */ + 0x99, 0xCA, 0x99, 0xCB, 0x99, 0xCC, 0x99, 0xCD, /* 0xF4-0xF7 */ + 0x99, 0xCE, 0x99, 0xCF, 0x99, 0xD0, 0x99, 0xD1, /* 0xF8-0xFB */ + 0x99, 0xD2, 0x99, 0xD3, 0x99, 0xD4, 0x99, 0xD5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6B[512] = { + 0x99, 0xD6, 0x99, 0xD7, 0x99, 0xD8, 0x99, 0xD9, /* 0x00-0x03 */ + 0x99, 0xDA, 0x99, 0xDB, 0x99, 0xDC, 0x99, 0xDD, /* 0x04-0x07 */ + 0x99, 0xDE, 0x99, 0xDF, 0x99, 0xE0, 0x99, 0xE1, /* 0x08-0x0B */ + 0x99, 0xE2, 0x99, 0xE3, 0x99, 0xE4, 0x99, 0xE5, /* 0x0C-0x0F */ + 0x99, 0xE6, 0x99, 0xE7, 0x99, 0xE8, 0x99, 0xE9, /* 0x10-0x13 */ + 0x99, 0xEA, 0x99, 0xEB, 0x99, 0xEC, 0x99, 0xED, /* 0x14-0x17 */ + 0x99, 0xEE, 0x99, 0xEF, 0x99, 0xF0, 0x99, 0xF1, /* 0x18-0x1B */ + 0x99, 0xF2, 0x99, 0xF3, 0x99, 0xF4, 0x99, 0xF5, /* 0x1C-0x1F */ + 0xC7, 0xB7, 0xB4, 0xCE, 0xBB, 0xB6, 0xD0, 0xC0, /* 0x20-0x23 */ + 0xEC, 0xA3, 0x99, 0xF6, 0x99, 0xF7, 0xC5, 0xB7, /* 0x24-0x27 */ + 0x99, 0xF8, 0x99, 0xF9, 0x99, 0xFA, 0x99, 0xFB, /* 0x28-0x2B */ + 0x99, 0xFC, 0x99, 0xFD, 0x99, 0xFE, 0x9A, 0x40, /* 0x2C-0x2F */ + 0x9A, 0x41, 0x9A, 0x42, 0xD3, 0xFB, 0x9A, 0x43, /* 0x30-0x33 */ + 0x9A, 0x44, 0x9A, 0x45, 0x9A, 0x46, 0xEC, 0xA4, /* 0x34-0x37 */ + 0x9A, 0x47, 0xEC, 0xA5, 0xC6, 0xDB, 0x9A, 0x48, /* 0x38-0x3B */ + 0x9A, 0x49, 0x9A, 0x4A, 0xBF, 0xEE, 0x9A, 0x4B, /* 0x3C-0x3F */ + 0x9A, 0x4C, 0x9A, 0x4D, 0x9A, 0x4E, 0xEC, 0xA6, /* 0x40-0x43 */ + 0x9A, 0x4F, 0x9A, 0x50, 0xEC, 0xA7, 0xD0, 0xAA, /* 0x44-0x47 */ + 0x9A, 0x51, 0xC7, 0xB8, 0x9A, 0x52, 0x9A, 0x53, /* 0x48-0x4B */ + 0xB8, 0xE8, 0x9A, 0x54, 0x9A, 0x55, 0x9A, 0x56, /* 0x4C-0x4F */ + 0x9A, 0x57, 0x9A, 0x58, 0x9A, 0x59, 0x9A, 0x5A, /* 0x50-0x53 */ + 0x9A, 0x5B, 0x9A, 0x5C, 0x9A, 0x5D, 0x9A, 0x5E, /* 0x54-0x57 */ + 0x9A, 0x5F, 0xEC, 0xA8, 0x9A, 0x60, 0x9A, 0x61, /* 0x58-0x5B */ + 0x9A, 0x62, 0x9A, 0x63, 0x9A, 0x64, 0x9A, 0x65, /* 0x5C-0x5F */ + 0x9A, 0x66, 0x9A, 0x67, 0xD6, 0xB9, 0xD5, 0xFD, /* 0x60-0x63 */ + 0xB4, 0xCB, 0xB2, 0xBD, 0xCE, 0xE4, 0xC6, 0xE7, /* 0x64-0x67 */ + 0x9A, 0x68, 0x9A, 0x69, 0xCD, 0xE1, 0x9A, 0x6A, /* 0x68-0x6B */ + 0x9A, 0x6B, 0x9A, 0x6C, 0x9A, 0x6D, 0x9A, 0x6E, /* 0x6C-0x6F */ + 0x9A, 0x6F, 0x9A, 0x70, 0x9A, 0x71, 0x9A, 0x72, /* 0x70-0x73 */ + 0x9A, 0x73, 0x9A, 0x74, 0x9A, 0x75, 0x9A, 0x76, /* 0x74-0x77 */ + 0x9A, 0x77, 0xB4, 0xF5, 0x9A, 0x78, 0xCB, 0xC0, /* 0x78-0x7B */ + 0xBC, 0xDF, 0x9A, 0x79, 0x9A, 0x7A, 0x9A, 0x7B, /* 0x7C-0x7F */ + + 0x9A, 0x7C, 0xE9, 0xE2, 0xE9, 0xE3, 0xD1, 0xEA, /* 0x80-0x83 */ + 0xE9, 0xE5, 0x9A, 0x7D, 0xB4, 0xF9, 0xE9, 0xE4, /* 0x84-0x87 */ + 0x9A, 0x7E, 0xD1, 0xB3, 0xCA, 0xE2, 0xB2, 0xD0, /* 0x88-0x8B */ + 0x9A, 0x80, 0xE9, 0xE8, 0x9A, 0x81, 0x9A, 0x82, /* 0x8C-0x8F */ + 0x9A, 0x83, 0x9A, 0x84, 0xE9, 0xE6, 0xE9, 0xE7, /* 0x90-0x93 */ + 0x9A, 0x85, 0x9A, 0x86, 0xD6, 0xB3, 0x9A, 0x87, /* 0x94-0x97 */ + 0x9A, 0x88, 0x9A, 0x89, 0xE9, 0xE9, 0xE9, 0xEA, /* 0x98-0x9B */ + 0x9A, 0x8A, 0x9A, 0x8B, 0x9A, 0x8C, 0x9A, 0x8D, /* 0x9C-0x9F */ + 0x9A, 0x8E, 0xE9, 0xEB, 0x9A, 0x8F, 0x9A, 0x90, /* 0xA0-0xA3 */ + 0x9A, 0x91, 0x9A, 0x92, 0x9A, 0x93, 0x9A, 0x94, /* 0xA4-0xA7 */ + 0x9A, 0x95, 0x9A, 0x96, 0xE9, 0xEC, 0x9A, 0x97, /* 0xA8-0xAB */ + 0x9A, 0x98, 0x9A, 0x99, 0x9A, 0x9A, 0x9A, 0x9B, /* 0xAC-0xAF */ + 0x9A, 0x9C, 0x9A, 0x9D, 0x9A, 0x9E, 0xEC, 0xAF, /* 0xB0-0xB3 */ + 0xC5, 0xB9, 0xB6, 0xCE, 0x9A, 0x9F, 0xD2, 0xF3, /* 0xB4-0xB7 */ + 0x9A, 0xA0, 0x9A, 0xA1, 0x9A, 0xA2, 0x9A, 0xA3, /* 0xB8-0xBB */ + 0x9A, 0xA4, 0x9A, 0xA5, 0x9A, 0xA6, 0xB5, 0xEE, /* 0xBC-0xBF */ + 0x9A, 0xA7, 0xBB, 0xD9, 0xEC, 0xB1, 0x9A, 0xA8, /* 0xC0-0xC3 */ + 0x9A, 0xA9, 0xD2, 0xE3, 0x9A, 0xAA, 0x9A, 0xAB, /* 0xC4-0xC7 */ + 0x9A, 0xAC, 0x9A, 0xAD, 0x9A, 0xAE, 0xCE, 0xE3, /* 0xC8-0xCB */ + 0x9A, 0xAF, 0xC4, 0xB8, 0x9A, 0xB0, 0xC3, 0xBF, /* 0xCC-0xCF */ + 0x9A, 0xB1, 0x9A, 0xB2, 0xB6, 0xBE, 0xD8, 0xB9, /* 0xD0-0xD3 */ + 0xB1, 0xC8, 0xB1, 0xCF, 0xB1, 0xD1, 0xC5, 0xFE, /* 0xD4-0xD7 */ + 0x9A, 0xB3, 0xB1, 0xD0, 0x9A, 0xB4, 0xC3, 0xAB, /* 0xD8-0xDB */ + 0x9A, 0xB5, 0x9A, 0xB6, 0x9A, 0xB7, 0x9A, 0xB8, /* 0xDC-0xDF */ + 0x9A, 0xB9, 0xD5, 0xB1, 0x9A, 0xBA, 0x9A, 0xBB, /* 0xE0-0xE3 */ + 0x9A, 0xBC, 0x9A, 0xBD, 0x9A, 0xBE, 0x9A, 0xBF, /* 0xE4-0xE7 */ + 0x9A, 0xC0, 0x9A, 0xC1, 0xEB, 0xA4, 0xBA, 0xC1, /* 0xE8-0xEB */ + 0x9A, 0xC2, 0x9A, 0xC3, 0x9A, 0xC4, 0xCC, 0xBA, /* 0xEC-0xEF */ + 0x9A, 0xC5, 0x9A, 0xC6, 0x9A, 0xC7, 0xEB, 0xA5, /* 0xF0-0xF3 */ + 0x9A, 0xC8, 0xEB, 0xA7, 0x9A, 0xC9, 0x9A, 0xCA, /* 0xF4-0xF7 */ + 0x9A, 0xCB, 0xEB, 0xA8, 0x9A, 0xCC, 0x9A, 0xCD, /* 0xF8-0xFB */ + 0x9A, 0xCE, 0xEB, 0xA6, 0x9A, 0xCF, 0x9A, 0xD0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6C[512] = { + 0x9A, 0xD1, 0x9A, 0xD2, 0x9A, 0xD3, 0x9A, 0xD4, /* 0x00-0x03 */ + 0x9A, 0xD5, 0xEB, 0xA9, 0xEB, 0xAB, 0xEB, 0xAA, /* 0x04-0x07 */ + 0x9A, 0xD6, 0x9A, 0xD7, 0x9A, 0xD8, 0x9A, 0xD9, /* 0x08-0x0B */ + 0x9A, 0xDA, 0xEB, 0xAC, 0x9A, 0xDB, 0xCA, 0xCF, /* 0x0C-0x0F */ + 0xD8, 0xB5, 0xC3, 0xF1, 0x9A, 0xDC, 0xC3, 0xA5, /* 0x10-0x13 */ + 0xC6, 0xF8, 0xEB, 0xAD, 0xC4, 0xCA, 0x9A, 0xDD, /* 0x14-0x17 */ + 0xEB, 0xAE, 0xEB, 0xAF, 0xEB, 0xB0, 0xB7, 0xD5, /* 0x18-0x1B */ + 0x9A, 0xDE, 0x9A, 0xDF, 0x9A, 0xE0, 0xB7, 0xFA, /* 0x1C-0x1F */ + 0x9A, 0xE1, 0xEB, 0xB1, 0xC7, 0xE2, 0x9A, 0xE2, /* 0x20-0x23 */ + 0xEB, 0xB3, 0x9A, 0xE3, 0xBA, 0xA4, 0xD1, 0xF5, /* 0x24-0x27 */ + 0xB0, 0xB1, 0xEB, 0xB2, 0xEB, 0xB4, 0x9A, 0xE4, /* 0x28-0x2B */ + 0x9A, 0xE5, 0x9A, 0xE6, 0xB5, 0xAA, 0xC2, 0xC8, /* 0x2C-0x2F */ + 0xC7, 0xE8, 0x9A, 0xE7, 0xEB, 0xB5, 0x9A, 0xE8, /* 0x30-0x33 */ + 0xCB, 0xAE, 0xE3, 0xDF, 0x9A, 0xE9, 0x9A, 0xEA, /* 0x34-0x37 */ + 0xD3, 0xC0, 0x9A, 0xEB, 0x9A, 0xEC, 0x9A, 0xED, /* 0x38-0x3B */ + 0x9A, 0xEE, 0xD9, 0xDB, 0x9A, 0xEF, 0x9A, 0xF0, /* 0x3C-0x3F */ + 0xCD, 0xA1, 0xD6, 0xAD, 0xC7, 0xF3, 0x9A, 0xF1, /* 0x40-0x43 */ + 0x9A, 0xF2, 0x9A, 0xF3, 0xD9, 0xE0, 0xBB, 0xE3, /* 0x44-0x47 */ + 0x9A, 0xF4, 0xBA, 0xBA, 0xE3, 0xE2, 0x9A, 0xF5, /* 0x48-0x4B */ + 0x9A, 0xF6, 0x9A, 0xF7, 0x9A, 0xF8, 0x9A, 0xF9, /* 0x4C-0x4F */ + 0xCF, 0xAB, 0x9A, 0xFA, 0x9A, 0xFB, 0x9A, 0xFC, /* 0x50-0x53 */ + 0xE3, 0xE0, 0xC9, 0xC7, 0x9A, 0xFD, 0xBA, 0xB9, /* 0x54-0x57 */ + 0x9A, 0xFE, 0x9B, 0x40, 0x9B, 0x41, 0xD1, 0xB4, /* 0x58-0x5B */ + 0xE3, 0xE1, 0xC8, 0xEA, 0xB9, 0xAF, 0xBD, 0xAD, /* 0x5C-0x5F */ + 0xB3, 0xD8, 0xCE, 0xDB, 0x9B, 0x42, 0x9B, 0x43, /* 0x60-0x63 */ + 0xCC, 0xC0, 0x9B, 0x44, 0x9B, 0x45, 0x9B, 0x46, /* 0x64-0x67 */ + 0xE3, 0xE8, 0xE3, 0xE9, 0xCD, 0xF4, 0x9B, 0x47, /* 0x68-0x6B */ + 0x9B, 0x48, 0x9B, 0x49, 0x9B, 0x4A, 0x9B, 0x4B, /* 0x6C-0x6F */ + 0xCC, 0xAD, 0x9B, 0x4C, 0xBC, 0xB3, 0x9B, 0x4D, /* 0x70-0x73 */ + 0xE3, 0xEA, 0x9B, 0x4E, 0xE3, 0xEB, 0x9B, 0x4F, /* 0x74-0x77 */ + 0x9B, 0x50, 0xD0, 0xDA, 0x9B, 0x51, 0x9B, 0x52, /* 0x78-0x7B */ + 0x9B, 0x53, 0xC6, 0xFB, 0xB7, 0xDA, 0x9B, 0x54, /* 0x7C-0x7F */ + + 0x9B, 0x55, 0xC7, 0xDF, 0xD2, 0xCA, 0xCE, 0xD6, /* 0x80-0x83 */ + 0x9B, 0x56, 0xE3, 0xE4, 0xE3, 0xEC, 0x9B, 0x57, /* 0x84-0x87 */ + 0xC9, 0xF2, 0xB3, 0xC1, 0x9B, 0x58, 0x9B, 0x59, /* 0x88-0x8B */ + 0xE3, 0xE7, 0x9B, 0x5A, 0x9B, 0x5B, 0xC6, 0xE3, /* 0x8C-0x8F */ + 0xE3, 0xE5, 0x9B, 0x5C, 0x9B, 0x5D, 0xED, 0xB3, /* 0x90-0x93 */ + 0xE3, 0xE6, 0x9B, 0x5E, 0x9B, 0x5F, 0x9B, 0x60, /* 0x94-0x97 */ + 0x9B, 0x61, 0xC9, 0xB3, 0x9B, 0x62, 0xC5, 0xE6, /* 0x98-0x9B */ + 0x9B, 0x63, 0x9B, 0x64, 0x9B, 0x65, 0xB9, 0xB5, /* 0x9C-0x9F */ + 0x9B, 0x66, 0xC3, 0xBB, 0x9B, 0x67, 0xE3, 0xE3, /* 0xA0-0xA3 */ + 0xC5, 0xBD, 0xC1, 0xA4, 0xC2, 0xD9, 0xB2, 0xD7, /* 0xA4-0xA7 */ + 0x9B, 0x68, 0xE3, 0xED, 0xBB, 0xA6, 0xC4, 0xAD, /* 0xA8-0xAB */ + 0x9B, 0x69, 0xE3, 0xF0, 0xBE, 0xDA, 0x9B, 0x6A, /* 0xAC-0xAF */ + 0x9B, 0x6B, 0xE3, 0xFB, 0xE3, 0xF5, 0xBA, 0xD3, /* 0xB0-0xB3 */ + 0x9B, 0x6C, 0x9B, 0x6D, 0x9B, 0x6E, 0x9B, 0x6F, /* 0xB4-0xB7 */ + 0xB7, 0xD0, 0xD3, 0xCD, 0x9B, 0x70, 0xD6, 0xCE, /* 0xB8-0xBB */ + 0xD5, 0xD3, 0xB9, 0xC1, 0xD5, 0xB4, 0xD1, 0xD8, /* 0xBC-0xBF */ + 0x9B, 0x71, 0x9B, 0x72, 0x9B, 0x73, 0x9B, 0x74, /* 0xC0-0xC3 */ + 0xD0, 0xB9, 0xC7, 0xF6, 0x9B, 0x75, 0x9B, 0x76, /* 0xC4-0xC7 */ + 0x9B, 0x77, 0xC8, 0xAA, 0xB2, 0xB4, 0x9B, 0x78, /* 0xC8-0xCB */ + 0xC3, 0xDA, 0x9B, 0x79, 0x9B, 0x7A, 0x9B, 0x7B, /* 0xCC-0xCF */ + 0xE3, 0xEE, 0x9B, 0x7C, 0x9B, 0x7D, 0xE3, 0xFC, /* 0xD0-0xD3 */ + 0xE3, 0xEF, 0xB7, 0xA8, 0xE3, 0xF7, 0xE3, 0xF4, /* 0xD4-0xD7 */ + 0x9B, 0x7E, 0x9B, 0x80, 0x9B, 0x81, 0xB7, 0xBA, /* 0xD8-0xDB */ + 0x9B, 0x82, 0x9B, 0x83, 0xC5, 0xA2, 0x9B, 0x84, /* 0xDC-0xDF */ + 0xE3, 0xF6, 0xC5, 0xDD, 0xB2, 0xA8, 0xC6, 0xFC, /* 0xE0-0xE3 */ + 0x9B, 0x85, 0xC4, 0xE0, 0x9B, 0x86, 0x9B, 0x87, /* 0xE4-0xE7 */ + 0xD7, 0xA2, 0x9B, 0x88, 0xC0, 0xE1, 0xE3, 0xF9, /* 0xE8-0xEB */ + 0x9B, 0x89, 0x9B, 0x8A, 0xE3, 0xFA, 0xE3, 0xFD, /* 0xEC-0xEF */ + 0xCC, 0xA9, 0xE3, 0xF3, 0x9B, 0x8B, 0xD3, 0xBE, /* 0xF0-0xF3 */ + 0x9B, 0x8C, 0xB1, 0xC3, 0xED, 0xB4, 0xE3, 0xF1, /* 0xF4-0xF7 */ + 0xE3, 0xF2, 0x9B, 0x8D, 0xE3, 0xF8, 0xD0, 0xBA, /* 0xF8-0xFB */ + 0xC6, 0xC3, 0xD4, 0xF3, 0xE3, 0xFE, 0x9B, 0x8E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6D[512] = { + 0x9B, 0x8F, 0xBD, 0xE0, 0x9B, 0x90, 0x9B, 0x91, /* 0x00-0x03 */ + 0xE4, 0xA7, 0x9B, 0x92, 0x9B, 0x93, 0xE4, 0xA6, /* 0x04-0x07 */ + 0x9B, 0x94, 0x9B, 0x95, 0x9B, 0x96, 0xD1, 0xF3, /* 0x08-0x0B */ + 0xE4, 0xA3, 0x9B, 0x97, 0xE4, 0xA9, 0x9B, 0x98, /* 0x0C-0x0F */ + 0x9B, 0x99, 0x9B, 0x9A, 0xC8, 0xF7, 0x9B, 0x9B, /* 0x10-0x13 */ + 0x9B, 0x9C, 0x9B, 0x9D, 0x9B, 0x9E, 0xCF, 0xB4, /* 0x14-0x17 */ + 0x9B, 0x9F, 0xE4, 0xA8, 0xE4, 0xAE, 0xC2, 0xE5, /* 0x18-0x1B */ + 0x9B, 0xA0, 0x9B, 0xA1, 0xB6, 0xB4, 0x9B, 0xA2, /* 0x1C-0x1F */ + 0x9B, 0xA3, 0x9B, 0xA4, 0x9B, 0xA5, 0x9B, 0xA6, /* 0x20-0x23 */ + 0x9B, 0xA7, 0xBD, 0xF2, 0x9B, 0xA8, 0xE4, 0xA2, /* 0x24-0x27 */ + 0x9B, 0xA9, 0x9B, 0xAA, 0xBA, 0xE9, 0xE4, 0xAA, /* 0x28-0x2B */ + 0x9B, 0xAB, 0x9B, 0xAC, 0xE4, 0xAC, 0x9B, 0xAD, /* 0x2C-0x2F */ + 0x9B, 0xAE, 0xB6, 0xFD, 0xD6, 0xDE, 0xE4, 0xB2, /* 0x30-0x33 */ + 0x9B, 0xAF, 0xE4, 0xAD, 0x9B, 0xB0, 0x9B, 0xB1, /* 0x34-0x37 */ + 0x9B, 0xB2, 0xE4, 0xA1, 0x9B, 0xB3, 0xBB, 0xEE, /* 0x38-0x3B */ + 0xCD, 0xDD, 0xC7, 0xA2, 0xC5, 0xC9, 0x9B, 0xB4, /* 0x3C-0x3F */ + 0x9B, 0xB5, 0xC1, 0xF7, 0x9B, 0xB6, 0xE4, 0xA4, /* 0x40-0x43 */ + 0x9B, 0xB7, 0xC7, 0xB3, 0xBD, 0xAC, 0xBD, 0xBD, /* 0x44-0x47 */ + 0xE4, 0xA5, 0x9B, 0xB8, 0xD7, 0xC7, 0xB2, 0xE2, /* 0x48-0x4B */ + 0x9B, 0xB9, 0xE4, 0xAB, 0xBC, 0xC3, 0xE4, 0xAF, /* 0x4C-0x4F */ + 0x9B, 0xBA, 0xBB, 0xEB, 0xE4, 0xB0, 0xC5, 0xA8, /* 0x50-0x53 */ + 0xE4, 0xB1, 0x9B, 0xBB, 0x9B, 0xBC, 0x9B, 0xBD, /* 0x54-0x57 */ + 0x9B, 0xBE, 0xD5, 0xE3, 0xBF, 0xA3, 0x9B, 0xBF, /* 0x58-0x5B */ + 0xE4, 0xBA, 0x9B, 0xC0, 0xE4, 0xB7, 0x9B, 0xC1, /* 0x5C-0x5F */ + 0xE4, 0xBB, 0x9B, 0xC2, 0x9B, 0xC3, 0xE4, 0xBD, /* 0x60-0x63 */ + 0x9B, 0xC4, 0x9B, 0xC5, 0xC6, 0xD6, 0x9B, 0xC6, /* 0x64-0x67 */ + 0x9B, 0xC7, 0xBA, 0xC6, 0xC0, 0xCB, 0x9B, 0xC8, /* 0x68-0x6B */ + 0x9B, 0xC9, 0x9B, 0xCA, 0xB8, 0xA1, 0xE4, 0xB4, /* 0x6C-0x6F */ + 0x9B, 0xCB, 0x9B, 0xCC, 0x9B, 0xCD, 0x9B, 0xCE, /* 0x70-0x73 */ + 0xD4, 0xA1, 0x9B, 0xCF, 0x9B, 0xD0, 0xBA, 0xA3, /* 0x74-0x77 */ + 0xBD, 0xFE, 0x9B, 0xD1, 0x9B, 0xD2, 0x9B, 0xD3, /* 0x78-0x7B */ + 0xE4, 0xBC, 0x9B, 0xD4, 0x9B, 0xD5, 0x9B, 0xD6, /* 0x7C-0x7F */ + + 0x9B, 0xD7, 0x9B, 0xD8, 0xCD, 0xBF, 0x9B, 0xD9, /* 0x80-0x83 */ + 0x9B, 0xDA, 0xC4, 0xF9, 0x9B, 0xDB, 0x9B, 0xDC, /* 0x84-0x87 */ + 0xCF, 0xFB, 0xC9, 0xE6, 0x9B, 0xDD, 0x9B, 0xDE, /* 0x88-0x8B */ + 0xD3, 0xBF, 0x9B, 0xDF, 0xCF, 0xD1, 0x9B, 0xE0, /* 0x8C-0x8F */ + 0x9B, 0xE1, 0xE4, 0xB3, 0x9B, 0xE2, 0xE4, 0xB8, /* 0x90-0x93 */ + 0xE4, 0xB9, 0xCC, 0xE9, 0x9B, 0xE3, 0x9B, 0xE4, /* 0x94-0x97 */ + 0x9B, 0xE5, 0x9B, 0xE6, 0x9B, 0xE7, 0xCC, 0xCE, /* 0x98-0x9B */ + 0x9B, 0xE8, 0xC0, 0xD4, 0xE4, 0xB5, 0xC1, 0xB0, /* 0x9C-0x9F */ + 0xE4, 0xB6, 0xCE, 0xD0, 0x9B, 0xE9, 0xBB, 0xC1, /* 0xA0-0xA3 */ + 0xB5, 0xD3, 0x9B, 0xEA, 0xC8, 0xF3, 0xBD, 0xA7, /* 0xA4-0xA7 */ + 0xD5, 0xC7, 0xC9, 0xAC, 0xB8, 0xA2, 0xE4, 0xCA, /* 0xA8-0xAB */ + 0x9B, 0xEB, 0x9B, 0xEC, 0xE4, 0xCC, 0xD1, 0xC4, /* 0xAC-0xAF */ + 0x9B, 0xED, 0x9B, 0xEE, 0xD2, 0xBA, 0x9B, 0xEF, /* 0xB0-0xB3 */ + 0x9B, 0xF0, 0xBA, 0xAD, 0x9B, 0xF1, 0x9B, 0xF2, /* 0xB4-0xB7 */ + 0xBA, 0xD4, 0x9B, 0xF3, 0x9B, 0xF4, 0x9B, 0xF5, /* 0xB8-0xBB */ + 0x9B, 0xF6, 0x9B, 0xF7, 0x9B, 0xF8, 0xE4, 0xC3, /* 0xBC-0xBF */ + 0xB5, 0xED, 0x9B, 0xF9, 0x9B, 0xFA, 0x9B, 0xFB, /* 0xC0-0xC3 */ + 0xD7, 0xCD, 0xE4, 0xC0, 0xCF, 0xFD, 0xE4, 0xBF, /* 0xC4-0xC7 */ + 0x9B, 0xFC, 0x9B, 0xFD, 0x9B, 0xFE, 0xC1, 0xDC, /* 0xC8-0xCB */ + 0xCC, 0xCA, 0x9C, 0x40, 0x9C, 0x41, 0x9C, 0x42, /* 0xCC-0xCF */ + 0x9C, 0x43, 0xCA, 0xE7, 0x9C, 0x44, 0x9C, 0x45, /* 0xD0-0xD3 */ + 0x9C, 0x46, 0x9C, 0x47, 0xC4, 0xD7, 0x9C, 0x48, /* 0xD4-0xD7 */ + 0xCC, 0xD4, 0xE4, 0xC8, 0x9C, 0x49, 0x9C, 0x4A, /* 0xD8-0xDB */ + 0x9C, 0x4B, 0xE4, 0xC7, 0xE4, 0xC1, 0x9C, 0x4C, /* 0xDC-0xDF */ + 0xE4, 0xC4, 0xB5, 0xAD, 0x9C, 0x4D, 0x9C, 0x4E, /* 0xE0-0xE3 */ + 0xD3, 0xD9, 0x9C, 0x4F, 0xE4, 0xC6, 0x9C, 0x50, /* 0xE4-0xE7 */ + 0x9C, 0x51, 0x9C, 0x52, 0x9C, 0x53, 0xD2, 0xF9, /* 0xE8-0xEB */ + 0xB4, 0xE3, 0x9C, 0x54, 0xBB, 0xB4, 0x9C, 0x55, /* 0xEC-0xEF */ + 0x9C, 0x56, 0xC9, 0xEE, 0x9C, 0x57, 0xB4, 0xBE, /* 0xF0-0xF3 */ + 0x9C, 0x58, 0x9C, 0x59, 0x9C, 0x5A, 0xBB, 0xEC, /* 0xF4-0xF7 */ + 0x9C, 0x5B, 0xD1, 0xCD, 0x9C, 0x5C, 0xCC, 0xED, /* 0xF8-0xFB */ + 0xED, 0xB5, 0x9C, 0x5D, 0x9C, 0x5E, 0x9C, 0x5F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0x9C, 0x60, 0x9C, 0x61, 0x9C, 0x62, 0x9C, 0x63, /* 0x00-0x03 */ + 0x9C, 0x64, 0xC7, 0xE5, 0x9C, 0x65, 0x9C, 0x66, /* 0x04-0x07 */ + 0x9C, 0x67, 0x9C, 0x68, 0xD4, 0xA8, 0x9C, 0x69, /* 0x08-0x0B */ + 0xE4, 0xCB, 0xD7, 0xD5, 0xE4, 0xC2, 0x9C, 0x6A, /* 0x0C-0x0F */ + 0xBD, 0xA5, 0xE4, 0xC5, 0x9C, 0x6B, 0x9C, 0x6C, /* 0x10-0x13 */ + 0xD3, 0xE6, 0x9C, 0x6D, 0xE4, 0xC9, 0xC9, 0xF8, /* 0x14-0x17 */ + 0x9C, 0x6E, 0x9C, 0x6F, 0xE4, 0xBE, 0x9C, 0x70, /* 0x18-0x1B */ + 0x9C, 0x71, 0xD3, 0xE5, 0x9C, 0x72, 0x9C, 0x73, /* 0x1C-0x1F */ + 0xC7, 0xFE, 0xB6, 0xC9, 0x9C, 0x74, 0xD4, 0xFC, /* 0x20-0x23 */ + 0xB2, 0xB3, 0xE4, 0xD7, 0x9C, 0x75, 0x9C, 0x76, /* 0x24-0x27 */ + 0x9C, 0x77, 0xCE, 0xC2, 0x9C, 0x78, 0xE4, 0xCD, /* 0x28-0x2B */ + 0x9C, 0x79, 0xCE, 0xBC, 0x9C, 0x7A, 0xB8, 0xDB, /* 0x2C-0x2F */ + 0x9C, 0x7B, 0x9C, 0x7C, 0xE4, 0xD6, 0x9C, 0x7D, /* 0x30-0x33 */ + 0xBF, 0xCA, 0x9C, 0x7E, 0x9C, 0x80, 0x9C, 0x81, /* 0x34-0x37 */ + 0xD3, 0xCE, 0x9C, 0x82, 0xC3, 0xEC, 0x9C, 0x83, /* 0x38-0x3B */ + 0x9C, 0x84, 0x9C, 0x85, 0x9C, 0x86, 0x9C, 0x87, /* 0x3C-0x3F */ + 0x9C, 0x88, 0x9C, 0x89, 0x9C, 0x8A, 0xC5, 0xC8, /* 0x40-0x43 */ + 0xE4, 0xD8, 0x9C, 0x8B, 0x9C, 0x8C, 0x9C, 0x8D, /* 0x44-0x47 */ + 0x9C, 0x8E, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x91, /* 0x48-0x4B */ + 0x9C, 0x92, 0xCD, 0xC4, 0xE4, 0xCF, 0x9C, 0x93, /* 0x4C-0x4F */ + 0x9C, 0x94, 0x9C, 0x95, 0x9C, 0x96, 0xE4, 0xD4, /* 0x50-0x53 */ + 0xE4, 0xD5, 0x9C, 0x97, 0xBA, 0xFE, 0x9C, 0x98, /* 0x54-0x57 */ + 0xCF, 0xE6, 0x9C, 0x99, 0x9C, 0x9A, 0xD5, 0xBF, /* 0x58-0x5B */ + 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9D, 0xE4, 0xD2, /* 0x5C-0x5F */ + 0x9C, 0x9E, 0x9C, 0x9F, 0x9C, 0xA0, 0x9C, 0xA1, /* 0x60-0x63 */ + 0x9C, 0xA2, 0x9C, 0xA3, 0x9C, 0xA4, 0x9C, 0xA5, /* 0x64-0x67 */ + 0x9C, 0xA6, 0x9C, 0xA7, 0x9C, 0xA8, 0xE4, 0xD0, /* 0x68-0x6B */ + 0x9C, 0xA9, 0x9C, 0xAA, 0xE4, 0xCE, 0x9C, 0xAB, /* 0x6C-0x6F */ + 0x9C, 0xAC, 0x9C, 0xAD, 0x9C, 0xAE, 0x9C, 0xAF, /* 0x70-0x73 */ + 0x9C, 0xB0, 0x9C, 0xB1, 0x9C, 0xB2, 0x9C, 0xB3, /* 0x74-0x77 */ + 0x9C, 0xB4, 0x9C, 0xB5, 0x9C, 0xB6, 0x9C, 0xB7, /* 0x78-0x7B */ + 0x9C, 0xB8, 0x9C, 0xB9, 0xCD, 0xE5, 0xCA, 0xAA, /* 0x7C-0x7F */ + + 0x9C, 0xBA, 0x9C, 0xBB, 0x9C, 0xBC, 0xC0, 0xA3, /* 0x80-0x83 */ + 0x9C, 0xBD, 0xBD, 0xA6, 0xE4, 0xD3, 0x9C, 0xBE, /* 0x84-0x87 */ + 0x9C, 0xBF, 0xB8, 0xC8, 0x9C, 0xC0, 0x9C, 0xC1, /* 0x88-0x8B */ + 0x9C, 0xC2, 0x9C, 0xC3, 0x9C, 0xC4, 0xE4, 0xE7, /* 0x8C-0x8F */ + 0xD4, 0xB4, 0x9C, 0xC5, 0x9C, 0xC6, 0x9C, 0xC7, /* 0x90-0x93 */ + 0x9C, 0xC8, 0x9C, 0xC9, 0x9C, 0xCA, 0x9C, 0xCB, /* 0x94-0x97 */ + 0xE4, 0xDB, 0x9C, 0xCC, 0x9C, 0xCD, 0x9C, 0xCE, /* 0x98-0x9B */ + 0xC1, 0xEF, 0x9C, 0xCF, 0x9C, 0xD0, 0xE4, 0xE9, /* 0x9C-0x9F */ + 0x9C, 0xD1, 0x9C, 0xD2, 0xD2, 0xE7, 0x9C, 0xD3, /* 0xA0-0xA3 */ + 0x9C, 0xD4, 0xE4, 0xDF, 0x9C, 0xD5, 0xE4, 0xE0, /* 0xA4-0xA7 */ + 0x9C, 0xD6, 0x9C, 0xD7, 0xCF, 0xAA, 0x9C, 0xD8, /* 0xA8-0xAB */ + 0x9C, 0xD9, 0x9C, 0xDA, 0x9C, 0xDB, 0xCB, 0xDD, /* 0xAC-0xAF */ + 0x9C, 0xDC, 0xE4, 0xDA, 0xE4, 0xD1, 0x9C, 0xDD, /* 0xB0-0xB3 */ + 0xE4, 0xE5, 0x9C, 0xDE, 0xC8, 0xDC, 0xE4, 0xE3, /* 0xB4-0xB7 */ + 0x9C, 0xDF, 0x9C, 0xE0, 0xC4, 0xE7, 0xE4, 0xE2, /* 0xB8-0xBB */ + 0x9C, 0xE1, 0xE4, 0xE1, 0x9C, 0xE2, 0x9C, 0xE3, /* 0xBC-0xBF */ + 0x9C, 0xE4, 0xB3, 0xFC, 0xE4, 0xE8, 0x9C, 0xE5, /* 0xC0-0xC3 */ + 0x9C, 0xE6, 0x9C, 0xE7, 0x9C, 0xE8, 0xB5, 0xE1, /* 0xC4-0xC7 */ + 0x9C, 0xE9, 0x9C, 0xEA, 0x9C, 0xEB, 0xD7, 0xCC, /* 0xC8-0xCB */ + 0x9C, 0xEC, 0x9C, 0xED, 0x9C, 0xEE, 0xE4, 0xE6, /* 0xCC-0xCF */ + 0x9C, 0xEF, 0xBB, 0xAC, 0x9C, 0xF0, 0xD7, 0xD2, /* 0xD0-0xD3 */ + 0xCC, 0xCF, 0xEB, 0xF8, 0x9C, 0xF1, 0xE4, 0xE4, /* 0xD4-0xD7 */ + 0x9C, 0xF2, 0x9C, 0xF3, 0xB9, 0xF6, 0x9C, 0xF4, /* 0xD8-0xDB */ + 0x9C, 0xF5, 0x9C, 0xF6, 0xD6, 0xCD, 0xE4, 0xD9, /* 0xDC-0xDF */ + 0xE4, 0xDC, 0xC2, 0xFA, 0xE4, 0xDE, 0x9C, 0xF7, /* 0xE0-0xE3 */ + 0xC2, 0xCB, 0xC0, 0xC4, 0xC2, 0xD0, 0x9C, 0xF8, /* 0xE4-0xE7 */ + 0xB1, 0xF5, 0xCC, 0xB2, 0x9C, 0xF9, 0x9C, 0xFA, /* 0xE8-0xEB */ + 0x9C, 0xFB, 0x9C, 0xFC, 0x9C, 0xFD, 0x9C, 0xFE, /* 0xEC-0xEF */ + 0x9D, 0x40, 0x9D, 0x41, 0x9D, 0x42, 0x9D, 0x43, /* 0xF0-0xF3 */ + 0xB5, 0xCE, 0x9D, 0x44, 0x9D, 0x45, 0x9D, 0x46, /* 0xF4-0xF7 */ + 0x9D, 0x47, 0xE4, 0xEF, 0x9D, 0x48, 0x9D, 0x49, /* 0xF8-0xFB */ + 0x9D, 0x4A, 0x9D, 0x4B, 0x9D, 0x4C, 0x9D, 0x4D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0x9D, 0x4E, 0x9D, 0x4F, 0xC6, 0xAF, 0x9D, 0x50, /* 0x00-0x03 */ + 0x9D, 0x51, 0x9D, 0x52, 0xC6, 0xE1, 0x9D, 0x53, /* 0x04-0x07 */ + 0x9D, 0x54, 0xE4, 0xF5, 0x9D, 0x55, 0x9D, 0x56, /* 0x08-0x0B */ + 0x9D, 0x57, 0x9D, 0x58, 0x9D, 0x59, 0xC2, 0xA9, /* 0x0C-0x0F */ + 0x9D, 0x5A, 0x9D, 0x5B, 0x9D, 0x5C, 0xC0, 0xEC, /* 0x10-0x13 */ + 0xD1, 0xDD, 0xE4, 0xEE, 0x9D, 0x5D, 0x9D, 0x5E, /* 0x14-0x17 */ + 0x9D, 0x5F, 0x9D, 0x60, 0x9D, 0x61, 0x9D, 0x62, /* 0x18-0x1B */ + 0x9D, 0x63, 0x9D, 0x64, 0x9D, 0x65, 0x9D, 0x66, /* 0x1C-0x1F */ + 0xC4, 0xAE, 0x9D, 0x67, 0x9D, 0x68, 0x9D, 0x69, /* 0x20-0x23 */ + 0xE4, 0xED, 0x9D, 0x6A, 0x9D, 0x6B, 0x9D, 0x6C, /* 0x24-0x27 */ + 0x9D, 0x6D, 0xE4, 0xF6, 0xE4, 0xF4, 0xC2, 0xFE, /* 0x28-0x2B */ + 0x9D, 0x6E, 0xE4, 0xDD, 0x9D, 0x6F, 0xE4, 0xF0, /* 0x2C-0x2F */ + 0x9D, 0x70, 0xCA, 0xFE, 0x9D, 0x71, 0xD5, 0xC4, /* 0x30-0x33 */ + 0x9D, 0x72, 0x9D, 0x73, 0xE4, 0xF1, 0x9D, 0x74, /* 0x34-0x37 */ + 0x9D, 0x75, 0x9D, 0x76, 0x9D, 0x77, 0x9D, 0x78, /* 0x38-0x3B */ + 0x9D, 0x79, 0x9D, 0x7A, 0xD1, 0xFA, 0x9D, 0x7B, /* 0x3C-0x3F */ + 0x9D, 0x7C, 0x9D, 0x7D, 0x9D, 0x7E, 0x9D, 0x80, /* 0x40-0x43 */ + 0x9D, 0x81, 0x9D, 0x82, 0xE4, 0xEB, 0xE4, 0xEC, /* 0x44-0x47 */ + 0x9D, 0x83, 0x9D, 0x84, 0x9D, 0x85, 0xE4, 0xF2, /* 0x48-0x4B */ + 0x9D, 0x86, 0xCE, 0xAB, 0x9D, 0x87, 0x9D, 0x88, /* 0x4C-0x4F */ + 0x9D, 0x89, 0x9D, 0x8A, 0x9D, 0x8B, 0x9D, 0x8C, /* 0x50-0x53 */ + 0x9D, 0x8D, 0x9D, 0x8E, 0x9D, 0x8F, 0x9D, 0x90, /* 0x54-0x57 */ + 0xC5, 0xCB, 0x9D, 0x91, 0x9D, 0x92, 0x9D, 0x93, /* 0x58-0x5B */ + 0xC7, 0xB1, 0x9D, 0x94, 0xC2, 0xBA, 0x9D, 0x95, /* 0x5C-0x5F */ + 0x9D, 0x96, 0x9D, 0x97, 0xE4, 0xEA, 0x9D, 0x98, /* 0x60-0x63 */ + 0x9D, 0x99, 0x9D, 0x9A, 0xC1, 0xCA, 0x9D, 0x9B, /* 0x64-0x67 */ + 0x9D, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9D, 0x9F, /* 0x68-0x6B */ + 0x9D, 0xA0, 0xCC, 0xB6, 0xB3, 0xB1, 0x9D, 0xA1, /* 0x6C-0x6F */ + 0x9D, 0xA2, 0x9D, 0xA3, 0xE4, 0xFB, 0x9D, 0xA4, /* 0x70-0x73 */ + 0xE4, 0xF3, 0x9D, 0xA5, 0x9D, 0xA6, 0x9D, 0xA7, /* 0x74-0x77 */ + 0xE4, 0xFA, 0x9D, 0xA8, 0xE4, 0xFD, 0x9D, 0xA9, /* 0x78-0x7B */ + 0xE4, 0xFC, 0x9D, 0xAA, 0x9D, 0xAB, 0x9D, 0xAC, /* 0x7C-0x7F */ + + 0x9D, 0xAD, 0x9D, 0xAE, 0x9D, 0xAF, 0x9D, 0xB0, /* 0x80-0x83 */ + 0xB3, 0xCE, 0x9D, 0xB1, 0x9D, 0xB2, 0x9D, 0xB3, /* 0x84-0x87 */ + 0xB3, 0xBA, 0xE4, 0xF7, 0x9D, 0xB4, 0x9D, 0xB5, /* 0x88-0x8B */ + 0xE4, 0xF9, 0xE4, 0xF8, 0xC5, 0xEC, 0x9D, 0xB6, /* 0x8C-0x8F */ + 0x9D, 0xB7, 0x9D, 0xB8, 0x9D, 0xB9, 0x9D, 0xBA, /* 0x90-0x93 */ + 0x9D, 0xBB, 0x9D, 0xBC, 0x9D, 0xBD, 0x9D, 0xBE, /* 0x94-0x97 */ + 0x9D, 0xBF, 0x9D, 0xC0, 0x9D, 0xC1, 0x9D, 0xC2, /* 0x98-0x9B */ + 0xC0, 0xBD, 0x9D, 0xC3, 0x9D, 0xC4, 0x9D, 0xC5, /* 0x9C-0x9F */ + 0x9D, 0xC6, 0xD4, 0xE8, 0x9D, 0xC7, 0x9D, 0xC8, /* 0xA0-0xA3 */ + 0x9D, 0xC9, 0x9D, 0xCA, 0x9D, 0xCB, 0xE5, 0xA2, /* 0xA4-0xA7 */ + 0x9D, 0xCC, 0x9D, 0xCD, 0x9D, 0xCE, 0x9D, 0xCF, /* 0xA8-0xAB */ + 0x9D, 0xD0, 0x9D, 0xD1, 0x9D, 0xD2, 0x9D, 0xD3, /* 0xAC-0xAF */ + 0x9D, 0xD4, 0x9D, 0xD5, 0x9D, 0xD6, 0xB0, 0xC4, /* 0xB0-0xB3 */ + 0x9D, 0xD7, 0x9D, 0xD8, 0xE5, 0xA4, 0x9D, 0xD9, /* 0xB4-0xB7 */ + 0x9D, 0xDA, 0xE5, 0xA3, 0x9D, 0xDB, 0x9D, 0xDC, /* 0xB8-0xBB */ + 0x9D, 0xDD, 0x9D, 0xDE, 0x9D, 0xDF, 0x9D, 0xE0, /* 0xBC-0xBF */ + 0xBC, 0xA4, 0x9D, 0xE1, 0xE5, 0xA5, 0x9D, 0xE2, /* 0xC0-0xC3 */ + 0x9D, 0xE3, 0x9D, 0xE4, 0x9D, 0xE5, 0x9D, 0xE6, /* 0xC4-0xC7 */ + 0x9D, 0xE7, 0xE5, 0xA1, 0x9D, 0xE8, 0x9D, 0xE9, /* 0xC8-0xCB */ + 0x9D, 0xEA, 0x9D, 0xEB, 0x9D, 0xEC, 0x9D, 0xED, /* 0xCC-0xCF */ + 0x9D, 0xEE, 0xE4, 0xFE, 0xB1, 0xF4, 0x9D, 0xEF, /* 0xD0-0xD3 */ + 0x9D, 0xF0, 0x9D, 0xF1, 0x9D, 0xF2, 0x9D, 0xF3, /* 0xD4-0xD7 */ + 0x9D, 0xF4, 0x9D, 0xF5, 0x9D, 0xF6, 0x9D, 0xF7, /* 0xD8-0xDB */ + 0x9D, 0xF8, 0x9D, 0xF9, 0xE5, 0xA8, 0x9D, 0xFA, /* 0xDC-0xDF */ + 0xE5, 0xA9, 0xE5, 0xA6, 0x9D, 0xFB, 0x9D, 0xFC, /* 0xE0-0xE3 */ + 0x9D, 0xFD, 0x9D, 0xFE, 0x9E, 0x40, 0x9E, 0x41, /* 0xE4-0xE7 */ + 0x9E, 0x42, 0x9E, 0x43, 0x9E, 0x44, 0x9E, 0x45, /* 0xE8-0xEB */ + 0x9E, 0x46, 0x9E, 0x47, 0xE5, 0xA7, 0xE5, 0xAA, /* 0xEC-0xEF */ + 0x9E, 0x48, 0x9E, 0x49, 0x9E, 0x4A, 0x9E, 0x4B, /* 0xF0-0xF3 */ + 0x9E, 0x4C, 0x9E, 0x4D, 0x9E, 0x4E, 0x9E, 0x4F, /* 0xF4-0xF7 */ + 0x9E, 0x50, 0x9E, 0x51, 0x9E, 0x52, 0x9E, 0x53, /* 0xF8-0xFB */ + 0x9E, 0x54, 0x9E, 0x55, 0x9E, 0x56, 0x9E, 0x57, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0x9E, 0x58, 0x9E, 0x59, 0x9E, 0x5A, 0x9E, 0x5B, /* 0x00-0x03 */ + 0x9E, 0x5C, 0x9E, 0x5D, 0x9E, 0x5E, 0x9E, 0x5F, /* 0x04-0x07 */ + 0x9E, 0x60, 0x9E, 0x61, 0x9E, 0x62, 0x9E, 0x63, /* 0x08-0x0B */ + 0x9E, 0x64, 0x9E, 0x65, 0x9E, 0x66, 0x9E, 0x67, /* 0x0C-0x0F */ + 0x9E, 0x68, 0xC6, 0xD9, 0x9E, 0x69, 0x9E, 0x6A, /* 0x10-0x13 */ + 0x9E, 0x6B, 0x9E, 0x6C, 0x9E, 0x6D, 0x9E, 0x6E, /* 0x14-0x17 */ + 0x9E, 0x6F, 0x9E, 0x70, 0xE5, 0xAB, 0xE5, 0xAD, /* 0x18-0x1B */ + 0x9E, 0x71, 0x9E, 0x72, 0x9E, 0x73, 0x9E, 0x74, /* 0x1C-0x1F */ + 0x9E, 0x75, 0x9E, 0x76, 0x9E, 0x77, 0xE5, 0xAC, /* 0x20-0x23 */ + 0x9E, 0x78, 0x9E, 0x79, 0x9E, 0x7A, 0x9E, 0x7B, /* 0x24-0x27 */ + 0x9E, 0x7C, 0x9E, 0x7D, 0x9E, 0x7E, 0x9E, 0x80, /* 0x28-0x2B */ + 0x9E, 0x81, 0x9E, 0x82, 0x9E, 0x83, 0x9E, 0x84, /* 0x2C-0x2F */ + 0x9E, 0x85, 0x9E, 0x86, 0x9E, 0x87, 0x9E, 0x88, /* 0x30-0x33 */ + 0x9E, 0x89, 0xE5, 0xAF, 0x9E, 0x8A, 0x9E, 0x8B, /* 0x34-0x37 */ + 0x9E, 0x8C, 0xE5, 0xAE, 0x9E, 0x8D, 0x9E, 0x8E, /* 0x38-0x3B */ + 0x9E, 0x8F, 0x9E, 0x90, 0x9E, 0x91, 0x9E, 0x92, /* 0x3C-0x3F */ + 0x9E, 0x93, 0x9E, 0x94, 0x9E, 0x95, 0x9E, 0x96, /* 0x40-0x43 */ + 0x9E, 0x97, 0x9E, 0x98, 0x9E, 0x99, 0x9E, 0x9A, /* 0x44-0x47 */ + 0x9E, 0x9B, 0x9E, 0x9C, 0x9E, 0x9D, 0x9E, 0x9E, /* 0x48-0x4B */ + 0xB9, 0xE0, 0x9E, 0x9F, 0x9E, 0xA0, 0xE5, 0xB0, /* 0x4C-0x4F */ + 0x9E, 0xA1, 0x9E, 0xA2, 0x9E, 0xA3, 0x9E, 0xA4, /* 0x50-0x53 */ + 0x9E, 0xA5, 0x9E, 0xA6, 0x9E, 0xA7, 0x9E, 0xA8, /* 0x54-0x57 */ + 0x9E, 0xA9, 0x9E, 0xAA, 0x9E, 0xAB, 0x9E, 0xAC, /* 0x58-0x5B */ + 0x9E, 0xAD, 0x9E, 0xAE, 0xE5, 0xB1, 0x9E, 0xAF, /* 0x5C-0x5F */ + 0x9E, 0xB0, 0x9E, 0xB1, 0x9E, 0xB2, 0x9E, 0xB3, /* 0x60-0x63 */ + 0x9E, 0xB4, 0x9E, 0xB5, 0x9E, 0xB6, 0x9E, 0xB7, /* 0x64-0x67 */ + 0x9E, 0xB8, 0x9E, 0xB9, 0x9E, 0xBA, 0xBB, 0xF0, /* 0x68-0x6B */ + 0xEC, 0xE1, 0xC3, 0xF0, 0x9E, 0xBB, 0xB5, 0xC6, /* 0x6C-0x6F */ + 0xBB, 0xD2, 0x9E, 0xBC, 0x9E, 0xBD, 0x9E, 0xBE, /* 0x70-0x73 */ + 0x9E, 0xBF, 0xC1, 0xE9, 0xD4, 0xEE, 0x9E, 0xC0, /* 0x74-0x77 */ + 0xBE, 0xC4, 0x9E, 0xC1, 0x9E, 0xC2, 0x9E, 0xC3, /* 0x78-0x7B */ + 0xD7, 0xC6, 0x9E, 0xC4, 0xD4, 0xD6, 0xB2, 0xD3, /* 0x7C-0x7F */ + + 0xEC, 0xBE, 0x9E, 0xC5, 0x9E, 0xC6, 0x9E, 0xC7, /* 0x80-0x83 */ + 0x9E, 0xC8, 0xEA, 0xC1, 0x9E, 0xC9, 0x9E, 0xCA, /* 0x84-0x87 */ + 0x9E, 0xCB, 0xC2, 0xAF, 0xB4, 0xB6, 0x9E, 0xCC, /* 0x88-0x8B */ + 0x9E, 0xCD, 0x9E, 0xCE, 0xD1, 0xD7, 0x9E, 0xCF, /* 0x8C-0x8F */ + 0x9E, 0xD0, 0x9E, 0xD1, 0xB3, 0xB4, 0x9E, 0xD2, /* 0x90-0x93 */ + 0xC8, 0xB2, 0xBF, 0xBB, 0xEC, 0xC0, 0x9E, 0xD3, /* 0x94-0x97 */ + 0x9E, 0xD4, 0xD6, 0xCB, 0x9E, 0xD5, 0x9E, 0xD6, /* 0x98-0x9B */ + 0xEC, 0xBF, 0xEC, 0xC1, 0x9E, 0xD7, 0x9E, 0xD8, /* 0x9C-0x9F */ + 0x9E, 0xD9, 0x9E, 0xDA, 0x9E, 0xDB, 0x9E, 0xDC, /* 0xA0-0xA3 */ + 0x9E, 0xDD, 0x9E, 0xDE, 0x9E, 0xDF, 0x9E, 0xE0, /* 0xA4-0xA7 */ + 0x9E, 0xE1, 0x9E, 0xE2, 0x9E, 0xE3, 0xEC, 0xC5, /* 0xA8-0xAB */ + 0xBE, 0xE6, 0xCC, 0xBF, 0xC5, 0xDA, 0xBE, 0xBC, /* 0xAC-0xAF */ + 0x9E, 0xE4, 0xEC, 0xC6, 0x9E, 0xE5, 0xB1, 0xFE, /* 0xB0-0xB3 */ + 0x9E, 0xE6, 0x9E, 0xE7, 0x9E, 0xE8, 0xEC, 0xC4, /* 0xB4-0xB7 */ + 0xD5, 0xA8, 0xB5, 0xE3, 0x9E, 0xE9, 0xEC, 0xC2, /* 0xB8-0xBB */ + 0xC1, 0xB6, 0xB3, 0xE3, 0x9E, 0xEA, 0x9E, 0xEB, /* 0xBC-0xBF */ + 0xEC, 0xC3, 0xCB, 0xB8, 0xC0, 0xC3, 0xCC, 0xFE, /* 0xC0-0xC3 */ + 0x9E, 0xEC, 0x9E, 0xED, 0x9E, 0xEE, 0x9E, 0xEF, /* 0xC4-0xC7 */ + 0xC1, 0xD2, 0x9E, 0xF0, 0xEC, 0xC8, 0x9E, 0xF1, /* 0xC8-0xCB */ + 0x9E, 0xF2, 0x9E, 0xF3, 0x9E, 0xF4, 0x9E, 0xF5, /* 0xCC-0xCF */ + 0x9E, 0xF6, 0x9E, 0xF7, 0x9E, 0xF8, 0x9E, 0xF9, /* 0xD0-0xD3 */ + 0x9E, 0xFA, 0x9E, 0xFB, 0x9E, 0xFC, 0x9E, 0xFD, /* 0xD4-0xD7 */ + 0xBA, 0xE6, 0xC0, 0xD3, 0x9E, 0xFE, 0xD6, 0xF2, /* 0xD8-0xDB */ + 0x9F, 0x40, 0x9F, 0x41, 0x9F, 0x42, 0xD1, 0xCC, /* 0xDC-0xDF */ + 0x9F, 0x43, 0x9F, 0x44, 0x9F, 0x45, 0x9F, 0x46, /* 0xE0-0xE3 */ + 0xBF, 0xBE, 0x9F, 0x47, 0xB7, 0xB3, 0xC9, 0xD5, /* 0xE4-0xE7 */ + 0xEC, 0xC7, 0xBB, 0xE2, 0x9F, 0x48, 0xCC, 0xCC, /* 0xE8-0xEB */ + 0xBD, 0xFD, 0xC8, 0xC8, 0x9F, 0x49, 0xCF, 0xA9, /* 0xEC-0xEF */ + 0x9F, 0x4A, 0x9F, 0x4B, 0x9F, 0x4C, 0x9F, 0x4D, /* 0xF0-0xF3 */ + 0x9F, 0x4E, 0x9F, 0x4F, 0x9F, 0x50, 0xCD, 0xE9, /* 0xF4-0xF7 */ + 0x9F, 0x51, 0xC5, 0xEB, 0x9F, 0x52, 0x9F, 0x53, /* 0xF8-0xFB */ + 0x9F, 0x54, 0xB7, 0xE9, 0x9F, 0x55, 0x9F, 0x56, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0x9F, 0x57, 0x9F, 0x58, 0x9F, 0x59, 0x9F, 0x5A, /* 0x00-0x03 */ + 0x9F, 0x5B, 0x9F, 0x5C, 0x9F, 0x5D, 0x9F, 0x5E, /* 0x04-0x07 */ + 0x9F, 0x5F, 0xD1, 0xC9, 0xBA, 0xB8, 0x9F, 0x60, /* 0x08-0x0B */ + 0x9F, 0x61, 0x9F, 0x62, 0x9F, 0x63, 0x9F, 0x64, /* 0x0C-0x0F */ + 0xEC, 0xC9, 0x9F, 0x65, 0x9F, 0x66, 0xEC, 0xCA, /* 0x10-0x13 */ + 0x9F, 0x67, 0xBB, 0xC0, 0xEC, 0xCB, 0x9F, 0x68, /* 0x14-0x17 */ + 0xEC, 0xE2, 0xB1, 0xBA, 0xB7, 0xD9, 0x9F, 0x69, /* 0x18-0x1B */ + 0x9F, 0x6A, 0x9F, 0x6B, 0x9F, 0x6C, 0x9F, 0x6D, /* 0x1C-0x1F */ + 0x9F, 0x6E, 0x9F, 0x6F, 0x9F, 0x70, 0x9F, 0x71, /* 0x20-0x23 */ + 0x9F, 0x72, 0x9F, 0x73, 0xBD, 0xB9, 0x9F, 0x74, /* 0x24-0x27 */ + 0x9F, 0x75, 0x9F, 0x76, 0x9F, 0x77, 0x9F, 0x78, /* 0x28-0x2B */ + 0x9F, 0x79, 0x9F, 0x7A, 0x9F, 0x7B, 0xEC, 0xCC, /* 0x2C-0x2F */ + 0xD1, 0xE6, 0xEC, 0xCD, 0x9F, 0x7C, 0x9F, 0x7D, /* 0x30-0x33 */ + 0x9F, 0x7E, 0x9F, 0x80, 0xC8, 0xBB, 0x9F, 0x81, /* 0x34-0x37 */ + 0x9F, 0x82, 0x9F, 0x83, 0x9F, 0x84, 0x9F, 0x85, /* 0x38-0x3B */ + 0x9F, 0x86, 0x9F, 0x87, 0x9F, 0x88, 0x9F, 0x89, /* 0x3C-0x3F */ + 0x9F, 0x8A, 0x9F, 0x8B, 0x9F, 0x8C, 0x9F, 0x8D, /* 0x40-0x43 */ + 0x9F, 0x8E, 0xEC, 0xD1, 0x9F, 0x8F, 0x9F, 0x90, /* 0x44-0x47 */ + 0x9F, 0x91, 0x9F, 0x92, 0xEC, 0xD3, 0x9F, 0x93, /* 0x48-0x4B */ + 0xBB, 0xCD, 0x9F, 0x94, 0xBC, 0xE5, 0x9F, 0x95, /* 0x4C-0x4F */ + 0x9F, 0x96, 0x9F, 0x97, 0x9F, 0x98, 0x9F, 0x99, /* 0x50-0x53 */ + 0x9F, 0x9A, 0x9F, 0x9B, 0x9F, 0x9C, 0x9F, 0x9D, /* 0x54-0x57 */ + 0x9F, 0x9E, 0x9F, 0x9F, 0x9F, 0xA0, 0x9F, 0xA1, /* 0x58-0x5B */ + 0xEC, 0xCF, 0x9F, 0xA2, 0xC9, 0xB7, 0x9F, 0xA3, /* 0x5C-0x5F */ + 0x9F, 0xA4, 0x9F, 0xA5, 0x9F, 0xA6, 0x9F, 0xA7, /* 0x60-0x63 */ + 0xC3, 0xBA, 0x9F, 0xA8, 0xEC, 0xE3, 0xD5, 0xD5, /* 0x64-0x67 */ + 0xEC, 0xD0, 0x9F, 0xA9, 0x9F, 0xAA, 0x9F, 0xAB, /* 0x68-0x6B */ + 0x9F, 0xAC, 0x9F, 0xAD, 0xD6, 0xF3, 0x9F, 0xAE, /* 0x6C-0x6F */ + 0x9F, 0xAF, 0x9F, 0xB0, 0xEC, 0xD2, 0xEC, 0xCE, /* 0x70-0x73 */ + 0x9F, 0xB1, 0x9F, 0xB2, 0x9F, 0xB3, 0x9F, 0xB4, /* 0x74-0x77 */ + 0xEC, 0xD4, 0x9F, 0xB5, 0xEC, 0xD5, 0x9F, 0xB6, /* 0x78-0x7B */ + 0x9F, 0xB7, 0xC9, 0xBF, 0x9F, 0xB8, 0x9F, 0xB9, /* 0x7C-0x7F */ + + 0x9F, 0xBA, 0x9F, 0xBB, 0x9F, 0xBC, 0x9F, 0xBD, /* 0x80-0x83 */ + 0xCF, 0xA8, 0x9F, 0xBE, 0x9F, 0xBF, 0x9F, 0xC0, /* 0x84-0x87 */ + 0x9F, 0xC1, 0x9F, 0xC2, 0xD0, 0xDC, 0x9F, 0xC3, /* 0x88-0x8B */ + 0x9F, 0xC4, 0x9F, 0xC5, 0x9F, 0xC6, 0xD1, 0xAC, /* 0x8C-0x8F */ + 0x9F, 0xC7, 0x9F, 0xC8, 0x9F, 0xC9, 0x9F, 0xCA, /* 0x90-0x93 */ + 0xC8, 0xDB, 0x9F, 0xCB, 0x9F, 0xCC, 0x9F, 0xCD, /* 0x94-0x97 */ + 0xEC, 0xD6, 0xCE, 0xF5, 0x9F, 0xCE, 0x9F, 0xCF, /* 0x98-0x9B */ + 0x9F, 0xD0, 0x9F, 0xD1, 0x9F, 0xD2, 0xCA, 0xEC, /* 0x9C-0x9F */ + 0xEC, 0xDA, 0x9F, 0xD3, 0x9F, 0xD4, 0x9F, 0xD5, /* 0xA0-0xA3 */ + 0x9F, 0xD6, 0x9F, 0xD7, 0x9F, 0xD8, 0x9F, 0xD9, /* 0xA4-0xA7 */ + 0xEC, 0xD9, 0x9F, 0xDA, 0x9F, 0xDB, 0x9F, 0xDC, /* 0xA8-0xAB */ + 0xB0, 0xBE, 0x9F, 0xDD, 0x9F, 0xDE, 0x9F, 0xDF, /* 0xAC-0xAF */ + 0x9F, 0xE0, 0x9F, 0xE1, 0x9F, 0xE2, 0xEC, 0xD7, /* 0xB0-0xB3 */ + 0x9F, 0xE3, 0xEC, 0xD8, 0x9F, 0xE4, 0x9F, 0xE5, /* 0xB4-0xB7 */ + 0x9F, 0xE6, 0xEC, 0xE4, 0x9F, 0xE7, 0x9F, 0xE8, /* 0xB8-0xBB */ + 0x9F, 0xE9, 0x9F, 0xEA, 0x9F, 0xEB, 0x9F, 0xEC, /* 0xBC-0xBF */ + 0x9F, 0xED, 0x9F, 0xEE, 0x9F, 0xEF, 0xC8, 0xBC, /* 0xC0-0xC3 */ + 0x9F, 0xF0, 0x9F, 0xF1, 0x9F, 0xF2, 0x9F, 0xF3, /* 0xC4-0xC7 */ + 0x9F, 0xF4, 0x9F, 0xF5, 0x9F, 0xF6, 0x9F, 0xF7, /* 0xC8-0xCB */ + 0x9F, 0xF8, 0x9F, 0xF9, 0xC1, 0xC7, 0x9F, 0xFA, /* 0xCC-0xCF */ + 0x9F, 0xFB, 0x9F, 0xFC, 0x9F, 0xFD, 0x9F, 0xFE, /* 0xD0-0xD3 */ + 0xEC, 0xDC, 0xD1, 0xE0, 0xA0, 0x40, 0xA0, 0x41, /* 0xD4-0xD7 */ + 0xA0, 0x42, 0xA0, 0x43, 0xA0, 0x44, 0xA0, 0x45, /* 0xD8-0xDB */ + 0xA0, 0x46, 0xA0, 0x47, 0xA0, 0x48, 0xA0, 0x49, /* 0xDC-0xDF */ + 0xEC, 0xDB, 0xA0, 0x4A, 0xA0, 0x4B, 0xA0, 0x4C, /* 0xE0-0xE3 */ + 0xA0, 0x4D, 0xD4, 0xEF, 0xA0, 0x4E, 0xEC, 0xDD, /* 0xE4-0xE7 */ + 0xA0, 0x4F, 0xA0, 0x50, 0xA0, 0x51, 0xA0, 0x52, /* 0xE8-0xEB */ + 0xA0, 0x53, 0xA0, 0x54, 0xDB, 0xC6, 0xA0, 0x55, /* 0xEC-0xEF */ + 0xA0, 0x56, 0xA0, 0x57, 0xA0, 0x58, 0xA0, 0x59, /* 0xF0-0xF3 */ + 0xA0, 0x5A, 0xA0, 0x5B, 0xA0, 0x5C, 0xA0, 0x5D, /* 0xF4-0xF7 */ + 0xA0, 0x5E, 0xEC, 0xDE, 0xA0, 0x5F, 0xA0, 0x60, /* 0xF8-0xFB */ + 0xA0, 0x61, 0xA0, 0x62, 0xA0, 0x63, 0xA0, 0x64, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0xA0, 0x65, 0xA0, 0x66, 0xA0, 0x67, 0xA0, 0x68, /* 0x00-0x03 */ + 0xA0, 0x69, 0xA0, 0x6A, 0xB1, 0xAC, 0xA0, 0x6B, /* 0x04-0x07 */ + 0xA0, 0x6C, 0xA0, 0x6D, 0xA0, 0x6E, 0xA0, 0x6F, /* 0x08-0x0B */ + 0xA0, 0x70, 0xA0, 0x71, 0xA0, 0x72, 0xA0, 0x73, /* 0x0C-0x0F */ + 0xA0, 0x74, 0xA0, 0x75, 0xA0, 0x76, 0xA0, 0x77, /* 0x10-0x13 */ + 0xA0, 0x78, 0xA0, 0x79, 0xA0, 0x7A, 0xA0, 0x7B, /* 0x14-0x17 */ + 0xA0, 0x7C, 0xA0, 0x7D, 0xA0, 0x7E, 0xA0, 0x80, /* 0x18-0x1B */ + 0xA0, 0x81, 0xEC, 0xDF, 0xA0, 0x82, 0xA0, 0x83, /* 0x1C-0x1F */ + 0xA0, 0x84, 0xA0, 0x85, 0xA0, 0x86, 0xA0, 0x87, /* 0x20-0x23 */ + 0xA0, 0x88, 0xA0, 0x89, 0xA0, 0x8A, 0xA0, 0x8B, /* 0x24-0x27 */ + 0xEC, 0xE0, 0xA0, 0x8C, 0xD7, 0xA6, 0xA0, 0x8D, /* 0x28-0x2B */ + 0xC5, 0xC0, 0xA0, 0x8E, 0xA0, 0x8F, 0xA0, 0x90, /* 0x2C-0x2F */ + 0xEB, 0xBC, 0xB0, 0xAE, 0xA0, 0x91, 0xA0, 0x92, /* 0x30-0x33 */ + 0xA0, 0x93, 0xBE, 0xF4, 0xB8, 0xB8, 0xD2, 0xAF, /* 0x34-0x37 */ + 0xB0, 0xD6, 0xB5, 0xF9, 0xA0, 0x94, 0xD8, 0xB3, /* 0x38-0x3B */ + 0xA0, 0x95, 0xCB, 0xAC, 0xA0, 0x96, 0xE3, 0xDD, /* 0x3C-0x3F */ + 0xA0, 0x97, 0xA0, 0x98, 0xA0, 0x99, 0xA0, 0x9A, /* 0x40-0x43 */ + 0xA0, 0x9B, 0xA0, 0x9C, 0xA0, 0x9D, 0xC6, 0xAC, /* 0x44-0x47 */ + 0xB0, 0xE6, 0xA0, 0x9E, 0xA0, 0x9F, 0xA0, 0xA0, /* 0x48-0x4B */ + 0xC5, 0xC6, 0xEB, 0xB9, 0xA0, 0xA1, 0xA0, 0xA2, /* 0x4C-0x4F */ + 0xA0, 0xA3, 0xA0, 0xA4, 0xEB, 0xBA, 0xA0, 0xA5, /* 0x50-0x53 */ + 0xA0, 0xA6, 0xA0, 0xA7, 0xEB, 0xBB, 0xA0, 0xA8, /* 0x54-0x57 */ + 0xA0, 0xA9, 0xD1, 0xC0, 0xA0, 0xAA, 0xC5, 0xA3, /* 0x58-0x5B */ + 0xA0, 0xAB, 0xEA, 0xF2, 0xA0, 0xAC, 0xC4, 0xB2, /* 0x5C-0x5F */ + 0xA0, 0xAD, 0xC4, 0xB5, 0xC0, 0xCE, 0xA0, 0xAE, /* 0x60-0x63 */ + 0xA0, 0xAF, 0xA0, 0xB0, 0xEA, 0xF3, 0xC4, 0xC1, /* 0x64-0x67 */ + 0xA0, 0xB1, 0xCE, 0xEF, 0xA0, 0xB2, 0xA0, 0xB3, /* 0x68-0x6B */ + 0xA0, 0xB4, 0xA0, 0xB5, 0xEA, 0xF0, 0xEA, 0xF4, /* 0x6C-0x6F */ + 0xA0, 0xB6, 0xA0, 0xB7, 0xC9, 0xFC, 0xA0, 0xB8, /* 0x70-0x73 */ + 0xA0, 0xB9, 0xC7, 0xA3, 0xA0, 0xBA, 0xA0, 0xBB, /* 0x74-0x77 */ + 0xA0, 0xBC, 0xCC, 0xD8, 0xCE, 0xFE, 0xA0, 0xBD, /* 0x78-0x7B */ + 0xA0, 0xBE, 0xA0, 0xBF, 0xEA, 0xF5, 0xEA, 0xF6, /* 0x7C-0x7F */ + + 0xCF, 0xAC, 0xC0, 0xE7, 0xA0, 0xC0, 0xA0, 0xC1, /* 0x80-0x83 */ + 0xEA, 0xF7, 0xA0, 0xC2, 0xA0, 0xC3, 0xA0, 0xC4, /* 0x84-0x87 */ + 0xA0, 0xC5, 0xA0, 0xC6, 0xB6, 0xBF, 0xEA, 0xF8, /* 0x88-0x8B */ + 0xA0, 0xC7, 0xEA, 0xF9, 0xA0, 0xC8, 0xEA, 0xFA, /* 0x8C-0x8F */ + 0xA0, 0xC9, 0xA0, 0xCA, 0xEA, 0xFB, 0xA0, 0xCB, /* 0x90-0x93 */ + 0xA0, 0xCC, 0xA0, 0xCD, 0xA0, 0xCE, 0xA0, 0xCF, /* 0x94-0x97 */ + 0xA0, 0xD0, 0xA0, 0xD1, 0xA0, 0xD2, 0xA0, 0xD3, /* 0x98-0x9B */ + 0xA0, 0xD4, 0xA0, 0xD5, 0xA0, 0xD6, 0xEA, 0xF1, /* 0x9C-0x9F */ + 0xA0, 0xD7, 0xA0, 0xD8, 0xA0, 0xD9, 0xA0, 0xDA, /* 0xA0-0xA3 */ + 0xA0, 0xDB, 0xA0, 0xDC, 0xA0, 0xDD, 0xA0, 0xDE, /* 0xA4-0xA7 */ + 0xA0, 0xDF, 0xA0, 0xE0, 0xA0, 0xE1, 0xA0, 0xE2, /* 0xA8-0xAB */ + 0xC8, 0xAE, 0xE1, 0xEB, 0xA0, 0xE3, 0xB7, 0xB8, /* 0xAC-0xAF */ + 0xE1, 0xEC, 0xA0, 0xE4, 0xA0, 0xE5, 0xA0, 0xE6, /* 0xB0-0xB3 */ + 0xE1, 0xED, 0xA0, 0xE7, 0xD7, 0xB4, 0xE1, 0xEE, /* 0xB4-0xB7 */ + 0xE1, 0xEF, 0xD3, 0xCC, 0xA0, 0xE8, 0xA0, 0xE9, /* 0xB8-0xBB */ + 0xA0, 0xEA, 0xA0, 0xEB, 0xA0, 0xEC, 0xA0, 0xED, /* 0xBC-0xBF */ + 0xA0, 0xEE, 0xE1, 0xF1, 0xBF, 0xF1, 0xE1, 0xF0, /* 0xC0-0xC3 */ + 0xB5, 0xD2, 0xA0, 0xEF, 0xA0, 0xF0, 0xA0, 0xF1, /* 0xC4-0xC7 */ + 0xB1, 0xB7, 0xA0, 0xF2, 0xA0, 0xF3, 0xA0, 0xF4, /* 0xC8-0xCB */ + 0xA0, 0xF5, 0xE1, 0xF3, 0xE1, 0xF2, 0xA0, 0xF6, /* 0xCC-0xCF */ + 0xBA, 0xFC, 0xA0, 0xF7, 0xE1, 0xF4, 0xA0, 0xF8, /* 0xD0-0xD3 */ + 0xA0, 0xF9, 0xA0, 0xFA, 0xA0, 0xFB, 0xB9, 0xB7, /* 0xD4-0xD7 */ + 0xA0, 0xFC, 0xBE, 0xD1, 0xA0, 0xFD, 0xA0, 0xFE, /* 0xD8-0xDB */ + 0xAA, 0x40, 0xAA, 0x41, 0xC4, 0xFC, 0xAA, 0x42, /* 0xDC-0xDF */ + 0xBA, 0xDD, 0xBD, 0xC6, 0xAA, 0x43, 0xAA, 0x44, /* 0xE0-0xE3 */ + 0xAA, 0x45, 0xAA, 0x46, 0xAA, 0x47, 0xAA, 0x48, /* 0xE4-0xE7 */ + 0xE1, 0xF5, 0xE1, 0xF7, 0xAA, 0x49, 0xAA, 0x4A, /* 0xE8-0xEB */ + 0xB6, 0xC0, 0xCF, 0xC1, 0xCA, 0xA8, 0xE1, 0xF6, /* 0xEC-0xEF */ + 0xD5, 0xF8, 0xD3, 0xFC, 0xE1, 0xF8, 0xE1, 0xFC, /* 0xF0-0xF3 */ + 0xE1, 0xF9, 0xAA, 0x4B, 0xAA, 0x4C, 0xE1, 0xFA, /* 0xF4-0xF7 */ + 0xC0, 0xEA, 0xAA, 0x4D, 0xE1, 0xFE, 0xE2, 0xA1, /* 0xF8-0xFB */ + 0xC0, 0xC7, 0xAA, 0x4E, 0xAA, 0x4F, 0xAA, 0x50, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0xAA, 0x51, 0xE1, 0xFB, 0xAA, 0x52, 0xE1, 0xFD, /* 0x00-0x03 */ + 0xAA, 0x53, 0xAA, 0x54, 0xAA, 0x55, 0xAA, 0x56, /* 0x04-0x07 */ + 0xAA, 0x57, 0xAA, 0x58, 0xE2, 0xA5, 0xAA, 0x59, /* 0x08-0x0B */ + 0xAA, 0x5A, 0xAA, 0x5B, 0xC1, 0xD4, 0xAA, 0x5C, /* 0x0C-0x0F */ + 0xAA, 0x5D, 0xAA, 0x5E, 0xAA, 0x5F, 0xE2, 0xA3, /* 0x10-0x13 */ + 0xAA, 0x60, 0xE2, 0xA8, 0xB2, 0xFE, 0xE2, 0xA2, /* 0x14-0x17 */ + 0xAA, 0x61, 0xAA, 0x62, 0xAA, 0x63, 0xC3, 0xCD, /* 0x18-0x1B */ + 0xB2, 0xC2, 0xE2, 0xA7, 0xE2, 0xA6, 0xAA, 0x64, /* 0x1C-0x1F */ + 0xAA, 0x65, 0xE2, 0xA4, 0xE2, 0xA9, 0xAA, 0x66, /* 0x20-0x23 */ + 0xAA, 0x67, 0xE2, 0xAB, 0xAA, 0x68, 0xAA, 0x69, /* 0x24-0x27 */ + 0xAA, 0x6A, 0xD0, 0xC9, 0xD6, 0xED, 0xC3, 0xA8, /* 0x28-0x2B */ + 0xE2, 0xAC, 0xAA, 0x6B, 0xCF, 0xD7, 0xAA, 0x6C, /* 0x2C-0x2F */ + 0xAA, 0x6D, 0xE2, 0xAE, 0xAA, 0x6E, 0xAA, 0x6F, /* 0x30-0x33 */ + 0xBA, 0xEF, 0xAA, 0x70, 0xAA, 0x71, 0xE9, 0xE0, /* 0x34-0x37 */ + 0xE2, 0xAD, 0xE2, 0xAA, 0xAA, 0x72, 0xAA, 0x73, /* 0x38-0x3B */ + 0xAA, 0x74, 0xAA, 0x75, 0xBB, 0xAB, 0xD4, 0xB3, /* 0x3C-0x3F */ + 0xAA, 0x76, 0xAA, 0x77, 0xAA, 0x78, 0xAA, 0x79, /* 0x40-0x43 */ + 0xAA, 0x7A, 0xAA, 0x7B, 0xAA, 0x7C, 0xAA, 0x7D, /* 0x44-0x47 */ + 0xAA, 0x7E, 0xAA, 0x80, 0xAA, 0x81, 0xAA, 0x82, /* 0x48-0x4B */ + 0xAA, 0x83, 0xE2, 0xB0, 0xAA, 0x84, 0xAA, 0x85, /* 0x4C-0x4F */ + 0xE2, 0xAF, 0xAA, 0x86, 0xE9, 0xE1, 0xAA, 0x87, /* 0x50-0x53 */ + 0xAA, 0x88, 0xAA, 0x89, 0xAA, 0x8A, 0xE2, 0xB1, /* 0x54-0x57 */ + 0xAA, 0x8B, 0xAA, 0x8C, 0xAA, 0x8D, 0xAA, 0x8E, /* 0x58-0x5B */ + 0xAA, 0x8F, 0xAA, 0x90, 0xAA, 0x91, 0xAA, 0x92, /* 0x5C-0x5F */ + 0xE2, 0xB2, 0xAA, 0x93, 0xAA, 0x94, 0xAA, 0x95, /* 0x60-0x63 */ + 0xAA, 0x96, 0xAA, 0x97, 0xAA, 0x98, 0xAA, 0x99, /* 0x64-0x67 */ + 0xAA, 0x9A, 0xAA, 0x9B, 0xAA, 0x9C, 0xAA, 0x9D, /* 0x68-0x6B */ + 0xE2, 0xB3, 0xCC, 0xA1, 0xAA, 0x9E, 0xE2, 0xB4, /* 0x6C-0x6F */ + 0xAA, 0x9F, 0xAA, 0xA0, 0xAB, 0x40, 0xAB, 0x41, /* 0x70-0x73 */ + 0xAB, 0x42, 0xAB, 0x43, 0xAB, 0x44, 0xAB, 0x45, /* 0x74-0x77 */ + 0xAB, 0x46, 0xAB, 0x47, 0xAB, 0x48, 0xAB, 0x49, /* 0x78-0x7B */ + 0xAB, 0x4A, 0xAB, 0x4B, 0xE2, 0xB5, 0xAB, 0x4C, /* 0x7C-0x7F */ + + 0xAB, 0x4D, 0xAB, 0x4E, 0xAB, 0x4F, 0xAB, 0x50, /* 0x80-0x83 */ + 0xD0, 0xFE, 0xAB, 0x51, 0xAB, 0x52, 0xC2, 0xCA, /* 0x84-0x87 */ + 0xAB, 0x53, 0xD3, 0xF1, 0xAB, 0x54, 0xCD, 0xF5, /* 0x88-0x8B */ + 0xAB, 0x55, 0xAB, 0x56, 0xE7, 0xE0, 0xAB, 0x57, /* 0x8C-0x8F */ + 0xAB, 0x58, 0xE7, 0xE1, 0xAB, 0x59, 0xAB, 0x5A, /* 0x90-0x93 */ + 0xAB, 0x5B, 0xAB, 0x5C, 0xBE, 0xC1, 0xAB, 0x5D, /* 0x94-0x97 */ + 0xAB, 0x5E, 0xAB, 0x5F, 0xAB, 0x60, 0xC2, 0xEA, /* 0x98-0x9B */ + 0xAB, 0x61, 0xAB, 0x62, 0xAB, 0x63, 0xE7, 0xE4, /* 0x9C-0x9F */ + 0xAB, 0x64, 0xAB, 0x65, 0xE7, 0xE3, 0xAB, 0x66, /* 0xA0-0xA3 */ + 0xAB, 0x67, 0xAB, 0x68, 0xAB, 0x69, 0xAB, 0x6A, /* 0xA4-0xA7 */ + 0xAB, 0x6B, 0xCD, 0xE6, 0xAB, 0x6C, 0xC3, 0xB5, /* 0xA8-0xAB */ + 0xAB, 0x6D, 0xAB, 0x6E, 0xE7, 0xE2, 0xBB, 0xB7, /* 0xAC-0xAF */ + 0xCF, 0xD6, 0xAB, 0x6F, 0xC1, 0xE1, 0xE7, 0xE9, /* 0xB0-0xB3 */ + 0xAB, 0x70, 0xAB, 0x71, 0xAB, 0x72, 0xE7, 0xE8, /* 0xB4-0xB7 */ + 0xAB, 0x73, 0xAB, 0x74, 0xE7, 0xF4, 0xB2, 0xA3, /* 0xB8-0xBB */ + 0xAB, 0x75, 0xAB, 0x76, 0xAB, 0x77, 0xAB, 0x78, /* 0xBC-0xBF */ + 0xE7, 0xEA, 0xAB, 0x79, 0xE7, 0xE6, 0xAB, 0x7A, /* 0xC0-0xC3 */ + 0xAB, 0x7B, 0xAB, 0x7C, 0xAB, 0x7D, 0xAB, 0x7E, /* 0xC4-0xC7 */ + 0xE7, 0xEC, 0xE7, 0xEB, 0xC9, 0xBA, 0xAB, 0x80, /* 0xC8-0xCB */ + 0xAB, 0x81, 0xD5, 0xE4, 0xAB, 0x82, 0xE7, 0xE5, /* 0xCC-0xCF */ + 0xB7, 0xA9, 0xE7, 0xE7, 0xAB, 0x83, 0xAB, 0x84, /* 0xD0-0xD3 */ + 0xAB, 0x85, 0xAB, 0x86, 0xAB, 0x87, 0xAB, 0x88, /* 0xD4-0xD7 */ + 0xAB, 0x89, 0xE7, 0xEE, 0xAB, 0x8A, 0xAB, 0x8B, /* 0xD8-0xDB */ + 0xAB, 0x8C, 0xAB, 0x8D, 0xE7, 0xF3, 0xAB, 0x8E, /* 0xDC-0xDF */ + 0xD6, 0xE9, 0xAB, 0x8F, 0xAB, 0x90, 0xAB, 0x91, /* 0xE0-0xE3 */ + 0xAB, 0x92, 0xE7, 0xED, 0xAB, 0x93, 0xE7, 0xF2, /* 0xE4-0xE7 */ + 0xAB, 0x94, 0xE7, 0xF1, 0xAB, 0x95, 0xAB, 0x96, /* 0xE8-0xEB */ + 0xAB, 0x97, 0xB0, 0xE0, 0xAB, 0x98, 0xAB, 0x99, /* 0xEC-0xEF */ + 0xAB, 0x9A, 0xAB, 0x9B, 0xE7, 0xF5, 0xAB, 0x9C, /* 0xF0-0xF3 */ + 0xAB, 0x9D, 0xAB, 0x9E, 0xAB, 0x9F, 0xAB, 0xA0, /* 0xF4-0xF7 */ + 0xAC, 0x40, 0xAC, 0x41, 0xAC, 0x42, 0xAC, 0x43, /* 0xF8-0xFB */ + 0xAC, 0x44, 0xAC, 0x45, 0xAC, 0x46, 0xAC, 0x47, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0xAC, 0x48, 0xAC, 0x49, 0xAC, 0x4A, 0xC7, 0xF2, /* 0x00-0x03 */ + 0xAC, 0x4B, 0xC0, 0xC5, 0xC0, 0xED, 0xAC, 0x4C, /* 0x04-0x07 */ + 0xAC, 0x4D, 0xC1, 0xF0, 0xE7, 0xF0, 0xAC, 0x4E, /* 0x08-0x0B */ + 0xAC, 0x4F, 0xAC, 0x50, 0xAC, 0x51, 0xE7, 0xF6, /* 0x0C-0x0F */ + 0xCB, 0xF6, 0xAC, 0x52, 0xAC, 0x53, 0xAC, 0x54, /* 0x10-0x13 */ + 0xAC, 0x55, 0xAC, 0x56, 0xAC, 0x57, 0xAC, 0x58, /* 0x14-0x17 */ + 0xAC, 0x59, 0xAC, 0x5A, 0xE8, 0xA2, 0xE8, 0xA1, /* 0x18-0x1B */ + 0xAC, 0x5B, 0xAC, 0x5C, 0xAC, 0x5D, 0xAC, 0x5E, /* 0x1C-0x1F */ + 0xAC, 0x5F, 0xAC, 0x60, 0xD7, 0xC1, 0xAC, 0x61, /* 0x20-0x23 */ + 0xAC, 0x62, 0xE7, 0xFA, 0xE7, 0xF9, 0xAC, 0x63, /* 0x24-0x27 */ + 0xE7, 0xFB, 0xAC, 0x64, 0xE7, 0xF7, 0xAC, 0x65, /* 0x28-0x2B */ + 0xE7, 0xFE, 0xAC, 0x66, 0xE7, 0xFD, 0xAC, 0x67, /* 0x2C-0x2F */ + 0xE7, 0xFC, 0xAC, 0x68, 0xAC, 0x69, 0xC1, 0xD5, /* 0x30-0x33 */ + 0xC7, 0xD9, 0xC5, 0xFD, 0xC5, 0xC3, 0xAC, 0x6A, /* 0x34-0x37 */ + 0xAC, 0x6B, 0xAC, 0x6C, 0xAC, 0x6D, 0xAC, 0x6E, /* 0x38-0x3B */ + 0xC7, 0xED, 0xAC, 0x6F, 0xAC, 0x70, 0xAC, 0x71, /* 0x3C-0x3F */ + 0xAC, 0x72, 0xE8, 0xA3, 0xAC, 0x73, 0xAC, 0x74, /* 0x40-0x43 */ + 0xAC, 0x75, 0xAC, 0x76, 0xAC, 0x77, 0xAC, 0x78, /* 0x44-0x47 */ + 0xAC, 0x79, 0xAC, 0x7A, 0xAC, 0x7B, 0xAC, 0x7C, /* 0x48-0x4B */ + 0xAC, 0x7D, 0xAC, 0x7E, 0xAC, 0x80, 0xAC, 0x81, /* 0x4C-0x4F */ + 0xAC, 0x82, 0xAC, 0x83, 0xAC, 0x84, 0xAC, 0x85, /* 0x50-0x53 */ + 0xAC, 0x86, 0xE8, 0xA6, 0xAC, 0x87, 0xE8, 0xA5, /* 0x54-0x57 */ + 0xAC, 0x88, 0xE8, 0xA7, 0xBA, 0xF7, 0xE7, 0xF8, /* 0x58-0x5B */ + 0xE8, 0xA4, 0xAC, 0x89, 0xC8, 0xF0, 0xC9, 0xAA, /* 0x5C-0x5F */ + 0xAC, 0x8A, 0xAC, 0x8B, 0xAC, 0x8C, 0xAC, 0x8D, /* 0x60-0x63 */ + 0xAC, 0x8E, 0xAC, 0x8F, 0xAC, 0x90, 0xAC, 0x91, /* 0x64-0x67 */ + 0xAC, 0x92, 0xAC, 0x93, 0xAC, 0x94, 0xAC, 0x95, /* 0x68-0x6B */ + 0xAC, 0x96, 0xE8, 0xA9, 0xAC, 0x97, 0xAC, 0x98, /* 0x6C-0x6F */ + 0xB9, 0xE5, 0xAC, 0x99, 0xAC, 0x9A, 0xAC, 0x9B, /* 0x70-0x73 */ + 0xAC, 0x9C, 0xAC, 0x9D, 0xD1, 0xFE, 0xE8, 0xA8, /* 0x74-0x77 */ + 0xAC, 0x9E, 0xAC, 0x9F, 0xAC, 0xA0, 0xAD, 0x40, /* 0x78-0x7B */ + 0xAD, 0x41, 0xAD, 0x42, 0xE8, 0xAA, 0xAD, 0x43, /* 0x7C-0x7F */ + + 0xE8, 0xAD, 0xE8, 0xAE, 0xAD, 0x44, 0xC1, 0xA7, /* 0x80-0x83 */ + 0xAD, 0x45, 0xAD, 0x46, 0xAD, 0x47, 0xE8, 0xAF, /* 0x84-0x87 */ + 0xAD, 0x48, 0xAD, 0x49, 0xAD, 0x4A, 0xE8, 0xB0, /* 0x88-0x8B */ + 0xAD, 0x4B, 0xAD, 0x4C, 0xE8, 0xAC, 0xAD, 0x4D, /* 0x8C-0x8F */ + 0xE8, 0xB4, 0xAD, 0x4E, 0xAD, 0x4F, 0xAD, 0x50, /* 0x90-0x93 */ + 0xAD, 0x51, 0xAD, 0x52, 0xAD, 0x53, 0xAD, 0x54, /* 0x94-0x97 */ + 0xAD, 0x55, 0xAD, 0x56, 0xAD, 0x57, 0xAD, 0x58, /* 0x98-0x9B */ + 0xE8, 0xAB, 0xAD, 0x59, 0xE8, 0xB1, 0xAD, 0x5A, /* 0x9C-0x9F */ + 0xAD, 0x5B, 0xAD, 0x5C, 0xAD, 0x5D, 0xAD, 0x5E, /* 0xA0-0xA3 */ + 0xAD, 0x5F, 0xAD, 0x60, 0xAD, 0x61, 0xE8, 0xB5, /* 0xA4-0xA7 */ + 0xE8, 0xB2, 0xE8, 0xB3, 0xAD, 0x62, 0xAD, 0x63, /* 0xA8-0xAB */ + 0xAD, 0x64, 0xAD, 0x65, 0xAD, 0x66, 0xAD, 0x67, /* 0xAC-0xAF */ + 0xAD, 0x68, 0xAD, 0x69, 0xAD, 0x6A, 0xAD, 0x6B, /* 0xB0-0xB3 */ + 0xAD, 0x6C, 0xAD, 0x6D, 0xAD, 0x6E, 0xAD, 0x6F, /* 0xB4-0xB7 */ + 0xAD, 0x70, 0xAD, 0x71, 0xE8, 0xB7, 0xAD, 0x72, /* 0xB8-0xBB */ + 0xAD, 0x73, 0xAD, 0x74, 0xAD, 0x75, 0xAD, 0x76, /* 0xBC-0xBF */ + 0xAD, 0x77, 0xAD, 0x78, 0xAD, 0x79, 0xAD, 0x7A, /* 0xC0-0xC3 */ + 0xAD, 0x7B, 0xAD, 0x7C, 0xAD, 0x7D, 0xAD, 0x7E, /* 0xC4-0xC7 */ + 0xAD, 0x80, 0xAD, 0x81, 0xAD, 0x82, 0xAD, 0x83, /* 0xC8-0xCB */ + 0xAD, 0x84, 0xAD, 0x85, 0xAD, 0x86, 0xAD, 0x87, /* 0xCC-0xCF */ + 0xAD, 0x88, 0xAD, 0x89, 0xE8, 0xB6, 0xAD, 0x8A, /* 0xD0-0xD3 */ + 0xAD, 0x8B, 0xAD, 0x8C, 0xAD, 0x8D, 0xAD, 0x8E, /* 0xD4-0xD7 */ + 0xAD, 0x8F, 0xAD, 0x90, 0xAD, 0x91, 0xAD, 0x92, /* 0xD8-0xDB */ + 0xB9, 0xCF, 0xAD, 0x93, 0xF0, 0xAC, 0xAD, 0x94, /* 0xDC-0xDF */ + 0xF0, 0xAD, 0xAD, 0x95, 0xC6, 0xB0, 0xB0, 0xEA, /* 0xE0-0xE3 */ + 0xC8, 0xBF, 0xAD, 0x96, 0xCD, 0xDF, 0xAD, 0x97, /* 0xE4-0xE7 */ + 0xAD, 0x98, 0xAD, 0x99, 0xAD, 0x9A, 0xAD, 0x9B, /* 0xE8-0xEB */ + 0xAD, 0x9C, 0xAD, 0x9D, 0xCE, 0xCD, 0xEA, 0xB1, /* 0xEC-0xEF */ + 0xAD, 0x9E, 0xAD, 0x9F, 0xAD, 0xA0, 0xAE, 0x40, /* 0xF0-0xF3 */ + 0xEA, 0xB2, 0xAE, 0x41, 0xC6, 0xBF, 0xB4, 0xC9, /* 0xF4-0xF7 */ + 0xAE, 0x42, 0xAE, 0x43, 0xAE, 0x44, 0xAE, 0x45, /* 0xF8-0xFB */ + 0xAE, 0x46, 0xAE, 0x47, 0xAE, 0x48, 0xEA, 0xB3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_75[512] = { + 0xAE, 0x49, 0xAE, 0x4A, 0xAE, 0x4B, 0xAE, 0x4C, /* 0x00-0x03 */ + 0xD5, 0xE7, 0xAE, 0x4D, 0xAE, 0x4E, 0xAE, 0x4F, /* 0x04-0x07 */ + 0xAE, 0x50, 0xAE, 0x51, 0xAE, 0x52, 0xAE, 0x53, /* 0x08-0x0B */ + 0xAE, 0x54, 0xDD, 0xF9, 0xAE, 0x55, 0xEA, 0xB4, /* 0x0C-0x0F */ + 0xAE, 0x56, 0xEA, 0xB5, 0xAE, 0x57, 0xEA, 0xB6, /* 0x10-0x13 */ + 0xAE, 0x58, 0xAE, 0x59, 0xAE, 0x5A, 0xAE, 0x5B, /* 0x14-0x17 */ + 0xB8, 0xCA, 0xDF, 0xB0, 0xC9, 0xF5, 0xAE, 0x5C, /* 0x18-0x1B */ + 0xCC, 0xF0, 0xAE, 0x5D, 0xAE, 0x5E, 0xC9, 0xFA, /* 0x1C-0x1F */ + 0xAE, 0x5F, 0xAE, 0x60, 0xAE, 0x61, 0xAE, 0x62, /* 0x20-0x23 */ + 0xAE, 0x63, 0xC9, 0xFB, 0xAE, 0x64, 0xAE, 0x65, /* 0x24-0x27 */ + 0xD3, 0xC3, 0xCB, 0xA6, 0xAE, 0x66, 0xB8, 0xA6, /* 0x28-0x2B */ + 0xF0, 0xAE, 0xB1, 0xC2, 0xAE, 0x67, 0xE5, 0xB8, /* 0x2C-0x2F */ + 0xCC, 0xEF, 0xD3, 0xC9, 0xBC, 0xD7, 0xC9, 0xEA, /* 0x30-0x33 */ + 0xAE, 0x68, 0xB5, 0xE7, 0xAE, 0x69, 0xC4, 0xD0, /* 0x34-0x37 */ + 0xB5, 0xE9, 0xAE, 0x6A, 0xEE, 0xAE, 0xBB, 0xAD, /* 0x38-0x3B */ + 0xAE, 0x6B, 0xAE, 0x6C, 0xE7, 0xDE, 0xAE, 0x6D, /* 0x3C-0x3F */ + 0xEE, 0xAF, 0xAE, 0x6E, 0xAE, 0x6F, 0xAE, 0x70, /* 0x40-0x43 */ + 0xAE, 0x71, 0xB3, 0xA9, 0xAE, 0x72, 0xAE, 0x73, /* 0x44-0x47 */ + 0xEE, 0xB2, 0xAE, 0x74, 0xAE, 0x75, 0xEE, 0xB1, /* 0x48-0x4B */ + 0xBD, 0xE7, 0xAE, 0x76, 0xEE, 0xB0, 0xCE, 0xB7, /* 0x4C-0x4F */ + 0xAE, 0x77, 0xAE, 0x78, 0xAE, 0x79, 0xAE, 0x7A, /* 0x50-0x53 */ + 0xC5, 0xCF, 0xAE, 0x7B, 0xAE, 0x7C, 0xAE, 0x7D, /* 0x54-0x57 */ + 0xAE, 0x7E, 0xC1, 0xF4, 0xDB, 0xCE, 0xEE, 0xB3, /* 0x58-0x5B */ + 0xD0, 0xF3, 0xAE, 0x80, 0xAE, 0x81, 0xAE, 0x82, /* 0x5C-0x5F */ + 0xAE, 0x83, 0xAE, 0x84, 0xAE, 0x85, 0xAE, 0x86, /* 0x60-0x63 */ + 0xAE, 0x87, 0xC2, 0xD4, 0xC6, 0xE8, 0xAE, 0x88, /* 0x64-0x67 */ + 0xAE, 0x89, 0xAE, 0x8A, 0xB7, 0xAC, 0xAE, 0x8B, /* 0x68-0x6B */ + 0xAE, 0x8C, 0xAE, 0x8D, 0xAE, 0x8E, 0xAE, 0x8F, /* 0x6C-0x6F */ + 0xAE, 0x90, 0xAE, 0x91, 0xEE, 0xB4, 0xAE, 0x92, /* 0x70-0x73 */ + 0xB3, 0xEB, 0xAE, 0x93, 0xAE, 0x94, 0xAE, 0x95, /* 0x74-0x77 */ + 0xBB, 0xFB, 0xEE, 0xB5, 0xAE, 0x96, 0xAE, 0x97, /* 0x78-0x7B */ + 0xAE, 0x98, 0xAE, 0x99, 0xAE, 0x9A, 0xE7, 0xDC, /* 0x7C-0x7F */ + + 0xAE, 0x9B, 0xAE, 0x9C, 0xAE, 0x9D, 0xEE, 0xB6, /* 0x80-0x83 */ + 0xAE, 0x9E, 0xAE, 0x9F, 0xBD, 0xAE, 0xAE, 0xA0, /* 0x84-0x87 */ + 0xAF, 0x40, 0xAF, 0x41, 0xAF, 0x42, 0xF1, 0xE2, /* 0x88-0x8B */ + 0xAF, 0x43, 0xAF, 0x44, 0xAF, 0x45, 0xCA, 0xE8, /* 0x8C-0x8F */ + 0xAF, 0x46, 0xD2, 0xC9, 0xF0, 0xDA, 0xAF, 0x47, /* 0x90-0x93 */ + 0xF0, 0xDB, 0xAF, 0x48, 0xF0, 0xDC, 0xC1, 0xC6, /* 0x94-0x97 */ + 0xAF, 0x49, 0xB8, 0xED, 0xBE, 0xCE, 0xAF, 0x4A, /* 0x98-0x9B */ + 0xAF, 0x4B, 0xF0, 0xDE, 0xAF, 0x4C, 0xC5, 0xB1, /* 0x9C-0x9F */ + 0xF0, 0xDD, 0xD1, 0xF1, 0xAF, 0x4D, 0xF0, 0xE0, /* 0xA0-0xA3 */ + 0xB0, 0xCC, 0xBD, 0xEA, 0xAF, 0x4E, 0xAF, 0x4F, /* 0xA4-0xA7 */ + 0xAF, 0x50, 0xAF, 0x51, 0xAF, 0x52, 0xD2, 0xDF, /* 0xA8-0xAB */ + 0xF0, 0xDF, 0xAF, 0x53, 0xB4, 0xAF, 0xB7, 0xE8, /* 0xAC-0xAF */ + 0xF0, 0xE6, 0xF0, 0xE5, 0xC6, 0xA3, 0xF0, 0xE1, /* 0xB0-0xB3 */ + 0xF0, 0xE2, 0xB4, 0xC3, 0xAF, 0x54, 0xAF, 0x55, /* 0xB4-0xB7 */ + 0xF0, 0xE3, 0xD5, 0xEE, 0xAF, 0x56, 0xAF, 0x57, /* 0xB8-0xBB */ + 0xCC, 0xDB, 0xBE, 0xD2, 0xBC, 0xB2, 0xAF, 0x58, /* 0xBC-0xBF */ + 0xAF, 0x59, 0xAF, 0x5A, 0xF0, 0xE8, 0xF0, 0xE7, /* 0xC0-0xC3 */ + 0xF0, 0xE4, 0xB2, 0xA1, 0xAF, 0x5B, 0xD6, 0xA2, /* 0xC4-0xC7 */ + 0xD3, 0xB8, 0xBE, 0xB7, 0xC8, 0xAC, 0xAF, 0x5C, /* 0xC8-0xCB */ + 0xAF, 0x5D, 0xF0, 0xEA, 0xAF, 0x5E, 0xAF, 0x5F, /* 0xCC-0xCF */ + 0xAF, 0x60, 0xAF, 0x61, 0xD1, 0xF7, 0xAF, 0x62, /* 0xD0-0xD3 */ + 0xD6, 0xCC, 0xBA, 0xDB, 0xF0, 0xE9, 0xAF, 0x63, /* 0xD4-0xD7 */ + 0xB6, 0xBB, 0xAF, 0x64, 0xAF, 0x65, 0xCD, 0xB4, /* 0xD8-0xDB */ + 0xAF, 0x66, 0xAF, 0x67, 0xC6, 0xA6, 0xAF, 0x68, /* 0xDC-0xDF */ + 0xAF, 0x69, 0xAF, 0x6A, 0xC1, 0xA1, 0xF0, 0xEB, /* 0xE0-0xE3 */ + 0xF0, 0xEE, 0xAF, 0x6B, 0xF0, 0xED, 0xF0, 0xF0, /* 0xE4-0xE7 */ + 0xF0, 0xEC, 0xAF, 0x6C, 0xBB, 0xBE, 0xF0, 0xEF, /* 0xE8-0xEB */ + 0xAF, 0x6D, 0xAF, 0x6E, 0xAF, 0x6F, 0xAF, 0x70, /* 0xEC-0xEF */ + 0xCC, 0xB5, 0xF0, 0xF2, 0xAF, 0x71, 0xAF, 0x72, /* 0xF0-0xF3 */ + 0xB3, 0xD5, 0xAF, 0x73, 0xAF, 0x74, 0xAF, 0x75, /* 0xF4-0xF7 */ + 0xAF, 0x76, 0xB1, 0xD4, 0xAF, 0x77, 0xAF, 0x78, /* 0xF8-0xFB */ + 0xF0, 0xF3, 0xAF, 0x79, 0xAF, 0x7A, 0xF0, 0xF4, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0xF0, 0xF6, 0xB4, 0xE1, 0xAF, 0x7B, 0xF0, 0xF1, /* 0x00-0x03 */ + 0xAF, 0x7C, 0xF0, 0xF7, 0xAF, 0x7D, 0xAF, 0x7E, /* 0x04-0x07 */ + 0xAF, 0x80, 0xAF, 0x81, 0xF0, 0xFA, 0xAF, 0x82, /* 0x08-0x0B */ + 0xF0, 0xF8, 0xAF, 0x83, 0xAF, 0x84, 0xAF, 0x85, /* 0x0C-0x0F */ + 0xF0, 0xF5, 0xAF, 0x86, 0xAF, 0x87, 0xAF, 0x88, /* 0x10-0x13 */ + 0xAF, 0x89, 0xF0, 0xFD, 0xAF, 0x8A, 0xF0, 0xF9, /* 0x14-0x17 */ + 0xF0, 0xFC, 0xF0, 0xFE, 0xAF, 0x8B, 0xF1, 0xA1, /* 0x18-0x1B */ + 0xAF, 0x8C, 0xAF, 0x8D, 0xAF, 0x8E, 0xCE, 0xC1, /* 0x1C-0x1F */ + 0xF1, 0xA4, 0xAF, 0x8F, 0xF1, 0xA3, 0xAF, 0x90, /* 0x20-0x23 */ + 0xC1, 0xF6, 0xF0, 0xFB, 0xCA, 0xDD, 0xAF, 0x91, /* 0x24-0x27 */ + 0xAF, 0x92, 0xB4, 0xF1, 0xB1, 0xF1, 0xCC, 0xB1, /* 0x28-0x2B */ + 0xAF, 0x93, 0xF1, 0xA6, 0xAF, 0x94, 0xAF, 0x95, /* 0x2C-0x2F */ + 0xF1, 0xA7, 0xAF, 0x96, 0xAF, 0x97, 0xF1, 0xAC, /* 0x30-0x33 */ + 0xD5, 0xCE, 0xF1, 0xA9, 0xAF, 0x98, 0xAF, 0x99, /* 0x34-0x37 */ + 0xC8, 0xB3, 0xAF, 0x9A, 0xAF, 0x9B, 0xAF, 0x9C, /* 0x38-0x3B */ + 0xF1, 0xA2, 0xAF, 0x9D, 0xF1, 0xAB, 0xF1, 0xA8, /* 0x3C-0x3F */ + 0xF1, 0xA5, 0xAF, 0x9E, 0xAF, 0x9F, 0xF1, 0xAA, /* 0x40-0x43 */ + 0xAF, 0xA0, 0xB0, 0x40, 0xB0, 0x41, 0xB0, 0x42, /* 0x44-0x47 */ + 0xB0, 0x43, 0xB0, 0x44, 0xB0, 0x45, 0xB0, 0x46, /* 0x48-0x4B */ + 0xB0, 0xA9, 0xF1, 0xAD, 0xB0, 0x47, 0xB0, 0x48, /* 0x4C-0x4F */ + 0xB0, 0x49, 0xB0, 0x4A, 0xB0, 0x4B, 0xB0, 0x4C, /* 0x50-0x53 */ + 0xF1, 0xAF, 0xB0, 0x4D, 0xF1, 0xB1, 0xB0, 0x4E, /* 0x54-0x57 */ + 0xB0, 0x4F, 0xB0, 0x50, 0xB0, 0x51, 0xB0, 0x52, /* 0x58-0x5B */ + 0xF1, 0xB0, 0xB0, 0x53, 0xF1, 0xAE, 0xB0, 0x54, /* 0x5C-0x5F */ + 0xB0, 0x55, 0xB0, 0x56, 0xB0, 0x57, 0xD1, 0xA2, /* 0x60-0x63 */ + 0xB0, 0x58, 0xB0, 0x59, 0xB0, 0x5A, 0xB0, 0x5B, /* 0x64-0x67 */ + 0xB0, 0x5C, 0xB0, 0x5D, 0xB0, 0x5E, 0xF1, 0xB2, /* 0x68-0x6B */ + 0xB0, 0x5F, 0xB0, 0x60, 0xB0, 0x61, 0xF1, 0xB3, /* 0x6C-0x6F */ + 0xB0, 0x62, 0xB0, 0x63, 0xB0, 0x64, 0xB0, 0x65, /* 0x70-0x73 */ + 0xB0, 0x66, 0xB0, 0x67, 0xB0, 0x68, 0xB0, 0x69, /* 0x74-0x77 */ + 0xB9, 0xEF, 0xB0, 0x6A, 0xB0, 0x6B, 0xB5, 0xC7, /* 0x78-0x7B */ + 0xB0, 0x6C, 0xB0, 0xD7, 0xB0, 0xD9, 0xB0, 0x6D, /* 0x7C-0x7F */ + + 0xB0, 0x6E, 0xB0, 0x6F, 0xD4, 0xED, 0xB0, 0x70, /* 0x80-0x83 */ + 0xB5, 0xC4, 0xB0, 0x71, 0xBD, 0xD4, 0xBB, 0xCA, /* 0x84-0x87 */ + 0xF0, 0xA7, 0xB0, 0x72, 0xB0, 0x73, 0xB8, 0xDE, /* 0x88-0x8B */ + 0xB0, 0x74, 0xB0, 0x75, 0xF0, 0xA8, 0xB0, 0x76, /* 0x8C-0x8F */ + 0xB0, 0x77, 0xB0, 0xA8, 0xB0, 0x78, 0xF0, 0xA9, /* 0x90-0x93 */ + 0xB0, 0x79, 0xB0, 0x7A, 0xCD, 0xEE, 0xB0, 0x7B, /* 0x94-0x97 */ + 0xB0, 0x7C, 0xF0, 0xAA, 0xB0, 0x7D, 0xB0, 0x7E, /* 0x98-0x9B */ + 0xB0, 0x80, 0xB0, 0x81, 0xB0, 0x82, 0xB0, 0x83, /* 0x9C-0x9F */ + 0xB0, 0x84, 0xB0, 0x85, 0xB0, 0x86, 0xB0, 0x87, /* 0xA0-0xA3 */ + 0xF0, 0xAB, 0xB0, 0x88, 0xB0, 0x89, 0xB0, 0x8A, /* 0xA4-0xA7 */ + 0xB0, 0x8B, 0xB0, 0x8C, 0xB0, 0x8D, 0xB0, 0x8E, /* 0xA8-0xAB */ + 0xB0, 0x8F, 0xB0, 0x90, 0xC6, 0xA4, 0xB0, 0x91, /* 0xAC-0xAF */ + 0xB0, 0x92, 0xD6, 0xE5, 0xF1, 0xE4, 0xB0, 0x93, /* 0xB0-0xB3 */ + 0xF1, 0xE5, 0xB0, 0x94, 0xB0, 0x95, 0xB0, 0x96, /* 0xB4-0xB7 */ + 0xB0, 0x97, 0xB0, 0x98, 0xB0, 0x99, 0xB0, 0x9A, /* 0xB8-0xBB */ + 0xB0, 0x9B, 0xB0, 0x9C, 0xB0, 0x9D, 0xC3, 0xF3, /* 0xBC-0xBF */ + 0xB0, 0x9E, 0xB0, 0x9F, 0xD3, 0xDB, 0xB0, 0xA0, /* 0xC0-0xC3 */ + 0xB1, 0x40, 0xD6, 0xD1, 0xC5, 0xE8, 0xB1, 0x41, /* 0xC4-0xC7 */ + 0xD3, 0xAF, 0xB1, 0x42, 0xD2, 0xE6, 0xB1, 0x43, /* 0xC8-0xCB */ + 0xB1, 0x44, 0xEE, 0xC1, 0xB0, 0xBB, 0xD5, 0xB5, /* 0xCC-0xCF */ + 0xD1, 0xCE, 0xBC, 0xE0, 0xBA, 0xD0, 0xB1, 0x45, /* 0xD0-0xD3 */ + 0xBF, 0xF8, 0xB1, 0x46, 0xB8, 0xC7, 0xB5, 0xC1, /* 0xD4-0xD7 */ + 0xC5, 0xCC, 0xB1, 0x47, 0xB1, 0x48, 0xCA, 0xA2, /* 0xD8-0xDB */ + 0xB1, 0x49, 0xB1, 0x4A, 0xB1, 0x4B, 0xC3, 0xCB, /* 0xDC-0xDF */ + 0xB1, 0x4C, 0xB1, 0x4D, 0xB1, 0x4E, 0xB1, 0x4F, /* 0xE0-0xE3 */ + 0xB1, 0x50, 0xEE, 0xC2, 0xB1, 0x51, 0xB1, 0x52, /* 0xE4-0xE7 */ + 0xB1, 0x53, 0xB1, 0x54, 0xB1, 0x55, 0xB1, 0x56, /* 0xE8-0xEB */ + 0xB1, 0x57, 0xB1, 0x58, 0xC4, 0xBF, 0xB6, 0xA2, /* 0xEC-0xEF */ + 0xB1, 0x59, 0xED, 0xEC, 0xC3, 0xA4, 0xB1, 0x5A, /* 0xF0-0xF3 */ + 0xD6, 0xB1, 0xB1, 0x5B, 0xB1, 0x5C, 0xB1, 0x5D, /* 0xF4-0xF7 */ + 0xCF, 0xE0, 0xED, 0xEF, 0xB1, 0x5E, 0xB1, 0x5F, /* 0xF8-0xFB */ + 0xC5, 0xCE, 0xB1, 0x60, 0xB6, 0xDC, 0xB1, 0x61, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0xB1, 0x62, 0xCA, 0xA1, 0xB1, 0x63, 0xB1, 0x64, /* 0x00-0x03 */ + 0xED, 0xED, 0xB1, 0x65, 0xB1, 0x66, 0xED, 0xF0, /* 0x04-0x07 */ + 0xED, 0xF1, 0xC3, 0xBC, 0xB1, 0x67, 0xBF, 0xB4, /* 0x08-0x0B */ + 0xB1, 0x68, 0xED, 0xEE, 0xB1, 0x69, 0xB1, 0x6A, /* 0x0C-0x0F */ + 0xB1, 0x6B, 0xB1, 0x6C, 0xB1, 0x6D, 0xB1, 0x6E, /* 0x10-0x13 */ + 0xB1, 0x6F, 0xB1, 0x70, 0xB1, 0x71, 0xB1, 0x72, /* 0x14-0x17 */ + 0xB1, 0x73, 0xED, 0xF4, 0xED, 0xF2, 0xB1, 0x74, /* 0x18-0x1B */ + 0xB1, 0x75, 0xB1, 0x76, 0xB1, 0x77, 0xD5, 0xE6, /* 0x1C-0x1F */ + 0xC3, 0xDF, 0xB1, 0x78, 0xED, 0xF3, 0xB1, 0x79, /* 0x20-0x23 */ + 0xB1, 0x7A, 0xB1, 0x7B, 0xED, 0xF6, 0xB1, 0x7C, /* 0x24-0x27 */ + 0xD5, 0xA3, 0xD1, 0xA3, 0xB1, 0x7D, 0xB1, 0x7E, /* 0x28-0x2B */ + 0xB1, 0x80, 0xED, 0xF5, 0xB1, 0x81, 0xC3, 0xD0, /* 0x2C-0x2F */ + 0xB1, 0x82, 0xB1, 0x83, 0xB1, 0x84, 0xB1, 0x85, /* 0x30-0x33 */ + 0xB1, 0x86, 0xED, 0xF7, 0xBF, 0xF4, 0xBE, 0xEC, /* 0x34-0x37 */ + 0xED, 0xF8, 0xB1, 0x87, 0xCC, 0xF7, 0xB1, 0x88, /* 0x38-0x3B */ + 0xD1, 0xDB, 0xB1, 0x89, 0xB1, 0x8A, 0xB1, 0x8B, /* 0x3C-0x3F */ + 0xD7, 0xC5, 0xD5, 0xF6, 0xB1, 0x8C, 0xED, 0xFC, /* 0x40-0x43 */ + 0xB1, 0x8D, 0xB1, 0x8E, 0xB1, 0x8F, 0xED, 0xFB, /* 0x44-0x47 */ + 0xB1, 0x90, 0xB1, 0x91, 0xB1, 0x92, 0xB1, 0x93, /* 0x48-0x4B */ + 0xB1, 0x94, 0xB1, 0x95, 0xB1, 0x96, 0xB1, 0x97, /* 0x4C-0x4F */ + 0xED, 0xF9, 0xED, 0xFA, 0xB1, 0x98, 0xB1, 0x99, /* 0x50-0x53 */ + 0xB1, 0x9A, 0xB1, 0x9B, 0xB1, 0x9C, 0xB1, 0x9D, /* 0x54-0x57 */ + 0xB1, 0x9E, 0xB1, 0x9F, 0xED, 0xFD, 0xBE, 0xA6, /* 0x58-0x5B */ + 0xB1, 0xA0, 0xB2, 0x40, 0xB2, 0x41, 0xB2, 0x42, /* 0x5C-0x5F */ + 0xB2, 0x43, 0xCB, 0xAF, 0xEE, 0xA1, 0xB6, 0xBD, /* 0x60-0x63 */ + 0xB2, 0x44, 0xEE, 0xA2, 0xC4, 0xC0, 0xB2, 0x45, /* 0x64-0x67 */ + 0xED, 0xFE, 0xB2, 0x46, 0xB2, 0x47, 0xBD, 0xDE, /* 0x68-0x6B */ + 0xB2, 0xC7, 0xB2, 0x48, 0xB2, 0x49, 0xB2, 0x4A, /* 0x6C-0x6F */ + 0xB2, 0x4B, 0xB2, 0x4C, 0xB2, 0x4D, 0xB2, 0x4E, /* 0x70-0x73 */ + 0xB2, 0x4F, 0xB2, 0x50, 0xB2, 0x51, 0xB2, 0x52, /* 0x74-0x77 */ + 0xB2, 0x53, 0xB6, 0xC3, 0xB2, 0x54, 0xB2, 0x55, /* 0x78-0x7B */ + 0xB2, 0x56, 0xEE, 0xA5, 0xD8, 0xBA, 0xEE, 0xA3, /* 0x7C-0x7F */ + + 0xEE, 0xA6, 0xB2, 0x57, 0xB2, 0x58, 0xB2, 0x59, /* 0x80-0x83 */ + 0xC3, 0xE9, 0xB3, 0xF2, 0xB2, 0x5A, 0xB2, 0x5B, /* 0x84-0x87 */ + 0xB2, 0x5C, 0xB2, 0x5D, 0xB2, 0x5E, 0xB2, 0x5F, /* 0x88-0x8B */ + 0xEE, 0xA7, 0xEE, 0xA4, 0xCF, 0xB9, 0xB2, 0x60, /* 0x8C-0x8F */ + 0xB2, 0x61, 0xEE, 0xA8, 0xC2, 0xF7, 0xB2, 0x62, /* 0x90-0x93 */ + 0xB2, 0x63, 0xB2, 0x64, 0xB2, 0x65, 0xB2, 0x66, /* 0x94-0x97 */ + 0xB2, 0x67, 0xB2, 0x68, 0xB2, 0x69, 0xB2, 0x6A, /* 0x98-0x9B */ + 0xB2, 0x6B, 0xB2, 0x6C, 0xB2, 0x6D, 0xEE, 0xA9, /* 0x9C-0x9F */ + 0xEE, 0xAA, 0xB2, 0x6E, 0xDE, 0xAB, 0xB2, 0x6F, /* 0xA0-0xA3 */ + 0xB2, 0x70, 0xC6, 0xB3, 0xB2, 0x71, 0xC7, 0xC6, /* 0xA4-0xA7 */ + 0xB2, 0x72, 0xD6, 0xF5, 0xB5, 0xC9, 0xB2, 0x73, /* 0xA8-0xAB */ + 0xCB, 0xB2, 0xB2, 0x74, 0xB2, 0x75, 0xB2, 0x76, /* 0xAC-0xAF */ + 0xEE, 0xAB, 0xB2, 0x77, 0xB2, 0x78, 0xCD, 0xAB, /* 0xB0-0xB3 */ + 0xB2, 0x79, 0xEE, 0xAC, 0xB2, 0x7A, 0xB2, 0x7B, /* 0xB4-0xB7 */ + 0xB2, 0x7C, 0xB2, 0x7D, 0xB2, 0x7E, 0xD5, 0xB0, /* 0xB8-0xBB */ + 0xB2, 0x80, 0xEE, 0xAD, 0xB2, 0x81, 0xF6, 0xC4, /* 0xBC-0xBF */ + 0xB2, 0x82, 0xB2, 0x83, 0xB2, 0x84, 0xB2, 0x85, /* 0xC0-0xC3 */ + 0xB2, 0x86, 0xB2, 0x87, 0xB2, 0x88, 0xB2, 0x89, /* 0xC4-0xC7 */ + 0xB2, 0x8A, 0xB2, 0x8B, 0xB2, 0x8C, 0xB2, 0x8D, /* 0xC8-0xCB */ + 0xB2, 0x8E, 0xDB, 0xC7, 0xB2, 0x8F, 0xB2, 0x90, /* 0xCC-0xCF */ + 0xB2, 0x91, 0xB2, 0x92, 0xB2, 0x93, 0xB2, 0x94, /* 0xD0-0xD3 */ + 0xB2, 0x95, 0xB2, 0x96, 0xB2, 0x97, 0xB4, 0xA3, /* 0xD4-0xD7 */ + 0xB2, 0x98, 0xB2, 0x99, 0xB2, 0x9A, 0xC3, 0xAC, /* 0xD8-0xDB */ + 0xF1, 0xE6, 0xB2, 0x9B, 0xB2, 0x9C, 0xB2, 0x9D, /* 0xDC-0xDF */ + 0xB2, 0x9E, 0xB2, 0x9F, 0xCA, 0xB8, 0xD2, 0xD3, /* 0xE0-0xE3 */ + 0xB2, 0xA0, 0xD6, 0xAA, 0xB3, 0x40, 0xEF, 0xF2, /* 0xE4-0xE7 */ + 0xB3, 0x41, 0xBE, 0xD8, 0xB3, 0x42, 0xBD, 0xC3, /* 0xE8-0xEB */ + 0xEF, 0xF3, 0xB6, 0xCC, 0xB0, 0xAB, 0xB3, 0x43, /* 0xEC-0xEF */ + 0xB3, 0x44, 0xB3, 0x45, 0xB3, 0x46, 0xCA, 0xAF, /* 0xF0-0xF3 */ + 0xB3, 0x47, 0xB3, 0x48, 0xED, 0xB6, 0xB3, 0x49, /* 0xF4-0xF7 */ + 0xED, 0xB7, 0xB3, 0x4A, 0xB3, 0x4B, 0xB3, 0x4C, /* 0xF8-0xFB */ + 0xB3, 0x4D, 0xCE, 0xF9, 0xB7, 0xAF, 0xBF, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0xED, 0xB8, 0xC2, 0xEB, 0xC9, 0xB0, 0xB3, 0x4E, /* 0x00-0x03 */ + 0xB3, 0x4F, 0xB3, 0x50, 0xB3, 0x51, 0xB3, 0x52, /* 0x04-0x07 */ + 0xB3, 0x53, 0xED, 0xB9, 0xB3, 0x54, 0xB3, 0x55, /* 0x08-0x0B */ + 0xC6, 0xF6, 0xBF, 0xB3, 0xB3, 0x56, 0xB3, 0x57, /* 0x0C-0x0F */ + 0xB3, 0x58, 0xED, 0xBC, 0xC5, 0xF8, 0xB3, 0x59, /* 0x10-0x13 */ + 0xD1, 0xD0, 0xB3, 0x5A, 0xD7, 0xA9, 0xED, 0xBA, /* 0x14-0x17 */ + 0xED, 0xBB, 0xB3, 0x5B, 0xD1, 0xE2, 0xB3, 0x5C, /* 0x18-0x1B */ + 0xED, 0xBF, 0xED, 0xC0, 0xB3, 0x5D, 0xED, 0xC4, /* 0x1C-0x1F */ + 0xB3, 0x5E, 0xB3, 0x5F, 0xB3, 0x60, 0xED, 0xC8, /* 0x20-0x23 */ + 0xB3, 0x61, 0xED, 0xC6, 0xED, 0xCE, 0xD5, 0xE8, /* 0x24-0x27 */ + 0xB3, 0x62, 0xED, 0xC9, 0xB3, 0x63, 0xB3, 0x64, /* 0x28-0x2B */ + 0xED, 0xC7, 0xED, 0xBE, 0xB3, 0x65, 0xB3, 0x66, /* 0x2C-0x2F */ + 0xC5, 0xE9, 0xB3, 0x67, 0xB3, 0x68, 0xB3, 0x69, /* 0x30-0x33 */ + 0xC6, 0xC6, 0xB3, 0x6A, 0xB3, 0x6B, 0xC9, 0xE9, /* 0x34-0x37 */ + 0xD4, 0xD2, 0xED, 0xC1, 0xED, 0xC2, 0xED, 0xC3, /* 0x38-0x3B */ + 0xED, 0xC5, 0xB3, 0x6C, 0xC0, 0xF9, 0xB3, 0x6D, /* 0x3C-0x3F */ + 0xB4, 0xA1, 0xB3, 0x6E, 0xB3, 0x6F, 0xB3, 0x70, /* 0x40-0x43 */ + 0xB3, 0x71, 0xB9, 0xE8, 0xB3, 0x72, 0xED, 0xD0, /* 0x44-0x47 */ + 0xB3, 0x73, 0xB3, 0x74, 0xB3, 0x75, 0xB3, 0x76, /* 0x48-0x4B */ + 0xED, 0xD1, 0xB3, 0x77, 0xED, 0xCA, 0xB3, 0x78, /* 0x4C-0x4F */ + 0xED, 0xCF, 0xB3, 0x79, 0xCE, 0xF8, 0xB3, 0x7A, /* 0x50-0x53 */ + 0xB3, 0x7B, 0xCB, 0xB6, 0xED, 0xCC, 0xED, 0xCD, /* 0x54-0x57 */ + 0xB3, 0x7C, 0xB3, 0x7D, 0xB3, 0x7E, 0xB3, 0x80, /* 0x58-0x5B */ + 0xB3, 0x81, 0xCF, 0xF5, 0xB3, 0x82, 0xB3, 0x83, /* 0x5C-0x5F */ + 0xB3, 0x84, 0xB3, 0x85, 0xB3, 0x86, 0xB3, 0x87, /* 0x60-0x63 */ + 0xB3, 0x88, 0xB3, 0x89, 0xB3, 0x8A, 0xB3, 0x8B, /* 0x64-0x67 */ + 0xB3, 0x8C, 0xB3, 0x8D, 0xED, 0xD2, 0xC1, 0xF2, /* 0x68-0x6B */ + 0xD3, 0xB2, 0xED, 0xCB, 0xC8, 0xB7, 0xB3, 0x8E, /* 0x6C-0x6F */ + 0xB3, 0x8F, 0xB3, 0x90, 0xB3, 0x91, 0xB3, 0x92, /* 0x70-0x73 */ + 0xB3, 0x93, 0xB3, 0x94, 0xB3, 0x95, 0xBC, 0xEF, /* 0x74-0x77 */ + 0xB3, 0x96, 0xB3, 0x97, 0xB3, 0x98, 0xB3, 0x99, /* 0x78-0x7B */ + 0xC5, 0xF0, 0xB3, 0x9A, 0xB3, 0x9B, 0xB3, 0x9C, /* 0x7C-0x7F */ + + 0xB3, 0x9D, 0xB3, 0x9E, 0xB3, 0x9F, 0xB3, 0xA0, /* 0x80-0x83 */ + 0xB4, 0x40, 0xB4, 0x41, 0xB4, 0x42, 0xED, 0xD6, /* 0x84-0x87 */ + 0xB4, 0x43, 0xB5, 0xEF, 0xB4, 0x44, 0xB4, 0x45, /* 0x88-0x8B */ + 0xC2, 0xB5, 0xB0, 0xAD, 0xCB, 0xE9, 0xB4, 0x46, /* 0x8C-0x8F */ + 0xB4, 0x47, 0xB1, 0xAE, 0xB4, 0x48, 0xED, 0xD4, /* 0x90-0x93 */ + 0xB4, 0x49, 0xB4, 0x4A, 0xB4, 0x4B, 0xCD, 0xEB, /* 0x94-0x97 */ + 0xB5, 0xE2, 0xB4, 0x4C, 0xED, 0xD5, 0xED, 0xD3, /* 0x98-0x9B */ + 0xED, 0xD7, 0xB4, 0x4D, 0xB4, 0x4E, 0xB5, 0xFA, /* 0x9C-0x9F */ + 0xB4, 0x4F, 0xED, 0xD8, 0xB4, 0x50, 0xED, 0xD9, /* 0xA0-0xA3 */ + 0xB4, 0x51, 0xED, 0xDC, 0xB4, 0x52, 0xB1, 0xCC, /* 0xA4-0xA7 */ + 0xB4, 0x53, 0xB4, 0x54, 0xB4, 0x55, 0xB4, 0x56, /* 0xA8-0xAB */ + 0xB4, 0x57, 0xB4, 0x58, 0xB4, 0x59, 0xB4, 0x5A, /* 0xAC-0xAF */ + 0xC5, 0xF6, 0xBC, 0xEE, 0xED, 0xDA, 0xCC, 0xBC, /* 0xB0-0xB3 */ + 0xB2, 0xEA, 0xB4, 0x5B, 0xB4, 0x5C, 0xB4, 0x5D, /* 0xB4-0xB7 */ + 0xB4, 0x5E, 0xED, 0xDB, 0xB4, 0x5F, 0xB4, 0x60, /* 0xB8-0xBB */ + 0xB4, 0x61, 0xB4, 0x62, 0xC4, 0xEB, 0xB4, 0x63, /* 0xBC-0xBF */ + 0xB4, 0x64, 0xB4, 0xC5, 0xB4, 0x65, 0xB4, 0x66, /* 0xC0-0xC3 */ + 0xB4, 0x67, 0xB0, 0xF5, 0xB4, 0x68, 0xB4, 0x69, /* 0xC4-0xC7 */ + 0xB4, 0x6A, 0xED, 0xDF, 0xC0, 0xDA, 0xB4, 0xE8, /* 0xC8-0xCB */ + 0xB4, 0x6B, 0xB4, 0x6C, 0xB4, 0x6D, 0xB4, 0x6E, /* 0xCC-0xCF */ + 0xC5, 0xCD, 0xB4, 0x6F, 0xB4, 0x70, 0xB4, 0x71, /* 0xD0-0xD3 */ + 0xED, 0xDD, 0xBF, 0xC4, 0xB4, 0x72, 0xB4, 0x73, /* 0xD4-0xD7 */ + 0xB4, 0x74, 0xED, 0xDE, 0xB4, 0x75, 0xB4, 0x76, /* 0xD8-0xDB */ + 0xB4, 0x77, 0xB4, 0x78, 0xB4, 0x79, 0xB4, 0x7A, /* 0xDC-0xDF */ + 0xB4, 0x7B, 0xB4, 0x7C, 0xB4, 0x7D, 0xB4, 0x7E, /* 0xE0-0xE3 */ + 0xB4, 0x80, 0xB4, 0x81, 0xB4, 0x82, 0xB4, 0x83, /* 0xE4-0xE7 */ + 0xC4, 0xA5, 0xB4, 0x84, 0xB4, 0x85, 0xB4, 0x86, /* 0xE8-0xEB */ + 0xED, 0xE0, 0xB4, 0x87, 0xB4, 0x88, 0xB4, 0x89, /* 0xEC-0xEF */ + 0xB4, 0x8A, 0xB4, 0x8B, 0xED, 0xE1, 0xB4, 0x8C, /* 0xF0-0xF3 */ + 0xED, 0xE3, 0xB4, 0x8D, 0xB4, 0x8E, 0xC1, 0xD7, /* 0xF4-0xF7 */ + 0xB4, 0x8F, 0xB4, 0x90, 0xBB, 0xC7, 0xB4, 0x91, /* 0xF8-0xFB */ + 0xB4, 0x92, 0xB4, 0x93, 0xB4, 0x94, 0xB4, 0x95, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0xB4, 0x96, 0xBD, 0xB8, 0xB4, 0x97, 0xB4, 0x98, /* 0x00-0x03 */ + 0xB4, 0x99, 0xED, 0xE2, 0xB4, 0x9A, 0xB4, 0x9B, /* 0x04-0x07 */ + 0xB4, 0x9C, 0xB4, 0x9D, 0xB4, 0x9E, 0xB4, 0x9F, /* 0x08-0x0B */ + 0xB4, 0xA0, 0xB5, 0x40, 0xB5, 0x41, 0xB5, 0x42, /* 0x0C-0x0F */ + 0xB5, 0x43, 0xB5, 0x44, 0xB5, 0x45, 0xED, 0xE4, /* 0x10-0x13 */ + 0xB5, 0x46, 0xB5, 0x47, 0xB5, 0x48, 0xB5, 0x49, /* 0x14-0x17 */ + 0xB5, 0x4A, 0xB5, 0x4B, 0xB5, 0x4C, 0xB5, 0x4D, /* 0x18-0x1B */ + 0xB5, 0x4E, 0xB5, 0x4F, 0xED, 0xE6, 0xB5, 0x50, /* 0x1C-0x1F */ + 0xB5, 0x51, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x54, /* 0x20-0x23 */ + 0xED, 0xE5, 0xB5, 0x55, 0xB5, 0x56, 0xB5, 0x57, /* 0x24-0x27 */ + 0xB5, 0x58, 0xB5, 0x59, 0xB5, 0x5A, 0xB5, 0x5B, /* 0x28-0x2B */ + 0xB5, 0x5C, 0xB5, 0x5D, 0xB5, 0x5E, 0xB5, 0x5F, /* 0x2C-0x2F */ + 0xB5, 0x60, 0xB5, 0x61, 0xB5, 0x62, 0xB5, 0x63, /* 0x30-0x33 */ + 0xED, 0xE7, 0xB5, 0x64, 0xB5, 0x65, 0xB5, 0x66, /* 0x34-0x37 */ + 0xB5, 0x67, 0xB5, 0x68, 0xCA, 0xBE, 0xEC, 0xEA, /* 0x38-0x3B */ + 0xC0, 0xF1, 0xB5, 0x69, 0xC9, 0xE7, 0xB5, 0x6A, /* 0x3C-0x3F */ + 0xEC, 0xEB, 0xC6, 0xEE, 0xB5, 0x6B, 0xB5, 0x6C, /* 0x40-0x43 */ + 0xB5, 0x6D, 0xB5, 0x6E, 0xEC, 0xEC, 0xB5, 0x6F, /* 0x44-0x47 */ + 0xC6, 0xED, 0xEC, 0xED, 0xB5, 0x70, 0xB5, 0x71, /* 0x48-0x4B */ + 0xB5, 0x72, 0xB5, 0x73, 0xB5, 0x74, 0xB5, 0x75, /* 0x4C-0x4F */ + 0xB5, 0x76, 0xB5, 0x77, 0xB5, 0x78, 0xEC, 0xF0, /* 0x50-0x53 */ + 0xB5, 0x79, 0xB5, 0x7A, 0xD7, 0xE6, 0xEC, 0xF3, /* 0x54-0x57 */ + 0xB5, 0x7B, 0xB5, 0x7C, 0xEC, 0xF1, 0xEC, 0xEE, /* 0x58-0x5B */ + 0xEC, 0xEF, 0xD7, 0xA3, 0xC9, 0xF1, 0xCB, 0xEE, /* 0x5C-0x5F */ + 0xEC, 0xF4, 0xB5, 0x7D, 0xEC, 0xF2, 0xB5, 0x7E, /* 0x60-0x63 */ + 0xB5, 0x80, 0xCF, 0xE9, 0xB5, 0x81, 0xEC, 0xF6, /* 0x64-0x67 */ + 0xC6, 0xB1, 0xB5, 0x82, 0xB5, 0x83, 0xB5, 0x84, /* 0x68-0x6B */ + 0xB5, 0x85, 0xBC, 0xC0, 0xB5, 0x86, 0xEC, 0xF5, /* 0x6C-0x6F */ + 0xB5, 0x87, 0xB5, 0x88, 0xB5, 0x89, 0xB5, 0x8A, /* 0x70-0x73 */ + 0xB5, 0x8B, 0xB5, 0x8C, 0xB5, 0x8D, 0xB5, 0xBB, /* 0x74-0x77 */ + 0xBB, 0xF6, 0xB5, 0x8E, 0xEC, 0xF7, 0xB5, 0x8F, /* 0x78-0x7B */ + 0xB5, 0x90, 0xB5, 0x91, 0xB5, 0x92, 0xB5, 0x93, /* 0x7C-0x7F */ + + 0xD9, 0xF7, 0xBD, 0xFB, 0xB5, 0x94, 0xB5, 0x95, /* 0x80-0x83 */ + 0xC2, 0xBB, 0xEC, 0xF8, 0xB5, 0x96, 0xB5, 0x97, /* 0x84-0x87 */ + 0xB5, 0x98, 0xB5, 0x99, 0xEC, 0xF9, 0xB5, 0x9A, /* 0x88-0x8B */ + 0xB5, 0x9B, 0xB5, 0x9C, 0xB5, 0x9D, 0xB8, 0xA3, /* 0x8C-0x8F */ + 0xB5, 0x9E, 0xB5, 0x9F, 0xB5, 0xA0, 0xB6, 0x40, /* 0x90-0x93 */ + 0xB6, 0x41, 0xB6, 0x42, 0xB6, 0x43, 0xB6, 0x44, /* 0x94-0x97 */ + 0xB6, 0x45, 0xB6, 0x46, 0xEC, 0xFA, 0xB6, 0x47, /* 0x98-0x9B */ + 0xB6, 0x48, 0xB6, 0x49, 0xB6, 0x4A, 0xB6, 0x4B, /* 0x9C-0x9F */ + 0xB6, 0x4C, 0xB6, 0x4D, 0xB6, 0x4E, 0xB6, 0x4F, /* 0xA0-0xA3 */ + 0xB6, 0x50, 0xB6, 0x51, 0xB6, 0x52, 0xEC, 0xFB, /* 0xA4-0xA7 */ + 0xB6, 0x53, 0xB6, 0x54, 0xB6, 0x55, 0xB6, 0x56, /* 0xA8-0xAB */ + 0xB6, 0x57, 0xB6, 0x58, 0xB6, 0x59, 0xB6, 0x5A, /* 0xAC-0xAF */ + 0xB6, 0x5B, 0xB6, 0x5C, 0xB6, 0x5D, 0xEC, 0xFC, /* 0xB0-0xB3 */ + 0xB6, 0x5E, 0xB6, 0x5F, 0xB6, 0x60, 0xB6, 0x61, /* 0xB4-0xB7 */ + 0xB6, 0x62, 0xD3, 0xED, 0xD8, 0xAE, 0xC0, 0xEB, /* 0xB8-0xBB */ + 0xB6, 0x63, 0xC7, 0xDD, 0xBA, 0xCC, 0xB6, 0x64, /* 0xBC-0xBF */ + 0xD0, 0xE3, 0xCB, 0xBD, 0xB6, 0x65, 0xCD, 0xBA, /* 0xC0-0xC3 */ + 0xB6, 0x66, 0xB6, 0x67, 0xB8, 0xD1, 0xB6, 0x68, /* 0xC4-0xC7 */ + 0xB6, 0x69, 0xB1, 0xFC, 0xB6, 0x6A, 0xC7, 0xEF, /* 0xC8-0xCB */ + 0xB6, 0x6B, 0xD6, 0xD6, 0xB6, 0x6C, 0xB6, 0x6D, /* 0xCC-0xCF */ + 0xB6, 0x6E, 0xBF, 0xC6, 0xC3, 0xEB, 0xB6, 0x6F, /* 0xD0-0xD3 */ + 0xB6, 0x70, 0xEF, 0xF5, 0xB6, 0x71, 0xB6, 0x72, /* 0xD4-0xD7 */ + 0xC3, 0xD8, 0xB6, 0x73, 0xB6, 0x74, 0xB6, 0x75, /* 0xD8-0xDB */ + 0xB6, 0x76, 0xB6, 0x77, 0xB6, 0x78, 0xD7, 0xE2, /* 0xDC-0xDF */ + 0xB6, 0x79, 0xB6, 0x7A, 0xB6, 0x7B, 0xEF, 0xF7, /* 0xE0-0xE3 */ + 0xB3, 0xD3, 0xB6, 0x7C, 0xC7, 0xD8, 0xD1, 0xED, /* 0xE4-0xE7 */ + 0xB6, 0x7D, 0xD6, 0xC8, 0xB6, 0x7E, 0xEF, 0xF8, /* 0xE8-0xEB */ + 0xB6, 0x80, 0xEF, 0xF6, 0xB6, 0x81, 0xBB, 0xFD, /* 0xEC-0xEF */ + 0xB3, 0xC6, 0xB6, 0x82, 0xB6, 0x83, 0xB6, 0x84, /* 0xF0-0xF3 */ + 0xB6, 0x85, 0xB6, 0x86, 0xB6, 0x87, 0xB6, 0x88, /* 0xF4-0xF7 */ + 0xBD, 0xD5, 0xB6, 0x89, 0xB6, 0x8A, 0xD2, 0xC6, /* 0xF8-0xFB */ + 0xB6, 0x8B, 0xBB, 0xE0, 0xB6, 0x8C, 0xB6, 0x8D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7A[512] = { + 0xCF, 0xA1, 0xB6, 0x8E, 0xEF, 0xFC, 0xEF, 0xFB, /* 0x00-0x03 */ + 0xB6, 0x8F, 0xB6, 0x90, 0xEF, 0xF9, 0xB6, 0x91, /* 0x04-0x07 */ + 0xB6, 0x92, 0xB6, 0x93, 0xB6, 0x94, 0xB3, 0xCC, /* 0x08-0x0B */ + 0xB6, 0x95, 0xC9, 0xD4, 0xCB, 0xB0, 0xB6, 0x96, /* 0x0C-0x0F */ + 0xB6, 0x97, 0xB6, 0x98, 0xB6, 0x99, 0xB6, 0x9A, /* 0x10-0x13 */ + 0xEF, 0xFE, 0xB6, 0x9B, 0xB6, 0x9C, 0xB0, 0xDE, /* 0x14-0x17 */ + 0xB6, 0x9D, 0xB6, 0x9E, 0xD6, 0xC9, 0xB6, 0x9F, /* 0x18-0x1B */ + 0xB6, 0xA0, 0xB7, 0x40, 0xEF, 0xFD, 0xB7, 0x41, /* 0x1C-0x1F */ + 0xB3, 0xED, 0xB7, 0x42, 0xB7, 0x43, 0xF6, 0xD5, /* 0x20-0x23 */ + 0xB7, 0x44, 0xB7, 0x45, 0xB7, 0x46, 0xB7, 0x47, /* 0x24-0x27 */ + 0xB7, 0x48, 0xB7, 0x49, 0xB7, 0x4A, 0xB7, 0x4B, /* 0x28-0x2B */ + 0xB7, 0x4C, 0xB7, 0x4D, 0xB7, 0x4E, 0xB7, 0x4F, /* 0x2C-0x2F */ + 0xB7, 0x50, 0xB7, 0x51, 0xB7, 0x52, 0xCE, 0xC8, /* 0x30-0x33 */ + 0xB7, 0x53, 0xB7, 0x54, 0xB7, 0x55, 0xF0, 0xA2, /* 0x34-0x37 */ + 0xB7, 0x56, 0xF0, 0xA1, 0xB7, 0x57, 0xB5, 0xBE, /* 0x38-0x3B */ + 0xBC, 0xDA, 0xBB, 0xFC, 0xB7, 0x58, 0xB8, 0xE5, /* 0x3C-0x3F */ + 0xB7, 0x59, 0xB7, 0x5A, 0xB7, 0x5B, 0xB7, 0x5C, /* 0x40-0x43 */ + 0xB7, 0x5D, 0xB7, 0x5E, 0xC4, 0xC2, 0xB7, 0x5F, /* 0x44-0x47 */ + 0xB7, 0x60, 0xB7, 0x61, 0xB7, 0x62, 0xB7, 0x63, /* 0x48-0x4B */ + 0xB7, 0x64, 0xB7, 0x65, 0xB7, 0x66, 0xB7, 0x67, /* 0x4C-0x4F */ + 0xB7, 0x68, 0xF0, 0xA3, 0xB7, 0x69, 0xB7, 0x6A, /* 0x50-0x53 */ + 0xB7, 0x6B, 0xB7, 0x6C, 0xB7, 0x6D, 0xCB, 0xEB, /* 0x54-0x57 */ + 0xB7, 0x6E, 0xB7, 0x6F, 0xB7, 0x70, 0xB7, 0x71, /* 0x58-0x5B */ + 0xB7, 0x72, 0xB7, 0x73, 0xB7, 0x74, 0xB7, 0x75, /* 0x5C-0x5F */ + 0xB7, 0x76, 0xB7, 0x77, 0xB7, 0x78, 0xB7, 0x79, /* 0x60-0x63 */ + 0xB7, 0x7A, 0xB7, 0x7B, 0xB7, 0x7C, 0xB7, 0x7D, /* 0x64-0x67 */ + 0xB7, 0x7E, 0xB7, 0x80, 0xB7, 0x81, 0xB7, 0x82, /* 0x68-0x6B */ + 0xB7, 0x83, 0xB7, 0x84, 0xB7, 0x85, 0xB7, 0x86, /* 0x6C-0x6F */ + 0xF0, 0xA6, 0xB7, 0x87, 0xB7, 0x88, 0xB7, 0x89, /* 0x70-0x73 */ + 0xD1, 0xA8, 0xB7, 0x8A, 0xBE, 0xBF, 0xC7, 0xEE, /* 0x74-0x77 */ + 0xF1, 0xB6, 0xF1, 0xB7, 0xBF, 0xD5, 0xB7, 0x8B, /* 0x78-0x7B */ + 0xB7, 0x8C, 0xB7, 0x8D, 0xB7, 0x8E, 0xB4, 0xA9, /* 0x7C-0x7F */ + + 0xF1, 0xB8, 0xCD, 0xBB, 0xB7, 0x8F, 0xC7, 0xD4, /* 0x80-0x83 */ + 0xD5, 0xAD, 0xB7, 0x90, 0xF1, 0xB9, 0xB7, 0x91, /* 0x84-0x87 */ + 0xF1, 0xBA, 0xB7, 0x92, 0xB7, 0x93, 0xB7, 0x94, /* 0x88-0x8B */ + 0xB7, 0x95, 0xC7, 0xCF, 0xB7, 0x96, 0xB7, 0x97, /* 0x8C-0x8F */ + 0xB7, 0x98, 0xD2, 0xA4, 0xD6, 0xCF, 0xB7, 0x99, /* 0x90-0x93 */ + 0xB7, 0x9A, 0xF1, 0xBB, 0xBD, 0xD1, 0xB4, 0xB0, /* 0x94-0x97 */ + 0xBE, 0xBD, 0xB7, 0x9B, 0xB7, 0x9C, 0xB7, 0x9D, /* 0x98-0x9B */ + 0xB4, 0xDC, 0xCE, 0xD1, 0xB7, 0x9E, 0xBF, 0xDF, /* 0x9C-0x9F */ + 0xF1, 0xBD, 0xB7, 0x9F, 0xB7, 0xA0, 0xB8, 0x40, /* 0xA0-0xA3 */ + 0xB8, 0x41, 0xBF, 0xFA, 0xF1, 0xBC, 0xB8, 0x42, /* 0xA4-0xA7 */ + 0xF1, 0xBF, 0xB8, 0x43, 0xB8, 0x44, 0xB8, 0x45, /* 0xA8-0xAB */ + 0xF1, 0xBE, 0xF1, 0xC0, 0xB8, 0x46, 0xB8, 0x47, /* 0xAC-0xAF */ + 0xB8, 0x48, 0xB8, 0x49, 0xB8, 0x4A, 0xF1, 0xC1, /* 0xB0-0xB3 */ + 0xB8, 0x4B, 0xB8, 0x4C, 0xB8, 0x4D, 0xB8, 0x4E, /* 0xB4-0xB7 */ + 0xB8, 0x4F, 0xB8, 0x50, 0xB8, 0x51, 0xB8, 0x52, /* 0xB8-0xBB */ + 0xB8, 0x53, 0xB8, 0x54, 0xB8, 0x55, 0xC1, 0xFE, /* 0xBC-0xBF */ + 0xB8, 0x56, 0xB8, 0x57, 0xB8, 0x58, 0xB8, 0x59, /* 0xC0-0xC3 */ + 0xB8, 0x5A, 0xB8, 0x5B, 0xB8, 0x5C, 0xB8, 0x5D, /* 0xC4-0xC7 */ + 0xB8, 0x5E, 0xB8, 0x5F, 0xB8, 0x60, 0xC1, 0xA2, /* 0xC8-0xCB */ + 0xB8, 0x61, 0xB8, 0x62, 0xB8, 0x63, 0xB8, 0x64, /* 0xCC-0xCF */ + 0xB8, 0x65, 0xB8, 0x66, 0xB8, 0x67, 0xB8, 0x68, /* 0xD0-0xD3 */ + 0xB8, 0x69, 0xB8, 0x6A, 0xCA, 0xFA, 0xB8, 0x6B, /* 0xD4-0xD7 */ + 0xB8, 0x6C, 0xD5, 0xBE, 0xB8, 0x6D, 0xB8, 0x6E, /* 0xD8-0xDB */ + 0xB8, 0x6F, 0xB8, 0x70, 0xBE, 0xBA, 0xBE, 0xB9, /* 0xDC-0xDF */ + 0xD5, 0xC2, 0xB8, 0x71, 0xB8, 0x72, 0xBF, 0xA2, /* 0xE0-0xE3 */ + 0xB8, 0x73, 0xCD, 0xAF, 0xF1, 0xB5, 0xB8, 0x74, /* 0xE4-0xE7 */ + 0xB8, 0x75, 0xB8, 0x76, 0xB8, 0x77, 0xB8, 0x78, /* 0xE8-0xEB */ + 0xB8, 0x79, 0xBD, 0xDF, 0xB8, 0x7A, 0xB6, 0xCB, /* 0xEC-0xEF */ + 0xB8, 0x7B, 0xB8, 0x7C, 0xB8, 0x7D, 0xB8, 0x7E, /* 0xF0-0xF3 */ + 0xB8, 0x80, 0xB8, 0x81, 0xB8, 0x82, 0xB8, 0x83, /* 0xF4-0xF7 */ + 0xB8, 0x84, 0xD6, 0xF1, 0xF3, 0xC3, 0xB8, 0x85, /* 0xF8-0xFB */ + 0xB8, 0x86, 0xF3, 0xC4, 0xB8, 0x87, 0xB8, 0xCD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0xB8, 0x88, 0xB8, 0x89, 0xB8, 0x8A, 0xF3, 0xC6, /* 0x00-0x03 */ + 0xF3, 0xC7, 0xB8, 0x8B, 0xB0, 0xCA, 0xB8, 0x8C, /* 0x04-0x07 */ + 0xF3, 0xC5, 0xB8, 0x8D, 0xF3, 0xC9, 0xCB, 0xF1, /* 0x08-0x0B */ + 0xB8, 0x8E, 0xB8, 0x8F, 0xB8, 0x90, 0xF3, 0xCB, /* 0x0C-0x0F */ + 0xB8, 0x91, 0xD0, 0xA6, 0xB8, 0x92, 0xB8, 0x93, /* 0x10-0x13 */ + 0xB1, 0xCA, 0xF3, 0xC8, 0xB8, 0x94, 0xB8, 0x95, /* 0x14-0x17 */ + 0xB8, 0x96, 0xF3, 0xCF, 0xB8, 0x97, 0xB5, 0xD1, /* 0x18-0x1B */ + 0xB8, 0x98, 0xB8, 0x99, 0xF3, 0xD7, 0xB8, 0x9A, /* 0x1C-0x1F */ + 0xF3, 0xD2, 0xB8, 0x9B, 0xB8, 0x9C, 0xB8, 0x9D, /* 0x20-0x23 */ + 0xF3, 0xD4, 0xF3, 0xD3, 0xB7, 0xFB, 0xB8, 0x9E, /* 0x24-0x27 */ + 0xB1, 0xBF, 0xB8, 0x9F, 0xF3, 0xCE, 0xF3, 0xCA, /* 0x28-0x2B */ + 0xB5, 0xDA, 0xB8, 0xA0, 0xF3, 0xD0, 0xB9, 0x40, /* 0x2C-0x2F */ + 0xB9, 0x41, 0xF3, 0xD1, 0xB9, 0x42, 0xF3, 0xD5, /* 0x30-0x33 */ + 0xB9, 0x43, 0xB9, 0x44, 0xB9, 0x45, 0xB9, 0x46, /* 0x34-0x37 */ + 0xF3, 0xCD, 0xB9, 0x47, 0xBC, 0xE3, 0xB9, 0x48, /* 0x38-0x3B */ + 0xC1, 0xFD, 0xB9, 0x49, 0xF3, 0xD6, 0xB9, 0x4A, /* 0x3C-0x3F */ + 0xB9, 0x4B, 0xB9, 0x4C, 0xB9, 0x4D, 0xB9, 0x4E, /* 0x40-0x43 */ + 0xB9, 0x4F, 0xF3, 0xDA, 0xB9, 0x50, 0xF3, 0xCC, /* 0x44-0x47 */ + 0xB9, 0x51, 0xB5, 0xC8, 0xB9, 0x52, 0xBD, 0xEE, /* 0x48-0x4B */ + 0xF3, 0xDC, 0xB9, 0x53, 0xB9, 0x54, 0xB7, 0xA4, /* 0x4C-0x4F */ + 0xBF, 0xF0, 0xD6, 0xFE, 0xCD, 0xB2, 0xB9, 0x55, /* 0x50-0x53 */ + 0xB4, 0xF0, 0xB9, 0x56, 0xB2, 0xDF, 0xB9, 0x57, /* 0x54-0x57 */ + 0xF3, 0xD8, 0xB9, 0x58, 0xF3, 0xD9, 0xC9, 0xB8, /* 0x58-0x5B */ + 0xB9, 0x59, 0xF3, 0xDD, 0xB9, 0x5A, 0xB9, 0x5B, /* 0x5C-0x5F */ + 0xF3, 0xDE, 0xB9, 0x5C, 0xF3, 0xE1, 0xB9, 0x5D, /* 0x60-0x63 */ + 0xB9, 0x5E, 0xB9, 0x5F, 0xB9, 0x60, 0xB9, 0x61, /* 0x64-0x67 */ + 0xB9, 0x62, 0xB9, 0x63, 0xB9, 0x64, 0xB9, 0x65, /* 0x68-0x6B */ + 0xB9, 0x66, 0xB9, 0x67, 0xF3, 0xDF, 0xB9, 0x68, /* 0x6C-0x6F */ + 0xB9, 0x69, 0xF3, 0xE3, 0xF3, 0xE2, 0xB9, 0x6A, /* 0x70-0x73 */ + 0xB9, 0x6B, 0xF3, 0xDB, 0xB9, 0x6C, 0xBF, 0xEA, /* 0x74-0x77 */ + 0xB9, 0x6D, 0xB3, 0xEF, 0xB9, 0x6E, 0xF3, 0xE0, /* 0x78-0x7B */ + 0xB9, 0x6F, 0xB9, 0x70, 0xC7, 0xA9, 0xB9, 0x71, /* 0x7C-0x7F */ + + 0xBC, 0xF2, 0xB9, 0x72, 0xB9, 0x73, 0xB9, 0x74, /* 0x80-0x83 */ + 0xB9, 0x75, 0xF3, 0xEB, 0xB9, 0x76, 0xB9, 0x77, /* 0x84-0x87 */ + 0xB9, 0x78, 0xB9, 0x79, 0xB9, 0x7A, 0xB9, 0x7B, /* 0x88-0x8B */ + 0xB9, 0x7C, 0xB9, 0xBF, 0xB9, 0x7D, 0xB9, 0x7E, /* 0x8C-0x8F */ + 0xF3, 0xE4, 0xB9, 0x80, 0xB9, 0x81, 0xB9, 0x82, /* 0x90-0x93 */ + 0xB2, 0xAD, 0xBB, 0xFE, 0xB9, 0x83, 0xCB, 0xE3, /* 0x94-0x97 */ + 0xB9, 0x84, 0xB9, 0x85, 0xB9, 0x86, 0xB9, 0x87, /* 0x98-0x9B */ + 0xF3, 0xED, 0xF3, 0xE9, 0xB9, 0x88, 0xB9, 0x89, /* 0x9C-0x9F */ + 0xB9, 0x8A, 0xB9, 0xDC, 0xF3, 0xEE, 0xB9, 0x8B, /* 0xA0-0xA3 */ + 0xB9, 0x8C, 0xB9, 0x8D, 0xF3, 0xE5, 0xF3, 0xE6, /* 0xA4-0xA7 */ + 0xF3, 0xEA, 0xC2, 0xE1, 0xF3, 0xEC, 0xF3, 0xEF, /* 0xA8-0xAB */ + 0xF3, 0xE8, 0xBC, 0xFD, 0xB9, 0x8E, 0xB9, 0x8F, /* 0xAC-0xAF */ + 0xB9, 0x90, 0xCF, 0xE4, 0xB9, 0x91, 0xB9, 0x92, /* 0xB0-0xB3 */ + 0xF3, 0xF0, 0xB9, 0x93, 0xB9, 0x94, 0xB9, 0x95, /* 0xB4-0xB7 */ + 0xF3, 0xE7, 0xB9, 0x96, 0xB9, 0x97, 0xB9, 0x98, /* 0xB8-0xBB */ + 0xB9, 0x99, 0xB9, 0x9A, 0xB9, 0x9B, 0xB9, 0x9C, /* 0xBC-0xBF */ + 0xB9, 0x9D, 0xF3, 0xF2, 0xB9, 0x9E, 0xB9, 0x9F, /* 0xC0-0xC3 */ + 0xB9, 0xA0, 0xBA, 0x40, 0xD7, 0xAD, 0xC6, 0xAA, /* 0xC4-0xC7 */ + 0xBA, 0x41, 0xBA, 0x42, 0xBA, 0x43, 0xBA, 0x44, /* 0xC8-0xCB */ + 0xF3, 0xF3, 0xBA, 0x45, 0xBA, 0x46, 0xBA, 0x47, /* 0xCC-0xCF */ + 0xBA, 0x48, 0xF3, 0xF1, 0xBA, 0x49, 0xC2, 0xA8, /* 0xD0-0xD3 */ + 0xBA, 0x4A, 0xBA, 0x4B, 0xBA, 0x4C, 0xBA, 0x4D, /* 0xD4-0xD7 */ + 0xBA, 0x4E, 0xB8, 0xDD, 0xF3, 0xF5, 0xBA, 0x4F, /* 0xD8-0xDB */ + 0xBA, 0x50, 0xF3, 0xF4, 0xBA, 0x51, 0xBA, 0x52, /* 0xDC-0xDF */ + 0xBA, 0x53, 0xB4, 0xDB, 0xBA, 0x54, 0xBA, 0x55, /* 0xE0-0xE3 */ + 0xBA, 0x56, 0xF3, 0xF6, 0xF3, 0xF7, 0xBA, 0x57, /* 0xE4-0xE7 */ + 0xBA, 0x58, 0xBA, 0x59, 0xF3, 0xF8, 0xBA, 0x5A, /* 0xE8-0xEB */ + 0xBA, 0x5B, 0xBA, 0x5C, 0xC0, 0xBA, 0xBA, 0x5D, /* 0xEC-0xEF */ + 0xBA, 0x5E, 0xC0, 0xE9, 0xBA, 0x5F, 0xBA, 0x60, /* 0xF0-0xF3 */ + 0xBA, 0x61, 0xBA, 0x62, 0xBA, 0x63, 0xC5, 0xF1, /* 0xF4-0xF7 */ + 0xBA, 0x64, 0xBA, 0x65, 0xBA, 0x66, 0xBA, 0x67, /* 0xF8-0xFB */ + 0xF3, 0xFB, 0xBA, 0x68, 0xF3, 0xFA, 0xBA, 0x69, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7C[512] = { + 0xBA, 0x6A, 0xBA, 0x6B, 0xBA, 0x6C, 0xBA, 0x6D, /* 0x00-0x03 */ + 0xBA, 0x6E, 0xBA, 0x6F, 0xBA, 0x70, 0xB4, 0xD8, /* 0x04-0x07 */ + 0xBA, 0x71, 0xBA, 0x72, 0xBA, 0x73, 0xF3, 0xFE, /* 0x08-0x0B */ + 0xF3, 0xF9, 0xBA, 0x74, 0xBA, 0x75, 0xF3, 0xFC, /* 0x0C-0x0F */ + 0xBA, 0x76, 0xBA, 0x77, 0xBA, 0x78, 0xBA, 0x79, /* 0x10-0x13 */ + 0xBA, 0x7A, 0xBA, 0x7B, 0xF3, 0xFD, 0xBA, 0x7C, /* 0x14-0x17 */ + 0xBA, 0x7D, 0xBA, 0x7E, 0xBA, 0x80, 0xBA, 0x81, /* 0x18-0x1B */ + 0xBA, 0x82, 0xBA, 0x83, 0xBA, 0x84, 0xF4, 0xA1, /* 0x1C-0x1F */ + 0xBA, 0x85, 0xBA, 0x86, 0xBA, 0x87, 0xBA, 0x88, /* 0x20-0x23 */ + 0xBA, 0x89, 0xBA, 0x8A, 0xF4, 0xA3, 0xBB, 0xC9, /* 0x24-0x27 */ + 0xBA, 0x8B, 0xBA, 0x8C, 0xF4, 0xA2, 0xBA, 0x8D, /* 0x28-0x2B */ + 0xBA, 0x8E, 0xBA, 0x8F, 0xBA, 0x90, 0xBA, 0x91, /* 0x2C-0x2F */ + 0xBA, 0x92, 0xBA, 0x93, 0xBA, 0x94, 0xBA, 0x95, /* 0x30-0x33 */ + 0xBA, 0x96, 0xBA, 0x97, 0xBA, 0x98, 0xBA, 0x99, /* 0x34-0x37 */ + 0xF4, 0xA4, 0xBA, 0x9A, 0xBA, 0x9B, 0xBA, 0x9C, /* 0x38-0x3B */ + 0xBA, 0x9D, 0xBA, 0x9E, 0xBA, 0x9F, 0xB2, 0xBE, /* 0x3C-0x3F */ + 0xF4, 0xA6, 0xF4, 0xA5, 0xBA, 0xA0, 0xBB, 0x40, /* 0x40-0x43 */ + 0xBB, 0x41, 0xBB, 0x42, 0xBB, 0x43, 0xBB, 0x44, /* 0x44-0x47 */ + 0xBB, 0x45, 0xBB, 0x46, 0xBB, 0x47, 0xBB, 0x48, /* 0x48-0x4B */ + 0xBB, 0x49, 0xBC, 0xAE, 0xBB, 0x4A, 0xBB, 0x4B, /* 0x4C-0x4F */ + 0xBB, 0x4C, 0xBB, 0x4D, 0xBB, 0x4E, 0xBB, 0x4F, /* 0x50-0x53 */ + 0xBB, 0x50, 0xBB, 0x51, 0xBB, 0x52, 0xBB, 0x53, /* 0x54-0x57 */ + 0xBB, 0x54, 0xBB, 0x55, 0xBB, 0x56, 0xBB, 0x57, /* 0x58-0x5B */ + 0xBB, 0x58, 0xBB, 0x59, 0xBB, 0x5A, 0xBB, 0x5B, /* 0x5C-0x5F */ + 0xBB, 0x5C, 0xBB, 0x5D, 0xBB, 0x5E, 0xBB, 0x5F, /* 0x60-0x63 */ + 0xBB, 0x60, 0xBB, 0x61, 0xBB, 0x62, 0xBB, 0x63, /* 0x64-0x67 */ + 0xBB, 0x64, 0xBB, 0x65, 0xBB, 0x66, 0xBB, 0x67, /* 0x68-0x6B */ + 0xBB, 0x68, 0xBB, 0x69, 0xBB, 0x6A, 0xBB, 0x6B, /* 0x6C-0x6F */ + 0xBB, 0x6C, 0xBB, 0x6D, 0xBB, 0x6E, 0xC3, 0xD7, /* 0x70-0x73 */ + 0xD9, 0xE1, 0xBB, 0x6F, 0xBB, 0x70, 0xBB, 0x71, /* 0x74-0x77 */ + 0xBB, 0x72, 0xBB, 0x73, 0xBB, 0x74, 0xC0, 0xE0, /* 0x78-0x7B */ + 0xF4, 0xCC, 0xD7, 0xD1, 0xBB, 0x75, 0xBB, 0x76, /* 0x7C-0x7F */ + + 0xBB, 0x77, 0xBB, 0x78, 0xBB, 0x79, 0xBB, 0x7A, /* 0x80-0x83 */ + 0xBB, 0x7B, 0xBB, 0x7C, 0xBB, 0x7D, 0xBB, 0x7E, /* 0x84-0x87 */ + 0xBB, 0x80, 0xB7, 0xDB, 0xBB, 0x81, 0xBB, 0x82, /* 0x88-0x8B */ + 0xBB, 0x83, 0xBB, 0x84, 0xBB, 0x85, 0xBB, 0x86, /* 0x8C-0x8F */ + 0xBB, 0x87, 0xF4, 0xCE, 0xC1, 0xA3, 0xBB, 0x88, /* 0x90-0x93 */ + 0xBB, 0x89, 0xC6, 0xC9, 0xBB, 0x8A, 0xB4, 0xD6, /* 0x94-0x97 */ + 0xD5, 0xB3, 0xBB, 0x8B, 0xBB, 0x8C, 0xBB, 0x8D, /* 0x98-0x9B */ + 0xF4, 0xD0, 0xF4, 0xCF, 0xF4, 0xD1, 0xCB, 0xDA, /* 0x9C-0x9F */ + 0xBB, 0x8E, 0xBB, 0x8F, 0xF4, 0xD2, 0xBB, 0x90, /* 0xA0-0xA3 */ + 0xD4, 0xC1, 0xD6, 0xE0, 0xBB, 0x91, 0xBB, 0x92, /* 0xA4-0xA7 */ + 0xBB, 0x93, 0xBB, 0x94, 0xB7, 0xE0, 0xBB, 0x95, /* 0xA8-0xAB */ + 0xBB, 0x96, 0xBB, 0x97, 0xC1, 0xB8, 0xBB, 0x98, /* 0xAC-0xAF */ + 0xBB, 0x99, 0xC1, 0xBB, 0xF4, 0xD3, 0xBE, 0xAC, /* 0xB0-0xB3 */ + 0xBB, 0x9A, 0xBB, 0x9B, 0xBB, 0x9C, 0xBB, 0x9D, /* 0xB4-0xB7 */ + 0xBB, 0x9E, 0xB4, 0xE2, 0xBB, 0x9F, 0xBB, 0xA0, /* 0xB8-0xBB */ + 0xF4, 0xD4, 0xF4, 0xD5, 0xBE, 0xAB, 0xBC, 0x40, /* 0xBC-0xBF */ + 0xBC, 0x41, 0xF4, 0xD6, 0xBC, 0x42, 0xBC, 0x43, /* 0xC0-0xC3 */ + 0xBC, 0x44, 0xF4, 0xDB, 0xBC, 0x45, 0xF4, 0xD7, /* 0xC4-0xC7 */ + 0xF4, 0xDA, 0xBC, 0x46, 0xBA, 0xFD, 0xBC, 0x47, /* 0xC8-0xCB */ + 0xF4, 0xD8, 0xF4, 0xD9, 0xBC, 0x48, 0xBC, 0x49, /* 0xCC-0xCF */ + 0xBC, 0x4A, 0xBC, 0x4B, 0xBC, 0x4C, 0xBC, 0x4D, /* 0xD0-0xD3 */ + 0xBC, 0x4E, 0xB8, 0xE2, 0xCC, 0xC7, 0xF4, 0xDC, /* 0xD4-0xD7 */ + 0xBC, 0x4F, 0xB2, 0xDA, 0xBC, 0x50, 0xBC, 0x51, /* 0xD8-0xDB */ + 0xC3, 0xD3, 0xBC, 0x52, 0xBC, 0x53, 0xD4, 0xE3, /* 0xDC-0xDF */ + 0xBF, 0xB7, 0xBC, 0x54, 0xBC, 0x55, 0xBC, 0x56, /* 0xE0-0xE3 */ + 0xBC, 0x57, 0xBC, 0x58, 0xBC, 0x59, 0xBC, 0x5A, /* 0xE4-0xE7 */ + 0xF4, 0xDD, 0xBC, 0x5B, 0xBC, 0x5C, 0xBC, 0x5D, /* 0xE8-0xEB */ + 0xBC, 0x5E, 0xBC, 0x5F, 0xBC, 0x60, 0xC5, 0xB4, /* 0xEC-0xEF */ + 0xBC, 0x61, 0xBC, 0x62, 0xBC, 0x63, 0xBC, 0x64, /* 0xF0-0xF3 */ + 0xBC, 0x65, 0xBC, 0x66, 0xBC, 0x67, 0xBC, 0x68, /* 0xF4-0xF7 */ + 0xF4, 0xE9, 0xBC, 0x69, 0xBC, 0x6A, 0xCF, 0xB5, /* 0xF8-0xFB */ + 0xBC, 0x6B, 0xBC, 0x6C, 0xBC, 0x6D, 0xBC, 0x6E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0xBC, 0x6F, 0xBC, 0x70, 0xBC, 0x71, 0xBC, 0x72, /* 0x00-0x03 */ + 0xBC, 0x73, 0xBC, 0x74, 0xBC, 0x75, 0xBC, 0x76, /* 0x04-0x07 */ + 0xBC, 0x77, 0xBC, 0x78, 0xCE, 0xC9, 0xBC, 0x79, /* 0x08-0x0B */ + 0xBC, 0x7A, 0xBC, 0x7B, 0xBC, 0x7C, 0xBC, 0x7D, /* 0x0C-0x0F */ + 0xBC, 0x7E, 0xBC, 0x80, 0xBC, 0x81, 0xBC, 0x82, /* 0x10-0x13 */ + 0xBC, 0x83, 0xBC, 0x84, 0xBC, 0x85, 0xBC, 0x86, /* 0x14-0x17 */ + 0xBC, 0x87, 0xBC, 0x88, 0xBC, 0x89, 0xBC, 0x8A, /* 0x18-0x1B */ + 0xBC, 0x8B, 0xBC, 0x8C, 0xBC, 0x8D, 0xBC, 0x8E, /* 0x1C-0x1F */ + 0xCB, 0xD8, 0xBC, 0x8F, 0xCB, 0xF7, 0xBC, 0x90, /* 0x20-0x23 */ + 0xBC, 0x91, 0xBC, 0x92, 0xBC, 0x93, 0xBD, 0xF4, /* 0x24-0x27 */ + 0xBC, 0x94, 0xBC, 0x95, 0xBC, 0x96, 0xD7, 0xCF, /* 0x28-0x2B */ + 0xBC, 0x97, 0xBC, 0x98, 0xBC, 0x99, 0xC0, 0xDB, /* 0x2C-0x2F */ + 0xBC, 0x9A, 0xBC, 0x9B, 0xBC, 0x9C, 0xBC, 0x9D, /* 0x30-0x33 */ + 0xBC, 0x9E, 0xBC, 0x9F, 0xBC, 0xA0, 0xBD, 0x40, /* 0x34-0x37 */ + 0xBD, 0x41, 0xBD, 0x42, 0xBD, 0x43, 0xBD, 0x44, /* 0x38-0x3B */ + 0xBD, 0x45, 0xBD, 0x46, 0xBD, 0x47, 0xBD, 0x48, /* 0x3C-0x3F */ + 0xBD, 0x49, 0xBD, 0x4A, 0xBD, 0x4B, 0xBD, 0x4C, /* 0x40-0x43 */ + 0xBD, 0x4D, 0xBD, 0x4E, 0xBD, 0x4F, 0xBD, 0x50, /* 0x44-0x47 */ + 0xBD, 0x51, 0xBD, 0x52, 0xBD, 0x53, 0xBD, 0x54, /* 0x48-0x4B */ + 0xBD, 0x55, 0xBD, 0x56, 0xBD, 0x57, 0xBD, 0x58, /* 0x4C-0x4F */ + 0xBD, 0x59, 0xBD, 0x5A, 0xBD, 0x5B, 0xBD, 0x5C, /* 0x50-0x53 */ + 0xBD, 0x5D, 0xBD, 0x5E, 0xBD, 0x5F, 0xBD, 0x60, /* 0x54-0x57 */ + 0xBD, 0x61, 0xBD, 0x62, 0xBD, 0x63, 0xBD, 0x64, /* 0x58-0x5B */ + 0xBD, 0x65, 0xBD, 0x66, 0xBD, 0x67, 0xBD, 0x68, /* 0x5C-0x5F */ + 0xBD, 0x69, 0xBD, 0x6A, 0xBD, 0x6B, 0xBD, 0x6C, /* 0x60-0x63 */ + 0xBD, 0x6D, 0xBD, 0x6E, 0xBD, 0x6F, 0xBD, 0x70, /* 0x64-0x67 */ + 0xBD, 0x71, 0xBD, 0x72, 0xBD, 0x73, 0xBD, 0x74, /* 0x68-0x6B */ + 0xBD, 0x75, 0xBD, 0x76, 0xD0, 0xF5, 0xBD, 0x77, /* 0x6C-0x6F */ + 0xBD, 0x78, 0xBD, 0x79, 0xBD, 0x7A, 0xBD, 0x7B, /* 0x70-0x73 */ + 0xBD, 0x7C, 0xBD, 0x7D, 0xBD, 0x7E, 0xF4, 0xEA, /* 0x74-0x77 */ + 0xBD, 0x80, 0xBD, 0x81, 0xBD, 0x82, 0xBD, 0x83, /* 0x78-0x7B */ + 0xBD, 0x84, 0xBD, 0x85, 0xBD, 0x86, 0xBD, 0x87, /* 0x7C-0x7F */ + + 0xBD, 0x88, 0xBD, 0x89, 0xBD, 0x8A, 0xBD, 0x8B, /* 0x80-0x83 */ + 0xBD, 0x8C, 0xBD, 0x8D, 0xBD, 0x8E, 0xBD, 0x8F, /* 0x84-0x87 */ + 0xBD, 0x90, 0xBD, 0x91, 0xBD, 0x92, 0xBD, 0x93, /* 0x88-0x8B */ + 0xBD, 0x94, 0xBD, 0x95, 0xBD, 0x96, 0xBD, 0x97, /* 0x8C-0x8F */ + 0xBD, 0x98, 0xBD, 0x99, 0xBD, 0x9A, 0xBD, 0x9B, /* 0x90-0x93 */ + 0xBD, 0x9C, 0xBD, 0x9D, 0xBD, 0x9E, 0xBD, 0x9F, /* 0x94-0x97 */ + 0xBD, 0xA0, 0xBE, 0x40, 0xBE, 0x41, 0xBE, 0x42, /* 0x98-0x9B */ + 0xBE, 0x43, 0xBE, 0x44, 0xBE, 0x45, 0xBE, 0x46, /* 0x9C-0x9F */ + 0xBE, 0x47, 0xBE, 0x48, 0xBE, 0x49, 0xBE, 0x4A, /* 0xA0-0xA3 */ + 0xBE, 0x4B, 0xBE, 0x4C, 0xF4, 0xEB, 0xBE, 0x4D, /* 0xA4-0xA7 */ + 0xBE, 0x4E, 0xBE, 0x4F, 0xBE, 0x50, 0xBE, 0x51, /* 0xA8-0xAB */ + 0xBE, 0x52, 0xBE, 0x53, 0xF4, 0xEC, 0xBE, 0x54, /* 0xAC-0xAF */ + 0xBE, 0x55, 0xBE, 0x56, 0xBE, 0x57, 0xBE, 0x58, /* 0xB0-0xB3 */ + 0xBE, 0x59, 0xBE, 0x5A, 0xBE, 0x5B, 0xBE, 0x5C, /* 0xB4-0xB7 */ + 0xBE, 0x5D, 0xBE, 0x5E, 0xBE, 0x5F, 0xBE, 0x60, /* 0xB8-0xBB */ + 0xBE, 0x61, 0xBE, 0x62, 0xBE, 0x63, 0xBE, 0x64, /* 0xBC-0xBF */ + 0xBE, 0x65, 0xBE, 0x66, 0xBE, 0x67, 0xBE, 0x68, /* 0xC0-0xC3 */ + 0xBE, 0x69, 0xBE, 0x6A, 0xBE, 0x6B, 0xBE, 0x6C, /* 0xC4-0xC7 */ + 0xBE, 0x6D, 0xBE, 0x6E, 0xBE, 0x6F, 0xBE, 0x70, /* 0xC8-0xCB */ + 0xBE, 0x71, 0xBE, 0x72, 0xBE, 0x73, 0xBE, 0x74, /* 0xCC-0xCF */ + 0xBE, 0x75, 0xBE, 0x76, 0xBE, 0x77, 0xBE, 0x78, /* 0xD0-0xD3 */ + 0xBE, 0x79, 0xBE, 0x7A, 0xBE, 0x7B, 0xBE, 0x7C, /* 0xD4-0xD7 */ + 0xBE, 0x7D, 0xBE, 0x7E, 0xBE, 0x80, 0xBE, 0x81, /* 0xD8-0xDB */ + 0xBE, 0x82, 0xBE, 0x83, 0xBE, 0x84, 0xBE, 0x85, /* 0xDC-0xDF */ + 0xBE, 0x86, 0xBE, 0x87, 0xBE, 0x88, 0xBE, 0x89, /* 0xE0-0xE3 */ + 0xBE, 0x8A, 0xBE, 0x8B, 0xBE, 0x8C, 0xBE, 0x8D, /* 0xE4-0xE7 */ + 0xBE, 0x8E, 0xBE, 0x8F, 0xBE, 0x90, 0xBE, 0x91, /* 0xE8-0xEB */ + 0xBE, 0x92, 0xBE, 0x93, 0xBE, 0x94, 0xBE, 0x95, /* 0xEC-0xEF */ + 0xBE, 0x96, 0xBE, 0x97, 0xBE, 0x98, 0xBE, 0x99, /* 0xF0-0xF3 */ + 0xBE, 0x9A, 0xBE, 0x9B, 0xBE, 0x9C, 0xBE, 0x9D, /* 0xF4-0xF7 */ + 0xBE, 0x9E, 0xBE, 0x9F, 0xBE, 0xA0, 0xBF, 0x40, /* 0xF8-0xFB */ + 0xBF, 0x41, 0xBF, 0x42, 0xBF, 0x43, 0xBF, 0x44, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7E[512] = { + 0xBF, 0x45, 0xBF, 0x46, 0xBF, 0x47, 0xBF, 0x48, /* 0x00-0x03 */ + 0xBF, 0x49, 0xBF, 0x4A, 0xBF, 0x4B, 0xBF, 0x4C, /* 0x04-0x07 */ + 0xBF, 0x4D, 0xBF, 0x4E, 0xBF, 0x4F, 0xBF, 0x50, /* 0x08-0x0B */ + 0xBF, 0x51, 0xBF, 0x52, 0xBF, 0x53, 0xBF, 0x54, /* 0x0C-0x0F */ + 0xBF, 0x55, 0xBF, 0x56, 0xBF, 0x57, 0xBF, 0x58, /* 0x10-0x13 */ + 0xBF, 0x59, 0xBF, 0x5A, 0xBF, 0x5B, 0xBF, 0x5C, /* 0x14-0x17 */ + 0xBF, 0x5D, 0xBF, 0x5E, 0xBF, 0x5F, 0xBF, 0x60, /* 0x18-0x1B */ + 0xBF, 0x61, 0xBF, 0x62, 0xBF, 0x63, 0xBF, 0x64, /* 0x1C-0x1F */ + 0xBF, 0x65, 0xBF, 0x66, 0xBF, 0x67, 0xBF, 0x68, /* 0x20-0x23 */ + 0xBF, 0x69, 0xBF, 0x6A, 0xBF, 0x6B, 0xBF, 0x6C, /* 0x24-0x27 */ + 0xBF, 0x6D, 0xBF, 0x6E, 0xBF, 0x6F, 0xBF, 0x70, /* 0x28-0x2B */ + 0xBF, 0x71, 0xBF, 0x72, 0xBF, 0x73, 0xBF, 0x74, /* 0x2C-0x2F */ + 0xBF, 0x75, 0xBF, 0x76, 0xBF, 0x77, 0xBF, 0x78, /* 0x30-0x33 */ + 0xBF, 0x79, 0xBF, 0x7A, 0xBF, 0x7B, 0xBF, 0x7C, /* 0x34-0x37 */ + 0xBF, 0x7D, 0xBF, 0x7E, 0xBF, 0x80, 0xF7, 0xE3, /* 0x38-0x3B */ + 0xBF, 0x81, 0xBF, 0x82, 0xBF, 0x83, 0xBF, 0x84, /* 0x3C-0x3F */ + 0xBF, 0x85, 0xB7, 0xB1, 0xBF, 0x86, 0xBF, 0x87, /* 0x40-0x43 */ + 0xBF, 0x88, 0xBF, 0x89, 0xBF, 0x8A, 0xF4, 0xED, /* 0x44-0x47 */ + 0xBF, 0x8B, 0xBF, 0x8C, 0xBF, 0x8D, 0xBF, 0x8E, /* 0x48-0x4B */ + 0xBF, 0x8F, 0xBF, 0x90, 0xBF, 0x91, 0xBF, 0x92, /* 0x4C-0x4F */ + 0xBF, 0x93, 0xBF, 0x94, 0xBF, 0x95, 0xBF, 0x96, /* 0x50-0x53 */ + 0xBF, 0x97, 0xBF, 0x98, 0xBF, 0x99, 0xBF, 0x9A, /* 0x54-0x57 */ + 0xBF, 0x9B, 0xBF, 0x9C, 0xBF, 0x9D, 0xBF, 0x9E, /* 0x58-0x5B */ + 0xBF, 0x9F, 0xBF, 0xA0, 0xC0, 0x40, 0xC0, 0x41, /* 0x5C-0x5F */ + 0xC0, 0x42, 0xC0, 0x43, 0xC0, 0x44, 0xC0, 0x45, /* 0x60-0x63 */ + 0xC0, 0x46, 0xC0, 0x47, 0xC0, 0x48, 0xC0, 0x49, /* 0x64-0x67 */ + 0xC0, 0x4A, 0xC0, 0x4B, 0xC0, 0x4C, 0xC0, 0x4D, /* 0x68-0x6B */ + 0xC0, 0x4E, 0xC0, 0x4F, 0xC0, 0x50, 0xC0, 0x51, /* 0x6C-0x6F */ + 0xC0, 0x52, 0xC0, 0x53, 0xC0, 0x54, 0xC0, 0x55, /* 0x70-0x73 */ + 0xC0, 0x56, 0xC0, 0x57, 0xC0, 0x58, 0xC0, 0x59, /* 0x74-0x77 */ + 0xC0, 0x5A, 0xC0, 0x5B, 0xC0, 0x5C, 0xC0, 0x5D, /* 0x78-0x7B */ + 0xC0, 0x5E, 0xC0, 0x5F, 0xC0, 0x60, 0xC0, 0x61, /* 0x7C-0x7F */ + + 0xC0, 0x62, 0xC0, 0x63, 0xD7, 0xEB, 0xC0, 0x64, /* 0x80-0x83 */ + 0xC0, 0x65, 0xC0, 0x66, 0xC0, 0x67, 0xC0, 0x68, /* 0x84-0x87 */ + 0xC0, 0x69, 0xC0, 0x6A, 0xC0, 0x6B, 0xC0, 0x6C, /* 0x88-0x8B */ + 0xC0, 0x6D, 0xC0, 0x6E, 0xC0, 0x6F, 0xC0, 0x70, /* 0x8C-0x8F */ + 0xC0, 0x71, 0xC0, 0x72, 0xC0, 0x73, 0xC0, 0x74, /* 0x90-0x93 */ + 0xC0, 0x75, 0xC0, 0x76, 0xC0, 0x77, 0xC0, 0x78, /* 0x94-0x97 */ + 0xC0, 0x79, 0xC0, 0x7A, 0xC0, 0x7B, 0xF4, 0xEE, /* 0x98-0x9B */ + 0xC0, 0x7C, 0xC0, 0x7D, 0xC0, 0x7E, 0xE6, 0xF9, /* 0x9C-0x9F */ + 0xBE, 0xC0, 0xE6, 0xFA, 0xBA, 0xEC, 0xE6, 0xFB, /* 0xA0-0xA3 */ + 0xCF, 0xCB, 0xE6, 0xFC, 0xD4, 0xBC, 0xBC, 0xB6, /* 0xA4-0xA7 */ + 0xE6, 0xFD, 0xE6, 0xFE, 0xBC, 0xCD, 0xC8, 0xD2, /* 0xA8-0xAB */ + 0xCE, 0xB3, 0xE7, 0xA1, 0xC0, 0x80, 0xB4, 0xBF, /* 0xAC-0xAF */ + 0xE7, 0xA2, 0xC9, 0xB4, 0xB8, 0xD9, 0xC4, 0xC9, /* 0xB0-0xB3 */ + 0xC0, 0x81, 0xD7, 0xDD, 0xC2, 0xDA, 0xB7, 0xD7, /* 0xB4-0xB7 */ + 0xD6, 0xBD, 0xCE, 0xC6, 0xB7, 0xC4, 0xC0, 0x82, /* 0xB8-0xBB */ + 0xC0, 0x83, 0xC5, 0xA6, 0xE7, 0xA3, 0xCF, 0xDF, /* 0xBC-0xBF */ + 0xE7, 0xA4, 0xE7, 0xA5, 0xE7, 0xA6, 0xC1, 0xB7, /* 0xC0-0xC3 */ + 0xD7, 0xE9, 0xC9, 0xF0, 0xCF, 0xB8, 0xD6, 0xAF, /* 0xC4-0xC7 */ + 0xD6, 0xD5, 0xE7, 0xA7, 0xB0, 0xED, 0xE7, 0xA8, /* 0xC8-0xCB */ + 0xE7, 0xA9, 0xC9, 0xDC, 0xD2, 0xEF, 0xBE, 0xAD, /* 0xCC-0xCF */ + 0xE7, 0xAA, 0xB0, 0xF3, 0xC8, 0xDE, 0xBD, 0xE1, /* 0xD0-0xD3 */ + 0xE7, 0xAB, 0xC8, 0xC6, 0xC0, 0x84, 0xE7, 0xAC, /* 0xD4-0xD7 */ + 0xBB, 0xE6, 0xB8, 0xF8, 0xD1, 0xA4, 0xE7, 0xAD, /* 0xD8-0xDB */ + 0xC2, 0xE7, 0xBE, 0xF8, 0xBD, 0xCA, 0xCD, 0xB3, /* 0xDC-0xDF */ + 0xE7, 0xAE, 0xE7, 0xAF, 0xBE, 0xEE, 0xD0, 0xE5, /* 0xE0-0xE3 */ + 0xC0, 0x85, 0xCB, 0xE7, 0xCC, 0xD0, 0xBC, 0xCC, /* 0xE4-0xE7 */ + 0xE7, 0xB0, 0xBC, 0xA8, 0xD0, 0xF7, 0xE7, 0xB1, /* 0xE8-0xEB */ + 0xC0, 0x86, 0xD0, 0xF8, 0xE7, 0xB2, 0xE7, 0xB3, /* 0xEC-0xEF */ + 0xB4, 0xC2, 0xE7, 0xB4, 0xE7, 0xB5, 0xC9, 0xFE, /* 0xF0-0xF3 */ + 0xCE, 0xAC, 0xC3, 0xE0, 0xE7, 0xB7, 0xB1, 0xC1, /* 0xF4-0xF7 */ + 0xB3, 0xF1, 0xC0, 0x87, 0xE7, 0xB8, 0xE7, 0xB9, /* 0xF8-0xFB */ + 0xD7, 0xDB, 0xD5, 0xC0, 0xE7, 0xBA, 0xC2, 0xCC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7F[512] = { + 0xD7, 0xBA, 0xE7, 0xBB, 0xE7, 0xBC, 0xE7, 0xBD, /* 0x00-0x03 */ + 0xBC, 0xEA, 0xC3, 0xE5, 0xC0, 0xC2, 0xE7, 0xBE, /* 0x04-0x07 */ + 0xE7, 0xBF, 0xBC, 0xA9, 0xC0, 0x88, 0xE7, 0xC0, /* 0x08-0x0B */ + 0xE7, 0xC1, 0xE7, 0xB6, 0xB6, 0xD0, 0xE7, 0xC2, /* 0x0C-0x0F */ + 0xC0, 0x89, 0xE7, 0xC3, 0xE7, 0xC4, 0xBB, 0xBA, /* 0x10-0x13 */ + 0xB5, 0xDE, 0xC2, 0xC6, 0xB1, 0xE0, 0xE7, 0xC5, /* 0x14-0x17 */ + 0xD4, 0xB5, 0xE7, 0xC6, 0xB8, 0xBF, 0xE7, 0xC8, /* 0x18-0x1B */ + 0xE7, 0xC7, 0xB7, 0xEC, 0xC0, 0x8A, 0xE7, 0xC9, /* 0x1C-0x1F */ + 0xB2, 0xF8, 0xE7, 0xCA, 0xE7, 0xCB, 0xE7, 0xCC, /* 0x20-0x23 */ + 0xE7, 0xCD, 0xE7, 0xCE, 0xE7, 0xCF, 0xE7, 0xD0, /* 0x24-0x27 */ + 0xD3, 0xA7, 0xCB, 0xF5, 0xE7, 0xD1, 0xE7, 0xD2, /* 0x28-0x2B */ + 0xE7, 0xD3, 0xE7, 0xD4, 0xC9, 0xC9, 0xE7, 0xD5, /* 0x2C-0x2F */ + 0xE7, 0xD6, 0xE7, 0xD7, 0xE7, 0xD8, 0xE7, 0xD9, /* 0x30-0x33 */ + 0xBD, 0xC9, 0xE7, 0xDA, 0xF3, 0xBE, 0xC0, 0x8B, /* 0x34-0x37 */ + 0xB8, 0xD7, 0xC0, 0x8C, 0xC8, 0xB1, 0xC0, 0x8D, /* 0x38-0x3B */ + 0xC0, 0x8E, 0xC0, 0x8F, 0xC0, 0x90, 0xC0, 0x91, /* 0x3C-0x3F */ + 0xC0, 0x92, 0xC0, 0x93, 0xF3, 0xBF, 0xC0, 0x94, /* 0x40-0x43 */ + 0xF3, 0xC0, 0xF3, 0xC1, 0xC0, 0x95, 0xC0, 0x96, /* 0x44-0x47 */ + 0xC0, 0x97, 0xC0, 0x98, 0xC0, 0x99, 0xC0, 0x9A, /* 0x48-0x4B */ + 0xC0, 0x9B, 0xC0, 0x9C, 0xC0, 0x9D, 0xC0, 0x9E, /* 0x4C-0x4F */ + 0xB9, 0xDE, 0xCD, 0xF8, 0xC0, 0x9F, 0xC0, 0xA0, /* 0x50-0x53 */ + 0xD8, 0xE8, 0xBA, 0xB1, 0xC1, 0x40, 0xC2, 0xDE, /* 0x54-0x57 */ + 0xEE, 0xB7, 0xC1, 0x41, 0xB7, 0xA3, 0xC1, 0x42, /* 0x58-0x5B */ + 0xC1, 0x43, 0xC1, 0x44, 0xC1, 0x45, 0xEE, 0xB9, /* 0x5C-0x5F */ + 0xC1, 0x46, 0xEE, 0xB8, 0xB0, 0xD5, 0xC1, 0x47, /* 0x60-0x63 */ + 0xC1, 0x48, 0xC1, 0x49, 0xC1, 0x4A, 0xC1, 0x4B, /* 0x64-0x67 */ + 0xEE, 0xBB, 0xD5, 0xD6, 0xD7, 0xEF, 0xC1, 0x4C, /* 0x68-0x6B */ + 0xC1, 0x4D, 0xC1, 0x4E, 0xD6, 0xC3, 0xC1, 0x4F, /* 0x6C-0x6F */ + 0xC1, 0x50, 0xEE, 0xBD, 0xCA, 0xF0, 0xC1, 0x51, /* 0x70-0x73 */ + 0xEE, 0xBC, 0xC1, 0x52, 0xC1, 0x53, 0xC1, 0x54, /* 0x74-0x77 */ + 0xC1, 0x55, 0xEE, 0xBE, 0xC1, 0x56, 0xC1, 0x57, /* 0x78-0x7B */ + 0xC1, 0x58, 0xC1, 0x59, 0xEE, 0xC0, 0xC1, 0x5A, /* 0x7C-0x7F */ + + 0xC1, 0x5B, 0xEE, 0xBF, 0xC1, 0x5C, 0xC1, 0x5D, /* 0x80-0x83 */ + 0xC1, 0x5E, 0xC1, 0x5F, 0xC1, 0x60, 0xC1, 0x61, /* 0x84-0x87 */ + 0xC1, 0x62, 0xC1, 0x63, 0xD1, 0xF2, 0xC1, 0x64, /* 0x88-0x8B */ + 0xC7, 0xBC, 0xC1, 0x65, 0xC3, 0xC0, 0xC1, 0x66, /* 0x8C-0x8F */ + 0xC1, 0x67, 0xC1, 0x68, 0xC1, 0x69, 0xC1, 0x6A, /* 0x90-0x93 */ + 0xB8, 0xE1, 0xC1, 0x6B, 0xC1, 0x6C, 0xC1, 0x6D, /* 0x94-0x97 */ + 0xC1, 0x6E, 0xC1, 0x6F, 0xC1, 0xE7, 0xC1, 0x70, /* 0x98-0x9B */ + 0xC1, 0x71, 0xF4, 0xC6, 0xD0, 0xDF, 0xF4, 0xC7, /* 0x9C-0x9F */ + 0xC1, 0x72, 0xCF, 0xDB, 0xC1, 0x73, 0xC1, 0x74, /* 0xA0-0xA3 */ + 0xC8, 0xBA, 0xC1, 0x75, 0xC1, 0x76, 0xF4, 0xC8, /* 0xA4-0xA7 */ + 0xC1, 0x77, 0xC1, 0x78, 0xC1, 0x79, 0xC1, 0x7A, /* 0xA8-0xAB */ + 0xC1, 0x7B, 0xC1, 0x7C, 0xC1, 0x7D, 0xF4, 0xC9, /* 0xAC-0xAF */ + 0xF4, 0xCA, 0xC1, 0x7E, 0xF4, 0xCB, 0xC1, 0x80, /* 0xB0-0xB3 */ + 0xC1, 0x81, 0xC1, 0x82, 0xC1, 0x83, 0xC1, 0x84, /* 0xB4-0xB7 */ + 0xD9, 0xFA, 0xB8, 0xFE, 0xC1, 0x85, 0xC1, 0x86, /* 0xB8-0xBB */ + 0xE5, 0xF1, 0xD3, 0xF0, 0xC1, 0x87, 0xF4, 0xE0, /* 0xBC-0xBF */ + 0xC1, 0x88, 0xCE, 0xCC, 0xC1, 0x89, 0xC1, 0x8A, /* 0xC0-0xC3 */ + 0xC1, 0x8B, 0xB3, 0xE1, 0xC1, 0x8C, 0xC1, 0x8D, /* 0xC4-0xC7 */ + 0xC1, 0x8E, 0xC1, 0x8F, 0xF1, 0xB4, 0xC1, 0x90, /* 0xC8-0xCB */ + 0xD2, 0xEE, 0xC1, 0x91, 0xF4, 0xE1, 0xC1, 0x92, /* 0xCC-0xCF */ + 0xC1, 0x93, 0xC1, 0x94, 0xC1, 0x95, 0xC1, 0x96, /* 0xD0-0xD3 */ + 0xCF, 0xE8, 0xF4, 0xE2, 0xC1, 0x97, 0xC1, 0x98, /* 0xD4-0xD7 */ + 0xC7, 0xCC, 0xC1, 0x99, 0xC1, 0x9A, 0xC1, 0x9B, /* 0xD8-0xDB */ + 0xC1, 0x9C, 0xC1, 0x9D, 0xC1, 0x9E, 0xB5, 0xD4, /* 0xDC-0xDF */ + 0xB4, 0xE4, 0xF4, 0xE4, 0xC1, 0x9F, 0xC1, 0xA0, /* 0xE0-0xE3 */ + 0xC2, 0x40, 0xF4, 0xE3, 0xF4, 0xE5, 0xC2, 0x41, /* 0xE4-0xE7 */ + 0xC2, 0x42, 0xF4, 0xE6, 0xC2, 0x43, 0xC2, 0x44, /* 0xE8-0xEB */ + 0xC2, 0x45, 0xC2, 0x46, 0xF4, 0xE7, 0xC2, 0x47, /* 0xEC-0xEF */ + 0xBA, 0xB2, 0xB0, 0xBF, 0xC2, 0x48, 0xF4, 0xE8, /* 0xF0-0xF3 */ + 0xC2, 0x49, 0xC2, 0x4A, 0xC2, 0x4B, 0xC2, 0x4C, /* 0xF4-0xF7 */ + 0xC2, 0x4D, 0xC2, 0x4E, 0xC2, 0x4F, 0xB7, 0xAD, /* 0xF8-0xFB */ + 0xD2, 0xED, 0xC2, 0x50, 0xC2, 0x51, 0xC2, 0x52, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0xD2, 0xAB, 0xC0, 0xCF, 0xC2, 0x53, 0xBF, 0xBC, /* 0x00-0x03 */ + 0xEB, 0xA3, 0xD5, 0xDF, 0xEA, 0xC8, 0xC2, 0x54, /* 0x04-0x07 */ + 0xC2, 0x55, 0xC2, 0x56, 0xC2, 0x57, 0xF1, 0xF3, /* 0x08-0x0B */ + 0xB6, 0xF8, 0xCB, 0xA3, 0xC2, 0x58, 0xC2, 0x59, /* 0x0C-0x0F */ + 0xC4, 0xCD, 0xC2, 0x5A, 0xF1, 0xE7, 0xC2, 0x5B, /* 0x10-0x13 */ + 0xF1, 0xE8, 0xB8, 0xFB, 0xF1, 0xE9, 0xBA, 0xC4, /* 0x14-0x17 */ + 0xD4, 0xC5, 0xB0, 0xD2, 0xC2, 0x5C, 0xC2, 0x5D, /* 0x18-0x1B */ + 0xF1, 0xEA, 0xC2, 0x5E, 0xC2, 0x5F, 0xC2, 0x60, /* 0x1C-0x1F */ + 0xF1, 0xEB, 0xC2, 0x61, 0xF1, 0xEC, 0xC2, 0x62, /* 0x20-0x23 */ + 0xC2, 0x63, 0xF1, 0xED, 0xF1, 0xEE, 0xF1, 0xEF, /* 0x24-0x27 */ + 0xF1, 0xF1, 0xF1, 0xF0, 0xC5, 0xD5, 0xC2, 0x64, /* 0x28-0x2B */ + 0xC2, 0x65, 0xC2, 0x66, 0xC2, 0x67, 0xC2, 0x68, /* 0x2C-0x2F */ + 0xC2, 0x69, 0xF1, 0xF2, 0xC2, 0x6A, 0xB6, 0xFA, /* 0x30-0x33 */ + 0xC2, 0x6B, 0xF1, 0xF4, 0xD2, 0xAE, 0xDE, 0xC7, /* 0x34-0x37 */ + 0xCB, 0xCA, 0xC2, 0x6C, 0xC2, 0x6D, 0xB3, 0xDC, /* 0x38-0x3B */ + 0xC2, 0x6E, 0xB5, 0xA2, 0xC2, 0x6F, 0xB9, 0xA2, /* 0x3C-0x3F */ + 0xC2, 0x70, 0xC2, 0x71, 0xC4, 0xF4, 0xF1, 0xF5, /* 0x40-0x43 */ + 0xC2, 0x72, 0xC2, 0x73, 0xF1, 0xF6, 0xC2, 0x74, /* 0x44-0x47 */ + 0xC2, 0x75, 0xC2, 0x76, 0xC1, 0xC4, 0xC1, 0xFB, /* 0x48-0x4B */ + 0xD6, 0xB0, 0xF1, 0xF7, 0xC2, 0x77, 0xC2, 0x78, /* 0x4C-0x4F */ + 0xC2, 0x79, 0xC2, 0x7A, 0xF1, 0xF8, 0xC2, 0x7B, /* 0x50-0x53 */ + 0xC1, 0xAA, 0xC2, 0x7C, 0xC2, 0x7D, 0xC2, 0x7E, /* 0x54-0x57 */ + 0xC6, 0xB8, 0xC2, 0x80, 0xBE, 0xDB, 0xC2, 0x81, /* 0x58-0x5B */ + 0xC2, 0x82, 0xC2, 0x83, 0xC2, 0x84, 0xC2, 0x85, /* 0x5C-0x5F */ + 0xC2, 0x86, 0xC2, 0x87, 0xC2, 0x88, 0xC2, 0x89, /* 0x60-0x63 */ + 0xC2, 0x8A, 0xC2, 0x8B, 0xC2, 0x8C, 0xC2, 0x8D, /* 0x64-0x67 */ + 0xC2, 0x8E, 0xF1, 0xF9, 0xB4, 0xCF, 0xC2, 0x8F, /* 0x68-0x6B */ + 0xC2, 0x90, 0xC2, 0x91, 0xC2, 0x92, 0xC2, 0x93, /* 0x6C-0x6F */ + 0xC2, 0x94, 0xF1, 0xFA, 0xC2, 0x95, 0xC2, 0x96, /* 0x70-0x73 */ + 0xC2, 0x97, 0xC2, 0x98, 0xC2, 0x99, 0xC2, 0x9A, /* 0x74-0x77 */ + 0xC2, 0x9B, 0xC2, 0x9C, 0xC2, 0x9D, 0xC2, 0x9E, /* 0x78-0x7B */ + 0xC2, 0x9F, 0xC2, 0xA0, 0xC3, 0x40, 0xED, 0xB2, /* 0x7C-0x7F */ + + 0xED, 0xB1, 0xC3, 0x41, 0xC3, 0x42, 0xCB, 0xE0, /* 0x80-0x83 */ + 0xD2, 0xDE, 0xC3, 0x43, 0xCB, 0xC1, 0xD5, 0xD8, /* 0x84-0x87 */ + 0xC3, 0x44, 0xC8, 0xE2, 0xC3, 0x45, 0xC0, 0xDF, /* 0x88-0x8B */ + 0xBC, 0xA1, 0xC3, 0x46, 0xC3, 0x47, 0xC3, 0x48, /* 0x8C-0x8F */ + 0xC3, 0x49, 0xC3, 0x4A, 0xC3, 0x4B, 0xEB, 0xC1, /* 0x90-0x93 */ + 0xC3, 0x4C, 0xC3, 0x4D, 0xD0, 0xA4, 0xC3, 0x4E, /* 0x94-0x97 */ + 0xD6, 0xE2, 0xC3, 0x4F, 0xB6, 0xC7, 0xB8, 0xD8, /* 0x98-0x9B */ + 0xEB, 0xC0, 0xB8, 0xCE, 0xC3, 0x50, 0xEB, 0xBF, /* 0x9C-0x9F */ + 0xB3, 0xA6, 0xB9, 0xC9, 0xD6, 0xAB, 0xC3, 0x51, /* 0xA0-0xA3 */ + 0xB7, 0xF4, 0xB7, 0xCA, 0xC3, 0x52, 0xC3, 0x53, /* 0xA4-0xA7 */ + 0xC3, 0x54, 0xBC, 0xE7, 0xB7, 0xBE, 0xEB, 0xC6, /* 0xA8-0xAB */ + 0xC3, 0x55, 0xEB, 0xC7, 0xB0, 0xB9, 0xBF, 0xCF, /* 0xAC-0xAF */ + 0xC3, 0x56, 0xEB, 0xC5, 0xD3, 0xFD, 0xC3, 0x57, /* 0xB0-0xB3 */ + 0xEB, 0xC8, 0xC3, 0x58, 0xC3, 0x59, 0xEB, 0xC9, /* 0xB4-0xB7 */ + 0xC3, 0x5A, 0xC3, 0x5B, 0xB7, 0xCE, 0xC3, 0x5C, /* 0xB8-0xBB */ + 0xEB, 0xC2, 0xEB, 0xC4, 0xC9, 0xF6, 0xD6, 0xD7, /* 0xBC-0xBF */ + 0xD5, 0xCD, 0xD0, 0xB2, 0xEB, 0xCF, 0xCE, 0xB8, /* 0xC0-0xC3 */ + 0xEB, 0xD0, 0xC3, 0x5D, 0xB5, 0xA8, 0xC3, 0x5E, /* 0xC4-0xC7 */ + 0xC3, 0x5F, 0xC3, 0x60, 0xC3, 0x61, 0xC3, 0x62, /* 0xC8-0xCB */ + 0xB1, 0xB3, 0xEB, 0xD2, 0xCC, 0xA5, 0xC3, 0x63, /* 0xCC-0xCF */ + 0xC3, 0x64, 0xC3, 0x65, 0xC3, 0x66, 0xC3, 0x67, /* 0xD0-0xD3 */ + 0xC3, 0x68, 0xC3, 0x69, 0xC5, 0xD6, 0xEB, 0xD3, /* 0xD4-0xD7 */ + 0xC3, 0x6A, 0xEB, 0xD1, 0xC5, 0xDF, 0xEB, 0xCE, /* 0xD8-0xDB */ + 0xCA, 0xA4, 0xEB, 0xD5, 0xB0, 0xFB, 0xC3, 0x6B, /* 0xDC-0xDF */ + 0xC3, 0x6C, 0xBA, 0xFA, 0xC3, 0x6D, 0xC3, 0x6E, /* 0xE0-0xE3 */ + 0xD8, 0xB7, 0xF1, 0xE3, 0xC3, 0x6F, 0xEB, 0xCA, /* 0xE4-0xE7 */ + 0xEB, 0xCB, 0xEB, 0xCC, 0xEB, 0xCD, 0xEB, 0xD6, /* 0xE8-0xEB */ + 0xE6, 0xC0, 0xEB, 0xD9, 0xC3, 0x70, 0xBF, 0xE8, /* 0xEC-0xEF */ + 0xD2, 0xC8, 0xEB, 0xD7, 0xEB, 0xDC, 0xB8, 0xEC, /* 0xF0-0xF3 */ + 0xEB, 0xD8, 0xC3, 0x71, 0xBD, 0xBA, 0xC3, 0x72, /* 0xF4-0xF7 */ + 0xD0, 0xD8, 0xC3, 0x73, 0xB0, 0xB7, 0xC3, 0x74, /* 0xF8-0xFB */ + 0xEB, 0xDD, 0xC4, 0xDC, 0xC3, 0x75, 0xC3, 0x76, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0xC3, 0x77, 0xC3, 0x78, 0xD6, 0xAC, 0xC3, 0x79, /* 0x00-0x03 */ + 0xC3, 0x7A, 0xC3, 0x7B, 0xB4, 0xE0, 0xC3, 0x7C, /* 0x04-0x07 */ + 0xC3, 0x7D, 0xC2, 0xF6, 0xBC, 0xB9, 0xC3, 0x7E, /* 0x08-0x0B */ + 0xC3, 0x80, 0xEB, 0xDA, 0xEB, 0xDB, 0xD4, 0xE0, /* 0x0C-0x0F */ + 0xC6, 0xEA, 0xC4, 0xD4, 0xEB, 0xDF, 0xC5, 0xA7, /* 0x10-0x13 */ + 0xD9, 0xF5, 0xC3, 0x81, 0xB2, 0xB1, 0xC3, 0x82, /* 0x14-0x17 */ + 0xEB, 0xE4, 0xC3, 0x83, 0xBD, 0xC5, 0xC3, 0x84, /* 0x18-0x1B */ + 0xC3, 0x85, 0xC3, 0x86, 0xEB, 0xE2, 0xC3, 0x87, /* 0x1C-0x1F */ + 0xC3, 0x88, 0xC3, 0x89, 0xC3, 0x8A, 0xC3, 0x8B, /* 0x20-0x23 */ + 0xC3, 0x8C, 0xC3, 0x8D, 0xC3, 0x8E, 0xC3, 0x8F, /* 0x24-0x27 */ + 0xC3, 0x90, 0xC3, 0x91, 0xC3, 0x92, 0xC3, 0x93, /* 0x28-0x2B */ + 0xEB, 0xE3, 0xC3, 0x94, 0xC3, 0x95, 0xB8, 0xAC, /* 0x2C-0x2F */ + 0xC3, 0x96, 0xCD, 0xD1, 0xEB, 0xE5, 0xC3, 0x97, /* 0x30-0x33 */ + 0xC3, 0x98, 0xC3, 0x99, 0xEB, 0xE1, 0xC3, 0x9A, /* 0x34-0x37 */ + 0xC1, 0xB3, 0xC3, 0x9B, 0xC3, 0x9C, 0xC3, 0x9D, /* 0x38-0x3B */ + 0xC3, 0x9E, 0xC3, 0x9F, 0xC6, 0xA2, 0xC3, 0xA0, /* 0x3C-0x3F */ + 0xC4, 0x40, 0xC4, 0x41, 0xC4, 0x42, 0xC4, 0x43, /* 0x40-0x43 */ + 0xC4, 0x44, 0xC4, 0x45, 0xCC, 0xF3, 0xC4, 0x46, /* 0x44-0x47 */ + 0xEB, 0xE6, 0xC4, 0x47, 0xC0, 0xB0, 0xD2, 0xB8, /* 0x48-0x4B */ + 0xEB, 0xE7, 0xC4, 0x48, 0xC4, 0x49, 0xC4, 0x4A, /* 0x4C-0x4F */ + 0xB8, 0xAF, 0xB8, 0xAD, 0xC4, 0x4B, 0xEB, 0xE8, /* 0x50-0x53 */ + 0xC7, 0xBB, 0xCD, 0xF3, 0xC4, 0x4C, 0xC4, 0x4D, /* 0x54-0x57 */ + 0xC4, 0x4E, 0xEB, 0xEA, 0xEB, 0xEB, 0xC4, 0x4F, /* 0x58-0x5B */ + 0xC4, 0x50, 0xC4, 0x51, 0xC4, 0x52, 0xC4, 0x53, /* 0x5C-0x5F */ + 0xEB, 0xED, 0xC4, 0x54, 0xC4, 0x55, 0xC4, 0x56, /* 0x60-0x63 */ + 0xC4, 0x57, 0xD0, 0xC8, 0xC4, 0x58, 0xEB, 0xF2, /* 0x64-0x67 */ + 0xC4, 0x59, 0xEB, 0xEE, 0xC4, 0x5A, 0xC4, 0x5B, /* 0x68-0x6B */ + 0xC4, 0x5C, 0xEB, 0xF1, 0xC8, 0xF9, 0xC4, 0x5D, /* 0x6C-0x6F */ + 0xD1, 0xFC, 0xEB, 0xEC, 0xC4, 0x5E, 0xC4, 0x5F, /* 0x70-0x73 */ + 0xEB, 0xE9, 0xC4, 0x60, 0xC4, 0x61, 0xC4, 0x62, /* 0x74-0x77 */ + 0xC4, 0x63, 0xB8, 0xB9, 0xCF, 0xD9, 0xC4, 0xE5, /* 0x78-0x7B */ + 0xEB, 0xEF, 0xEB, 0xF0, 0xCC, 0xDA, 0xCD, 0xC8, /* 0x7C-0x7F */ + + 0xB0, 0xF2, 0xC4, 0x64, 0xEB, 0xF6, 0xC4, 0x65, /* 0x80-0x83 */ + 0xC4, 0x66, 0xC4, 0x67, 0xC4, 0x68, 0xC4, 0x69, /* 0x84-0x87 */ + 0xEB, 0xF5, 0xC4, 0x6A, 0xB2, 0xB2, 0xC4, 0x6B, /* 0x88-0x8B */ + 0xC4, 0x6C, 0xC4, 0x6D, 0xC4, 0x6E, 0xB8, 0xE0, /* 0x8C-0x8F */ + 0xC4, 0x6F, 0xEB, 0xF7, 0xC4, 0x70, 0xC4, 0x71, /* 0x90-0x93 */ + 0xC4, 0x72, 0xC4, 0x73, 0xC4, 0x74, 0xC4, 0x75, /* 0x94-0x97 */ + 0xB1, 0xEC, 0xC4, 0x76, 0xC4, 0x77, 0xCC, 0xC5, /* 0x98-0x9B */ + 0xC4, 0xA4, 0xCF, 0xA5, 0xC4, 0x78, 0xC4, 0x79, /* 0x9C-0x9F */ + 0xC4, 0x7A, 0xC4, 0x7B, 0xC4, 0x7C, 0xEB, 0xF9, /* 0xA0-0xA3 */ + 0xC4, 0x7D, 0xC4, 0x7E, 0xEC, 0xA2, 0xC4, 0x80, /* 0xA4-0xA7 */ + 0xC5, 0xF2, 0xC4, 0x81, 0xEB, 0xFA, 0xC4, 0x82, /* 0xA8-0xAB */ + 0xC4, 0x83, 0xC4, 0x84, 0xC4, 0x85, 0xC4, 0x86, /* 0xAC-0xAF */ + 0xC4, 0x87, 0xC4, 0x88, 0xC4, 0x89, 0xC9, 0xC5, /* 0xB0-0xB3 */ + 0xC4, 0x8A, 0xC4, 0x8B, 0xC4, 0x8C, 0xC4, 0x8D, /* 0xB4-0xB7 */ + 0xC4, 0x8E, 0xC4, 0x8F, 0xE2, 0xDF, 0xEB, 0xFE, /* 0xB8-0xBB */ + 0xC4, 0x90, 0xC4, 0x91, 0xC4, 0x92, 0xC4, 0x93, /* 0xBC-0xBF */ + 0xCD, 0xCE, 0xEC, 0xA1, 0xB1, 0xDB, 0xD3, 0xB7, /* 0xC0-0xC3 */ + 0xC4, 0x94, 0xC4, 0x95, 0xD2, 0xDC, 0xC4, 0x96, /* 0xC4-0xC7 */ + 0xC4, 0x97, 0xC4, 0x98, 0xEB, 0xFD, 0xC4, 0x99, /* 0xC8-0xCB */ + 0xEB, 0xFB, 0xC4, 0x9A, 0xC4, 0x9B, 0xC4, 0x9C, /* 0xCC-0xCF */ + 0xC4, 0x9D, 0xC4, 0x9E, 0xC4, 0x9F, 0xC4, 0xA0, /* 0xD0-0xD3 */ + 0xC5, 0x40, 0xC5, 0x41, 0xC5, 0x42, 0xC5, 0x43, /* 0xD4-0xD7 */ + 0xC5, 0x44, 0xC5, 0x45, 0xC5, 0x46, 0xC5, 0x47, /* 0xD8-0xDB */ + 0xC5, 0x48, 0xC5, 0x49, 0xC5, 0x4A, 0xC5, 0x4B, /* 0xDC-0xDF */ + 0xC5, 0x4C, 0xC5, 0x4D, 0xC5, 0x4E, 0xB3, 0xBC, /* 0xE0-0xE3 */ + 0xC5, 0x4F, 0xC5, 0x50, 0xC5, 0x51, 0xEA, 0xB0, /* 0xE4-0xE7 */ + 0xC5, 0x52, 0xC5, 0x53, 0xD7, 0xD4, 0xC5, 0x54, /* 0xE8-0xEB */ + 0xF4, 0xAB, 0xB3, 0xF4, 0xC5, 0x55, 0xC5, 0x56, /* 0xEC-0xEF */ + 0xC5, 0x57, 0xC5, 0x58, 0xC5, 0x59, 0xD6, 0xC1, /* 0xF0-0xF3 */ + 0xD6, 0xC2, 0xC5, 0x5A, 0xC5, 0x5B, 0xC5, 0x5C, /* 0xF4-0xF7 */ + 0xC5, 0x5D, 0xC5, 0x5E, 0xC5, 0x5F, 0xD5, 0xE9, /* 0xF8-0xFB */ + 0xBE, 0xCA, 0xC5, 0x60, 0xF4, 0xA7, 0xC5, 0x61, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0xD2, 0xA8, 0xF4, 0xA8, 0xF4, 0xA9, 0xC5, 0x62, /* 0x00-0x03 */ + 0xF4, 0xAA, 0xBE, 0xCB, 0xD3, 0xDF, 0xC5, 0x63, /* 0x04-0x07 */ + 0xC5, 0x64, 0xC5, 0x65, 0xC5, 0x66, 0xC5, 0x67, /* 0x08-0x0B */ + 0xC9, 0xE0, 0xC9, 0xE1, 0xC5, 0x68, 0xC5, 0x69, /* 0x0C-0x0F */ + 0xF3, 0xC2, 0xC5, 0x6A, 0xCA, 0xE6, 0xC5, 0x6B, /* 0x10-0x13 */ + 0xCC, 0xF2, 0xC5, 0x6C, 0xC5, 0x6D, 0xC5, 0x6E, /* 0x14-0x17 */ + 0xC5, 0x6F, 0xC5, 0x70, 0xC5, 0x71, 0xE2, 0xB6, /* 0x18-0x1B */ + 0xCB, 0xB4, 0xC5, 0x72, 0xCE, 0xE8, 0xD6, 0xDB, /* 0x1C-0x1F */ + 0xC5, 0x73, 0xF4, 0xAD, 0xF4, 0xAE, 0xF4, 0xAF, /* 0x20-0x23 */ + 0xC5, 0x74, 0xC5, 0x75, 0xC5, 0x76, 0xC5, 0x77, /* 0x24-0x27 */ + 0xF4, 0xB2, 0xC5, 0x78, 0xBA, 0xBD, 0xF4, 0xB3, /* 0x28-0x2B */ + 0xB0, 0xE3, 0xF4, 0xB0, 0xC5, 0x79, 0xF4, 0xB1, /* 0x2C-0x2F */ + 0xBD, 0xA2, 0xB2, 0xD5, 0xC5, 0x7A, 0xF4, 0xB6, /* 0x30-0x33 */ + 0xF4, 0xB7, 0xB6, 0xE6, 0xB2, 0xB0, 0xCF, 0xCF, /* 0x34-0x37 */ + 0xF4, 0xB4, 0xB4, 0xAC, 0xC5, 0x7B, 0xF4, 0xB5, /* 0x38-0x3B */ + 0xC5, 0x7C, 0xC5, 0x7D, 0xF4, 0xB8, 0xC5, 0x7E, /* 0x3C-0x3F */ + 0xC5, 0x80, 0xC5, 0x81, 0xC5, 0x82, 0xC5, 0x83, /* 0x40-0x43 */ + 0xF4, 0xB9, 0xC5, 0x84, 0xC5, 0x85, 0xCD, 0xA7, /* 0x44-0x47 */ + 0xC5, 0x86, 0xF4, 0xBA, 0xC5, 0x87, 0xF4, 0xBB, /* 0x48-0x4B */ + 0xC5, 0x88, 0xC5, 0x89, 0xC5, 0x8A, 0xF4, 0xBC, /* 0x4C-0x4F */ + 0xC5, 0x8B, 0xC5, 0x8C, 0xC5, 0x8D, 0xC5, 0x8E, /* 0x50-0x53 */ + 0xC5, 0x8F, 0xC5, 0x90, 0xC5, 0x91, 0xC5, 0x92, /* 0x54-0x57 */ + 0xCB, 0xD2, 0xC5, 0x93, 0xF4, 0xBD, 0xC5, 0x94, /* 0x58-0x5B */ + 0xC5, 0x95, 0xC5, 0x96, 0xC5, 0x97, 0xF4, 0xBE, /* 0x5C-0x5F */ + 0xC5, 0x98, 0xC5, 0x99, 0xC5, 0x9A, 0xC5, 0x9B, /* 0x60-0x63 */ + 0xC5, 0x9C, 0xC5, 0x9D, 0xC5, 0x9E, 0xC5, 0x9F, /* 0x64-0x67 */ + 0xF4, 0xBF, 0xC5, 0xA0, 0xC6, 0x40, 0xC6, 0x41, /* 0x68-0x6B */ + 0xC6, 0x42, 0xC6, 0x43, 0xF4, 0xDE, 0xC1, 0xBC, /* 0x6C-0x6F */ + 0xBC, 0xE8, 0xC6, 0x44, 0xC9, 0xAB, 0xD1, 0xDE, /* 0x70-0x73 */ + 0xE5, 0xF5, 0xC6, 0x45, 0xC6, 0x46, 0xC6, 0x47, /* 0x74-0x77 */ + 0xC6, 0x48, 0xDC, 0xB3, 0xD2, 0xD5, 0xC6, 0x49, /* 0x78-0x7B */ + 0xC6, 0x4A, 0xDC, 0xB4, 0xB0, 0xAC, 0xDC, 0xB5, /* 0x7C-0x7F */ + + 0xC6, 0x4B, 0xC6, 0x4C, 0xBD, 0xDA, 0xC6, 0x4D, /* 0x80-0x83 */ + 0xDC, 0xB9, 0xC6, 0x4E, 0xC6, 0x4F, 0xC6, 0x50, /* 0x84-0x87 */ + 0xD8, 0xC2, 0xC6, 0x51, 0xDC, 0xB7, 0xD3, 0xF3, /* 0x88-0x8B */ + 0xC6, 0x52, 0xC9, 0xD6, 0xDC, 0xBA, 0xDC, 0xB6, /* 0x8C-0x8F */ + 0xC6, 0x53, 0xDC, 0xBB, 0xC3, 0xA2, 0xC6, 0x54, /* 0x90-0x93 */ + 0xC6, 0x55, 0xC6, 0x56, 0xC6, 0x57, 0xDC, 0xBC, /* 0x94-0x97 */ + 0xDC, 0xC5, 0xDC, 0xBD, 0xC6, 0x58, 0xC6, 0x59, /* 0x98-0x9B */ + 0xCE, 0xDF, 0xD6, 0xA5, 0xC6, 0x5A, 0xDC, 0xCF, /* 0x9C-0x9F */ + 0xC6, 0x5B, 0xDC, 0xCD, 0xC6, 0x5C, 0xC6, 0x5D, /* 0xA0-0xA3 */ + 0xDC, 0xD2, 0xBD, 0xE6, 0xC2, 0xAB, 0xC6, 0x5E, /* 0xA4-0xA7 */ + 0xDC, 0xB8, 0xDC, 0xCB, 0xDC, 0xCE, 0xDC, 0xBE, /* 0xA8-0xAB */ + 0xB7, 0xD2, 0xB0, 0xC5, 0xDC, 0xC7, 0xD0, 0xBE, /* 0xAC-0xAF */ + 0xDC, 0xC1, 0xBB, 0xA8, 0xC6, 0x5F, 0xB7, 0xBC, /* 0xB0-0xB3 */ + 0xDC, 0xCC, 0xC6, 0x60, 0xC6, 0x61, 0xDC, 0xC6, /* 0xB4-0xB7 */ + 0xDC, 0xBF, 0xC7, 0xDB, 0xC6, 0x62, 0xC6, 0x63, /* 0xB8-0xBB */ + 0xC6, 0x64, 0xD1, 0xBF, 0xDC, 0xC0, 0xC6, 0x65, /* 0xBC-0xBF */ + 0xC6, 0x66, 0xDC, 0xCA, 0xC6, 0x67, 0xC6, 0x68, /* 0xC0-0xC3 */ + 0xDC, 0xD0, 0xC6, 0x69, 0xC6, 0x6A, 0xCE, 0xAD, /* 0xC4-0xC7 */ + 0xDC, 0xC2, 0xC6, 0x6B, 0xDC, 0xC3, 0xDC, 0xC8, /* 0xC8-0xCB */ + 0xDC, 0xC9, 0xB2, 0xD4, 0xDC, 0xD1, 0xCB, 0xD5, /* 0xCC-0xCF */ + 0xC6, 0x6C, 0xD4, 0xB7, 0xDC, 0xDB, 0xDC, 0xDF, /* 0xD0-0xD3 */ + 0xCC, 0xA6, 0xDC, 0xE6, 0xC6, 0x6D, 0xC3, 0xE7, /* 0xD4-0xD7 */ + 0xDC, 0xDC, 0xC6, 0x6E, 0xC6, 0x6F, 0xBF, 0xC1, /* 0xD8-0xDB */ + 0xDC, 0xD9, 0xC6, 0x70, 0xB0, 0xFA, 0xB9, 0xB6, /* 0xDC-0xDF */ + 0xDC, 0xE5, 0xDC, 0xD3, 0xC6, 0x71, 0xDC, 0xC4, /* 0xE0-0xE3 */ + 0xDC, 0xD6, 0xC8, 0xF4, 0xBF, 0xE0, 0xC6, 0x72, /* 0xE4-0xE7 */ + 0xC6, 0x73, 0xC6, 0x74, 0xC6, 0x75, 0xC9, 0xBB, /* 0xE8-0xEB */ + 0xC6, 0x76, 0xC6, 0x77, 0xC6, 0x78, 0xB1, 0xBD, /* 0xEC-0xEF */ + 0xC6, 0x79, 0xD3, 0xA2, 0xC6, 0x7A, 0xC6, 0x7B, /* 0xF0-0xF3 */ + 0xDC, 0xDA, 0xC6, 0x7C, 0xC6, 0x7D, 0xDC, 0xD5, /* 0xF4-0xF7 */ + 0xC6, 0x7E, 0xC6, 0xBB, 0xC6, 0x80, 0xDC, 0xDE, /* 0xF8-0xFB */ + 0xC6, 0x81, 0xC6, 0x82, 0xC6, 0x83, 0xC6, 0x84, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0xC6, 0x85, 0xD7, 0xC2, 0xC3, 0xAF, 0xB7, 0xB6, /* 0x00-0x03 */ + 0xC7, 0xD1, 0xC3, 0xA9, 0xDC, 0xE2, 0xDC, 0xD8, /* 0x04-0x07 */ + 0xDC, 0xEB, 0xDC, 0xD4, 0xC6, 0x86, 0xC6, 0x87, /* 0x08-0x0B */ + 0xDC, 0xDD, 0xC6, 0x88, 0xBE, 0xA5, 0xDC, 0xD7, /* 0x0C-0x0F */ + 0xC6, 0x89, 0xDC, 0xE0, 0xC6, 0x8A, 0xC6, 0x8B, /* 0x10-0x13 */ + 0xDC, 0xE3, 0xDC, 0xE4, 0xC6, 0x8C, 0xDC, 0xF8, /* 0x14-0x17 */ + 0xC6, 0x8D, 0xC6, 0x8E, 0xDC, 0xE1, 0xDD, 0xA2, /* 0x18-0x1B */ + 0xDC, 0xE7, 0xC6, 0x8F, 0xC6, 0x90, 0xC6, 0x91, /* 0x1C-0x1F */ + 0xC6, 0x92, 0xC6, 0x93, 0xC6, 0x94, 0xC6, 0x95, /* 0x20-0x23 */ + 0xC6, 0x96, 0xC6, 0x97, 0xC6, 0x98, 0xBC, 0xEB, /* 0x24-0x27 */ + 0xB4, 0xC4, 0xC6, 0x99, 0xC6, 0x9A, 0xC3, 0xA3, /* 0x28-0x2B */ + 0xB2, 0xE7, 0xDC, 0xFA, 0xC6, 0x9B, 0xDC, 0xF2, /* 0x2C-0x2F */ + 0xC6, 0x9C, 0xDC, 0xEF, 0xC6, 0x9D, 0xDC, 0xFC, /* 0x30-0x33 */ + 0xDC, 0xEE, 0xD2, 0xF0, 0xB2, 0xE8, 0xC6, 0x9E, /* 0x34-0x37 */ + 0xC8, 0xD7, 0xC8, 0xE3, 0xDC, 0xFB, 0xC6, 0x9F, /* 0x38-0x3B */ + 0xDC, 0xED, 0xC6, 0xA0, 0xC7, 0x40, 0xC7, 0x41, /* 0x3C-0x3F */ + 0xDC, 0xF7, 0xC7, 0x42, 0xC7, 0x43, 0xDC, 0xF5, /* 0x40-0x43 */ + 0xC7, 0x44, 0xC7, 0x45, 0xBE, 0xA3, 0xDC, 0xF4, /* 0x44-0x47 */ + 0xC7, 0x46, 0xB2, 0xDD, 0xC7, 0x47, 0xC7, 0x48, /* 0x48-0x4B */ + 0xC7, 0x49, 0xC7, 0x4A, 0xC7, 0x4B, 0xDC, 0xF3, /* 0x4C-0x4F */ + 0xBC, 0xF6, 0xDC, 0xE8, 0xBB, 0xC4, 0xC7, 0x4C, /* 0x50-0x53 */ + 0xC0, 0xF3, 0xC7, 0x4D, 0xC7, 0x4E, 0xC7, 0x4F, /* 0x54-0x57 */ + 0xC7, 0x50, 0xC7, 0x51, 0xBC, 0xD4, 0xDC, 0xE9, /* 0x58-0x5B */ + 0xDC, 0xEA, 0xC7, 0x52, 0xDC, 0xF1, 0xDC, 0xF6, /* 0x5C-0x5F */ + 0xDC, 0xF9, 0xB5, 0xB4, 0xC7, 0x53, 0xC8, 0xD9, /* 0x60-0x63 */ + 0xBB, 0xE7, 0xDC, 0xFE, 0xDC, 0xFD, 0xD3, 0xAB, /* 0x64-0x67 */ + 0xDD, 0xA1, 0xDD, 0xA3, 0xDD, 0xA5, 0xD2, 0xF1, /* 0x68-0x6B */ + 0xDD, 0xA4, 0xDD, 0xA6, 0xDD, 0xA7, 0xD2, 0xA9, /* 0x6C-0x6F */ + 0xC7, 0x54, 0xC7, 0x55, 0xC7, 0x56, 0xC7, 0x57, /* 0x70-0x73 */ + 0xC7, 0x58, 0xC7, 0x59, 0xC7, 0x5A, 0xBA, 0xC9, /* 0x74-0x77 */ + 0xDD, 0xA9, 0xC7, 0x5B, 0xC7, 0x5C, 0xDD, 0xB6, /* 0x78-0x7B */ + 0xDD, 0xB1, 0xDD, 0xB4, 0xC7, 0x5D, 0xC7, 0x5E, /* 0x7C-0x7F */ + + 0xC7, 0x5F, 0xC7, 0x60, 0xC7, 0x61, 0xC7, 0x62, /* 0x80-0x83 */ + 0xC7, 0x63, 0xDD, 0xB0, 0xC6, 0xCE, 0xC7, 0x64, /* 0x84-0x87 */ + 0xC7, 0x65, 0xC0, 0xF2, 0xC7, 0x66, 0xC7, 0x67, /* 0x88-0x8B */ + 0xC7, 0x68, 0xC7, 0x69, 0xC9, 0xAF, 0xC7, 0x6A, /* 0x8C-0x8F */ + 0xC7, 0x6B, 0xC7, 0x6C, 0xDC, 0xEC, 0xDD, 0xAE, /* 0x90-0x93 */ + 0xC7, 0x6D, 0xC7, 0x6E, 0xC7, 0x6F, 0xC7, 0x70, /* 0x94-0x97 */ + 0xDD, 0xB7, 0xC7, 0x71, 0xC7, 0x72, 0xDC, 0xF0, /* 0x98-0x9B */ + 0xDD, 0xAF, 0xC7, 0x73, 0xDD, 0xB8, 0xC7, 0x74, /* 0x9C-0x9F */ + 0xDD, 0xAC, 0xC7, 0x75, 0xC7, 0x76, 0xC7, 0x77, /* 0xA0-0xA3 */ + 0xC7, 0x78, 0xC7, 0x79, 0xC7, 0x7A, 0xC7, 0x7B, /* 0xA4-0xA7 */ + 0xDD, 0xB9, 0xDD, 0xB3, 0xDD, 0xAD, 0xC4, 0xAA, /* 0xA8-0xAB */ + 0xC7, 0x7C, 0xC7, 0x7D, 0xC7, 0x7E, 0xC7, 0x80, /* 0xAC-0xAF */ + 0xDD, 0xA8, 0xC0, 0xB3, 0xC1, 0xAB, 0xDD, 0xAA, /* 0xB0-0xB3 */ + 0xDD, 0xAB, 0xC7, 0x81, 0xDD, 0xB2, 0xBB, 0xF1, /* 0xB4-0xB7 */ + 0xDD, 0xB5, 0xD3, 0xA8, 0xDD, 0xBA, 0xC7, 0x82, /* 0xB8-0xBB */ + 0xDD, 0xBB, 0xC3, 0xA7, 0xC7, 0x83, 0xC7, 0x84, /* 0xBC-0xBF */ + 0xDD, 0xD2, 0xDD, 0xBC, 0xC7, 0x85, 0xC7, 0x86, /* 0xC0-0xC3 */ + 0xC7, 0x87, 0xDD, 0xD1, 0xC7, 0x88, 0xB9, 0xBD, /* 0xC4-0xC7 */ + 0xC7, 0x89, 0xC7, 0x8A, 0xBE, 0xD5, 0xC7, 0x8B, /* 0xC8-0xCB */ + 0xBE, 0xFA, 0xC7, 0x8C, 0xC7, 0x8D, 0xBA, 0xCA, /* 0xCC-0xCF */ + 0xC7, 0x8E, 0xC7, 0x8F, 0xC7, 0x90, 0xC7, 0x91, /* 0xD0-0xD3 */ + 0xDD, 0xCA, 0xC7, 0x92, 0xDD, 0xC5, 0xC7, 0x93, /* 0xD4-0xD7 */ + 0xDD, 0xBF, 0xC7, 0x94, 0xC7, 0x95, 0xC7, 0x96, /* 0xD8-0xDB */ + 0xB2, 0xCB, 0xDD, 0xC3, 0xC7, 0x97, 0xDD, 0xCB, /* 0xDC-0xDF */ + 0xB2, 0xA4, 0xDD, 0xD5, 0xC7, 0x98, 0xC7, 0x99, /* 0xE0-0xE3 */ + 0xC7, 0x9A, 0xDD, 0xBE, 0xC7, 0x9B, 0xC7, 0x9C, /* 0xE4-0xE7 */ + 0xC7, 0x9D, 0xC6, 0xD0, 0xDD, 0xD0, 0xC7, 0x9E, /* 0xE8-0xEB */ + 0xC7, 0x9F, 0xC7, 0xA0, 0xC8, 0x40, 0xC8, 0x41, /* 0xEC-0xEF */ + 0xDD, 0xD4, 0xC1, 0xE2, 0xB7, 0xC6, 0xC8, 0x42, /* 0xF0-0xF3 */ + 0xC8, 0x43, 0xC8, 0x44, 0xC8, 0x45, 0xC8, 0x46, /* 0xF4-0xF7 */ + 0xDD, 0xCE, 0xDD, 0xCF, 0xC8, 0x47, 0xC8, 0x48, /* 0xF8-0xFB */ + 0xC8, 0x49, 0xDD, 0xC4, 0xC8, 0x4A, 0xC8, 0x4B, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0xC8, 0x4C, 0xDD, 0xBD, 0xC8, 0x4D, 0xDD, 0xCD, /* 0x00-0x03 */ + 0xCC, 0xD1, 0xC8, 0x4E, 0xDD, 0xC9, 0xC8, 0x4F, /* 0x04-0x07 */ + 0xC8, 0x50, 0xC8, 0x51, 0xC8, 0x52, 0xDD, 0xC2, /* 0x08-0x0B */ + 0xC3, 0xC8, 0xC6, 0xBC, 0xCE, 0xAE, 0xDD, 0xCC, /* 0x0C-0x0F */ + 0xC8, 0x53, 0xDD, 0xC8, 0xC8, 0x54, 0xC8, 0x55, /* 0x10-0x13 */ + 0xC8, 0x56, 0xC8, 0x57, 0xC8, 0x58, 0xC8, 0x59, /* 0x14-0x17 */ + 0xDD, 0xC1, 0xC8, 0x5A, 0xC8, 0x5B, 0xC8, 0x5C, /* 0x18-0x1B */ + 0xDD, 0xC6, 0xC2, 0xDC, 0xC8, 0x5D, 0xC8, 0x5E, /* 0x1C-0x1F */ + 0xC8, 0x5F, 0xC8, 0x60, 0xC8, 0x61, 0xC8, 0x62, /* 0x20-0x23 */ + 0xD3, 0xA9, 0xD3, 0xAA, 0xDD, 0xD3, 0xCF, 0xF4, /* 0x24-0x27 */ + 0xC8, 0xF8, 0xC8, 0x63, 0xC8, 0x64, 0xC8, 0x65, /* 0x28-0x2B */ + 0xC8, 0x66, 0xC8, 0x67, 0xC8, 0x68, 0xC8, 0x69, /* 0x2C-0x2F */ + 0xC8, 0x6A, 0xDD, 0xE6, 0xC8, 0x6B, 0xC8, 0x6C, /* 0x30-0x33 */ + 0xC8, 0x6D, 0xC8, 0x6E, 0xC8, 0x6F, 0xC8, 0x70, /* 0x34-0x37 */ + 0xDD, 0xC7, 0xC8, 0x71, 0xC8, 0x72, 0xC8, 0x73, /* 0x38-0x3B */ + 0xDD, 0xE0, 0xC2, 0xE4, 0xC8, 0x74, 0xC8, 0x75, /* 0x3C-0x3F */ + 0xC8, 0x76, 0xC8, 0x77, 0xC8, 0x78, 0xC8, 0x79, /* 0x40-0x43 */ + 0xC8, 0x7A, 0xC8, 0x7B, 0xDD, 0xE1, 0xC8, 0x7C, /* 0x44-0x47 */ + 0xC8, 0x7D, 0xC8, 0x7E, 0xC8, 0x80, 0xC8, 0x81, /* 0x48-0x4B */ + 0xC8, 0x82, 0xC8, 0x83, 0xC8, 0x84, 0xC8, 0x85, /* 0x4C-0x4F */ + 0xC8, 0x86, 0xDD, 0xD7, 0xC8, 0x87, 0xC8, 0x88, /* 0x50-0x53 */ + 0xC8, 0x89, 0xC8, 0x8A, 0xC8, 0x8B, 0xD6, 0xF8, /* 0x54-0x57 */ + 0xC8, 0x8C, 0xDD, 0xD9, 0xDD, 0xD8, 0xB8, 0xF0, /* 0x58-0x5B */ + 0xDD, 0xD6, 0xC8, 0x8D, 0xC8, 0x8E, 0xC8, 0x8F, /* 0x5C-0x5F */ + 0xC8, 0x90, 0xC6, 0xCF, 0xC8, 0x91, 0xB6, 0xAD, /* 0x60-0x63 */ + 0xC8, 0x92, 0xC8, 0x93, 0xC8, 0x94, 0xC8, 0x95, /* 0x64-0x67 */ + 0xC8, 0x96, 0xDD, 0xE2, 0xC8, 0x97, 0xBA, 0xF9, /* 0x68-0x6B */ + 0xD4, 0xE1, 0xDD, 0xE7, 0xC8, 0x98, 0xC8, 0x99, /* 0x6C-0x6F */ + 0xC8, 0x9A, 0xB4, 0xD0, 0xC8, 0x9B, 0xDD, 0xDA, /* 0x70-0x73 */ + 0xC8, 0x9C, 0xBF, 0xFB, 0xDD, 0xE3, 0xC8, 0x9D, /* 0x74-0x77 */ + 0xDD, 0xDF, 0xC8, 0x9E, 0xDD, 0xDD, 0xC8, 0x9F, /* 0x78-0x7B */ + 0xC8, 0xA0, 0xC9, 0x40, 0xC9, 0x41, 0xC9, 0x42, /* 0x7C-0x7F */ + + 0xC9, 0x43, 0xC9, 0x44, 0xB5, 0xD9, 0xC9, 0x45, /* 0x80-0x83 */ + 0xC9, 0x46, 0xC9, 0x47, 0xC9, 0x48, 0xDD, 0xDB, /* 0x84-0x87 */ + 0xDD, 0xDC, 0xDD, 0xDE, 0xC9, 0x49, 0xBD, 0xAF, /* 0x88-0x8B */ + 0xDD, 0xE4, 0xC9, 0x4A, 0xDD, 0xE5, 0xC9, 0x4B, /* 0x8C-0x8F */ + 0xC9, 0x4C, 0xC9, 0x4D, 0xC9, 0x4E, 0xC9, 0x4F, /* 0x90-0x93 */ + 0xC9, 0x50, 0xC9, 0x51, 0xC9, 0x52, 0xDD, 0xF5, /* 0x94-0x97 */ + 0xC9, 0x53, 0xC3, 0xC9, 0xC9, 0x54, 0xC9, 0x55, /* 0x98-0x9B */ + 0xCB, 0xE2, 0xC9, 0x56, 0xC9, 0x57, 0xC9, 0x58, /* 0x9C-0x9F */ + 0xC9, 0x59, 0xDD, 0xF2, 0xC9, 0x5A, 0xC9, 0x5B, /* 0xA0-0xA3 */ + 0xC9, 0x5C, 0xC9, 0x5D, 0xC9, 0x5E, 0xC9, 0x5F, /* 0xA4-0xA7 */ + 0xC9, 0x60, 0xC9, 0x61, 0xC9, 0x62, 0xC9, 0x63, /* 0xA8-0xAB */ + 0xC9, 0x64, 0xC9, 0x65, 0xC9, 0x66, 0xD8, 0xE1, /* 0xAC-0xAF */ + 0xC9, 0x67, 0xC9, 0x68, 0xC6, 0xD1, 0xC9, 0x69, /* 0xB0-0xB3 */ + 0xDD, 0xF4, 0xC9, 0x6A, 0xC9, 0x6B, 0xC9, 0x6C, /* 0xB4-0xB7 */ + 0xD5, 0xF4, 0xDD, 0xF3, 0xDD, 0xF0, 0xC9, 0x6D, /* 0xB8-0xBB */ + 0xC9, 0x6E, 0xDD, 0xEC, 0xC9, 0x6F, 0xDD, 0xEF, /* 0xBC-0xBF */ + 0xC9, 0x70, 0xDD, 0xE8, 0xC9, 0x71, 0xC9, 0x72, /* 0xC0-0xC3 */ + 0xD0, 0xEE, 0xC9, 0x73, 0xC9, 0x74, 0xC9, 0x75, /* 0xC4-0xC7 */ + 0xC9, 0x76, 0xC8, 0xD8, 0xDD, 0xEE, 0xC9, 0x77, /* 0xC8-0xCB */ + 0xC9, 0x78, 0xDD, 0xE9, 0xC9, 0x79, 0xC9, 0x7A, /* 0xCC-0xCF */ + 0xDD, 0xEA, 0xCB, 0xF2, 0xC9, 0x7B, 0xDD, 0xED, /* 0xD0-0xD3 */ + 0xC9, 0x7C, 0xC9, 0x7D, 0xB1, 0xCD, 0xC9, 0x7E, /* 0xD4-0xD7 */ + 0xC9, 0x80, 0xC9, 0x81, 0xC9, 0x82, 0xC9, 0x83, /* 0xD8-0xDB */ + 0xC9, 0x84, 0xC0, 0xB6, 0xC9, 0x85, 0xBC, 0xBB, /* 0xDC-0xDF */ + 0xDD, 0xF1, 0xC9, 0x86, 0xC9, 0x87, 0xDD, 0xF7, /* 0xE0-0xE3 */ + 0xC9, 0x88, 0xDD, 0xF6, 0xDD, 0xEB, 0xC9, 0x89, /* 0xE4-0xE7 */ + 0xC9, 0x8A, 0xC9, 0x8B, 0xC9, 0x8C, 0xC9, 0x8D, /* 0xE8-0xEB */ + 0xC5, 0xEE, 0xC9, 0x8E, 0xC9, 0x8F, 0xC9, 0x90, /* 0xEC-0xEF */ + 0xDD, 0xFB, 0xC9, 0x91, 0xC9, 0x92, 0xC9, 0x93, /* 0xF0-0xF3 */ + 0xC9, 0x94, 0xC9, 0x95, 0xC9, 0x96, 0xC9, 0x97, /* 0xF4-0xF7 */ + 0xC9, 0x98, 0xC9, 0x99, 0xC9, 0x9A, 0xC9, 0x9B, /* 0xF8-0xFB */ + 0xDE, 0xA4, 0xC9, 0x9C, 0xC9, 0x9D, 0xDE, 0xA3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0xC9, 0x9E, 0xC9, 0x9F, 0xC9, 0xA0, 0xCA, 0x40, /* 0x00-0x03 */ + 0xCA, 0x41, 0xCA, 0x42, 0xCA, 0x43, 0xCA, 0x44, /* 0x04-0x07 */ + 0xCA, 0x45, 0xCA, 0x46, 0xCA, 0x47, 0xCA, 0x48, /* 0x08-0x0B */ + 0xDD, 0xF8, 0xCA, 0x49, 0xCA, 0x4A, 0xCA, 0x4B, /* 0x0C-0x0F */ + 0xCA, 0x4C, 0xC3, 0xEF, 0xCA, 0x4D, 0xC2, 0xFB, /* 0x10-0x13 */ + 0xCA, 0x4E, 0xCA, 0x4F, 0xCA, 0x50, 0xD5, 0xE1, /* 0x14-0x17 */ + 0xCA, 0x51, 0xCA, 0x52, 0xCE, 0xB5, 0xCA, 0x53, /* 0x18-0x1B */ + 0xCA, 0x54, 0xCA, 0x55, 0xCA, 0x56, 0xDD, 0xFD, /* 0x1C-0x1F */ + 0xCA, 0x57, 0xB2, 0xCC, 0xCA, 0x58, 0xCA, 0x59, /* 0x20-0x23 */ + 0xCA, 0x5A, 0xCA, 0x5B, 0xCA, 0x5C, 0xCA, 0x5D, /* 0x24-0x27 */ + 0xCA, 0x5E, 0xCA, 0x5F, 0xCA, 0x60, 0xC4, 0xE8, /* 0x28-0x2B */ + 0xCA, 0xDF, 0xCA, 0x61, 0xCA, 0x62, 0xCA, 0x63, /* 0x2C-0x2F */ + 0xCA, 0x64, 0xCA, 0x65, 0xCA, 0x66, 0xCA, 0x67, /* 0x30-0x33 */ + 0xCA, 0x68, 0xCA, 0x69, 0xCA, 0x6A, 0xC7, 0xBE, /* 0x34-0x37 */ + 0xDD, 0xFA, 0xDD, 0xFC, 0xDD, 0xFE, 0xDE, 0xA2, /* 0x38-0x3B */ + 0xB0, 0xAA, 0xB1, 0xCE, 0xCA, 0x6B, 0xCA, 0x6C, /* 0x3C-0x3F */ + 0xCA, 0x6D, 0xCA, 0x6E, 0xCA, 0x6F, 0xDE, 0xAC, /* 0x40-0x43 */ + 0xCA, 0x70, 0xCA, 0x71, 0xCA, 0x72, 0xCA, 0x73, /* 0x44-0x47 */ + 0xDE, 0xA6, 0xBD, 0xB6, 0xC8, 0xEF, 0xCA, 0x74, /* 0x48-0x4B */ + 0xCA, 0x75, 0xCA, 0x76, 0xCA, 0x77, 0xCA, 0x78, /* 0x4C-0x4F */ + 0xCA, 0x79, 0xCA, 0x7A, 0xCA, 0x7B, 0xCA, 0x7C, /* 0x50-0x53 */ + 0xCA, 0x7D, 0xCA, 0x7E, 0xDE, 0xA1, 0xCA, 0x80, /* 0x54-0x57 */ + 0xCA, 0x81, 0xDE, 0xA5, 0xCA, 0x82, 0xCA, 0x83, /* 0x58-0x5B */ + 0xCA, 0x84, 0xCA, 0x85, 0xDE, 0xA9, 0xCA, 0x86, /* 0x5C-0x5F */ + 0xCA, 0x87, 0xCA, 0x88, 0xCA, 0x89, 0xCA, 0x8A, /* 0x60-0x63 */ + 0xDE, 0xA8, 0xCA, 0x8B, 0xCA, 0x8C, 0xCA, 0x8D, /* 0x64-0x67 */ + 0xDE, 0xA7, 0xCA, 0x8E, 0xCA, 0x8F, 0xCA, 0x90, /* 0x68-0x6B */ + 0xCA, 0x91, 0xCA, 0x92, 0xCA, 0x93, 0xCA, 0x94, /* 0x6C-0x6F */ + 0xCA, 0x95, 0xCA, 0x96, 0xDE, 0xAD, 0xCA, 0x97, /* 0x70-0x73 */ + 0xD4, 0xCC, 0xCA, 0x98, 0xCA, 0x99, 0xCA, 0x9A, /* 0x74-0x77 */ + 0xCA, 0x9B, 0xDE, 0xB3, 0xDE, 0xAA, 0xDE, 0xAE, /* 0x78-0x7B */ + 0xCA, 0x9C, 0xCA, 0x9D, 0xC0, 0xD9, 0xCA, 0x9E, /* 0x7C-0x7F */ + + 0xCA, 0x9F, 0xCA, 0xA0, 0xCB, 0x40, 0xCB, 0x41, /* 0x80-0x83 */ + 0xB1, 0xA1, 0xDE, 0xB6, 0xCB, 0x42, 0xDE, 0xB1, /* 0x84-0x87 */ + 0xCB, 0x43, 0xCB, 0x44, 0xCB, 0x45, 0xCB, 0x46, /* 0x88-0x8B */ + 0xCB, 0x47, 0xCB, 0x48, 0xCB, 0x49, 0xDE, 0xB2, /* 0x8C-0x8F */ + 0xCB, 0x4A, 0xCB, 0x4B, 0xCB, 0x4C, 0xCB, 0x4D, /* 0x90-0x93 */ + 0xCB, 0x4E, 0xCB, 0x4F, 0xCB, 0x50, 0xCB, 0x51, /* 0x94-0x97 */ + 0xCB, 0x52, 0xCB, 0x53, 0xCB, 0x54, 0xD1, 0xA6, /* 0x98-0x9B */ + 0xDE, 0xB5, 0xCB, 0x55, 0xCB, 0x56, 0xCB, 0x57, /* 0x9C-0x9F */ + 0xCB, 0x58, 0xCB, 0x59, 0xCB, 0x5A, 0xCB, 0x5B, /* 0xA0-0xA3 */ + 0xDE, 0xAF, 0xCB, 0x5C, 0xCB, 0x5D, 0xCB, 0x5E, /* 0xA4-0xA7 */ + 0xDE, 0xB0, 0xCB, 0x5F, 0xD0, 0xBD, 0xCB, 0x60, /* 0xA8-0xAB */ + 0xCB, 0x61, 0xCB, 0x62, 0xDE, 0xB4, 0xCA, 0xED, /* 0xAC-0xAF */ + 0xDE, 0xB9, 0xCB, 0x63, 0xCB, 0x64, 0xCB, 0x65, /* 0xB0-0xB3 */ + 0xCB, 0x66, 0xCB, 0x67, 0xCB, 0x68, 0xDE, 0xB8, /* 0xB4-0xB7 */ + 0xCB, 0x69, 0xDE, 0xB7, 0xCB, 0x6A, 0xCB, 0x6B, /* 0xB8-0xBB */ + 0xCB, 0x6C, 0xCB, 0x6D, 0xCB, 0x6E, 0xCB, 0x6F, /* 0xBC-0xBF */ + 0xCB, 0x70, 0xDE, 0xBB, 0xCB, 0x71, 0xCB, 0x72, /* 0xC0-0xC3 */ + 0xCB, 0x73, 0xCB, 0x74, 0xCB, 0x75, 0xCB, 0x76, /* 0xC4-0xC7 */ + 0xCB, 0x77, 0xBD, 0xE5, 0xCB, 0x78, 0xCB, 0x79, /* 0xC8-0xCB */ + 0xCB, 0x7A, 0xCB, 0x7B, 0xCB, 0x7C, 0xB2, 0xD8, /* 0xCC-0xCF */ + 0xC3, 0xEA, 0xCB, 0x7D, 0xCB, 0x7E, 0xDE, 0xBA, /* 0xD0-0xD3 */ + 0xCB, 0x80, 0xC5, 0xBA, 0xCB, 0x81, 0xCB, 0x82, /* 0xD4-0xD7 */ + 0xCB, 0x83, 0xCB, 0x84, 0xCB, 0x85, 0xCB, 0x86, /* 0xD8-0xDB */ + 0xDE, 0xBC, 0xCB, 0x87, 0xCB, 0x88, 0xCB, 0x89, /* 0xDC-0xDF */ + 0xCB, 0x8A, 0xCB, 0x8B, 0xCB, 0x8C, 0xCB, 0x8D, /* 0xE0-0xE3 */ + 0xCC, 0xD9, 0xCB, 0x8E, 0xCB, 0x8F, 0xCB, 0x90, /* 0xE4-0xE7 */ + 0xCB, 0x91, 0xB7, 0xAA, 0xCB, 0x92, 0xCB, 0x93, /* 0xE8-0xEB */ + 0xCB, 0x94, 0xCB, 0x95, 0xCB, 0x96, 0xCB, 0x97, /* 0xEC-0xEF */ + 0xCB, 0x98, 0xCB, 0x99, 0xCB, 0x9A, 0xCB, 0x9B, /* 0xF0-0xF3 */ + 0xCB, 0x9C, 0xCB, 0x9D, 0xCB, 0x9E, 0xCB, 0x9F, /* 0xF4-0xF7 */ + 0xCB, 0xA0, 0xCC, 0x40, 0xCC, 0x41, 0xD4, 0xE5, /* 0xF8-0xFB */ + 0xCC, 0x42, 0xCC, 0x43, 0xCC, 0x44, 0xDE, 0xBD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0xCC, 0x45, 0xCC, 0x46, 0xCC, 0x47, 0xCC, 0x48, /* 0x00-0x03 */ + 0xCC, 0x49, 0xDE, 0xBF, 0xCC, 0x4A, 0xCC, 0x4B, /* 0x04-0x07 */ + 0xCC, 0x4C, 0xCC, 0x4D, 0xCC, 0x4E, 0xCC, 0x4F, /* 0x08-0x0B */ + 0xCC, 0x50, 0xCC, 0x51, 0xCC, 0x52, 0xCC, 0x53, /* 0x0C-0x0F */ + 0xCC, 0x54, 0xC4, 0xA2, 0xCC, 0x55, 0xCC, 0x56, /* 0x10-0x13 */ + 0xCC, 0x57, 0xCC, 0x58, 0xDE, 0xC1, 0xCC, 0x59, /* 0x14-0x17 */ + 0xCC, 0x5A, 0xCC, 0x5B, 0xCC, 0x5C, 0xCC, 0x5D, /* 0x18-0x1B */ + 0xCC, 0x5E, 0xCC, 0x5F, 0xCC, 0x60, 0xCC, 0x61, /* 0x1C-0x1F */ + 0xCC, 0x62, 0xCC, 0x63, 0xCC, 0x64, 0xCC, 0x65, /* 0x20-0x23 */ + 0xCC, 0x66, 0xCC, 0x67, 0xCC, 0x68, 0xDE, 0xBE, /* 0x24-0x27 */ + 0xCC, 0x69, 0xDE, 0xC0, 0xCC, 0x6A, 0xCC, 0x6B, /* 0x28-0x2B */ + 0xCC, 0x6C, 0xCC, 0x6D, 0xCC, 0x6E, 0xCC, 0x6F, /* 0x2C-0x2F */ + 0xCC, 0x70, 0xCC, 0x71, 0xCC, 0x72, 0xCC, 0x73, /* 0x30-0x33 */ + 0xCC, 0x74, 0xCC, 0x75, 0xCC, 0x76, 0xCC, 0x77, /* 0x34-0x37 */ + 0xD5, 0xBA, 0xCC, 0x78, 0xCC, 0x79, 0xCC, 0x7A, /* 0x38-0x3B */ + 0xDE, 0xC2, 0xCC, 0x7B, 0xCC, 0x7C, 0xCC, 0x7D, /* 0x3C-0x3F */ + 0xCC, 0x7E, 0xCC, 0x80, 0xCC, 0x81, 0xCC, 0x82, /* 0x40-0x43 */ + 0xCC, 0x83, 0xCC, 0x84, 0xCC, 0x85, 0xCC, 0x86, /* 0x44-0x47 */ + 0xCC, 0x87, 0xCC, 0x88, 0xCC, 0x89, 0xCC, 0x8A, /* 0x48-0x4B */ + 0xCC, 0x8B, 0xF2, 0xAE, 0xBB, 0xA2, 0xC2, 0xB2, /* 0x4C-0x4F */ + 0xC5, 0xB0, 0xC2, 0xC7, 0xCC, 0x8C, 0xCC, 0x8D, /* 0x50-0x53 */ + 0xF2, 0xAF, 0xCC, 0x8E, 0xCC, 0x8F, 0xCC, 0x90, /* 0x54-0x57 */ + 0xCC, 0x91, 0xCC, 0x92, 0xD0, 0xE9, 0xCC, 0x93, /* 0x58-0x5B */ + 0xCC, 0x94, 0xCC, 0x95, 0xD3, 0xDD, 0xCC, 0x96, /* 0x5C-0x5F */ + 0xCC, 0x97, 0xCC, 0x98, 0xEB, 0xBD, 0xCC, 0x99, /* 0x60-0x63 */ + 0xCC, 0x9A, 0xCC, 0x9B, 0xCC, 0x9C, 0xCC, 0x9D, /* 0x64-0x67 */ + 0xCC, 0x9E, 0xCC, 0x9F, 0xCC, 0xA0, 0xB3, 0xE6, /* 0x68-0x6B */ + 0xF2, 0xB0, 0xCD, 0x40, 0xF2, 0xB1, 0xCD, 0x41, /* 0x6C-0x6F */ + 0xCD, 0x42, 0xCA, 0xAD, 0xCD, 0x43, 0xCD, 0x44, /* 0x70-0x73 */ + 0xCD, 0x45, 0xCD, 0x46, 0xCD, 0x47, 0xCD, 0x48, /* 0x74-0x77 */ + 0xCD, 0x49, 0xBA, 0xE7, 0xF2, 0xB3, 0xF2, 0xB5, /* 0x78-0x7B */ + 0xF2, 0xB4, 0xCB, 0xE4, 0xCF, 0xBA, 0xF2, 0xB2, /* 0x7C-0x7F */ + + 0xCA, 0xB4, 0xD2, 0xCF, 0xC2, 0xEC, 0xCD, 0x4A, /* 0x80-0x83 */ + 0xCD, 0x4B, 0xCD, 0x4C, 0xCD, 0x4D, 0xCD, 0x4E, /* 0x84-0x87 */ + 0xCD, 0x4F, 0xCD, 0x50, 0xCE, 0xC3, 0xF2, 0xB8, /* 0x88-0x8B */ + 0xB0, 0xF6, 0xF2, 0xB7, 0xCD, 0x51, 0xCD, 0x52, /* 0x8C-0x8F */ + 0xCD, 0x53, 0xCD, 0x54, 0xCD, 0x55, 0xF2, 0xBE, /* 0x90-0x93 */ + 0xCD, 0x56, 0xB2, 0xCF, 0xCD, 0x57, 0xCD, 0x58, /* 0x94-0x97 */ + 0xCD, 0x59, 0xCD, 0x5A, 0xCD, 0x5B, 0xCD, 0x5C, /* 0x98-0x9B */ + 0xD1, 0xC1, 0xF2, 0xBA, 0xCD, 0x5D, 0xCD, 0x5E, /* 0x9C-0x9F */ + 0xCD, 0x5F, 0xCD, 0x60, 0xCD, 0x61, 0xF2, 0xBC, /* 0xA0-0xA3 */ + 0xD4, 0xE9, 0xCD, 0x62, 0xCD, 0x63, 0xF2, 0xBB, /* 0xA4-0xA7 */ + 0xF2, 0xB6, 0xF2, 0xBF, 0xF2, 0xBD, 0xCD, 0x64, /* 0xA8-0xAB */ + 0xF2, 0xB9, 0xCD, 0x65, 0xCD, 0x66, 0xF2, 0xC7, /* 0xAC-0xAF */ + 0xF2, 0xC4, 0xF2, 0xC6, 0xCD, 0x67, 0xCD, 0x68, /* 0xB0-0xB3 */ + 0xF2, 0xCA, 0xF2, 0xC2, 0xF2, 0xC0, 0xCD, 0x69, /* 0xB4-0xB7 */ + 0xCD, 0x6A, 0xCD, 0x6B, 0xF2, 0xC5, 0xCD, 0x6C, /* 0xB8-0xBB */ + 0xCD, 0x6D, 0xCD, 0x6E, 0xCD, 0x6F, 0xCD, 0x70, /* 0xBC-0xBF */ + 0xD6, 0xFB, 0xCD, 0x71, 0xCD, 0x72, 0xCD, 0x73, /* 0xC0-0xC3 */ + 0xF2, 0xC1, 0xCD, 0x74, 0xC7, 0xF9, 0xC9, 0xDF, /* 0xC4-0xC7 */ + 0xCD, 0x75, 0xF2, 0xC8, 0xB9, 0xC6, 0xB5, 0xB0, /* 0xC8-0xCB */ + 0xCD, 0x76, 0xCD, 0x77, 0xF2, 0xC3, 0xF2, 0xC9, /* 0xCC-0xCF */ + 0xF2, 0xD0, 0xF2, 0xD6, 0xCD, 0x78, 0xCD, 0x79, /* 0xD0-0xD3 */ + 0xBB, 0xD7, 0xCD, 0x7A, 0xCD, 0x7B, 0xCD, 0x7C, /* 0xD4-0xD7 */ + 0xF2, 0xD5, 0xCD, 0xDC, 0xCD, 0x7D, 0xD6, 0xEB, /* 0xD8-0xDB */ + 0xCD, 0x7E, 0xCD, 0x80, 0xF2, 0xD2, 0xF2, 0xD4, /* 0xDC-0xDF */ + 0xCD, 0x81, 0xCD, 0x82, 0xCD, 0x83, 0xCD, 0x84, /* 0xE0-0xE3 */ + 0xB8, 0xF2, 0xCD, 0x85, 0xCD, 0x86, 0xCD, 0x87, /* 0xE4-0xE7 */ + 0xCD, 0x88, 0xF2, 0xCB, 0xCD, 0x89, 0xCD, 0x8A, /* 0xE8-0xEB */ + 0xCD, 0x8B, 0xF2, 0xCE, 0xC2, 0xF9, 0xCD, 0x8C, /* 0xEC-0xEF */ + 0xD5, 0xDD, 0xF2, 0xCC, 0xF2, 0xCD, 0xF2, 0xCF, /* 0xF0-0xF3 */ + 0xF2, 0xD3, 0xCD, 0x8D, 0xCD, 0x8E, 0xCD, 0x8F, /* 0xF4-0xF7 */ + 0xF2, 0xD9, 0xD3, 0xBC, 0xCD, 0x90, 0xCD, 0x91, /* 0xF8-0xFB */ + 0xCD, 0x92, 0xCD, 0x93, 0xB6, 0xEA, 0xCD, 0x94, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xCA, 0xF1, 0xCD, 0x95, 0xB7, 0xE4, 0xF2, 0xD7, /* 0x00-0x03 */ + 0xCD, 0x96, 0xCD, 0x97, 0xCD, 0x98, 0xF2, 0xD8, /* 0x04-0x07 */ + 0xF2, 0xDA, 0xF2, 0xDD, 0xF2, 0xDB, 0xCD, 0x99, /* 0x08-0x0B */ + 0xCD, 0x9A, 0xF2, 0xDC, 0xCD, 0x9B, 0xCD, 0x9C, /* 0x0C-0x0F */ + 0xCD, 0x9D, 0xCD, 0x9E, 0xD1, 0xD1, 0xF2, 0xD1, /* 0x10-0x13 */ + 0xCD, 0x9F, 0xCD, 0xC9, 0xCD, 0xA0, 0xCE, 0xCF, /* 0x14-0x17 */ + 0xD6, 0xA9, 0xCE, 0x40, 0xF2, 0xE3, 0xCE, 0x41, /* 0x18-0x1B */ + 0xC3, 0xDB, 0xCE, 0x42, 0xF2, 0xE0, 0xCE, 0x43, /* 0x1C-0x1F */ + 0xCE, 0x44, 0xC0, 0xAF, 0xF2, 0xEC, 0xF2, 0xDE, /* 0x20-0x23 */ + 0xCE, 0x45, 0xF2, 0xE1, 0xCE, 0x46, 0xCE, 0x47, /* 0x24-0x27 */ + 0xCE, 0x48, 0xF2, 0xE8, 0xCE, 0x49, 0xCE, 0x4A, /* 0x28-0x2B */ + 0xCE, 0x4B, 0xCE, 0x4C, 0xF2, 0xE2, 0xCE, 0x4D, /* 0x2C-0x2F */ + 0xCE, 0x4E, 0xF2, 0xE7, 0xCE, 0x4F, 0xCE, 0x50, /* 0x30-0x33 */ + 0xF2, 0xE6, 0xCE, 0x51, 0xCE, 0x52, 0xF2, 0xE9, /* 0x34-0x37 */ + 0xCE, 0x53, 0xCE, 0x54, 0xCE, 0x55, 0xF2, 0xDF, /* 0x38-0x3B */ + 0xCE, 0x56, 0xCE, 0x57, 0xF2, 0xE4, 0xF2, 0xEA, /* 0x3C-0x3F */ + 0xCE, 0x58, 0xCE, 0x59, 0xCE, 0x5A, 0xCE, 0x5B, /* 0x40-0x43 */ + 0xCE, 0x5C, 0xCE, 0x5D, 0xCE, 0x5E, 0xD3, 0xAC, /* 0x44-0x47 */ + 0xF2, 0xE5, 0xB2, 0xF5, 0xCE, 0x5F, 0xCE, 0x60, /* 0x48-0x4B */ + 0xF2, 0xF2, 0xCE, 0x61, 0xD0, 0xAB, 0xCE, 0x62, /* 0x4C-0x4F */ + 0xCE, 0x63, 0xCE, 0x64, 0xCE, 0x65, 0xF2, 0xF5, /* 0x50-0x53 */ + 0xCE, 0x66, 0xCE, 0x67, 0xCE, 0x68, 0xBB, 0xC8, /* 0x54-0x57 */ + 0xCE, 0x69, 0xF2, 0xF9, 0xCE, 0x6A, 0xCE, 0x6B, /* 0x58-0x5B */ + 0xCE, 0x6C, 0xCE, 0x6D, 0xCE, 0x6E, 0xCE, 0x6F, /* 0x5C-0x5F */ + 0xF2, 0xF0, 0xCE, 0x70, 0xCE, 0x71, 0xF2, 0xF6, /* 0x60-0x63 */ + 0xF2, 0xF8, 0xF2, 0xFA, 0xCE, 0x72, 0xCE, 0x73, /* 0x64-0x67 */ + 0xCE, 0x74, 0xCE, 0x75, 0xCE, 0x76, 0xCE, 0x77, /* 0x68-0x6B */ + 0xCE, 0x78, 0xCE, 0x79, 0xF2, 0xF3, 0xCE, 0x7A, /* 0x6C-0x6F */ + 0xF2, 0xF1, 0xCE, 0x7B, 0xCE, 0x7C, 0xCE, 0x7D, /* 0x70-0x73 */ + 0xBA, 0xFB, 0xCE, 0x7E, 0xB5, 0xFB, 0xCE, 0x80, /* 0x74-0x77 */ + 0xCE, 0x81, 0xCE, 0x82, 0xCE, 0x83, 0xF2, 0xEF, /* 0x78-0x7B */ + 0xF2, 0xF7, 0xF2, 0xED, 0xF2, 0xEE, 0xCE, 0x84, /* 0x7C-0x7F */ + + 0xCE, 0x85, 0xCE, 0x86, 0xF2, 0xEB, 0xF3, 0xA6, /* 0x80-0x83 */ + 0xCE, 0x87, 0xF3, 0xA3, 0xCE, 0x88, 0xCE, 0x89, /* 0x84-0x87 */ + 0xF3, 0xA2, 0xCE, 0x8A, 0xCE, 0x8B, 0xF2, 0xF4, /* 0x88-0x8B */ + 0xCE, 0x8C, 0xC8, 0xDA, 0xCE, 0x8D, 0xCE, 0x8E, /* 0x8C-0x8F */ + 0xCE, 0x8F, 0xCE, 0x90, 0xCE, 0x91, 0xF2, 0xFB, /* 0x90-0x93 */ + 0xCE, 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xF3, 0xA5, /* 0x94-0x97 */ + 0xCE, 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, 0x98, /* 0x98-0x9B */ + 0xCE, 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xC3, 0xF8, /* 0x9C-0x9F */ + 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, /* 0xA0-0xA3 */ + 0xCE, 0xA0, 0xCF, 0x40, 0xCF, 0x41, 0xCF, 0x42, /* 0xA4-0xA7 */ + 0xF2, 0xFD, 0xCF, 0x43, 0xCF, 0x44, 0xF3, 0xA7, /* 0xA8-0xAB */ + 0xF3, 0xA9, 0xF3, 0xA4, 0xCF, 0x45, 0xF2, 0xFC, /* 0xAC-0xAF */ + 0xCF, 0x46, 0xCF, 0x47, 0xCF, 0x48, 0xF3, 0xAB, /* 0xB0-0xB3 */ + 0xCF, 0x49, 0xF3, 0xAA, 0xCF, 0x4A, 0xCF, 0x4B, /* 0xB4-0xB7 */ + 0xCF, 0x4C, 0xCF, 0x4D, 0xC2, 0xDD, 0xCF, 0x4E, /* 0xB8-0xBB */ + 0xCF, 0x4F, 0xF3, 0xAE, 0xCF, 0x50, 0xCF, 0x51, /* 0xBC-0xBF */ + 0xF3, 0xB0, 0xCF, 0x52, 0xCF, 0x53, 0xCF, 0x54, /* 0xC0-0xC3 */ + 0xCF, 0x55, 0xCF, 0x56, 0xF3, 0xA1, 0xCF, 0x57, /* 0xC4-0xC7 */ + 0xCF, 0x58, 0xCF, 0x59, 0xF3, 0xB1, 0xF3, 0xAC, /* 0xC8-0xCB */ + 0xCF, 0x5A, 0xCF, 0x5B, 0xCF, 0x5C, 0xCF, 0x5D, /* 0xCC-0xCF */ + 0xCF, 0x5E, 0xF3, 0xAF, 0xF2, 0xFE, 0xF3, 0xAD, /* 0xD0-0xD3 */ + 0xCF, 0x5F, 0xCF, 0x60, 0xCF, 0x61, 0xCF, 0x62, /* 0xD4-0xD7 */ + 0xCF, 0x63, 0xCF, 0x64, 0xCF, 0x65, 0xF3, 0xB2, /* 0xD8-0xDB */ + 0xCF, 0x66, 0xCF, 0x67, 0xCF, 0x68, 0xCF, 0x69, /* 0xDC-0xDF */ + 0xF3, 0xB4, 0xCF, 0x6A, 0xCF, 0x6B, 0xCF, 0x6C, /* 0xE0-0xE3 */ + 0xCF, 0x6D, 0xF3, 0xA8, 0xCF, 0x6E, 0xCF, 0x6F, /* 0xE4-0xE7 */ + 0xCF, 0x70, 0xCF, 0x71, 0xF3, 0xB3, 0xCF, 0x72, /* 0xE8-0xEB */ + 0xCF, 0x73, 0xCF, 0x74, 0xF3, 0xB5, 0xCF, 0x75, /* 0xEC-0xEF */ + 0xCF, 0x76, 0xCF, 0x77, 0xCF, 0x78, 0xCF, 0x79, /* 0xF0-0xF3 */ + 0xCF, 0x7A, 0xCF, 0x7B, 0xCF, 0x7C, 0xCF, 0x7D, /* 0xF4-0xF7 */ + 0xCF, 0x7E, 0xD0, 0xB7, 0xCF, 0x80, 0xCF, 0x81, /* 0xF8-0xFB */ + 0xCF, 0x82, 0xCF, 0x83, 0xF3, 0xB8, 0xCF, 0x84, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, 0xD9, 0xF9, /* 0x00-0x03 */ + 0xCF, 0x88, 0xCF, 0x89, 0xCF, 0x8A, 0xCF, 0x8B, /* 0x04-0x07 */ + 0xCF, 0x8C, 0xCF, 0x8D, 0xF3, 0xB9, 0xCF, 0x8E, /* 0x08-0x0B */ + 0xCF, 0x8F, 0xCF, 0x90, 0xCF, 0x91, 0xCF, 0x92, /* 0x0C-0x0F */ + 0xCF, 0x93, 0xCF, 0x94, 0xCF, 0x95, 0xF3, 0xB7, /* 0x10-0x13 */ + 0xCF, 0x96, 0xC8, 0xE4, 0xF3, 0xB6, 0xCF, 0x97, /* 0x14-0x17 */ + 0xCF, 0x98, 0xCF, 0x99, 0xCF, 0x9A, 0xF3, 0xBA, /* 0x18-0x1B */ + 0xCF, 0x9B, 0xCF, 0x9C, 0xCF, 0x9D, 0xCF, 0x9E, /* 0x1C-0x1F */ + 0xCF, 0x9F, 0xF3, 0xBB, 0xB4, 0xC0, 0xCF, 0xA0, /* 0x20-0x23 */ + 0xD0, 0x40, 0xD0, 0x41, 0xD0, 0x42, 0xD0, 0x43, /* 0x24-0x27 */ + 0xD0, 0x44, 0xD0, 0x45, 0xD0, 0x46, 0xD0, 0x47, /* 0x28-0x2B */ + 0xD0, 0x48, 0xD0, 0x49, 0xD0, 0x4A, 0xD0, 0x4B, /* 0x2C-0x2F */ + 0xD0, 0x4C, 0xD0, 0x4D, 0xEE, 0xC3, 0xD0, 0x4E, /* 0x30-0x33 */ + 0xD0, 0x4F, 0xD0, 0x50, 0xD0, 0x51, 0xD0, 0x52, /* 0x34-0x37 */ + 0xD0, 0x53, 0xF3, 0xBC, 0xD0, 0x54, 0xD0, 0x55, /* 0x38-0x3B */ + 0xF3, 0xBD, 0xD0, 0x56, 0xD0, 0x57, 0xD0, 0x58, /* 0x3C-0x3F */ + 0xD1, 0xAA, 0xD0, 0x59, 0xD0, 0x5A, 0xD0, 0x5B, /* 0x40-0x43 */ + 0xF4, 0xAC, 0xD0, 0xC6, 0xD0, 0x5C, 0xD0, 0x5D, /* 0x44-0x47 */ + 0xD0, 0x5E, 0xD0, 0x5F, 0xD0, 0x60, 0xD0, 0x61, /* 0x48-0x4B */ + 0xD0, 0xD0, 0xD1, 0xDC, 0xD0, 0x62, 0xD0, 0x63, /* 0x4C-0x4F */ + 0xD0, 0x64, 0xD0, 0x65, 0xD0, 0x66, 0xD0, 0x67, /* 0x50-0x53 */ + 0xCF, 0xCE, 0xD0, 0x68, 0xD0, 0x69, 0xBD, 0xD6, /* 0x54-0x57 */ + 0xD0, 0x6A, 0xD1, 0xC3, 0xD0, 0x6B, 0xD0, 0x6C, /* 0x58-0x5B */ + 0xD0, 0x6D, 0xD0, 0x6E, 0xD0, 0x6F, 0xD0, 0x70, /* 0x5C-0x5F */ + 0xD0, 0x71, 0xBA, 0xE2, 0xE1, 0xE9, 0xD2, 0xC2, /* 0x60-0x63 */ + 0xF1, 0xC2, 0xB2, 0xB9, 0xD0, 0x72, 0xD0, 0x73, /* 0x64-0x67 */ + 0xB1, 0xED, 0xF1, 0xC3, 0xD0, 0x74, 0xC9, 0xC0, /* 0x68-0x6B */ + 0xB3, 0xC4, 0xD0, 0x75, 0xD9, 0xF2, 0xD0, 0x76, /* 0x6C-0x6F */ + 0xCB, 0xA5, 0xD0, 0x77, 0xF1, 0xC4, 0xD0, 0x78, /* 0x70-0x73 */ + 0xD0, 0x79, 0xD0, 0x7A, 0xD0, 0x7B, 0xD6, 0xD4, /* 0x74-0x77 */ + 0xD0, 0x7C, 0xD0, 0x7D, 0xD0, 0x7E, 0xD0, 0x80, /* 0x78-0x7B */ + 0xD0, 0x81, 0xF1, 0xC5, 0xF4, 0xC0, 0xF1, 0xC6, /* 0x7C-0x7F */ + + 0xD0, 0x82, 0xD4, 0xAC, 0xF1, 0xC7, 0xD0, 0x83, /* 0x80-0x83 */ + 0xB0, 0xC0, 0xF4, 0xC1, 0xD0, 0x84, 0xD0, 0x85, /* 0x84-0x87 */ + 0xF4, 0xC2, 0xD0, 0x86, 0xD0, 0x87, 0xB4, 0xFC, /* 0x88-0x8B */ + 0xD0, 0x88, 0xC5, 0xDB, 0xD0, 0x89, 0xD0, 0x8A, /* 0x8C-0x8F */ + 0xD0, 0x8B, 0xD0, 0x8C, 0xCC, 0xBB, 0xD0, 0x8D, /* 0x90-0x93 */ + 0xD0, 0x8E, 0xD0, 0x8F, 0xD0, 0xE4, 0xD0, 0x90, /* 0x94-0x97 */ + 0xD0, 0x91, 0xD0, 0x92, 0xD0, 0x93, 0xD0, 0x94, /* 0x98-0x9B */ + 0xCD, 0xE0, 0xD0, 0x95, 0xD0, 0x96, 0xD0, 0x97, /* 0x9C-0x9F */ + 0xD0, 0x98, 0xD0, 0x99, 0xF1, 0xC8, 0xD0, 0x9A, /* 0xA0-0xA3 */ + 0xD9, 0xF3, 0xD0, 0x9B, 0xD0, 0x9C, 0xD0, 0x9D, /* 0xA4-0xA7 */ + 0xD0, 0x9E, 0xD0, 0x9F, 0xD0, 0xA0, 0xB1, 0xBB, /* 0xA8-0xAB */ + 0xD1, 0x40, 0xCF, 0xAE, 0xD1, 0x41, 0xD1, 0x42, /* 0xAC-0xAF */ + 0xD1, 0x43, 0xB8, 0xA4, 0xD1, 0x44, 0xD1, 0x45, /* 0xB0-0xB3 */ + 0xD1, 0x46, 0xD1, 0x47, 0xD1, 0x48, 0xF1, 0xCA, /* 0xB4-0xB7 */ + 0xD1, 0x49, 0xD1, 0x4A, 0xD1, 0x4B, 0xD1, 0x4C, /* 0xB8-0xBB */ + 0xF1, 0xCB, 0xD1, 0x4D, 0xD1, 0x4E, 0xD1, 0x4F, /* 0xBC-0xBF */ + 0xD1, 0x50, 0xB2, 0xC3, 0xC1, 0xD1, 0xD1, 0x51, /* 0xC0-0xC3 */ + 0xD1, 0x52, 0xD7, 0xB0, 0xF1, 0xC9, 0xD1, 0x53, /* 0xC4-0xC7 */ + 0xD1, 0x54, 0xF1, 0xCC, 0xD1, 0x55, 0xD1, 0x56, /* 0xC8-0xCB */ + 0xD1, 0x57, 0xD1, 0x58, 0xF1, 0xCE, 0xD1, 0x59, /* 0xCC-0xCF */ + 0xD1, 0x5A, 0xD1, 0x5B, 0xD9, 0xF6, 0xD1, 0x5C, /* 0xD0-0xD3 */ + 0xD2, 0xE1, 0xD4, 0xA3, 0xD1, 0x5D, 0xD1, 0x5E, /* 0xD4-0xD7 */ + 0xF4, 0xC3, 0xC8, 0xB9, 0xD1, 0x5F, 0xD1, 0x60, /* 0xD8-0xDB */ + 0xD1, 0x61, 0xD1, 0x62, 0xD1, 0x63, 0xF4, 0xC4, /* 0xDC-0xDF */ + 0xD1, 0x64, 0xD1, 0x65, 0xF1, 0xCD, 0xF1, 0xCF, /* 0xE0-0xE3 */ + 0xBF, 0xE3, 0xF1, 0xD0, 0xD1, 0x66, 0xD1, 0x67, /* 0xE4-0xE7 */ + 0xF1, 0xD4, 0xD1, 0x68, 0xD1, 0x69, 0xD1, 0x6A, /* 0xE8-0xEB */ + 0xD1, 0x6B, 0xD1, 0x6C, 0xD1, 0x6D, 0xD1, 0x6E, /* 0xEC-0xEF */ + 0xF1, 0xD6, 0xF1, 0xD1, 0xD1, 0x6F, 0xC9, 0xD1, /* 0xF0-0xF3 */ + 0xC5, 0xE1, 0xD1, 0x70, 0xD1, 0x71, 0xD1, 0x72, /* 0xF4-0xF7 */ + 0xC2, 0xE3, 0xB9, 0xFC, 0xD1, 0x73, 0xD1, 0x74, /* 0xF8-0xFB */ + 0xF1, 0xD3, 0xD1, 0x75, 0xF1, 0xD5, 0xD1, 0x76, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0xD1, 0x77, 0xD1, 0x78, 0xB9, 0xD3, 0xD1, 0x79, /* 0x00-0x03 */ + 0xD1, 0x7A, 0xD1, 0x7B, 0xD1, 0x7C, 0xD1, 0x7D, /* 0x04-0x07 */ + 0xD1, 0x7E, 0xD1, 0x80, 0xF1, 0xDB, 0xD1, 0x81, /* 0x08-0x0B */ + 0xD1, 0x82, 0xD1, 0x83, 0xD1, 0x84, 0xD1, 0x85, /* 0x0C-0x0F */ + 0xBA, 0xD6, 0xD1, 0x86, 0xB0, 0xFD, 0xF1, 0xD9, /* 0x10-0x13 */ + 0xD1, 0x87, 0xD1, 0x88, 0xD1, 0x89, 0xD1, 0x8A, /* 0x14-0x17 */ + 0xD1, 0x8B, 0xF1, 0xD8, 0xF1, 0xD2, 0xF1, 0xDA, /* 0x18-0x1B */ + 0xD1, 0x8C, 0xD1, 0x8D, 0xD1, 0x8E, 0xD1, 0x8F, /* 0x1C-0x1F */ + 0xD1, 0x90, 0xF1, 0xD7, 0xD1, 0x91, 0xD1, 0x92, /* 0x20-0x23 */ + 0xD1, 0x93, 0xC8, 0xEC, 0xD1, 0x94, 0xD1, 0x95, /* 0x24-0x27 */ + 0xD1, 0x96, 0xD1, 0x97, 0xCD, 0xCA, 0xF1, 0xDD, /* 0x28-0x2B */ + 0xD1, 0x98, 0xD1, 0x99, 0xD1, 0x9A, 0xD1, 0x9B, /* 0x2C-0x2F */ + 0xE5, 0xBD, 0xD1, 0x9C, 0xD1, 0x9D, 0xD1, 0x9E, /* 0x30-0x33 */ + 0xF1, 0xDC, 0xD1, 0x9F, 0xF1, 0xDE, 0xD1, 0xA0, /* 0x34-0x37 */ + 0xD2, 0x40, 0xD2, 0x41, 0xD2, 0x42, 0xD2, 0x43, /* 0x38-0x3B */ + 0xD2, 0x44, 0xD2, 0x45, 0xD2, 0x46, 0xD2, 0x47, /* 0x3C-0x3F */ + 0xD2, 0x48, 0xF1, 0xDF, 0xD2, 0x49, 0xD2, 0x4A, /* 0x40-0x43 */ + 0xCF, 0xE5, 0xD2, 0x4B, 0xD2, 0x4C, 0xD2, 0x4D, /* 0x44-0x47 */ + 0xD2, 0x4E, 0xD2, 0x4F, 0xD2, 0x50, 0xD2, 0x51, /* 0x48-0x4B */ + 0xD2, 0x52, 0xD2, 0x53, 0xD2, 0x54, 0xD2, 0x55, /* 0x4C-0x4F */ + 0xD2, 0x56, 0xD2, 0x57, 0xD2, 0x58, 0xD2, 0x59, /* 0x50-0x53 */ + 0xD2, 0x5A, 0xD2, 0x5B, 0xD2, 0x5C, 0xD2, 0x5D, /* 0x54-0x57 */ + 0xD2, 0x5E, 0xD2, 0x5F, 0xD2, 0x60, 0xD2, 0x61, /* 0x58-0x5B */ + 0xD2, 0x62, 0xD2, 0x63, 0xF4, 0xC5, 0xBD, 0xF3, /* 0x5C-0x5F */ + 0xD2, 0x64, 0xD2, 0x65, 0xD2, 0x66, 0xD2, 0x67, /* 0x60-0x63 */ + 0xD2, 0x68, 0xD2, 0x69, 0xF1, 0xE0, 0xD2, 0x6A, /* 0x64-0x67 */ + 0xD2, 0x6B, 0xD2, 0x6C, 0xD2, 0x6D, 0xD2, 0x6E, /* 0x68-0x6B */ + 0xD2, 0x6F, 0xD2, 0x70, 0xD2, 0x71, 0xD2, 0x72, /* 0x6C-0x6F */ + 0xD2, 0x73, 0xD2, 0x74, 0xD2, 0x75, 0xD2, 0x76, /* 0x70-0x73 */ + 0xD2, 0x77, 0xD2, 0x78, 0xD2, 0x79, 0xD2, 0x7A, /* 0x74-0x77 */ + 0xD2, 0x7B, 0xD2, 0x7C, 0xD2, 0x7D, 0xF1, 0xE1, /* 0x78-0x7B */ + 0xD2, 0x7E, 0xD2, 0x80, 0xD2, 0x81, 0xCE, 0xF7, /* 0x7C-0x7F */ + + 0xD2, 0x82, 0xD2, 0xAA, 0xD2, 0x83, 0xF1, 0xFB, /* 0x80-0x83 */ + 0xD2, 0x84, 0xD2, 0x85, 0xB8, 0xB2, 0xD2, 0x86, /* 0x84-0x87 */ + 0xD2, 0x87, 0xD2, 0x88, 0xD2, 0x89, 0xD2, 0x8A, /* 0x88-0x8B */ + 0xD2, 0x8B, 0xD2, 0x8C, 0xD2, 0x8D, 0xD2, 0x8E, /* 0x8C-0x8F */ + 0xD2, 0x8F, 0xD2, 0x90, 0xD2, 0x91, 0xD2, 0x92, /* 0x90-0x93 */ + 0xD2, 0x93, 0xD2, 0x94, 0xD2, 0x95, 0xD2, 0x96, /* 0x94-0x97 */ + 0xD2, 0x97, 0xD2, 0x98, 0xD2, 0x99, 0xD2, 0x9A, /* 0x98-0x9B */ + 0xD2, 0x9B, 0xD2, 0x9C, 0xD2, 0x9D, 0xD2, 0x9E, /* 0x9C-0x9F */ + 0xD2, 0x9F, 0xD2, 0xA0, 0xD3, 0x40, 0xD3, 0x41, /* 0xA0-0xA3 */ + 0xD3, 0x42, 0xD3, 0x43, 0xD3, 0x44, 0xD3, 0x45, /* 0xA4-0xA7 */ + 0xD3, 0x46, 0xD3, 0x47, 0xD3, 0x48, 0xD3, 0x49, /* 0xA8-0xAB */ + 0xD3, 0x4A, 0xD3, 0x4B, 0xD3, 0x4C, 0xD3, 0x4D, /* 0xAC-0xAF */ + 0xD3, 0x4E, 0xD3, 0x4F, 0xD3, 0x50, 0xD3, 0x51, /* 0xB0-0xB3 */ + 0xD3, 0x52, 0xD3, 0x53, 0xD3, 0x54, 0xD3, 0x55, /* 0xB4-0xB7 */ + 0xD3, 0x56, 0xD3, 0x57, 0xD3, 0x58, 0xD3, 0x59, /* 0xB8-0xBB */ + 0xD3, 0x5A, 0xD3, 0x5B, 0xD3, 0x5C, 0xD3, 0x5D, /* 0xBC-0xBF */ + 0xD3, 0x5E, 0xBC, 0xFB, 0xB9, 0xDB, 0xD3, 0x5F, /* 0xC0-0xC3 */ + 0xB9, 0xE6, 0xC3, 0xD9, 0xCA, 0xD3, 0xEA, 0xE8, /* 0xC4-0xC7 */ + 0xC0, 0xC0, 0xBE, 0xF5, 0xEA, 0xE9, 0xEA, 0xEA, /* 0xC8-0xCB */ + 0xEA, 0xEB, 0xD3, 0x60, 0xEA, 0xEC, 0xEA, 0xED, /* 0xCC-0xCF */ + 0xEA, 0xEE, 0xEA, 0xEF, 0xBD, 0xC7, 0xD3, 0x61, /* 0xD0-0xD3 */ + 0xD3, 0x62, 0xD3, 0x63, 0xF5, 0xFB, 0xD3, 0x64, /* 0xD4-0xD7 */ + 0xD3, 0x65, 0xD3, 0x66, 0xF5, 0xFD, 0xD3, 0x67, /* 0xD8-0xDB */ + 0xF5, 0xFE, 0xD3, 0x68, 0xF5, 0xFC, 0xD3, 0x69, /* 0xDC-0xDF */ + 0xD3, 0x6A, 0xD3, 0x6B, 0xD3, 0x6C, 0xBD, 0xE2, /* 0xE0-0xE3 */ + 0xD3, 0x6D, 0xF6, 0xA1, 0xB4, 0xA5, 0xD3, 0x6E, /* 0xE4-0xE7 */ + 0xD3, 0x6F, 0xD3, 0x70, 0xD3, 0x71, 0xF6, 0xA2, /* 0xE8-0xEB */ + 0xD3, 0x72, 0xD3, 0x73, 0xD3, 0x74, 0xF6, 0xA3, /* 0xEC-0xEF */ + 0xD3, 0x75, 0xD3, 0x76, 0xD3, 0x77, 0xEC, 0xB2, /* 0xF0-0xF3 */ + 0xD3, 0x78, 0xD3, 0x79, 0xD3, 0x7A, 0xD3, 0x7B, /* 0xF4-0xF7 */ + 0xD3, 0x7C, 0xD3, 0x7D, 0xD3, 0x7E, 0xD3, 0x80, /* 0xF8-0xFB */ + 0xD3, 0x81, 0xD3, 0x82, 0xD3, 0x83, 0xD3, 0x84, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8A[512] = { + 0xD1, 0xD4, 0xD3, 0x85, 0xD3, 0x86, 0xD3, 0x87, /* 0x00-0x03 */ + 0xD3, 0x88, 0xD3, 0x89, 0xD3, 0x8A, 0xD9, 0xEA, /* 0x04-0x07 */ + 0xD3, 0x8B, 0xD3, 0x8C, 0xD3, 0x8D, 0xD3, 0x8E, /* 0x08-0x0B */ + 0xD3, 0x8F, 0xD3, 0x90, 0xD3, 0x91, 0xD3, 0x92, /* 0x0C-0x0F */ + 0xD3, 0x93, 0xD3, 0x94, 0xD3, 0x95, 0xD3, 0x96, /* 0x10-0x13 */ + 0xD3, 0x97, 0xD3, 0x98, 0xD3, 0x99, 0xD3, 0x9A, /* 0x14-0x17 */ + 0xD3, 0x9B, 0xD3, 0x9C, 0xD3, 0x9D, 0xD3, 0x9E, /* 0x18-0x1B */ + 0xD3, 0x9F, 0xD3, 0xA0, 0xD4, 0x40, 0xD4, 0x41, /* 0x1C-0x1F */ + 0xD4, 0x42, 0xD4, 0x43, 0xD4, 0x44, 0xD4, 0x45, /* 0x20-0x23 */ + 0xD4, 0x46, 0xD4, 0x47, 0xD4, 0x48, 0xD4, 0x49, /* 0x24-0x27 */ + 0xD4, 0x4A, 0xD4, 0x4B, 0xD4, 0x4C, 0xD4, 0x4D, /* 0x28-0x2B */ + 0xD4, 0x4E, 0xD4, 0x4F, 0xD4, 0x50, 0xD4, 0x51, /* 0x2C-0x2F */ + 0xD4, 0x52, 0xD4, 0x53, 0xD4, 0x54, 0xD4, 0x55, /* 0x30-0x33 */ + 0xD4, 0x56, 0xD4, 0x57, 0xD4, 0x58, 0xD4, 0x59, /* 0x34-0x37 */ + 0xD4, 0x5A, 0xD4, 0x5B, 0xD4, 0x5C, 0xD4, 0x5D, /* 0x38-0x3B */ + 0xD4, 0x5E, 0xD4, 0x5F, 0xF6, 0xA4, 0xD4, 0x60, /* 0x3C-0x3F */ + 0xD4, 0x61, 0xD4, 0x62, 0xD4, 0x63, 0xD4, 0x64, /* 0x40-0x43 */ + 0xD4, 0x65, 0xD4, 0x66, 0xD4, 0x67, 0xD4, 0x68, /* 0x44-0x47 */ + 0xEE, 0xBA, 0xD4, 0x69, 0xD4, 0x6A, 0xD4, 0x6B, /* 0x48-0x4B */ + 0xD4, 0x6C, 0xD4, 0x6D, 0xD4, 0x6E, 0xD4, 0x6F, /* 0x4C-0x4F */ + 0xD4, 0x70, 0xD4, 0x71, 0xD4, 0x72, 0xD4, 0x73, /* 0x50-0x53 */ + 0xD4, 0x74, 0xD4, 0x75, 0xD4, 0x76, 0xD4, 0x77, /* 0x54-0x57 */ + 0xD4, 0x78, 0xD4, 0x79, 0xD4, 0x7A, 0xD4, 0x7B, /* 0x58-0x5B */ + 0xD4, 0x7C, 0xD4, 0x7D, 0xD4, 0x7E, 0xD4, 0x80, /* 0x5C-0x5F */ + 0xD4, 0x81, 0xD4, 0x82, 0xD4, 0x83, 0xD4, 0x84, /* 0x60-0x63 */ + 0xD4, 0x85, 0xD4, 0x86, 0xD4, 0x87, 0xD4, 0x88, /* 0x64-0x67 */ + 0xD4, 0x89, 0xD4, 0x8A, 0xD4, 0x8B, 0xD4, 0x8C, /* 0x68-0x6B */ + 0xD4, 0x8D, 0xD4, 0x8E, 0xD4, 0x8F, 0xD4, 0x90, /* 0x6C-0x6F */ + 0xD4, 0x91, 0xD4, 0x92, 0xD4, 0x93, 0xD4, 0x94, /* 0x70-0x73 */ + 0xD4, 0x95, 0xD4, 0x96, 0xD4, 0x97, 0xD4, 0x98, /* 0x74-0x77 */ + 0xD4, 0x99, 0xD5, 0xB2, 0xD4, 0x9A, 0xD4, 0x9B, /* 0x78-0x7B */ + 0xD4, 0x9C, 0xD4, 0x9D, 0xD4, 0x9E, 0xD4, 0x9F, /* 0x7C-0x7F */ + + 0xD4, 0xA0, 0xD5, 0x40, 0xD5, 0x41, 0xD5, 0x42, /* 0x80-0x83 */ + 0xD5, 0x43, 0xD5, 0x44, 0xD5, 0x45, 0xD5, 0x46, /* 0x84-0x87 */ + 0xD5, 0x47, 0xD3, 0xFE, 0xCC, 0xDC, 0xD5, 0x48, /* 0x88-0x8B */ + 0xD5, 0x49, 0xD5, 0x4A, 0xD5, 0x4B, 0xD5, 0x4C, /* 0x8C-0x8F */ + 0xD5, 0x4D, 0xD5, 0x4E, 0xD5, 0x4F, 0xCA, 0xC4, /* 0x90-0x93 */ + 0xD5, 0x50, 0xD5, 0x51, 0xD5, 0x52, 0xD5, 0x53, /* 0x94-0x97 */ + 0xD5, 0x54, 0xD5, 0x55, 0xD5, 0x56, 0xD5, 0x57, /* 0x98-0x9B */ + 0xD5, 0x58, 0xD5, 0x59, 0xD5, 0x5A, 0xD5, 0x5B, /* 0x9C-0x9F */ + 0xD5, 0x5C, 0xD5, 0x5D, 0xD5, 0x5E, 0xD5, 0x5F, /* 0xA0-0xA3 */ + 0xD5, 0x60, 0xD5, 0x61, 0xD5, 0x62, 0xD5, 0x63, /* 0xA4-0xA7 */ + 0xD5, 0x64, 0xD5, 0x65, 0xD5, 0x66, 0xD5, 0x67, /* 0xA8-0xAB */ + 0xD5, 0x68, 0xD5, 0x69, 0xD5, 0x6A, 0xD5, 0x6B, /* 0xAC-0xAF */ + 0xD5, 0x6C, 0xD5, 0x6D, 0xD5, 0x6E, 0xD5, 0x6F, /* 0xB0-0xB3 */ + 0xD5, 0x70, 0xD5, 0x71, 0xD5, 0x72, 0xD5, 0x73, /* 0xB4-0xB7 */ + 0xD5, 0x74, 0xD5, 0x75, 0xD5, 0x76, 0xD5, 0x77, /* 0xB8-0xBB */ + 0xD5, 0x78, 0xD5, 0x79, 0xD5, 0x7A, 0xD5, 0x7B, /* 0xBC-0xBF */ + 0xD5, 0x7C, 0xD5, 0x7D, 0xD5, 0x7E, 0xD5, 0x80, /* 0xC0-0xC3 */ + 0xD5, 0x81, 0xD5, 0x82, 0xD5, 0x83, 0xD5, 0x84, /* 0xC4-0xC7 */ + 0xD5, 0x85, 0xD5, 0x86, 0xD5, 0x87, 0xD5, 0x88, /* 0xC8-0xCB */ + 0xD5, 0x89, 0xD5, 0x8A, 0xD5, 0x8B, 0xD5, 0x8C, /* 0xCC-0xCF */ + 0xD5, 0x8D, 0xD5, 0x8E, 0xD5, 0x8F, 0xD5, 0x90, /* 0xD0-0xD3 */ + 0xD5, 0x91, 0xD5, 0x92, 0xD5, 0x93, 0xD5, 0x94, /* 0xD4-0xD7 */ + 0xD5, 0x95, 0xD5, 0x96, 0xD5, 0x97, 0xD5, 0x98, /* 0xD8-0xDB */ + 0xD5, 0x99, 0xD5, 0x9A, 0xD5, 0x9B, 0xD5, 0x9C, /* 0xDC-0xDF */ + 0xD5, 0x9D, 0xD5, 0x9E, 0xD5, 0x9F, 0xD5, 0xA0, /* 0xE0-0xE3 */ + 0xD6, 0x40, 0xD6, 0x41, 0xD6, 0x42, 0xD6, 0x43, /* 0xE4-0xE7 */ + 0xD6, 0x44, 0xD6, 0x45, 0xD6, 0x46, 0xD6, 0x47, /* 0xE8-0xEB */ + 0xD6, 0x48, 0xD6, 0x49, 0xD6, 0x4A, 0xD6, 0x4B, /* 0xEC-0xEF */ + 0xD6, 0x4C, 0xD6, 0x4D, 0xD6, 0x4E, 0xD6, 0x4F, /* 0xF0-0xF3 */ + 0xD6, 0x50, 0xD6, 0x51, 0xD6, 0x52, 0xD6, 0x53, /* 0xF4-0xF7 */ + 0xD6, 0x54, 0xD6, 0x55, 0xD6, 0x56, 0xD6, 0x57, /* 0xF8-0xFB */ + 0xD6, 0x58, 0xD6, 0x59, 0xD6, 0x5A, 0xD6, 0x5B, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0xD6, 0x5C, 0xD6, 0x5D, 0xD6, 0x5E, 0xD6, 0x5F, /* 0x00-0x03 */ + 0xD6, 0x60, 0xD6, 0x61, 0xD6, 0x62, 0xE5, 0xC0, /* 0x04-0x07 */ + 0xD6, 0x63, 0xD6, 0x64, 0xD6, 0x65, 0xD6, 0x66, /* 0x08-0x0B */ + 0xD6, 0x67, 0xD6, 0x68, 0xD6, 0x69, 0xD6, 0x6A, /* 0x0C-0x0F */ + 0xD6, 0x6B, 0xD6, 0x6C, 0xD6, 0x6D, 0xD6, 0x6E, /* 0x10-0x13 */ + 0xD6, 0x6F, 0xD6, 0x70, 0xD6, 0x71, 0xD6, 0x72, /* 0x14-0x17 */ + 0xD6, 0x73, 0xD6, 0x74, 0xD6, 0x75, 0xD6, 0x76, /* 0x18-0x1B */ + 0xD6, 0x77, 0xD6, 0x78, 0xD6, 0x79, 0xD6, 0x7A, /* 0x1C-0x1F */ + 0xD6, 0x7B, 0xD6, 0x7C, 0xD6, 0x7D, 0xD6, 0x7E, /* 0x20-0x23 */ + 0xD6, 0x80, 0xD6, 0x81, 0xF6, 0xA5, 0xD6, 0x82, /* 0x24-0x27 */ + 0xD6, 0x83, 0xD6, 0x84, 0xD6, 0x85, 0xD6, 0x86, /* 0x28-0x2B */ + 0xD6, 0x87, 0xD6, 0x88, 0xD6, 0x89, 0xD6, 0x8A, /* 0x2C-0x2F */ + 0xD6, 0x8B, 0xD6, 0x8C, 0xD6, 0x8D, 0xD6, 0x8E, /* 0x30-0x33 */ + 0xD6, 0x8F, 0xD6, 0x90, 0xD6, 0x91, 0xD6, 0x92, /* 0x34-0x37 */ + 0xD6, 0x93, 0xD6, 0x94, 0xD6, 0x95, 0xD6, 0x96, /* 0x38-0x3B */ + 0xD6, 0x97, 0xD6, 0x98, 0xD6, 0x99, 0xD6, 0x9A, /* 0x3C-0x3F */ + 0xD6, 0x9B, 0xD6, 0x9C, 0xD6, 0x9D, 0xD6, 0x9E, /* 0x40-0x43 */ + 0xD6, 0x9F, 0xD6, 0xA0, 0xD7, 0x40, 0xD7, 0x41, /* 0x44-0x47 */ + 0xD7, 0x42, 0xD7, 0x43, 0xD7, 0x44, 0xD7, 0x45, /* 0x48-0x4B */ + 0xD7, 0x46, 0xD7, 0x47, 0xD7, 0x48, 0xD7, 0x49, /* 0x4C-0x4F */ + 0xD7, 0x4A, 0xD7, 0x4B, 0xD7, 0x4C, 0xD7, 0x4D, /* 0x50-0x53 */ + 0xD7, 0x4E, 0xD7, 0x4F, 0xD7, 0x50, 0xD7, 0x51, /* 0x54-0x57 */ + 0xD7, 0x52, 0xD7, 0x53, 0xD7, 0x54, 0xD7, 0x55, /* 0x58-0x5B */ + 0xD7, 0x56, 0xD7, 0x57, 0xD7, 0x58, 0xD7, 0x59, /* 0x5C-0x5F */ + 0xD7, 0x5A, 0xD7, 0x5B, 0xD7, 0x5C, 0xD7, 0x5D, /* 0x60-0x63 */ + 0xD7, 0x5E, 0xD7, 0x5F, 0xBE, 0xAF, 0xD7, 0x60, /* 0x64-0x67 */ + 0xD7, 0x61, 0xD7, 0x62, 0xD7, 0x63, 0xD7, 0x64, /* 0x68-0x6B */ + 0xC6, 0xA9, 0xD7, 0x65, 0xD7, 0x66, 0xD7, 0x67, /* 0x6C-0x6F */ + 0xD7, 0x68, 0xD7, 0x69, 0xD7, 0x6A, 0xD7, 0x6B, /* 0x70-0x73 */ + 0xD7, 0x6C, 0xD7, 0x6D, 0xD7, 0x6E, 0xD7, 0x6F, /* 0x74-0x77 */ + 0xD7, 0x70, 0xD7, 0x71, 0xD7, 0x72, 0xD7, 0x73, /* 0x78-0x7B */ + 0xD7, 0x74, 0xD7, 0x75, 0xD7, 0x76, 0xD7, 0x77, /* 0x7C-0x7F */ + + 0xD7, 0x78, 0xD7, 0x79, 0xD7, 0x7A, 0xD7, 0x7B, /* 0x80-0x83 */ + 0xD7, 0x7C, 0xD7, 0x7D, 0xD7, 0x7E, 0xD7, 0x80, /* 0x84-0x87 */ + 0xD7, 0x81, 0xD7, 0x82, 0xD7, 0x83, 0xD7, 0x84, /* 0x88-0x8B */ + 0xD7, 0x85, 0xD7, 0x86, 0xD7, 0x87, 0xD7, 0x88, /* 0x8C-0x8F */ + 0xD7, 0x89, 0xD7, 0x8A, 0xD7, 0x8B, 0xD7, 0x8C, /* 0x90-0x93 */ + 0xD7, 0x8D, 0xD7, 0x8E, 0xD7, 0x8F, 0xD7, 0x90, /* 0x94-0x97 */ + 0xD7, 0x91, 0xD7, 0x92, 0xD7, 0x93, 0xD7, 0x94, /* 0x98-0x9B */ + 0xD7, 0x95, 0xD7, 0x96, 0xD7, 0x97, 0xD7, 0x98, /* 0x9C-0x9F */ + 0xDA, 0xA5, 0xBC, 0xC6, 0xB6, 0xA9, 0xB8, 0xBC, /* 0xA0-0xA3 */ + 0xC8, 0xCF, 0xBC, 0xA5, 0xDA, 0xA6, 0xDA, 0xA7, /* 0xA4-0xA7 */ + 0xCC, 0xD6, 0xC8, 0xC3, 0xDA, 0xA8, 0xC6, 0xFD, /* 0xA8-0xAB */ + 0xD7, 0x99, 0xD1, 0xB5, 0xD2, 0xE9, 0xD1, 0xB6, /* 0xAC-0xAF */ + 0xBC, 0xC7, 0xD7, 0x9A, 0xBD, 0xB2, 0xBB, 0xE4, /* 0xB0-0xB3 */ + 0xDA, 0xA9, 0xDA, 0xAA, 0xD1, 0xC8, 0xDA, 0xAB, /* 0xB4-0xB7 */ + 0xD0, 0xED, 0xB6, 0xEF, 0xC2, 0xDB, 0xD7, 0x9B, /* 0xB8-0xBB */ + 0xCB, 0xCF, 0xB7, 0xED, 0xC9, 0xE8, 0xB7, 0xC3, /* 0xBC-0xBF */ + 0xBE, 0xF7, 0xD6, 0xA4, 0xDA, 0xAC, 0xDA, 0xAD, /* 0xC0-0xC3 */ + 0xC6, 0xC0, 0xD7, 0xE7, 0xCA, 0xB6, 0xD7, 0x9C, /* 0xC4-0xC7 */ + 0xD5, 0xA9, 0xCB, 0xDF, 0xD5, 0xEF, 0xDA, 0xAE, /* 0xC8-0xCB */ + 0xD6, 0xDF, 0xB4, 0xCA, 0xDA, 0xB0, 0xDA, 0xAF, /* 0xCC-0xCF */ + 0xD7, 0x9D, 0xD2, 0xEB, 0xDA, 0xB1, 0xDA, 0xB2, /* 0xD0-0xD3 */ + 0xDA, 0xB3, 0xCA, 0xD4, 0xDA, 0xB4, 0xCA, 0xAB, /* 0xD4-0xD7 */ + 0xDA, 0xB5, 0xDA, 0xB6, 0xB3, 0xCF, 0xD6, 0xEF, /* 0xD8-0xDB */ + 0xDA, 0xB7, 0xBB, 0xB0, 0xB5, 0xAE, 0xDA, 0xB8, /* 0xDC-0xDF */ + 0xDA, 0xB9, 0xB9, 0xEE, 0xD1, 0xAF, 0xD2, 0xE8, /* 0xE0-0xE3 */ + 0xDA, 0xBA, 0xB8, 0xC3, 0xCF, 0xEA, 0xB2, 0xEF, /* 0xE4-0xE7 */ + 0xDA, 0xBB, 0xDA, 0xBC, 0xD7, 0x9E, 0xBD, 0xEB, /* 0xE8-0xEB */ + 0xCE, 0xDC, 0xD3, 0xEF, 0xDA, 0xBD, 0xCE, 0xF3, /* 0xEC-0xEF */ + 0xDA, 0xBE, 0xD3, 0xD5, 0xBB, 0xE5, 0xDA, 0xBF, /* 0xF0-0xF3 */ + 0xCB, 0xB5, 0xCB, 0xD0, 0xDA, 0xC0, 0xC7, 0xEB, /* 0xF4-0xF7 */ + 0xD6, 0xEE, 0xDA, 0xC1, 0xC5, 0xB5, 0xB6, 0xC1, /* 0xF8-0xFB */ + 0xDA, 0xC2, 0xB7, 0xCC, 0xBF, 0xCE, 0xDA, 0xC3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8C[512] = { + 0xDA, 0xC4, 0xCB, 0xAD, 0xDA, 0xC5, 0xB5, 0xF7, /* 0x00-0x03 */ + 0xDA, 0xC6, 0xC1, 0xC2, 0xD7, 0xBB, 0xDA, 0xC7, /* 0x04-0x07 */ + 0xCC, 0xB8, 0xD7, 0x9F, 0xD2, 0xEA, 0xC4, 0xB1, /* 0x08-0x0B */ + 0xDA, 0xC8, 0xB5, 0xFD, 0xBB, 0xD1, 0xDA, 0xC9, /* 0x0C-0x0F */ + 0xD0, 0xB3, 0xDA, 0xCA, 0xDA, 0xCB, 0xCE, 0xBD, /* 0x10-0x13 */ + 0xDA, 0xCC, 0xDA, 0xCD, 0xDA, 0xCE, 0xB2, 0xF7, /* 0x14-0x17 */ + 0xDA, 0xD1, 0xDA, 0xCF, 0xD1, 0xE8, 0xDA, 0xD0, /* 0x18-0x1B */ + 0xC3, 0xD5, 0xDA, 0xD2, 0xD7, 0xA0, 0xDA, 0xD3, /* 0x1C-0x1F */ + 0xDA, 0xD4, 0xDA, 0xD5, 0xD0, 0xBB, 0xD2, 0xA5, /* 0x20-0x23 */ + 0xB0, 0xF9, 0xDA, 0xD6, 0xC7, 0xAB, 0xDA, 0xD7, /* 0x24-0x27 */ + 0xBD, 0xF7, 0xC3, 0xA1, 0xDA, 0xD8, 0xDA, 0xD9, /* 0x28-0x2B */ + 0xC3, 0xFD, 0xCC, 0xB7, 0xDA, 0xDA, 0xDA, 0xDB, /* 0x2C-0x2F */ + 0xC0, 0xBE, 0xC6, 0xD7, 0xDA, 0xDC, 0xDA, 0xDD, /* 0x30-0x33 */ + 0xC7, 0xB4, 0xDA, 0xDE, 0xDA, 0xDF, 0xB9, 0xC8, /* 0x34-0x37 */ + 0xD8, 0x40, 0xD8, 0x41, 0xD8, 0x42, 0xD8, 0x43, /* 0x38-0x3B */ + 0xD8, 0x44, 0xD8, 0x45, 0xD8, 0x46, 0xD8, 0x47, /* 0x3C-0x3F */ + 0xD8, 0x48, 0xBB, 0xED, 0xD8, 0x49, 0xD8, 0x4A, /* 0x40-0x43 */ + 0xD8, 0x4B, 0xD8, 0x4C, 0xB6, 0xB9, 0xF4, 0xF8, /* 0x44-0x47 */ + 0xD8, 0x4D, 0xF4, 0xF9, 0xD8, 0x4E, 0xD8, 0x4F, /* 0x48-0x4B */ + 0xCD, 0xE3, 0xD8, 0x50, 0xD8, 0x51, 0xD8, 0x52, /* 0x4C-0x4F */ + 0xD8, 0x53, 0xD8, 0x54, 0xD8, 0x55, 0xD8, 0x56, /* 0x50-0x53 */ + 0xD8, 0x57, 0xF5, 0xB9, 0xD8, 0x58, 0xD8, 0x59, /* 0x54-0x57 */ + 0xD8, 0x5A, 0xD8, 0x5B, 0xEB, 0xE0, 0xD8, 0x5C, /* 0x58-0x5B */ + 0xD8, 0x5D, 0xD8, 0x5E, 0xD8, 0x5F, 0xD8, 0x60, /* 0x5C-0x5F */ + 0xD8, 0x61, 0xCF, 0xF3, 0xBB, 0xBF, 0xD8, 0x62, /* 0x60-0x63 */ + 0xD8, 0x63, 0xD8, 0x64, 0xD8, 0x65, 0xD8, 0x66, /* 0x64-0x67 */ + 0xD8, 0x67, 0xD8, 0x68, 0xBA, 0xC0, 0xD4, 0xA5, /* 0x68-0x6B */ + 0xD8, 0x69, 0xD8, 0x6A, 0xD8, 0x6B, 0xD8, 0x6C, /* 0x6C-0x6F */ + 0xD8, 0x6D, 0xD8, 0x6E, 0xD8, 0x6F, 0xE1, 0xD9, /* 0x70-0x73 */ + 0xD8, 0x70, 0xD8, 0x71, 0xD8, 0x72, 0xD8, 0x73, /* 0x74-0x77 */ + 0xF5, 0xF4, 0xB1, 0xAA, 0xB2, 0xF2, 0xD8, 0x74, /* 0x78-0x7B */ + 0xD8, 0x75, 0xD8, 0x76, 0xD8, 0x77, 0xD8, 0x78, /* 0x7C-0x7F */ + + 0xD8, 0x79, 0xD8, 0x7A, 0xF5, 0xF5, 0xD8, 0x7B, /* 0x80-0x83 */ + 0xD8, 0x7C, 0xF5, 0xF7, 0xD8, 0x7D, 0xD8, 0x7E, /* 0x84-0x87 */ + 0xD8, 0x80, 0xBA, 0xD1, 0xF5, 0xF6, 0xD8, 0x81, /* 0x88-0x8B */ + 0xC3, 0xB2, 0xD8, 0x82, 0xD8, 0x83, 0xD8, 0x84, /* 0x8C-0x8F */ + 0xD8, 0x85, 0xD8, 0x86, 0xD8, 0x87, 0xD8, 0x88, /* 0x90-0x93 */ + 0xF5, 0xF9, 0xD8, 0x89, 0xD8, 0x8A, 0xD8, 0x8B, /* 0x94-0x97 */ + 0xF5, 0xF8, 0xD8, 0x8C, 0xD8, 0x8D, 0xD8, 0x8E, /* 0x98-0x9B */ + 0xD8, 0x8F, 0xD8, 0x90, 0xD8, 0x91, 0xD8, 0x92, /* 0x9C-0x9F */ + 0xD8, 0x93, 0xD8, 0x94, 0xD8, 0x95, 0xD8, 0x96, /* 0xA0-0xA3 */ + 0xD8, 0x97, 0xD8, 0x98, 0xD8, 0x99, 0xD8, 0x9A, /* 0xA4-0xA7 */ + 0xD8, 0x9B, 0xD8, 0x9C, 0xD8, 0x9D, 0xD8, 0x9E, /* 0xA8-0xAB */ + 0xD8, 0x9F, 0xD8, 0xA0, 0xD9, 0x40, 0xD9, 0x41, /* 0xAC-0xAF */ + 0xD9, 0x42, 0xD9, 0x43, 0xD9, 0x44, 0xD9, 0x45, /* 0xB0-0xB3 */ + 0xD9, 0x46, 0xD9, 0x47, 0xD9, 0x48, 0xD9, 0x49, /* 0xB4-0xB7 */ + 0xD9, 0x4A, 0xD9, 0x4B, 0xD9, 0x4C, 0xD9, 0x4D, /* 0xB8-0xBB */ + 0xD9, 0x4E, 0xD9, 0x4F, 0xD9, 0x50, 0xD9, 0x51, /* 0xBC-0xBF */ + 0xD9, 0x52, 0xD9, 0x53, 0xD9, 0x54, 0xD9, 0x55, /* 0xC0-0xC3 */ + 0xD9, 0x56, 0xD9, 0x57, 0xD9, 0x58, 0xD9, 0x59, /* 0xC4-0xC7 */ + 0xD9, 0x5A, 0xD9, 0x5B, 0xD9, 0x5C, 0xD9, 0x5D, /* 0xC8-0xCB */ + 0xD9, 0x5E, 0xD9, 0x5F, 0xD9, 0x60, 0xD9, 0x61, /* 0xCC-0xCF */ + 0xD9, 0x62, 0xD9, 0x63, 0xD9, 0x64, 0xD9, 0x65, /* 0xD0-0xD3 */ + 0xD9, 0x66, 0xD9, 0x67, 0xD9, 0x68, 0xD9, 0x69, /* 0xD4-0xD7 */ + 0xD9, 0x6A, 0xD9, 0x6B, 0xD9, 0x6C, 0xD9, 0x6D, /* 0xD8-0xDB */ + 0xD9, 0x6E, 0xD9, 0x6F, 0xD9, 0x70, 0xD9, 0x71, /* 0xDC-0xDF */ + 0xD9, 0x72, 0xD9, 0x73, 0xD9, 0x74, 0xD9, 0x75, /* 0xE0-0xE3 */ + 0xD9, 0x76, 0xD9, 0x77, 0xD9, 0x78, 0xD9, 0x79, /* 0xE4-0xE7 */ + 0xD9, 0x7A, 0xD9, 0x7B, 0xD9, 0x7C, 0xD9, 0x7D, /* 0xE8-0xEB */ + 0xD9, 0x7E, 0xD9, 0x80, 0xD9, 0x81, 0xD9, 0x82, /* 0xEC-0xEF */ + 0xD9, 0x83, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x86, /* 0xF0-0xF3 */ + 0xD9, 0x87, 0xD9, 0x88, 0xD9, 0x89, 0xD9, 0x8A, /* 0xF4-0xF7 */ + 0xD9, 0x8B, 0xD9, 0x8C, 0xD9, 0x8D, 0xD9, 0x8E, /* 0xF8-0xFB */ + 0xD9, 0x8F, 0xD9, 0x90, 0xD9, 0x91, 0xD9, 0x92, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0xD9, 0x93, 0xD9, 0x94, 0xD9, 0x95, 0xD9, 0x96, /* 0x00-0x03 */ + 0xD9, 0x97, 0xD9, 0x98, 0xD9, 0x99, 0xD9, 0x9A, /* 0x04-0x07 */ + 0xD9, 0x9B, 0xD9, 0x9C, 0xD9, 0x9D, 0xD9, 0x9E, /* 0x08-0x0B */ + 0xD9, 0x9F, 0xD9, 0xA0, 0xDA, 0x40, 0xDA, 0x41, /* 0x0C-0x0F */ + 0xDA, 0x42, 0xDA, 0x43, 0xDA, 0x44, 0xDA, 0x45, /* 0x10-0x13 */ + 0xDA, 0x46, 0xDA, 0x47, 0xDA, 0x48, 0xDA, 0x49, /* 0x14-0x17 */ + 0xDA, 0x4A, 0xDA, 0x4B, 0xDA, 0x4C, 0xDA, 0x4D, /* 0x18-0x1B */ + 0xDA, 0x4E, 0xB1, 0xB4, 0xD5, 0xEA, 0xB8, 0xBA, /* 0x1C-0x1F */ + 0xDA, 0x4F, 0xB9, 0xB1, 0xB2, 0xC6, 0xD4, 0xF0, /* 0x20-0x23 */ + 0xCF, 0xCD, 0xB0, 0xDC, 0xD5, 0xCB, 0xBB, 0xF5, /* 0x24-0x27 */ + 0xD6, 0xCA, 0xB7, 0xB7, 0xCC, 0xB0, 0xC6, 0xB6, /* 0x28-0x2B */ + 0xB1, 0xE1, 0xB9, 0xBA, 0xD6, 0xFC, 0xB9, 0xE1, /* 0x2C-0x2F */ + 0xB7, 0xA1, 0xBC, 0xFA, 0xEA, 0xDA, 0xEA, 0xDB, /* 0x30-0x33 */ + 0xCC, 0xF9, 0xB9, 0xF3, 0xEA, 0xDC, 0xB4, 0xFB, /* 0x34-0x37 */ + 0xC3, 0xB3, 0xB7, 0xD1, 0xBA, 0xD8, 0xEA, 0xDD, /* 0x38-0x3B */ + 0xD4, 0xF4, 0xEA, 0xDE, 0xBC, 0xD6, 0xBB, 0xDF, /* 0x3C-0x3F */ + 0xEA, 0xDF, 0xC1, 0xDE, 0xC2, 0xB8, 0xD4, 0xDF, /* 0x40-0x43 */ + 0xD7, 0xCA, 0xEA, 0xE0, 0xEA, 0xE1, 0xEA, 0xE4, /* 0x44-0x47 */ + 0xEA, 0xE2, 0xEA, 0xE3, 0xC9, 0xDE, 0xB8, 0xB3, /* 0x48-0x4B */ + 0xB6, 0xC4, 0xEA, 0xE5, 0xCA, 0xEA, 0xC9, 0xCD, /* 0x4C-0x4F */ + 0xB4, 0xCD, 0xDA, 0x50, 0xDA, 0x51, 0xE2, 0xD9, /* 0x50-0x53 */ + 0xC5, 0xE2, 0xEA, 0xE6, 0xC0, 0xB5, 0xDA, 0x52, /* 0x54-0x57 */ + 0xD7, 0xB8, 0xEA, 0xE7, 0xD7, 0xAC, 0xC8, 0xFC, /* 0x58-0x5B */ + 0xD8, 0xD3, 0xD8, 0xCD, 0xD4, 0xDE, 0xDA, 0x53, /* 0x5C-0x5F */ + 0xD4, 0xF9, 0xC9, 0xC4, 0xD3, 0xAE, 0xB8, 0xD3, /* 0x60-0x63 */ + 0xB3, 0xE0, 0xDA, 0x54, 0xC9, 0xE2, 0xF4, 0xF6, /* 0x64-0x67 */ + 0xDA, 0x55, 0xDA, 0x56, 0xDA, 0x57, 0xBA, 0xD5, /* 0x68-0x6B */ + 0xDA, 0x58, 0xF4, 0xF7, 0xDA, 0x59, 0xDA, 0x5A, /* 0x6C-0x6F */ + 0xD7, 0xDF, 0xDA, 0x5B, 0xDA, 0x5C, 0xF4, 0xF1, /* 0x70-0x73 */ + 0xB8, 0xB0, 0xD5, 0xD4, 0xB8, 0xCF, 0xC6, 0xF0, /* 0x74-0x77 */ + 0xDA, 0x5D, 0xDA, 0x5E, 0xDA, 0x5F, 0xDA, 0x60, /* 0x78-0x7B */ + 0xDA, 0x61, 0xDA, 0x62, 0xDA, 0x63, 0xDA, 0x64, /* 0x7C-0x7F */ + + 0xDA, 0x65, 0xB3, 0xC3, 0xDA, 0x66, 0xDA, 0x67, /* 0x80-0x83 */ + 0xF4, 0xF2, 0xB3, 0xAC, 0xDA, 0x68, 0xDA, 0x69, /* 0x84-0x87 */ + 0xDA, 0x6A, 0xDA, 0x6B, 0xD4, 0xBD, 0xC7, 0xF7, /* 0x88-0x8B */ + 0xDA, 0x6C, 0xDA, 0x6D, 0xDA, 0x6E, 0xDA, 0x6F, /* 0x8C-0x8F */ + 0xDA, 0x70, 0xF4, 0xF4, 0xDA, 0x71, 0xDA, 0x72, /* 0x90-0x93 */ + 0xF4, 0xF3, 0xDA, 0x73, 0xDA, 0x74, 0xDA, 0x75, /* 0x94-0x97 */ + 0xDA, 0x76, 0xDA, 0x77, 0xDA, 0x78, 0xDA, 0x79, /* 0x98-0x9B */ + 0xDA, 0x7A, 0xDA, 0x7B, 0xDA, 0x7C, 0xCC, 0xCB, /* 0x9C-0x9F */ + 0xDA, 0x7D, 0xDA, 0x7E, 0xDA, 0x80, 0xC8, 0xA4, /* 0xA0-0xA3 */ + 0xDA, 0x81, 0xDA, 0x82, 0xDA, 0x83, 0xDA, 0x84, /* 0xA4-0xA7 */ + 0xDA, 0x85, 0xDA, 0x86, 0xDA, 0x87, 0xDA, 0x88, /* 0xA8-0xAB */ + 0xDA, 0x89, 0xDA, 0x8A, 0xDA, 0x8B, 0xDA, 0x8C, /* 0xAC-0xAF */ + 0xDA, 0x8D, 0xF4, 0xF5, 0xDA, 0x8E, 0xD7, 0xE3, /* 0xB0-0xB3 */ + 0xC5, 0xBF, 0xF5, 0xC0, 0xDA, 0x8F, 0xDA, 0x90, /* 0xB4-0xB7 */ + 0xF5, 0xBB, 0xDA, 0x91, 0xF5, 0xC3, 0xDA, 0x92, /* 0xB8-0xBB */ + 0xF5, 0xC2, 0xDA, 0x93, 0xD6, 0xBA, 0xF5, 0xC1, /* 0xBC-0xBF */ + 0xDA, 0x94, 0xDA, 0x95, 0xDA, 0x96, 0xD4, 0xBE, /* 0xC0-0xC3 */ + 0xF5, 0xC4, 0xDA, 0x97, 0xF5, 0xCC, 0xDA, 0x98, /* 0xC4-0xC7 */ + 0xDA, 0x99, 0xDA, 0x9A, 0xDA, 0x9B, 0xB0, 0xCF, /* 0xC8-0xCB */ + 0xB5, 0xF8, 0xDA, 0x9C, 0xF5, 0xC9, 0xF5, 0xCA, /* 0xCC-0xCF */ + 0xDA, 0x9D, 0xC5, 0xDC, 0xDA, 0x9E, 0xDA, 0x9F, /* 0xD0-0xD3 */ + 0xDA, 0xA0, 0xDB, 0x40, 0xF5, 0xC5, 0xF5, 0xC6, /* 0xD4-0xD7 */ + 0xDB, 0x41, 0xDB, 0x42, 0xF5, 0xC7, 0xF5, 0xCB, /* 0xD8-0xDB */ + 0xDB, 0x43, 0xBE, 0xE0, 0xF5, 0xC8, 0xB8, 0xFA, /* 0xDC-0xDF */ + 0xDB, 0x44, 0xDB, 0x45, 0xDB, 0x46, 0xF5, 0xD0, /* 0xE0-0xE3 */ + 0xF5, 0xD3, 0xDB, 0x47, 0xDB, 0x48, 0xDB, 0x49, /* 0xE4-0xE7 */ + 0xBF, 0xE7, 0xDB, 0x4A, 0xB9, 0xF2, 0xF5, 0xBC, /* 0xE8-0xEB */ + 0xF5, 0xCD, 0xDB, 0x4B, 0xDB, 0x4C, 0xC2, 0xB7, /* 0xEC-0xEF */ + 0xDB, 0x4D, 0xDB, 0x4E, 0xDB, 0x4F, 0xCC, 0xF8, /* 0xF0-0xF3 */ + 0xDB, 0x50, 0xBC, 0xF9, 0xDB, 0x51, 0xF5, 0xCE, /* 0xF4-0xF7 */ + 0xF5, 0xCF, 0xF5, 0xD1, 0xB6, 0xE5, 0xF5, 0xD2, /* 0xF8-0xFB */ + 0xDB, 0x52, 0xF5, 0xD5, 0xDB, 0x53, 0xDB, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0xDB, 0x55, 0xDB, 0x56, 0xDB, 0x57, 0xDB, 0x58, /* 0x00-0x03 */ + 0xDB, 0x59, 0xF5, 0xBD, 0xDB, 0x5A, 0xDB, 0x5B, /* 0x04-0x07 */ + 0xDB, 0x5C, 0xF5, 0xD4, 0xD3, 0xBB, 0xDB, 0x5D, /* 0x08-0x0B */ + 0xB3, 0xEC, 0xDB, 0x5E, 0xDB, 0x5F, 0xCC, 0xA4, /* 0x0C-0x0F */ + 0xDB, 0x60, 0xDB, 0x61, 0xDB, 0x62, 0xDB, 0x63, /* 0x10-0x13 */ + 0xF5, 0xD6, 0xDB, 0x64, 0xDB, 0x65, 0xDB, 0x66, /* 0x14-0x17 */ + 0xDB, 0x67, 0xDB, 0x68, 0xDB, 0x69, 0xDB, 0x6A, /* 0x18-0x1B */ + 0xDB, 0x6B, 0xF5, 0xD7, 0xBE, 0xE1, 0xF5, 0xD8, /* 0x1C-0x1F */ + 0xDB, 0x6C, 0xDB, 0x6D, 0xCC, 0xDF, 0xF5, 0xDB, /* 0x20-0x23 */ + 0xDB, 0x6E, 0xDB, 0x6F, 0xDB, 0x70, 0xDB, 0x71, /* 0x24-0x27 */ + 0xDB, 0x72, 0xB2, 0xC8, 0xD7, 0xD9, 0xDB, 0x73, /* 0x28-0x2B */ + 0xF5, 0xD9, 0xDB, 0x74, 0xF5, 0xDA, 0xF5, 0xDC, /* 0x2C-0x2F */ + 0xDB, 0x75, 0xF5, 0xE2, 0xDB, 0x76, 0xDB, 0x77, /* 0x30-0x33 */ + 0xDB, 0x78, 0xF5, 0xE0, 0xDB, 0x79, 0xDB, 0x7A, /* 0x34-0x37 */ + 0xDB, 0x7B, 0xF5, 0xDF, 0xF5, 0xDD, 0xDB, 0x7C, /* 0x38-0x3B */ + 0xDB, 0x7D, 0xF5, 0xE1, 0xDB, 0x7E, 0xDB, 0x80, /* 0x3C-0x3F */ + 0xF5, 0xDE, 0xF5, 0xE4, 0xF5, 0xE5, 0xDB, 0x81, /* 0x40-0x43 */ + 0xCC, 0xE3, 0xDB, 0x82, 0xDB, 0x83, 0xE5, 0xBF, /* 0x44-0x47 */ + 0xB5, 0xB8, 0xF5, 0xE3, 0xF5, 0xE8, 0xCC, 0xA3, /* 0x48-0x4B */ + 0xDB, 0x84, 0xDB, 0x85, 0xDB, 0x86, 0xDB, 0x87, /* 0x4C-0x4F */ + 0xDB, 0x88, 0xF5, 0xE6, 0xF5, 0xE7, 0xDB, 0x89, /* 0x50-0x53 */ + 0xDB, 0x8A, 0xDB, 0x8B, 0xDB, 0x8C, 0xDB, 0x8D, /* 0x54-0x57 */ + 0xDB, 0x8E, 0xF5, 0xBE, 0xDB, 0x8F, 0xDB, 0x90, /* 0x58-0x5B */ + 0xDB, 0x91, 0xDB, 0x92, 0xDB, 0x93, 0xDB, 0x94, /* 0x5C-0x5F */ + 0xDB, 0x95, 0xDB, 0x96, 0xDB, 0x97, 0xDB, 0x98, /* 0x60-0x63 */ + 0xDB, 0x99, 0xDB, 0x9A, 0xB1, 0xC4, 0xDB, 0x9B, /* 0x64-0x67 */ + 0xDB, 0x9C, 0xF5, 0xBF, 0xDB, 0x9D, 0xDB, 0x9E, /* 0x68-0x6B */ + 0xB5, 0xC5, 0xB2, 0xE4, 0xDB, 0x9F, 0xF5, 0xEC, /* 0x6C-0x6F */ + 0xF5, 0xE9, 0xDB, 0xA0, 0xB6, 0xD7, 0xDC, 0x40, /* 0x70-0x73 */ + 0xF5, 0xED, 0xDC, 0x41, 0xF5, 0xEA, 0xDC, 0x42, /* 0x74-0x77 */ + 0xDC, 0x43, 0xDC, 0x44, 0xDC, 0x45, 0xDC, 0x46, /* 0x78-0x7B */ + 0xF5, 0xEB, 0xDC, 0x47, 0xDC, 0x48, 0xB4, 0xDA, /* 0x7C-0x7F */ + + 0xDC, 0x49, 0xD4, 0xEA, 0xDC, 0x4A, 0xDC, 0x4B, /* 0x80-0x83 */ + 0xDC, 0x4C, 0xF5, 0xEE, 0xDC, 0x4D, 0xB3, 0xF9, /* 0x84-0x87 */ + 0xDC, 0x4E, 0xDC, 0x4F, 0xDC, 0x50, 0xDC, 0x51, /* 0x88-0x8B */ + 0xDC, 0x52, 0xDC, 0x53, 0xDC, 0x54, 0xF5, 0xEF, /* 0x8C-0x8F */ + 0xF5, 0xF1, 0xDC, 0x55, 0xDC, 0x56, 0xDC, 0x57, /* 0x90-0x93 */ + 0xF5, 0xF0, 0xDC, 0x58, 0xDC, 0x59, 0xDC, 0x5A, /* 0x94-0x97 */ + 0xDC, 0x5B, 0xDC, 0x5C, 0xDC, 0x5D, 0xDC, 0x5E, /* 0x98-0x9B */ + 0xF5, 0xF2, 0xDC, 0x5F, 0xF5, 0xF3, 0xDC, 0x60, /* 0x9C-0x9F */ + 0xDC, 0x61, 0xDC, 0x62, 0xDC, 0x63, 0xDC, 0x64, /* 0xA0-0xA3 */ + 0xDC, 0x65, 0xDC, 0x66, 0xDC, 0x67, 0xDC, 0x68, /* 0xA4-0xA7 */ + 0xDC, 0x69, 0xDC, 0x6A, 0xDC, 0x6B, 0xC9, 0xED, /* 0xA8-0xAB */ + 0xB9, 0xAA, 0xDC, 0x6C, 0xDC, 0x6D, 0xC7, 0xFB, /* 0xAC-0xAF */ + 0xDC, 0x6E, 0xDC, 0x6F, 0xB6, 0xE3, 0xDC, 0x70, /* 0xB0-0xB3 */ + 0xDC, 0x71, 0xDC, 0x72, 0xDC, 0x73, 0xDC, 0x74, /* 0xB4-0xB7 */ + 0xDC, 0x75, 0xDC, 0x76, 0xCC, 0xC9, 0xDC, 0x77, /* 0xB8-0xBB */ + 0xDC, 0x78, 0xDC, 0x79, 0xDC, 0x7A, 0xDC, 0x7B, /* 0xBC-0xBF */ + 0xDC, 0x7C, 0xDC, 0x7D, 0xDC, 0x7E, 0xDC, 0x80, /* 0xC0-0xC3 */ + 0xDC, 0x81, 0xDC, 0x82, 0xDC, 0x83, 0xDC, 0x84, /* 0xC4-0xC7 */ + 0xDC, 0x85, 0xDC, 0x86, 0xDC, 0x87, 0xDC, 0x88, /* 0xC8-0xCB */ + 0xDC, 0x89, 0xDC, 0x8A, 0xEA, 0xA6, 0xDC, 0x8B, /* 0xCC-0xCF */ + 0xDC, 0x8C, 0xDC, 0x8D, 0xDC, 0x8E, 0xDC, 0x8F, /* 0xD0-0xD3 */ + 0xDC, 0x90, 0xDC, 0x91, 0xDC, 0x92, 0xDC, 0x93, /* 0xD4-0xD7 */ + 0xDC, 0x94, 0xDC, 0x95, 0xDC, 0x96, 0xDC, 0x97, /* 0xD8-0xDB */ + 0xDC, 0x98, 0xDC, 0x99, 0xDC, 0x9A, 0xDC, 0x9B, /* 0xDC-0xDF */ + 0xDC, 0x9C, 0xDC, 0x9D, 0xDC, 0x9E, 0xDC, 0x9F, /* 0xE0-0xE3 */ + 0xDC, 0xA0, 0xDD, 0x40, 0xDD, 0x41, 0xDD, 0x42, /* 0xE4-0xE7 */ + 0xDD, 0x43, 0xDD, 0x44, 0xDD, 0x45, 0xDD, 0x46, /* 0xE8-0xEB */ + 0xDD, 0x47, 0xDD, 0x48, 0xDD, 0x49, 0xDD, 0x4A, /* 0xEC-0xEF */ + 0xDD, 0x4B, 0xDD, 0x4C, 0xDD, 0x4D, 0xDD, 0x4E, /* 0xF0-0xF3 */ + 0xDD, 0x4F, 0xDD, 0x50, 0xDD, 0x51, 0xDD, 0x52, /* 0xF4-0xF7 */ + 0xDD, 0x53, 0xDD, 0x54, 0xDD, 0x55, 0xDD, 0x56, /* 0xF8-0xFB */ + 0xDD, 0x57, 0xDD, 0x58, 0xDD, 0x59, 0xDD, 0x5A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0xDD, 0x5B, 0xDD, 0x5C, 0xDD, 0x5D, 0xDD, 0x5E, /* 0x00-0x03 */ + 0xDD, 0x5F, 0xDD, 0x60, 0xDD, 0x61, 0xDD, 0x62, /* 0x04-0x07 */ + 0xDD, 0x63, 0xDD, 0x64, 0xDD, 0x65, 0xDD, 0x66, /* 0x08-0x0B */ + 0xDD, 0x67, 0xDD, 0x68, 0xDD, 0x69, 0xDD, 0x6A, /* 0x0C-0x0F */ + 0xDD, 0x6B, 0xDD, 0x6C, 0xDD, 0x6D, 0xDD, 0x6E, /* 0x10-0x13 */ + 0xDD, 0x6F, 0xDD, 0x70, 0xDD, 0x71, 0xDD, 0x72, /* 0x14-0x17 */ + 0xDD, 0x73, 0xDD, 0x74, 0xDD, 0x75, 0xDD, 0x76, /* 0x18-0x1B */ + 0xDD, 0x77, 0xDD, 0x78, 0xDD, 0x79, 0xDD, 0x7A, /* 0x1C-0x1F */ + 0xDD, 0x7B, 0xDD, 0x7C, 0xDD, 0x7D, 0xDD, 0x7E, /* 0x20-0x23 */ + 0xDD, 0x80, 0xDD, 0x81, 0xDD, 0x82, 0xDD, 0x83, /* 0x24-0x27 */ + 0xDD, 0x84, 0xDD, 0x85, 0xDD, 0x86, 0xDD, 0x87, /* 0x28-0x2B */ + 0xDD, 0x88, 0xDD, 0x89, 0xDD, 0x8A, 0xDD, 0x8B, /* 0x2C-0x2F */ + 0xDD, 0x8C, 0xDD, 0x8D, 0xDD, 0x8E, 0xDD, 0x8F, /* 0x30-0x33 */ + 0xDD, 0x90, 0xDD, 0x91, 0xDD, 0x92, 0xDD, 0x93, /* 0x34-0x37 */ + 0xDD, 0x94, 0xDD, 0x95, 0xDD, 0x96, 0xDD, 0x97, /* 0x38-0x3B */ + 0xDD, 0x98, 0xDD, 0x99, 0xDD, 0x9A, 0xDD, 0x9B, /* 0x3C-0x3F */ + 0xDD, 0x9C, 0xDD, 0x9D, 0xDD, 0x9E, 0xDD, 0x9F, /* 0x40-0x43 */ + 0xDD, 0xA0, 0xDE, 0x40, 0xDE, 0x41, 0xDE, 0x42, /* 0x44-0x47 */ + 0xDE, 0x43, 0xDE, 0x44, 0xDE, 0x45, 0xDE, 0x46, /* 0x48-0x4B */ + 0xDE, 0x47, 0xDE, 0x48, 0xDE, 0x49, 0xDE, 0x4A, /* 0x4C-0x4F */ + 0xDE, 0x4B, 0xDE, 0x4C, 0xDE, 0x4D, 0xDE, 0x4E, /* 0x50-0x53 */ + 0xDE, 0x4F, 0xDE, 0x50, 0xDE, 0x51, 0xDE, 0x52, /* 0x54-0x57 */ + 0xDE, 0x53, 0xDE, 0x54, 0xDE, 0x55, 0xDE, 0x56, /* 0x58-0x5B */ + 0xDE, 0x57, 0xDE, 0x58, 0xDE, 0x59, 0xDE, 0x5A, /* 0x5C-0x5F */ + 0xDE, 0x5B, 0xDE, 0x5C, 0xDE, 0x5D, 0xDE, 0x5E, /* 0x60-0x63 */ + 0xDE, 0x5F, 0xDE, 0x60, 0xB3, 0xB5, 0xD4, 0xFE, /* 0x64-0x67 */ + 0xB9, 0xEC, 0xD0, 0xF9, 0xDE, 0x61, 0xE9, 0xED, /* 0x68-0x6B */ + 0xD7, 0xAA, 0xE9, 0xEE, 0xC2, 0xD6, 0xC8, 0xED, /* 0x6C-0x6F */ + 0xBA, 0xE4, 0xE9, 0xEF, 0xE9, 0xF0, 0xE9, 0xF1, /* 0x70-0x73 */ + 0xD6, 0xE1, 0xE9, 0xF2, 0xE9, 0xF3, 0xE9, 0xF5, /* 0x74-0x77 */ + 0xE9, 0xF4, 0xE9, 0xF6, 0xE9, 0xF7, 0xC7, 0xE1, /* 0x78-0x7B */ + 0xE9, 0xF8, 0xD4, 0xD8, 0xE9, 0xF9, 0xBD, 0xCE, /* 0x7C-0x7F */ + + 0xDE, 0x62, 0xE9, 0xFA, 0xE9, 0xFB, 0xBD, 0xCF, /* 0x80-0x83 */ + 0xE9, 0xFC, 0xB8, 0xA8, 0xC1, 0xBE, 0xE9, 0xFD, /* 0x84-0x87 */ + 0xB1, 0xB2, 0xBB, 0xD4, 0xB9, 0xF5, 0xE9, 0xFE, /* 0x88-0x8B */ + 0xDE, 0x63, 0xEA, 0xA1, 0xEA, 0xA2, 0xEA, 0xA3, /* 0x8C-0x8F */ + 0xB7, 0xF8, 0xBC, 0xAD, 0xDE, 0x64, 0xCA, 0xE4, /* 0x90-0x93 */ + 0xE0, 0xCE, 0xD4, 0xAF, 0xCF, 0xBD, 0xD5, 0xB7, /* 0x94-0x97 */ + 0xEA, 0xA4, 0xD5, 0xDE, 0xEA, 0xA5, 0xD0, 0xC1, /* 0x98-0x9B */ + 0xB9, 0xBC, 0xDE, 0x65, 0xB4, 0xC7, 0xB1, 0xD9, /* 0x9C-0x9F */ + 0xDE, 0x66, 0xDE, 0x67, 0xDE, 0x68, 0xC0, 0xB1, /* 0xA0-0xA3 */ + 0xDE, 0x69, 0xDE, 0x6A, 0xDE, 0x6B, 0xDE, 0x6C, /* 0xA4-0xA7 */ + 0xB1, 0xE6, 0xB1, 0xE7, 0xDE, 0x6D, 0xB1, 0xE8, /* 0xA8-0xAB */ + 0xDE, 0x6E, 0xDE, 0x6F, 0xDE, 0x70, 0xDE, 0x71, /* 0xAC-0xAF */ + 0xB3, 0xBD, 0xC8, 0xE8, 0xDE, 0x72, 0xDE, 0x73, /* 0xB0-0xB3 */ + 0xDE, 0x74, 0xDE, 0x75, 0xE5, 0xC1, 0xDE, 0x76, /* 0xB4-0xB7 */ + 0xDE, 0x77, 0xB1, 0xDF, 0xDE, 0x78, 0xDE, 0x79, /* 0xB8-0xBB */ + 0xDE, 0x7A, 0xC1, 0xC9, 0xB4, 0xEF, 0xDE, 0x7B, /* 0xBC-0xBF */ + 0xDE, 0x7C, 0xC7, 0xA8, 0xD3, 0xD8, 0xDE, 0x7D, /* 0xC0-0xC3 */ + 0xC6, 0xF9, 0xD1, 0xB8, 0xDE, 0x7E, 0xB9, 0xFD, /* 0xC4-0xC7 */ + 0xC2, 0xF5, 0xDE, 0x80, 0xDE, 0x81, 0xDE, 0x82, /* 0xC8-0xCB */ + 0xDE, 0x83, 0xDE, 0x84, 0xD3, 0xAD, 0xDE, 0x85, /* 0xCC-0xCF */ + 0xD4, 0xCB, 0xBD, 0xFC, 0xDE, 0x86, 0xE5, 0xC2, /* 0xD0-0xD3 */ + 0xB7, 0xB5, 0xE5, 0xC3, 0xDE, 0x87, 0xDE, 0x88, /* 0xD4-0xD7 */ + 0xBB, 0xB9, 0xD5, 0xE2, 0xDE, 0x89, 0xBD, 0xF8, /* 0xD8-0xDB */ + 0xD4, 0xB6, 0xCE, 0xA5, 0xC1, 0xAC, 0xB3, 0xD9, /* 0xDC-0xDF */ + 0xDE, 0x8A, 0xDE, 0x8B, 0xCC, 0xF6, 0xDE, 0x8C, /* 0xE0-0xE3 */ + 0xE5, 0xC6, 0xE5, 0xC4, 0xE5, 0xC8, 0xDE, 0x8D, /* 0xE4-0xE7 */ + 0xE5, 0xCA, 0xE5, 0xC7, 0xB5, 0xCF, 0xC6, 0xC8, /* 0xE8-0xEB */ + 0xDE, 0x8E, 0xB5, 0xFC, 0xE5, 0xC5, 0xDE, 0x8F, /* 0xEC-0xEF */ + 0xCA, 0xF6, 0xDE, 0x90, 0xDE, 0x91, 0xE5, 0xC9, /* 0xF0-0xF3 */ + 0xDE, 0x92, 0xDE, 0x93, 0xDE, 0x94, 0xC3, 0xD4, /* 0xF4-0xF7 */ + 0xB1, 0xC5, 0xBC, 0xA3, 0xDE, 0x95, 0xDE, 0x96, /* 0xF8-0xFB */ + 0xDE, 0x97, 0xD7, 0xB7, 0xDE, 0x98, 0xDE, 0x99, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0xCD, 0xCB, 0xCB, 0xCD, 0xCA, 0xCA, 0xCC, 0xD3, /* 0x00-0x03 */ + 0xE5, 0xCC, 0xE5, 0xCB, 0xC4, 0xE6, 0xDE, 0x9A, /* 0x04-0x07 */ + 0xDE, 0x9B, 0xD1, 0xA1, 0xD1, 0xB7, 0xE5, 0xCD, /* 0x08-0x0B */ + 0xDE, 0x9C, 0xE5, 0xD0, 0xDE, 0x9D, 0xCD, 0xB8, /* 0x0C-0x0F */ + 0xD6, 0xF0, 0xE5, 0xCF, 0xB5, 0xDD, 0xDE, 0x9E, /* 0x10-0x13 */ + 0xCD, 0xBE, 0xDE, 0x9F, 0xE5, 0xD1, 0xB6, 0xBA, /* 0x14-0x17 */ + 0xDE, 0xA0, 0xDF, 0x40, 0xCD, 0xA8, 0xB9, 0xE4, /* 0x18-0x1B */ + 0xDF, 0x41, 0xCA, 0xC5, 0xB3, 0xD1, 0xCB, 0xD9, /* 0x1C-0x1F */ + 0xD4, 0xEC, 0xE5, 0xD2, 0xB7, 0xEA, 0xDF, 0x42, /* 0x20-0x23 */ + 0xDF, 0x43, 0xDF, 0x44, 0xE5, 0xCE, 0xDF, 0x45, /* 0x24-0x27 */ + 0xDF, 0x46, 0xDF, 0x47, 0xDF, 0x48, 0xDF, 0x49, /* 0x28-0x2B */ + 0xDF, 0x4A, 0xE5, 0xD5, 0xB4, 0xFE, 0xE5, 0xD6, /* 0x2C-0x2F */ + 0xDF, 0x4B, 0xDF, 0x4C, 0xDF, 0x4D, 0xDF, 0x4E, /* 0x30-0x33 */ + 0xDF, 0x4F, 0xE5, 0xD3, 0xE5, 0xD4, 0xDF, 0x50, /* 0x34-0x37 */ + 0xD2, 0xDD, 0xDF, 0x51, 0xDF, 0x52, 0xC2, 0xDF, /* 0x38-0x3B */ + 0xB1, 0xC6, 0xDF, 0x53, 0xD3, 0xE2, 0xDF, 0x54, /* 0x3C-0x3F */ + 0xDF, 0x55, 0xB6, 0xDD, 0xCB, 0xEC, 0xDF, 0x56, /* 0x40-0x43 */ + 0xE5, 0xD7, 0xDF, 0x57, 0xDF, 0x58, 0xD3, 0xF6, /* 0x44-0x47 */ + 0xDF, 0x59, 0xDF, 0x5A, 0xDF, 0x5B, 0xDF, 0x5C, /* 0x48-0x4B */ + 0xDF, 0x5D, 0xB1, 0xE9, 0xDF, 0x5E, 0xB6, 0xF4, /* 0x4C-0x4F */ + 0xE5, 0xDA, 0xE5, 0xD8, 0xE5, 0xD9, 0xB5, 0xC0, /* 0x50-0x53 */ + 0xDF, 0x5F, 0xDF, 0x60, 0xDF, 0x61, 0xD2, 0xC5, /* 0x54-0x57 */ + 0xE5, 0xDC, 0xDF, 0x62, 0xDF, 0x63, 0xE5, 0xDE, /* 0x58-0x5B */ + 0xDF, 0x64, 0xDF, 0x65, 0xDF, 0x66, 0xDF, 0x67, /* 0x5C-0x5F */ + 0xDF, 0x68, 0xDF, 0x69, 0xE5, 0xDD, 0xC7, 0xB2, /* 0x60-0x63 */ + 0xDF, 0x6A, 0xD2, 0xA3, 0xDF, 0x6B, 0xDF, 0x6C, /* 0x64-0x67 */ + 0xE5, 0xDB, 0xDF, 0x6D, 0xDF, 0x6E, 0xDF, 0x6F, /* 0x68-0x6B */ + 0xDF, 0x70, 0xD4, 0xE2, 0xD5, 0xDA, 0xDF, 0x71, /* 0x6C-0x6F */ + 0xDF, 0x72, 0xDF, 0x73, 0xDF, 0x74, 0xDF, 0x75, /* 0x70-0x73 */ + 0xE5, 0xE0, 0xD7, 0xF1, 0xDF, 0x76, 0xDF, 0x77, /* 0x74-0x77 */ + 0xDF, 0x78, 0xDF, 0x79, 0xDF, 0x7A, 0xDF, 0x7B, /* 0x78-0x7B */ + 0xDF, 0x7C, 0xE5, 0xE1, 0xDF, 0x7D, 0xB1, 0xDC, /* 0x7C-0x7F */ + + 0xD1, 0xFB, 0xDF, 0x7E, 0xE5, 0xE2, 0xE5, 0xE4, /* 0x80-0x83 */ + 0xDF, 0x80, 0xDF, 0x81, 0xDF, 0x82, 0xDF, 0x83, /* 0x84-0x87 */ + 0xE5, 0xE3, 0xDF, 0x84, 0xDF, 0x85, 0xE5, 0xE5, /* 0x88-0x8B */ + 0xDF, 0x86, 0xDF, 0x87, 0xDF, 0x88, 0xDF, 0x89, /* 0x8C-0x8F */ + 0xDF, 0x8A, 0xD2, 0xD8, 0xDF, 0x8B, 0xB5, 0xCB, /* 0x90-0x93 */ + 0xDF, 0x8C, 0xE7, 0xDF, 0xDF, 0x8D, 0xDA, 0xF5, /* 0x94-0x97 */ + 0xDF, 0x8E, 0xDA, 0xF8, 0xDF, 0x8F, 0xDA, 0xF6, /* 0x98-0x9B */ + 0xDF, 0x90, 0xDA, 0xF7, 0xDF, 0x91, 0xDF, 0x92, /* 0x9C-0x9F */ + 0xDF, 0x93, 0xDA, 0xFA, 0xD0, 0xCF, 0xC4, 0xC7, /* 0xA0-0xA3 */ + 0xDF, 0x94, 0xDF, 0x95, 0xB0, 0xEE, 0xDF, 0x96, /* 0xA4-0xA7 */ + 0xDF, 0x97, 0xDF, 0x98, 0xD0, 0xB0, 0xDF, 0x99, /* 0xA8-0xAB */ + 0xDA, 0xF9, 0xDF, 0x9A, 0xD3, 0xCA, 0xBA, 0xAA, /* 0xAC-0xAF */ + 0xDB, 0xA2, 0xC7, 0xF1, 0xDF, 0x9B, 0xDA, 0xFC, /* 0xB0-0xB3 */ + 0xDA, 0xFB, 0xC9, 0xDB, 0xDA, 0xFD, 0xDF, 0x9C, /* 0xB4-0xB7 */ + 0xDB, 0xA1, 0xD7, 0xDE, 0xDA, 0xFE, 0xC1, 0xDA, /* 0xB8-0xBB */ + 0xDF, 0x9D, 0xDF, 0x9E, 0xDB, 0xA5, 0xDF, 0x9F, /* 0xBC-0xBF */ + 0xDF, 0xA0, 0xD3, 0xF4, 0xE0, 0x40, 0xE0, 0x41, /* 0xC0-0xC3 */ + 0xDB, 0xA7, 0xDB, 0xA4, 0xE0, 0x42, 0xDB, 0xA8, /* 0xC4-0xC7 */ + 0xE0, 0x43, 0xE0, 0x44, 0xBD, 0xBC, 0xE0, 0x45, /* 0xC8-0xCB */ + 0xE0, 0x46, 0xE0, 0x47, 0xC0, 0xC9, 0xDB, 0xA3, /* 0xCC-0xCF */ + 0xDB, 0xA6, 0xD6, 0xA3, 0xE0, 0x48, 0xDB, 0xA9, /* 0xD0-0xD3 */ + 0xE0, 0x49, 0xE0, 0x4A, 0xE0, 0x4B, 0xDB, 0xAD, /* 0xD4-0xD7 */ + 0xE0, 0x4C, 0xE0, 0x4D, 0xE0, 0x4E, 0xDB, 0xAE, /* 0xD8-0xDB */ + 0xDB, 0xAC, 0xBA, 0xC2, 0xE0, 0x4F, 0xE0, 0x50, /* 0xDC-0xDF */ + 0xE0, 0x51, 0xBF, 0xA4, 0xDB, 0xAB, 0xE0, 0x52, /* 0xE0-0xE3 */ + 0xE0, 0x53, 0xE0, 0x54, 0xDB, 0xAA, 0xD4, 0xC7, /* 0xE4-0xE7 */ + 0xB2, 0xBF, 0xE0, 0x55, 0xE0, 0x56, 0xDB, 0xAF, /* 0xE8-0xEB */ + 0xE0, 0x57, 0xB9, 0xF9, 0xE0, 0x58, 0xDB, 0xB0, /* 0xEC-0xEF */ + 0xE0, 0x59, 0xE0, 0x5A, 0xE0, 0x5B, 0xE0, 0x5C, /* 0xF0-0xF3 */ + 0xB3, 0xBB, 0xE0, 0x5D, 0xE0, 0x5E, 0xE0, 0x5F, /* 0xF4-0xF7 */ + 0xB5, 0xA6, 0xE0, 0x60, 0xE0, 0x61, 0xE0, 0x62, /* 0xF8-0xFB */ + 0xE0, 0x63, 0xB6, 0xBC, 0xDB, 0xB1, 0xE0, 0x64, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0xE0, 0x65, 0xE0, 0x66, 0xB6, 0xF5, 0xE0, 0x67, /* 0x00-0x03 */ + 0xDB, 0xB2, 0xE0, 0x68, 0xE0, 0x69, 0xE0, 0x6A, /* 0x04-0x07 */ + 0xE0, 0x6B, 0xE0, 0x6C, 0xE0, 0x6D, 0xE0, 0x6E, /* 0x08-0x0B */ + 0xE0, 0x6F, 0xE0, 0x70, 0xE0, 0x71, 0xE0, 0x72, /* 0x0C-0x0F */ + 0xE0, 0x73, 0xE0, 0x74, 0xE0, 0x75, 0xE0, 0x76, /* 0x10-0x13 */ + 0xE0, 0x77, 0xE0, 0x78, 0xE0, 0x79, 0xE0, 0x7A, /* 0x14-0x17 */ + 0xE0, 0x7B, 0xB1, 0xC9, 0xE0, 0x7C, 0xE0, 0x7D, /* 0x18-0x1B */ + 0xE0, 0x7E, 0xE0, 0x80, 0xDB, 0xB4, 0xE0, 0x81, /* 0x1C-0x1F */ + 0xE0, 0x82, 0xE0, 0x83, 0xDB, 0xB3, 0xDB, 0xB5, /* 0x20-0x23 */ + 0xE0, 0x84, 0xE0, 0x85, 0xE0, 0x86, 0xE0, 0x87, /* 0x24-0x27 */ + 0xE0, 0x88, 0xE0, 0x89, 0xE0, 0x8A, 0xE0, 0x8B, /* 0x28-0x2B */ + 0xE0, 0x8C, 0xE0, 0x8D, 0xE0, 0x8E, 0xDB, 0xB7, /* 0x2C-0x2F */ + 0xE0, 0x8F, 0xDB, 0xB6, 0xE0, 0x90, 0xE0, 0x91, /* 0x30-0x33 */ + 0xE0, 0x92, 0xE0, 0x93, 0xE0, 0x94, 0xE0, 0x95, /* 0x34-0x37 */ + 0xE0, 0x96, 0xDB, 0xB8, 0xE0, 0x97, 0xE0, 0x98, /* 0x38-0x3B */ + 0xE0, 0x99, 0xE0, 0x9A, 0xE0, 0x9B, 0xE0, 0x9C, /* 0x3C-0x3F */ + 0xE0, 0x9D, 0xE0, 0x9E, 0xE0, 0x9F, 0xDB, 0xB9, /* 0x40-0x43 */ + 0xE0, 0xA0, 0xE1, 0x40, 0xDB, 0xBA, 0xE1, 0x41, /* 0x44-0x47 */ + 0xE1, 0x42, 0xD3, 0xCF, 0xF4, 0xFA, 0xC7, 0xF5, /* 0x48-0x4B */ + 0xD7, 0xC3, 0xC5, 0xE4, 0xF4, 0xFC, 0xF4, 0xFD, /* 0x4C-0x4F */ + 0xF4, 0xFB, 0xE1, 0x43, 0xBE, 0xC6, 0xE1, 0x44, /* 0x50-0x53 */ + 0xE1, 0x45, 0xE1, 0x46, 0xE1, 0x47, 0xD0, 0xEF, /* 0x54-0x57 */ + 0xE1, 0x48, 0xE1, 0x49, 0xB7, 0xD3, 0xE1, 0x4A, /* 0x58-0x5B */ + 0xE1, 0x4B, 0xD4, 0xCD, 0xCC, 0xAA, 0xE1, 0x4C, /* 0x5C-0x5F */ + 0xE1, 0x4D, 0xF5, 0xA2, 0xF5, 0xA1, 0xBA, 0xA8, /* 0x60-0x63 */ + 0xF4, 0xFE, 0xCB, 0xD6, 0xE1, 0x4E, 0xE1, 0x4F, /* 0x64-0x67 */ + 0xE1, 0x50, 0xF5, 0xA4, 0xC0, 0xD2, 0xE1, 0x51, /* 0x68-0x6B */ + 0xB3, 0xEA, 0xE1, 0x52, 0xCD, 0xAA, 0xF5, 0xA5, /* 0x6C-0x6F */ + 0xF5, 0xA3, 0xBD, 0xB4, 0xF5, 0xA8, 0xE1, 0x53, /* 0x70-0x73 */ + 0xF5, 0xA9, 0xBD, 0xCD, 0xC3, 0xB8, 0xBF, 0xE1, /* 0x74-0x77 */ + 0xCB, 0xE1, 0xF5, 0xAA, 0xE1, 0x54, 0xE1, 0x55, /* 0x78-0x7B */ + 0xE1, 0x56, 0xF5, 0xA6, 0xF5, 0xA7, 0xC4, 0xF0, /* 0x7C-0x7F */ + + 0xE1, 0x57, 0xE1, 0x58, 0xE1, 0x59, 0xE1, 0x5A, /* 0x80-0x83 */ + 0xE1, 0x5B, 0xF5, 0xAC, 0xE1, 0x5C, 0xB4, 0xBC, /* 0x84-0x87 */ + 0xE1, 0x5D, 0xD7, 0xED, 0xE1, 0x5E, 0xB4, 0xD7, /* 0x88-0x8B */ + 0xF5, 0xAB, 0xF5, 0xAE, 0xE1, 0x5F, 0xE1, 0x60, /* 0x8C-0x8F */ + 0xF5, 0xAD, 0xF5, 0xAF, 0xD0, 0xD1, 0xE1, 0x61, /* 0x90-0x93 */ + 0xE1, 0x62, 0xE1, 0x63, 0xE1, 0x64, 0xE1, 0x65, /* 0x94-0x97 */ + 0xE1, 0x66, 0xE1, 0x67, 0xC3, 0xD1, 0xC8, 0xA9, /* 0x98-0x9B */ + 0xE1, 0x68, 0xE1, 0x69, 0xE1, 0x6A, 0xE1, 0x6B, /* 0x9C-0x9F */ + 0xE1, 0x6C, 0xE1, 0x6D, 0xF5, 0xB0, 0xF5, 0xB1, /* 0xA0-0xA3 */ + 0xE1, 0x6E, 0xE1, 0x6F, 0xE1, 0x70, 0xE1, 0x71, /* 0xA4-0xA7 */ + 0xE1, 0x72, 0xE1, 0x73, 0xF5, 0xB2, 0xE1, 0x74, /* 0xA8-0xAB */ + 0xE1, 0x75, 0xF5, 0xB3, 0xF5, 0xB4, 0xF5, 0xB5, /* 0xAC-0xAF */ + 0xE1, 0x76, 0xE1, 0x77, 0xE1, 0x78, 0xE1, 0x79, /* 0xB0-0xB3 */ + 0xF5, 0xB7, 0xF5, 0xB6, 0xE1, 0x7A, 0xE1, 0x7B, /* 0xB4-0xB7 */ + 0xE1, 0x7C, 0xE1, 0x7D, 0xF5, 0xB8, 0xE1, 0x7E, /* 0xB8-0xBB */ + 0xE1, 0x80, 0xE1, 0x81, 0xE1, 0x82, 0xE1, 0x83, /* 0xBC-0xBF */ + 0xE1, 0x84, 0xE1, 0x85, 0xE1, 0x86, 0xE1, 0x87, /* 0xC0-0xC3 */ + 0xE1, 0x88, 0xE1, 0x89, 0xE1, 0x8A, 0xB2, 0xC9, /* 0xC4-0xC7 */ + 0xE1, 0x8B, 0xD3, 0xD4, 0xCA, 0xCD, 0xE1, 0x8C, /* 0xC8-0xCB */ + 0xC0, 0xEF, 0xD6, 0xD8, 0xD2, 0xB0, 0xC1, 0xBF, /* 0xCC-0xCF */ + 0xE1, 0x8D, 0xBD, 0xF0, 0xE1, 0x8E, 0xE1, 0x8F, /* 0xD0-0xD3 */ + 0xE1, 0x90, 0xE1, 0x91, 0xE1, 0x92, 0xE1, 0x93, /* 0xD4-0xD7 */ + 0xE1, 0x94, 0xE1, 0x95, 0xE1, 0x96, 0xE1, 0x97, /* 0xD8-0xDB */ + 0xB8, 0xAA, 0xE1, 0x98, 0xE1, 0x99, 0xE1, 0x9A, /* 0xDC-0xDF */ + 0xE1, 0x9B, 0xE1, 0x9C, 0xE1, 0x9D, 0xE1, 0x9E, /* 0xE0-0xE3 */ + 0xE1, 0x9F, 0xE1, 0xA0, 0xE2, 0x40, 0xE2, 0x41, /* 0xE4-0xE7 */ + 0xE2, 0x42, 0xE2, 0x43, 0xE2, 0x44, 0xE2, 0x45, /* 0xE8-0xEB */ + 0xE2, 0x46, 0xE2, 0x47, 0xE2, 0x48, 0xE2, 0x49, /* 0xEC-0xEF */ + 0xE2, 0x4A, 0xE2, 0x4B, 0xE2, 0x4C, 0xE2, 0x4D, /* 0xF0-0xF3 */ + 0xE2, 0x4E, 0xE2, 0x4F, 0xE2, 0x50, 0xE2, 0x51, /* 0xF4-0xF7 */ + 0xE2, 0x52, 0xE2, 0x53, 0xE2, 0x54, 0xE2, 0x55, /* 0xF8-0xFB */ + 0xE2, 0x56, 0xE2, 0x57, 0xE2, 0x58, 0xE2, 0x59, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0xE2, 0x5A, 0xE2, 0x5B, 0xE2, 0x5C, 0xE2, 0x5D, /* 0x00-0x03 */ + 0xE2, 0x5E, 0xE2, 0x5F, 0xE2, 0x60, 0xE2, 0x61, /* 0x04-0x07 */ + 0xE2, 0x62, 0xE2, 0x63, 0xE2, 0x64, 0xE2, 0x65, /* 0x08-0x0B */ + 0xE2, 0x66, 0xE2, 0x67, 0xE2, 0x68, 0xE2, 0x69, /* 0x0C-0x0F */ + 0xE2, 0x6A, 0xE2, 0x6B, 0xE2, 0x6C, 0xE2, 0x6D, /* 0x10-0x13 */ + 0xE2, 0x6E, 0xE2, 0x6F, 0xE2, 0x70, 0xE2, 0x71, /* 0x14-0x17 */ + 0xE2, 0x72, 0xE2, 0x73, 0xE2, 0x74, 0xE2, 0x75, /* 0x18-0x1B */ + 0xE2, 0x76, 0xE2, 0x77, 0xE2, 0x78, 0xE2, 0x79, /* 0x1C-0x1F */ + 0xE2, 0x7A, 0xE2, 0x7B, 0xE2, 0x7C, 0xE2, 0x7D, /* 0x20-0x23 */ + 0xE2, 0x7E, 0xE2, 0x80, 0xE2, 0x81, 0xE2, 0x82, /* 0x24-0x27 */ + 0xE2, 0x83, 0xE2, 0x84, 0xE2, 0x85, 0xE2, 0x86, /* 0x28-0x2B */ + 0xE2, 0x87, 0xE2, 0x88, 0xE2, 0x89, 0xE2, 0x8A, /* 0x2C-0x2F */ + 0xE2, 0x8B, 0xE2, 0x8C, 0xE2, 0x8D, 0xE2, 0x8E, /* 0x30-0x33 */ + 0xE2, 0x8F, 0xE2, 0x90, 0xE2, 0x91, 0xE2, 0x92, /* 0x34-0x37 */ + 0xE2, 0x93, 0xE2, 0x94, 0xE2, 0x95, 0xE2, 0x96, /* 0x38-0x3B */ + 0xE2, 0x97, 0xE2, 0x98, 0xE2, 0x99, 0xE2, 0x9A, /* 0x3C-0x3F */ + 0xE2, 0x9B, 0xE2, 0x9C, 0xE2, 0x9D, 0xE2, 0x9E, /* 0x40-0x43 */ + 0xE2, 0x9F, 0xE2, 0xA0, 0xE3, 0x40, 0xE3, 0x41, /* 0x44-0x47 */ + 0xE3, 0x42, 0xE3, 0x43, 0xE3, 0x44, 0xE3, 0x45, /* 0x48-0x4B */ + 0xE3, 0x46, 0xE3, 0x47, 0xE3, 0x48, 0xE3, 0x49, /* 0x4C-0x4F */ + 0xE3, 0x4A, 0xE3, 0x4B, 0xE3, 0x4C, 0xE3, 0x4D, /* 0x50-0x53 */ + 0xE3, 0x4E, 0xE3, 0x4F, 0xE3, 0x50, 0xE3, 0x51, /* 0x54-0x57 */ + 0xE3, 0x52, 0xE3, 0x53, 0xE3, 0x54, 0xE3, 0x55, /* 0x58-0x5B */ + 0xE3, 0x56, 0xE3, 0x57, 0xE3, 0x58, 0xE3, 0x59, /* 0x5C-0x5F */ + 0xE3, 0x5A, 0xE3, 0x5B, 0xE3, 0x5C, 0xE3, 0x5D, /* 0x60-0x63 */ + 0xE3, 0x5E, 0xE3, 0x5F, 0xE3, 0x60, 0xE3, 0x61, /* 0x64-0x67 */ + 0xE3, 0x62, 0xE3, 0x63, 0xE3, 0x64, 0xE3, 0x65, /* 0x68-0x6B */ + 0xE3, 0x66, 0xE3, 0x67, 0xE3, 0x68, 0xE3, 0x69, /* 0x6C-0x6F */ + 0xE3, 0x6A, 0xE3, 0x6B, 0xE3, 0x6C, 0xE3, 0x6D, /* 0x70-0x73 */ + 0xBC, 0xF8, 0xE3, 0x6E, 0xE3, 0x6F, 0xE3, 0x70, /* 0x74-0x77 */ + 0xE3, 0x71, 0xE3, 0x72, 0xE3, 0x73, 0xE3, 0x74, /* 0x78-0x7B */ + 0xE3, 0x75, 0xE3, 0x76, 0xE3, 0x77, 0xE3, 0x78, /* 0x7C-0x7F */ + + 0xE3, 0x79, 0xE3, 0x7A, 0xE3, 0x7B, 0xE3, 0x7C, /* 0x80-0x83 */ + 0xE3, 0x7D, 0xE3, 0x7E, 0xE3, 0x80, 0xE3, 0x81, /* 0x84-0x87 */ + 0xE3, 0x82, 0xE3, 0x83, 0xE3, 0x84, 0xE3, 0x85, /* 0x88-0x8B */ + 0xE3, 0x86, 0xE3, 0x87, 0xF6, 0xC6, 0xE3, 0x88, /* 0x8C-0x8F */ + 0xE3, 0x89, 0xE3, 0x8A, 0xE3, 0x8B, 0xE3, 0x8C, /* 0x90-0x93 */ + 0xE3, 0x8D, 0xE3, 0x8E, 0xE3, 0x8F, 0xE3, 0x90, /* 0x94-0x97 */ + 0xE3, 0x91, 0xE3, 0x92, 0xE3, 0x93, 0xE3, 0x94, /* 0x98-0x9B */ + 0xE3, 0x95, 0xE3, 0x96, 0xE3, 0x97, 0xE3, 0x98, /* 0x9C-0x9F */ + 0xE3, 0x99, 0xE3, 0x9A, 0xE3, 0x9B, 0xE3, 0x9C, /* 0xA0-0xA3 */ + 0xE3, 0x9D, 0xE3, 0x9E, 0xE3, 0x9F, 0xE3, 0xA0, /* 0xA4-0xA7 */ + 0xE4, 0x40, 0xE4, 0x41, 0xE4, 0x42, 0xE4, 0x43, /* 0xA8-0xAB */ + 0xE4, 0x44, 0xE4, 0x45, 0xF6, 0xC7, 0xE4, 0x46, /* 0xAC-0xAF */ + 0xE4, 0x47, 0xE4, 0x48, 0xE4, 0x49, 0xE4, 0x4A, /* 0xB0-0xB3 */ + 0xE4, 0x4B, 0xE4, 0x4C, 0xE4, 0x4D, 0xE4, 0x4E, /* 0xB4-0xB7 */ + 0xE4, 0x4F, 0xE4, 0x50, 0xE4, 0x51, 0xE4, 0x52, /* 0xB8-0xBB */ + 0xE4, 0x53, 0xE4, 0x54, 0xE4, 0x55, 0xE4, 0x56, /* 0xBC-0xBF */ + 0xE4, 0x57, 0xE4, 0x58, 0xE4, 0x59, 0xE4, 0x5A, /* 0xC0-0xC3 */ + 0xE4, 0x5B, 0xE4, 0x5C, 0xE4, 0x5D, 0xE4, 0x5E, /* 0xC4-0xC7 */ + 0xF6, 0xC8, 0xE4, 0x5F, 0xE4, 0x60, 0xE4, 0x61, /* 0xC8-0xCB */ + 0xE4, 0x62, 0xE4, 0x63, 0xE4, 0x64, 0xE4, 0x65, /* 0xCC-0xCF */ + 0xE4, 0x66, 0xE4, 0x67, 0xE4, 0x68, 0xE4, 0x69, /* 0xD0-0xD3 */ + 0xE4, 0x6A, 0xE4, 0x6B, 0xE4, 0x6C, 0xE4, 0x6D, /* 0xD4-0xD7 */ + 0xE4, 0x6E, 0xE4, 0x6F, 0xE4, 0x70, 0xE4, 0x71, /* 0xD8-0xDB */ + 0xE4, 0x72, 0xE4, 0x73, 0xE4, 0x74, 0xE4, 0x75, /* 0xDC-0xDF */ + 0xE4, 0x76, 0xE4, 0x77, 0xE4, 0x78, 0xE4, 0x79, /* 0xE0-0xE3 */ + 0xE4, 0x7A, 0xE4, 0x7B, 0xE4, 0x7C, 0xE4, 0x7D, /* 0xE4-0xE7 */ + 0xE4, 0x7E, 0xE4, 0x80, 0xE4, 0x81, 0xE4, 0x82, /* 0xE8-0xEB */ + 0xE4, 0x83, 0xE4, 0x84, 0xE4, 0x85, 0xE4, 0x86, /* 0xEC-0xEF */ + 0xE4, 0x87, 0xE4, 0x88, 0xE4, 0x89, 0xE4, 0x8A, /* 0xF0-0xF3 */ + 0xE4, 0x8B, 0xE4, 0x8C, 0xE4, 0x8D, 0xE4, 0x8E, /* 0xF4-0xF7 */ + 0xE4, 0x8F, 0xE4, 0x90, 0xE4, 0x91, 0xE4, 0x92, /* 0xF8-0xFB */ + 0xE4, 0x93, 0xE4, 0x94, 0xE4, 0x95, 0xE4, 0x96, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0xE4, 0x97, 0xE4, 0x98, 0xE4, 0x99, 0xE4, 0x9A, /* 0x00-0x03 */ + 0xE4, 0x9B, 0xE4, 0x9C, 0xE4, 0x9D, 0xE4, 0x9E, /* 0x04-0x07 */ + 0xE4, 0x9F, 0xE4, 0xA0, 0xE5, 0x40, 0xE5, 0x41, /* 0x08-0x0B */ + 0xE5, 0x42, 0xE5, 0x43, 0xE5, 0x44, 0xE5, 0x45, /* 0x0C-0x0F */ + 0xE5, 0x46, 0xE5, 0x47, 0xE5, 0x48, 0xE5, 0x49, /* 0x10-0x13 */ + 0xE5, 0x4A, 0xE5, 0x4B, 0xE5, 0x4C, 0xE5, 0x4D, /* 0x14-0x17 */ + 0xE5, 0x4E, 0xE5, 0x4F, 0xE5, 0x50, 0xE5, 0x51, /* 0x18-0x1B */ + 0xE5, 0x52, 0xE5, 0x53, 0xE5, 0x54, 0xE5, 0x55, /* 0x1C-0x1F */ + 0xE5, 0x56, 0xE5, 0x57, 0xE5, 0x58, 0xE5, 0x59, /* 0x20-0x23 */ + 0xE5, 0x5A, 0xE5, 0x5B, 0xE5, 0x5C, 0xE5, 0x5D, /* 0x24-0x27 */ + 0xE5, 0x5E, 0xE5, 0x5F, 0xE5, 0x60, 0xE5, 0x61, /* 0x28-0x2B */ + 0xE5, 0x62, 0xE5, 0x63, 0xE5, 0x64, 0xE5, 0x65, /* 0x2C-0x2F */ + 0xE5, 0x66, 0xE5, 0x67, 0xE5, 0x68, 0xE5, 0x69, /* 0x30-0x33 */ + 0xE5, 0x6A, 0xE5, 0x6B, 0xE5, 0x6C, 0xE5, 0x6D, /* 0x34-0x37 */ + 0xE5, 0x6E, 0xE5, 0x6F, 0xE5, 0x70, 0xE5, 0x71, /* 0x38-0x3B */ + 0xE5, 0x72, 0xE5, 0x73, 0xF6, 0xC9, 0xE5, 0x74, /* 0x3C-0x3F */ + 0xE5, 0x75, 0xE5, 0x76, 0xE5, 0x77, 0xE5, 0x78, /* 0x40-0x43 */ + 0xE5, 0x79, 0xE5, 0x7A, 0xE5, 0x7B, 0xE5, 0x7C, /* 0x44-0x47 */ + 0xE5, 0x7D, 0xE5, 0x7E, 0xE5, 0x80, 0xE5, 0x81, /* 0x48-0x4B */ + 0xE5, 0x82, 0xE5, 0x83, 0xE5, 0x84, 0xE5, 0x85, /* 0x4C-0x4F */ + 0xE5, 0x86, 0xE5, 0x87, 0xE5, 0x88, 0xE5, 0x89, /* 0x50-0x53 */ + 0xE5, 0x8A, 0xE5, 0x8B, 0xE5, 0x8C, 0xE5, 0x8D, /* 0x54-0x57 */ + 0xE5, 0x8E, 0xE5, 0x8F, 0xE5, 0x90, 0xE5, 0x91, /* 0x58-0x5B */ + 0xE5, 0x92, 0xE5, 0x93, 0xE5, 0x94, 0xE5, 0x95, /* 0x5C-0x5F */ + 0xE5, 0x96, 0xE5, 0x97, 0xE5, 0x98, 0xE5, 0x99, /* 0x60-0x63 */ + 0xE5, 0x9A, 0xE5, 0x9B, 0xE5, 0x9C, 0xE5, 0x9D, /* 0x64-0x67 */ + 0xE5, 0x9E, 0xE5, 0x9F, 0xF6, 0xCA, 0xE5, 0xA0, /* 0x68-0x6B */ + 0xE6, 0x40, 0xE6, 0x41, 0xE6, 0x42, 0xE6, 0x43, /* 0x6C-0x6F */ + 0xE6, 0x44, 0xE6, 0x45, 0xE6, 0x46, 0xE6, 0x47, /* 0x70-0x73 */ + 0xE6, 0x48, 0xE6, 0x49, 0xE6, 0x4A, 0xE6, 0x4B, /* 0x74-0x77 */ + 0xE6, 0x4C, 0xE6, 0x4D, 0xE6, 0x4E, 0xE6, 0x4F, /* 0x78-0x7B */ + 0xE6, 0x50, 0xE6, 0x51, 0xE6, 0x52, 0xE6, 0x53, /* 0x7C-0x7F */ + + 0xE6, 0x54, 0xE6, 0x55, 0xE6, 0x56, 0xE6, 0x57, /* 0x80-0x83 */ + 0xE6, 0x58, 0xE6, 0x59, 0xE6, 0x5A, 0xE6, 0x5B, /* 0x84-0x87 */ + 0xE6, 0x5C, 0xE6, 0x5D, 0xE6, 0x5E, 0xE6, 0x5F, /* 0x88-0x8B */ + 0xE6, 0x60, 0xE6, 0x61, 0xE6, 0x62, 0xF6, 0xCC, /* 0x8C-0x8F */ + 0xE6, 0x63, 0xE6, 0x64, 0xE6, 0x65, 0xE6, 0x66, /* 0x90-0x93 */ + 0xE6, 0x67, 0xE6, 0x68, 0xE6, 0x69, 0xE6, 0x6A, /* 0x94-0x97 */ + 0xE6, 0x6B, 0xE6, 0x6C, 0xE6, 0x6D, 0xE6, 0x6E, /* 0x98-0x9B */ + 0xE6, 0x6F, 0xE6, 0x70, 0xE6, 0x71, 0xE6, 0x72, /* 0x9C-0x9F */ + 0xE6, 0x73, 0xE6, 0x74, 0xE6, 0x75, 0xE6, 0x76, /* 0xA0-0xA3 */ + 0xE6, 0x77, 0xE6, 0x78, 0xE6, 0x79, 0xE6, 0x7A, /* 0xA4-0xA7 */ + 0xE6, 0x7B, 0xE6, 0x7C, 0xE6, 0x7D, 0xE6, 0x7E, /* 0xA8-0xAB */ + 0xE6, 0x80, 0xE6, 0x81, 0xE6, 0x82, 0xE6, 0x83, /* 0xAC-0xAF */ + 0xE6, 0x84, 0xE6, 0x85, 0xE6, 0x86, 0xE6, 0x87, /* 0xB0-0xB3 */ + 0xE6, 0x88, 0xE6, 0x89, 0xE6, 0x8A, 0xE6, 0x8B, /* 0xB4-0xB7 */ + 0xE6, 0x8C, 0xE6, 0x8D, 0xE6, 0x8E, 0xE6, 0x8F, /* 0xB8-0xBB */ + 0xE6, 0x90, 0xE6, 0x91, 0xE6, 0x92, 0xE6, 0x93, /* 0xBC-0xBF */ + 0xE6, 0x94, 0xE6, 0x95, 0xE6, 0x96, 0xE6, 0x97, /* 0xC0-0xC3 */ + 0xE6, 0x98, 0xE6, 0x99, 0xE6, 0x9A, 0xE6, 0x9B, /* 0xC4-0xC7 */ + 0xE6, 0x9C, 0xE6, 0x9D, 0xF6, 0xCB, 0xE6, 0x9E, /* 0xC8-0xCB */ + 0xE6, 0x9F, 0xE6, 0xA0, 0xE7, 0x40, 0xE7, 0x41, /* 0xCC-0xCF */ + 0xE7, 0x42, 0xE7, 0x43, 0xE7, 0x44, 0xE7, 0x45, /* 0xD0-0xD3 */ + 0xE7, 0x46, 0xE7, 0x47, 0xF7, 0xE9, 0xE7, 0x48, /* 0xD4-0xD7 */ + 0xE7, 0x49, 0xE7, 0x4A, 0xE7, 0x4B, 0xE7, 0x4C, /* 0xD8-0xDB */ + 0xE7, 0x4D, 0xE7, 0x4E, 0xE7, 0x4F, 0xE7, 0x50, /* 0xDC-0xDF */ + 0xE7, 0x51, 0xE7, 0x52, 0xE7, 0x53, 0xE7, 0x54, /* 0xE0-0xE3 */ + 0xE7, 0x55, 0xE7, 0x56, 0xE7, 0x57, 0xE7, 0x58, /* 0xE4-0xE7 */ + 0xE7, 0x59, 0xE7, 0x5A, 0xE7, 0x5B, 0xE7, 0x5C, /* 0xE8-0xEB */ + 0xE7, 0x5D, 0xE7, 0x5E, 0xE7, 0x5F, 0xE7, 0x60, /* 0xEC-0xEF */ + 0xE7, 0x61, 0xE7, 0x62, 0xE7, 0x63, 0xE7, 0x64, /* 0xF0-0xF3 */ + 0xE7, 0x65, 0xE7, 0x66, 0xE7, 0x67, 0xE7, 0x68, /* 0xF4-0xF7 */ + 0xE7, 0x69, 0xE7, 0x6A, 0xE7, 0x6B, 0xE7, 0x6C, /* 0xF8-0xFB */ + 0xE7, 0x6D, 0xE7, 0x6E, 0xE7, 0x6F, 0xE7, 0x70, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_94[512] = { + 0xE7, 0x71, 0xE7, 0x72, 0xE7, 0x73, 0xE7, 0x74, /* 0x00-0x03 */ + 0xE7, 0x75, 0xE7, 0x76, 0xE7, 0x77, 0xE7, 0x78, /* 0x04-0x07 */ + 0xE7, 0x79, 0xE7, 0x7A, 0xE7, 0x7B, 0xE7, 0x7C, /* 0x08-0x0B */ + 0xE7, 0x7D, 0xE7, 0x7E, 0xE7, 0x80, 0xE7, 0x81, /* 0x0C-0x0F */ + 0xE7, 0x82, 0xE7, 0x83, 0xE7, 0x84, 0xE7, 0x85, /* 0x10-0x13 */ + 0xE7, 0x86, 0xE7, 0x87, 0xE7, 0x88, 0xE7, 0x89, /* 0x14-0x17 */ + 0xE7, 0x8A, 0xE7, 0x8B, 0xE7, 0x8C, 0xE7, 0x8D, /* 0x18-0x1B */ + 0xE7, 0x8E, 0xE7, 0x8F, 0xE7, 0x90, 0xE7, 0x91, /* 0x1C-0x1F */ + 0xE7, 0x92, 0xE7, 0x93, 0xE7, 0x94, 0xE7, 0x95, /* 0x20-0x23 */ + 0xE7, 0x96, 0xE7, 0x97, 0xE7, 0x98, 0xE7, 0x99, /* 0x24-0x27 */ + 0xE7, 0x9A, 0xE7, 0x9B, 0xE7, 0x9C, 0xE7, 0x9D, /* 0x28-0x2B */ + 0xE7, 0x9E, 0xE7, 0x9F, 0xE7, 0xA0, 0xE8, 0x40, /* 0x2C-0x2F */ + 0xE8, 0x41, 0xE8, 0x42, 0xE8, 0x43, 0xE8, 0x44, /* 0x30-0x33 */ + 0xE8, 0x45, 0xE8, 0x46, 0xE8, 0x47, 0xE8, 0x48, /* 0x34-0x37 */ + 0xE8, 0x49, 0xE8, 0x4A, 0xE8, 0x4B, 0xE8, 0x4C, /* 0x38-0x3B */ + 0xE8, 0x4D, 0xE8, 0x4E, 0xF6, 0xCD, 0xE8, 0x4F, /* 0x3C-0x3F */ + 0xE8, 0x50, 0xE8, 0x51, 0xE8, 0x52, 0xE8, 0x53, /* 0x40-0x43 */ + 0xE8, 0x54, 0xE8, 0x55, 0xE8, 0x56, 0xE8, 0x57, /* 0x44-0x47 */ + 0xE8, 0x58, 0xE8, 0x59, 0xE8, 0x5A, 0xE8, 0x5B, /* 0x48-0x4B */ + 0xE8, 0x5C, 0xE8, 0x5D, 0xE8, 0x5E, 0xE8, 0x5F, /* 0x4C-0x4F */ + 0xE8, 0x60, 0xE8, 0x61, 0xE8, 0x62, 0xE8, 0x63, /* 0x50-0x53 */ + 0xE8, 0x64, 0xE8, 0x65, 0xE8, 0x66, 0xE8, 0x67, /* 0x54-0x57 */ + 0xE8, 0x68, 0xE8, 0x69, 0xE8, 0x6A, 0xE8, 0x6B, /* 0x58-0x5B */ + 0xE8, 0x6C, 0xE8, 0x6D, 0xE8, 0x6E, 0xE8, 0x6F, /* 0x5C-0x5F */ + 0xE8, 0x70, 0xE8, 0x71, 0xE8, 0x72, 0xE8, 0x73, /* 0x60-0x63 */ + 0xE8, 0x74, 0xE8, 0x75, 0xE8, 0x76, 0xE8, 0x77, /* 0x64-0x67 */ + 0xE8, 0x78, 0xE8, 0x79, 0xE8, 0x7A, 0xF6, 0xCE, /* 0x68-0x6B */ + 0xE8, 0x7B, 0xE8, 0x7C, 0xE8, 0x7D, 0xE8, 0x7E, /* 0x6C-0x6F */ + 0xE8, 0x80, 0xE8, 0x81, 0xE8, 0x82, 0xE8, 0x83, /* 0x70-0x73 */ + 0xE8, 0x84, 0xE8, 0x85, 0xE8, 0x86, 0xE8, 0x87, /* 0x74-0x77 */ + 0xE8, 0x88, 0xE8, 0x89, 0xE8, 0x8A, 0xE8, 0x8B, /* 0x78-0x7B */ + 0xE8, 0x8C, 0xE8, 0x8D, 0xE8, 0x8E, 0xE8, 0x8F, /* 0x7C-0x7F */ + + 0xE8, 0x90, 0xE8, 0x91, 0xE8, 0x92, 0xE8, 0x93, /* 0x80-0x83 */ + 0xE8, 0x94, 0xEE, 0xC4, 0xEE, 0xC5, 0xEE, 0xC6, /* 0x84-0x87 */ + 0xD5, 0xEB, 0xB6, 0xA4, 0xEE, 0xC8, 0xEE, 0xC7, /* 0x88-0x8B */ + 0xEE, 0xC9, 0xEE, 0xCA, 0xC7, 0xA5, 0xEE, 0xCB, /* 0x8C-0x8F */ + 0xEE, 0xCC, 0xE8, 0x95, 0xB7, 0xB0, 0xB5, 0xF6, /* 0x90-0x93 */ + 0xEE, 0xCD, 0xEE, 0xCF, 0xE8, 0x96, 0xEE, 0xCE, /* 0x94-0x97 */ + 0xE8, 0x97, 0xB8, 0xC6, 0xEE, 0xD0, 0xEE, 0xD1, /* 0x98-0x9B */ + 0xEE, 0xD2, 0xB6, 0xDB, 0xB3, 0xAE, 0xD6, 0xD3, /* 0x9C-0x9F */ + 0xC4, 0xC6, 0xB1, 0xB5, 0xB8, 0xD6, 0xEE, 0xD3, /* 0xA0-0xA3 */ + 0xEE, 0xD4, 0xD4, 0xBF, 0xC7, 0xD5, 0xBE, 0xFB, /* 0xA4-0xA7 */ + 0xCE, 0xD9, 0xB9, 0xB3, 0xEE, 0xD6, 0xEE, 0xD5, /* 0xA8-0xAB */ + 0xEE, 0xD8, 0xEE, 0xD7, 0xC5, 0xA5, 0xEE, 0xD9, /* 0xAC-0xAF */ + 0xEE, 0xDA, 0xC7, 0xAE, 0xEE, 0xDB, 0xC7, 0xAF, /* 0xB0-0xB3 */ + 0xEE, 0xDC, 0xB2, 0xA7, 0xEE, 0xDD, 0xEE, 0xDE, /* 0xB4-0xB7 */ + 0xEE, 0xDF, 0xEE, 0xE0, 0xEE, 0xE1, 0xD7, 0xEA, /* 0xB8-0xBB */ + 0xEE, 0xE2, 0xEE, 0xE3, 0xBC, 0xD8, 0xEE, 0xE4, /* 0xBC-0xBF */ + 0xD3, 0xCB, 0xCC, 0xFA, 0xB2, 0xAC, 0xC1, 0xE5, /* 0xC0-0xC3 */ + 0xEE, 0xE5, 0xC7, 0xA6, 0xC3, 0xAD, 0xE8, 0x98, /* 0xC4-0xC7 */ + 0xEE, 0xE6, 0xEE, 0xE7, 0xEE, 0xE8, 0xEE, 0xE9, /* 0xC8-0xCB */ + 0xEE, 0xEA, 0xEE, 0xEB, 0xEE, 0xEC, 0xE8, 0x99, /* 0xCC-0xCF */ + 0xEE, 0xED, 0xEE, 0xEE, 0xEE, 0xEF, 0xE8, 0x9A, /* 0xD0-0xD3 */ + 0xE8, 0x9B, 0xEE, 0xF0, 0xEE, 0xF1, 0xEE, 0xF2, /* 0xD4-0xD7 */ + 0xEE, 0xF4, 0xEE, 0xF3, 0xE8, 0x9C, 0xEE, 0xF5, /* 0xD8-0xDB */ + 0xCD, 0xAD, 0xC2, 0xC1, 0xEE, 0xF6, 0xEE, 0xF7, /* 0xDC-0xDF */ + 0xEE, 0xF8, 0xD5, 0xA1, 0xEE, 0xF9, 0xCF, 0xB3, /* 0xE0-0xE3 */ + 0xEE, 0xFA, 0xEE, 0xFB, 0xE8, 0x9D, 0xEE, 0xFC, /* 0xE4-0xE7 */ + 0xEE, 0xFD, 0xEF, 0xA1, 0xEE, 0xFE, 0xEF, 0xA2, /* 0xE8-0xEB */ + 0xB8, 0xF5, 0xC3, 0xFA, 0xEF, 0xA3, 0xEF, 0xA4, /* 0xEC-0xEF */ + 0xBD, 0xC2, 0xD2, 0xBF, 0xB2, 0xF9, 0xEF, 0xA5, /* 0xF0-0xF3 */ + 0xEF, 0xA6, 0xEF, 0xA7, 0xD2, 0xF8, 0xEF, 0xA8, /* 0xF4-0xF7 */ + 0xD6, 0xFD, 0xEF, 0xA9, 0xC6, 0xCC, 0xE8, 0x9E, /* 0xF8-0xFB */ + 0xEF, 0xAA, 0xEF, 0xAB, 0xC1, 0xB4, 0xEF, 0xAC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_95[512] = { + 0xCF, 0xFA, 0xCB, 0xF8, 0xEF, 0xAE, 0xEF, 0xAD, /* 0x00-0x03 */ + 0xB3, 0xFA, 0xB9, 0xF8, 0xEF, 0xAF, 0xEF, 0xB0, /* 0x04-0x07 */ + 0xD0, 0xE2, 0xEF, 0xB1, 0xEF, 0xB2, 0xB7, 0xE6, /* 0x08-0x0B */ + 0xD0, 0xBF, 0xEF, 0xB3, 0xEF, 0xB4, 0xEF, 0xB5, /* 0x0C-0x0F */ + 0xC8, 0xF1, 0xCC, 0xE0, 0xEF, 0xB6, 0xEF, 0xB7, /* 0x10-0x13 */ + 0xEF, 0xB8, 0xEF, 0xB9, 0xEF, 0xBA, 0xD5, 0xE0, /* 0x14-0x17 */ + 0xEF, 0xBB, 0xB4, 0xED, 0xC3, 0xAA, 0xEF, 0xBC, /* 0x18-0x1B */ + 0xE8, 0x9F, 0xEF, 0xBD, 0xEF, 0xBE, 0xEF, 0xBF, /* 0x1C-0x1F */ + 0xE8, 0xA0, 0xCE, 0xFD, 0xEF, 0xC0, 0xC2, 0xE0, /* 0x20-0x23 */ + 0xB4, 0xB8, 0xD7, 0xB6, 0xBD, 0xF5, 0xE9, 0x40, /* 0x24-0x27 */ + 0xCF, 0xC7, 0xEF, 0xC3, 0xEF, 0xC1, 0xEF, 0xC2, /* 0x28-0x2B */ + 0xEF, 0xC4, 0xB6, 0xA7, 0xBC, 0xFC, 0xBE, 0xE2, /* 0x2C-0x2F */ + 0xC3, 0xCC, 0xEF, 0xC5, 0xEF, 0xC6, 0xE9, 0x41, /* 0x30-0x33 */ + 0xEF, 0xC7, 0xEF, 0xCF, 0xEF, 0xC8, 0xEF, 0xC9, /* 0x34-0x37 */ + 0xEF, 0xCA, 0xC7, 0xC2, 0xEF, 0xF1, 0xB6, 0xCD, /* 0x38-0x3B */ + 0xEF, 0xCB, 0xE9, 0x42, 0xEF, 0xCC, 0xEF, 0xCD, /* 0x3C-0x3F */ + 0xB6, 0xC6, 0xC3, 0xBE, 0xEF, 0xCE, 0xE9, 0x43, /* 0x40-0x43 */ + 0xEF, 0xD0, 0xEF, 0xD1, 0xEF, 0xD2, 0xD5, 0xF2, /* 0x44-0x47 */ + 0xE9, 0x44, 0xEF, 0xD3, 0xC4, 0xF7, 0xE9, 0x45, /* 0x48-0x4B */ + 0xEF, 0xD4, 0xC4, 0xF8, 0xEF, 0xD5, 0xEF, 0xD6, /* 0x4C-0x4F */ + 0xB8, 0xE4, 0xB0, 0xF7, 0xEF, 0xD7, 0xEF, 0xD8, /* 0x50-0x53 */ + 0xEF, 0xD9, 0xE9, 0x46, 0xEF, 0xDA, 0xEF, 0xDB, /* 0x54-0x57 */ + 0xEF, 0xDC, 0xEF, 0xDD, 0xE9, 0x47, 0xEF, 0xDE, /* 0x58-0x5B */ + 0xBE, 0xB5, 0xEF, 0xE1, 0xEF, 0xDF, 0xEF, 0xE0, /* 0x5C-0x5F */ + 0xE9, 0x48, 0xEF, 0xE2, 0xEF, 0xE3, 0xC1, 0xCD, /* 0x60-0x63 */ + 0xEF, 0xE4, 0xEF, 0xE5, 0xEF, 0xE6, 0xEF, 0xE7, /* 0x64-0x67 */ + 0xEF, 0xE8, 0xEF, 0xE9, 0xEF, 0xEA, 0xEF, 0xEB, /* 0x68-0x6B */ + 0xEF, 0xEC, 0xC0, 0xD8, 0xE9, 0x49, 0xEF, 0xED, /* 0x6C-0x6F */ + 0xC1, 0xAD, 0xEF, 0xEE, 0xEF, 0xEF, 0xEF, 0xF0, /* 0x70-0x73 */ + 0xE9, 0x4A, 0xE9, 0x4B, 0xCF, 0xE2, 0xE9, 0x4C, /* 0x74-0x77 */ + 0xE9, 0x4D, 0xE9, 0x4E, 0xE9, 0x4F, 0xE9, 0x50, /* 0x78-0x7B */ + 0xE9, 0x51, 0xE9, 0x52, 0xE9, 0x53, 0xB3, 0xA4, /* 0x7C-0x7F */ + + 0xE9, 0x54, 0xE9, 0x55, 0xE9, 0x56, 0xE9, 0x57, /* 0x80-0x83 */ + 0xE9, 0x58, 0xE9, 0x59, 0xE9, 0x5A, 0xE9, 0x5B, /* 0x84-0x87 */ + 0xE9, 0x5C, 0xE9, 0x5D, 0xE9, 0x5E, 0xE9, 0x5F, /* 0x88-0x8B */ + 0xE9, 0x60, 0xE9, 0x61, 0xE9, 0x62, 0xE9, 0x63, /* 0x8C-0x8F */ + 0xE9, 0x64, 0xE9, 0x65, 0xE9, 0x66, 0xE9, 0x67, /* 0x90-0x93 */ + 0xE9, 0x68, 0xE9, 0x69, 0xE9, 0x6A, 0xE9, 0x6B, /* 0x94-0x97 */ + 0xE9, 0x6C, 0xE9, 0x6D, 0xE9, 0x6E, 0xE9, 0x6F, /* 0x98-0x9B */ + 0xE9, 0x70, 0xE9, 0x71, 0xE9, 0x72, 0xE9, 0x73, /* 0x9C-0x9F */ + 0xE9, 0x74, 0xE9, 0x75, 0xE9, 0x76, 0xE9, 0x77, /* 0xA0-0xA3 */ + 0xE9, 0x78, 0xE9, 0x79, 0xE9, 0x7A, 0xE9, 0x7B, /* 0xA4-0xA7 */ + 0xE9, 0x7C, 0xE9, 0x7D, 0xE9, 0x7E, 0xE9, 0x80, /* 0xA8-0xAB */ + 0xE9, 0x81, 0xE9, 0x82, 0xE9, 0x83, 0xE9, 0x84, /* 0xAC-0xAF */ + 0xE9, 0x85, 0xE9, 0x86, 0xE9, 0x87, 0xE9, 0x88, /* 0xB0-0xB3 */ + 0xE9, 0x89, 0xE9, 0x8A, 0xE9, 0x8B, 0xE9, 0x8C, /* 0xB4-0xB7 */ + 0xE9, 0x8D, 0xE9, 0x8E, 0xE9, 0x8F, 0xE9, 0x90, /* 0xB8-0xBB */ + 0xE9, 0x91, 0xE9, 0x92, 0xE9, 0x93, 0xE9, 0x94, /* 0xBC-0xBF */ + 0xE9, 0x95, 0xE9, 0x96, 0xE9, 0x97, 0xE9, 0x98, /* 0xC0-0xC3 */ + 0xE9, 0x99, 0xE9, 0x9A, 0xE9, 0x9B, 0xE9, 0x9C, /* 0xC4-0xC7 */ + 0xE9, 0x9D, 0xE9, 0x9E, 0xE9, 0x9F, 0xE9, 0xA0, /* 0xC8-0xCB */ + 0xEA, 0x40, 0xEA, 0x41, 0xEA, 0x42, 0xEA, 0x43, /* 0xCC-0xCF */ + 0xEA, 0x44, 0xEA, 0x45, 0xEA, 0x46, 0xEA, 0x47, /* 0xD0-0xD3 */ + 0xEA, 0x48, 0xEA, 0x49, 0xEA, 0x4A, 0xEA, 0x4B, /* 0xD4-0xD7 */ + 0xEA, 0x4C, 0xEA, 0x4D, 0xEA, 0x4E, 0xEA, 0x4F, /* 0xD8-0xDB */ + 0xEA, 0x50, 0xEA, 0x51, 0xEA, 0x52, 0xEA, 0x53, /* 0xDC-0xDF */ + 0xEA, 0x54, 0xEA, 0x55, 0xEA, 0x56, 0xEA, 0x57, /* 0xE0-0xE3 */ + 0xEA, 0x58, 0xEA, 0x59, 0xEA, 0x5A, 0xEA, 0x5B, /* 0xE4-0xE7 */ + 0xC3, 0xC5, 0xE3, 0xC5, 0xC9, 0xC1, 0xE3, 0xC6, /* 0xE8-0xEB */ + 0xEA, 0x5C, 0xB1, 0xD5, 0xCE, 0xCA, 0xB4, 0xB3, /* 0xEC-0xEF */ + 0xC8, 0xF2, 0xE3, 0xC7, 0xCF, 0xD0, 0xE3, 0xC8, /* 0xF0-0xF3 */ + 0xBC, 0xE4, 0xE3, 0xC9, 0xE3, 0xCA, 0xC3, 0xC6, /* 0xF4-0xF7 */ + 0xD5, 0xA2, 0xC4, 0xD6, 0xB9, 0xEB, 0xCE, 0xC5, /* 0xF8-0xFB */ + 0xE3, 0xCB, 0xC3, 0xF6, 0xE3, 0xCC, 0xEA, 0x5D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_96[512] = { + 0xB7, 0xA7, 0xB8, 0xF3, 0xBA, 0xD2, 0xE3, 0xCD, /* 0x00-0x03 */ + 0xE3, 0xCE, 0xD4, 0xC4, 0xE3, 0xCF, 0xEA, 0x5E, /* 0x04-0x07 */ + 0xE3, 0xD0, 0xD1, 0xCB, 0xE3, 0xD1, 0xE3, 0xD2, /* 0x08-0x0B */ + 0xE3, 0xD3, 0xE3, 0xD4, 0xD1, 0xD6, 0xE3, 0xD5, /* 0x0C-0x0F */ + 0xB2, 0xFB, 0xC0, 0xBB, 0xE3, 0xD6, 0xEA, 0x5F, /* 0x10-0x13 */ + 0xC0, 0xAB, 0xE3, 0xD7, 0xE3, 0xD8, 0xE3, 0xD9, /* 0x14-0x17 */ + 0xEA, 0x60, 0xE3, 0xDA, 0xE3, 0xDB, 0xEA, 0x61, /* 0x18-0x1B */ + 0xB8, 0xB7, 0xDA, 0xE2, 0xEA, 0x62, 0xB6, 0xD3, /* 0x1C-0x1F */ + 0xEA, 0x63, 0xDA, 0xE4, 0xDA, 0xE3, 0xEA, 0x64, /* 0x20-0x23 */ + 0xEA, 0x65, 0xEA, 0x66, 0xEA, 0x67, 0xEA, 0x68, /* 0x24-0x27 */ + 0xEA, 0x69, 0xEA, 0x6A, 0xDA, 0xE6, 0xEA, 0x6B, /* 0x28-0x2B */ + 0xEA, 0x6C, 0xEA, 0x6D, 0xC8, 0xEE, 0xEA, 0x6E, /* 0x2C-0x2F */ + 0xEA, 0x6F, 0xDA, 0xE5, 0xB7, 0xC0, 0xD1, 0xF4, /* 0x30-0x33 */ + 0xD2, 0xF5, 0xD5, 0xF3, 0xBD, 0xD7, 0xEA, 0x70, /* 0x34-0x37 */ + 0xEA, 0x71, 0xEA, 0x72, 0xEA, 0x73, 0xD7, 0xE8, /* 0x38-0x3B */ + 0xDA, 0xE8, 0xDA, 0xE7, 0xEA, 0x74, 0xB0, 0xA2, /* 0x3C-0x3F */ + 0xCD, 0xD3, 0xEA, 0x75, 0xDA, 0xE9, 0xEA, 0x76, /* 0x40-0x43 */ + 0xB8, 0xBD, 0xBC, 0xCA, 0xC2, 0xBD, 0xC2, 0xA4, /* 0x44-0x47 */ + 0xB3, 0xC2, 0xDA, 0xEA, 0xEA, 0x77, 0xC2, 0xAA, /* 0x48-0x4B */ + 0xC4, 0xB0, 0xBD, 0xB5, 0xEA, 0x78, 0xEA, 0x79, /* 0x4C-0x4F */ + 0xCF, 0xDE, 0xEA, 0x7A, 0xEA, 0x7B, 0xEA, 0x7C, /* 0x50-0x53 */ + 0xDA, 0xEB, 0xC9, 0xC2, 0xEA, 0x7D, 0xEA, 0x7E, /* 0x54-0x57 */ + 0xEA, 0x80, 0xEA, 0x81, 0xEA, 0x82, 0xB1, 0xDD, /* 0x58-0x5B */ + 0xEA, 0x83, 0xEA, 0x84, 0xEA, 0x85, 0xDA, 0xEC, /* 0x5C-0x5F */ + 0xEA, 0x86, 0xB6, 0xB8, 0xD4, 0xBA, 0xEA, 0x87, /* 0x60-0x63 */ + 0xB3, 0xFD, 0xEA, 0x88, 0xEA, 0x89, 0xDA, 0xED, /* 0x64-0x67 */ + 0xD4, 0xC9, 0xCF, 0xD5, 0xC5, 0xE3, 0xEA, 0x8A, /* 0x68-0x6B */ + 0xDA, 0xEE, 0xEA, 0x8B, 0xEA, 0x8C, 0xEA, 0x8D, /* 0x6C-0x6F */ + 0xEA, 0x8E, 0xEA, 0x8F, 0xDA, 0xEF, 0xEA, 0x90, /* 0x70-0x73 */ + 0xDA, 0xF0, 0xC1, 0xEA, 0xCC, 0xD5, 0xCF, 0xDD, /* 0x74-0x77 */ + 0xEA, 0x91, 0xEA, 0x92, 0xEA, 0x93, 0xEA, 0x94, /* 0x78-0x7B */ + 0xEA, 0x95, 0xEA, 0x96, 0xEA, 0x97, 0xEA, 0x98, /* 0x7C-0x7F */ + + 0xEA, 0x99, 0xEA, 0x9A, 0xEA, 0x9B, 0xEA, 0x9C, /* 0x80-0x83 */ + 0xEA, 0x9D, 0xD3, 0xE7, 0xC2, 0xA1, 0xEA, 0x9E, /* 0x84-0x87 */ + 0xDA, 0xF1, 0xEA, 0x9F, 0xEA, 0xA0, 0xCB, 0xE5, /* 0x88-0x8B */ + 0xEB, 0x40, 0xDA, 0xF2, 0xEB, 0x41, 0xCB, 0xE6, /* 0x8C-0x8F */ + 0xD2, 0xFE, 0xEB, 0x42, 0xEB, 0x43, 0xEB, 0x44, /* 0x90-0x93 */ + 0xB8, 0xF4, 0xEB, 0x45, 0xEB, 0x46, 0xDA, 0xF3, /* 0x94-0x97 */ + 0xB0, 0xAF, 0xCF, 0xB6, 0xEB, 0x47, 0xEB, 0x48, /* 0x98-0x9B */ + 0xD5, 0xCF, 0xEB, 0x49, 0xEB, 0x4A, 0xEB, 0x4B, /* 0x9C-0x9F */ + 0xEB, 0x4C, 0xEB, 0x4D, 0xEB, 0x4E, 0xEB, 0x4F, /* 0xA0-0xA3 */ + 0xEB, 0x50, 0xEB, 0x51, 0xEB, 0x52, 0xCB, 0xED, /* 0xA4-0xA7 */ + 0xEB, 0x53, 0xEB, 0x54, 0xEB, 0x55, 0xEB, 0x56, /* 0xA8-0xAB */ + 0xEB, 0x57, 0xEB, 0x58, 0xEB, 0x59, 0xEB, 0x5A, /* 0xAC-0xAF */ + 0xDA, 0xF4, 0xEB, 0x5B, 0xEB, 0x5C, 0xE3, 0xC4, /* 0xB0-0xB3 */ + 0xEB, 0x5D, 0xEB, 0x5E, 0xC1, 0xA5, 0xEB, 0x5F, /* 0xB4-0xB7 */ + 0xEB, 0x60, 0xF6, 0xBF, 0xEB, 0x61, 0xEB, 0x62, /* 0xB8-0xBB */ + 0xF6, 0xC0, 0xF6, 0xC1, 0xC4, 0xD1, 0xEB, 0x63, /* 0xBC-0xBF */ + 0xC8, 0xB8, 0xD1, 0xE3, 0xEB, 0x64, 0xEB, 0x65, /* 0xC0-0xC3 */ + 0xD0, 0xDB, 0xD1, 0xC5, 0xBC, 0xAF, 0xB9, 0xCD, /* 0xC4-0xC7 */ + 0xEB, 0x66, 0xEF, 0xF4, 0xEB, 0x67, 0xEB, 0x68, /* 0xC8-0xCB */ + 0xB4, 0xC6, 0xD3, 0xBA, 0xF6, 0xC2, 0xB3, 0xFB, /* 0xCC-0xCF */ + 0xEB, 0x69, 0xEB, 0x6A, 0xF6, 0xC3, 0xEB, 0x6B, /* 0xD0-0xD3 */ + 0xEB, 0x6C, 0xB5, 0xF1, 0xEB, 0x6D, 0xEB, 0x6E, /* 0xD4-0xD7 */ + 0xEB, 0x6F, 0xEB, 0x70, 0xEB, 0x71, 0xEB, 0x72, /* 0xD8-0xDB */ + 0xEB, 0x73, 0xEB, 0x74, 0xEB, 0x75, 0xEB, 0x76, /* 0xDC-0xDF */ + 0xF6, 0xC5, 0xEB, 0x77, 0xEB, 0x78, 0xEB, 0x79, /* 0xE0-0xE3 */ + 0xEB, 0x7A, 0xEB, 0x7B, 0xEB, 0x7C, 0xEB, 0x7D, /* 0xE4-0xE7 */ + 0xD3, 0xEA, 0xF6, 0xA7, 0xD1, 0xA9, 0xEB, 0x7E, /* 0xE8-0xEB */ + 0xEB, 0x80, 0xEB, 0x81, 0xEB, 0x82, 0xF6, 0xA9, /* 0xEC-0xEF */ + 0xEB, 0x83, 0xEB, 0x84, 0xEB, 0x85, 0xF6, 0xA8, /* 0xF0-0xF3 */ + 0xEB, 0x86, 0xEB, 0x87, 0xC1, 0xE3, 0xC0, 0xD7, /* 0xF4-0xF7 */ + 0xEB, 0x88, 0xB1, 0xA2, 0xEB, 0x89, 0xEB, 0x8A, /* 0xF8-0xFB */ + 0xEB, 0x8B, 0xEB, 0x8C, 0xCE, 0xED, 0xEB, 0x8D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_97[512] = { + 0xD0, 0xE8, 0xF6, 0xAB, 0xEB, 0x8E, 0xEB, 0x8F, /* 0x00-0x03 */ + 0xCF, 0xF6, 0xEB, 0x90, 0xF6, 0xAA, 0xD5, 0xF0, /* 0x04-0x07 */ + 0xF6, 0xAC, 0xC3, 0xB9, 0xEB, 0x91, 0xEB, 0x92, /* 0x08-0x0B */ + 0xEB, 0x93, 0xBB, 0xF4, 0xF6, 0xAE, 0xF6, 0xAD, /* 0x0C-0x0F */ + 0xEB, 0x94, 0xEB, 0x95, 0xEB, 0x96, 0xC4, 0xDE, /* 0x10-0x13 */ + 0xEB, 0x97, 0xEB, 0x98, 0xC1, 0xD8, 0xEB, 0x99, /* 0x14-0x17 */ + 0xEB, 0x9A, 0xEB, 0x9B, 0xEB, 0x9C, 0xEB, 0x9D, /* 0x18-0x1B */ + 0xCB, 0xAA, 0xEB, 0x9E, 0xCF, 0xBC, 0xEB, 0x9F, /* 0x1C-0x1F */ + 0xEB, 0xA0, 0xEC, 0x40, 0xEC, 0x41, 0xEC, 0x42, /* 0x20-0x23 */ + 0xEC, 0x43, 0xEC, 0x44, 0xEC, 0x45, 0xEC, 0x46, /* 0x24-0x27 */ + 0xEC, 0x47, 0xEC, 0x48, 0xF6, 0xAF, 0xEC, 0x49, /* 0x28-0x2B */ + 0xEC, 0x4A, 0xF6, 0xB0, 0xEC, 0x4B, 0xEC, 0x4C, /* 0x2C-0x2F */ + 0xF6, 0xB1, 0xEC, 0x4D, 0xC2, 0xB6, 0xEC, 0x4E, /* 0x30-0x33 */ + 0xEC, 0x4F, 0xEC, 0x50, 0xEC, 0x51, 0xEC, 0x52, /* 0x34-0x37 */ + 0xB0, 0xD4, 0xC5, 0xF9, 0xEC, 0x53, 0xEC, 0x54, /* 0x38-0x3B */ + 0xEC, 0x55, 0xEC, 0x56, 0xF6, 0xB2, 0xEC, 0x57, /* 0x3C-0x3F */ + 0xEC, 0x58, 0xEC, 0x59, 0xEC, 0x5A, 0xEC, 0x5B, /* 0x40-0x43 */ + 0xEC, 0x5C, 0xEC, 0x5D, 0xEC, 0x5E, 0xEC, 0x5F, /* 0x44-0x47 */ + 0xEC, 0x60, 0xEC, 0x61, 0xEC, 0x62, 0xEC, 0x63, /* 0x48-0x4B */ + 0xEC, 0x64, 0xEC, 0x65, 0xEC, 0x66, 0xEC, 0x67, /* 0x4C-0x4F */ + 0xEC, 0x68, 0xEC, 0x69, 0xC7, 0xE0, 0xF6, 0xA6, /* 0x50-0x53 */ + 0xEC, 0x6A, 0xEC, 0x6B, 0xBE, 0xB8, 0xEC, 0x6C, /* 0x54-0x57 */ + 0xEC, 0x6D, 0xBE, 0xB2, 0xEC, 0x6E, 0xB5, 0xE5, /* 0x58-0x5B */ + 0xEC, 0x6F, 0xEC, 0x70, 0xB7, 0xC7, 0xEC, 0x71, /* 0x5C-0x5F */ + 0xBF, 0xBF, 0xC3, 0xD2, 0xC3, 0xE6, 0xEC, 0x72, /* 0x60-0x63 */ + 0xEC, 0x73, 0xD8, 0xCC, 0xEC, 0x74, 0xEC, 0x75, /* 0x64-0x67 */ + 0xEC, 0x76, 0xB8, 0xEF, 0xEC, 0x77, 0xEC, 0x78, /* 0x68-0x6B */ + 0xEC, 0x79, 0xEC, 0x7A, 0xEC, 0x7B, 0xEC, 0x7C, /* 0x6C-0x6F */ + 0xEC, 0x7D, 0xEC, 0x7E, 0xEC, 0x80, 0xBD, 0xF9, /* 0x70-0x73 */ + 0xD1, 0xA5, 0xEC, 0x81, 0xB0, 0xD0, 0xEC, 0x82, /* 0x74-0x77 */ + 0xEC, 0x83, 0xEC, 0x84, 0xEC, 0x85, 0xEC, 0x86, /* 0x78-0x7B */ + 0xF7, 0xB0, 0xEC, 0x87, 0xEC, 0x88, 0xEC, 0x89, /* 0x7C-0x7F */ + + 0xEC, 0x8A, 0xEC, 0x8B, 0xEC, 0x8C, 0xEC, 0x8D, /* 0x80-0x83 */ + 0xEC, 0x8E, 0xF7, 0xB1, 0xEC, 0x8F, 0xEC, 0x90, /* 0x84-0x87 */ + 0xEC, 0x91, 0xEC, 0x92, 0xEC, 0x93, 0xD0, 0xAC, /* 0x88-0x8B */ + 0xEC, 0x94, 0xB0, 0xB0, 0xEC, 0x95, 0xEC, 0x96, /* 0x8C-0x8F */ + 0xEC, 0x97, 0xF7, 0xB2, 0xF7, 0xB3, 0xEC, 0x98, /* 0x90-0x93 */ + 0xF7, 0xB4, 0xEC, 0x99, 0xEC, 0x9A, 0xEC, 0x9B, /* 0x94-0x97 */ + 0xC7, 0xCA, 0xEC, 0x9C, 0xEC, 0x9D, 0xEC, 0x9E, /* 0x98-0x9B */ + 0xEC, 0x9F, 0xEC, 0xA0, 0xED, 0x40, 0xED, 0x41, /* 0x9C-0x9F */ + 0xBE, 0xCF, 0xED, 0x42, 0xED, 0x43, 0xF7, 0xB7, /* 0xA0-0xA3 */ + 0xED, 0x44, 0xED, 0x45, 0xED, 0x46, 0xED, 0x47, /* 0xA4-0xA7 */ + 0xED, 0x48, 0xED, 0x49, 0xED, 0x4A, 0xF7, 0xB6, /* 0xA8-0xAB */ + 0xED, 0x4B, 0xB1, 0xDE, 0xED, 0x4C, 0xF7, 0xB5, /* 0xAC-0xAF */ + 0xED, 0x4D, 0xED, 0x4E, 0xF7, 0xB8, 0xED, 0x4F, /* 0xB0-0xB3 */ + 0xF7, 0xB9, 0xED, 0x50, 0xED, 0x51, 0xED, 0x52, /* 0xB4-0xB7 */ + 0xED, 0x53, 0xED, 0x54, 0xED, 0x55, 0xED, 0x56, /* 0xB8-0xBB */ + 0xED, 0x57, 0xED, 0x58, 0xED, 0x59, 0xED, 0x5A, /* 0xBC-0xBF */ + 0xED, 0x5B, 0xED, 0x5C, 0xED, 0x5D, 0xED, 0x5E, /* 0xC0-0xC3 */ + 0xED, 0x5F, 0xED, 0x60, 0xED, 0x61, 0xED, 0x62, /* 0xC4-0xC7 */ + 0xED, 0x63, 0xED, 0x64, 0xED, 0x65, 0xED, 0x66, /* 0xC8-0xCB */ + 0xED, 0x67, 0xED, 0x68, 0xED, 0x69, 0xED, 0x6A, /* 0xCC-0xCF */ + 0xED, 0x6B, 0xED, 0x6C, 0xED, 0x6D, 0xED, 0x6E, /* 0xD0-0xD3 */ + 0xED, 0x6F, 0xED, 0x70, 0xED, 0x71, 0xED, 0x72, /* 0xD4-0xD7 */ + 0xED, 0x73, 0xED, 0x74, 0xED, 0x75, 0xED, 0x76, /* 0xD8-0xDB */ + 0xED, 0x77, 0xED, 0x78, 0xED, 0x79, 0xED, 0x7A, /* 0xDC-0xDF */ + 0xED, 0x7B, 0xED, 0x7C, 0xED, 0x7D, 0xED, 0x7E, /* 0xE0-0xE3 */ + 0xED, 0x80, 0xED, 0x81, 0xCE, 0xA4, 0xC8, 0xCD, /* 0xE4-0xE7 */ + 0xED, 0x82, 0xBA, 0xAB, 0xE8, 0xB8, 0xE8, 0xB9, /* 0xE8-0xEB */ + 0xE8, 0xBA, 0xBE, 0xC2, 0xED, 0x83, 0xED, 0x84, /* 0xEC-0xEF */ + 0xED, 0x85, 0xED, 0x86, 0xED, 0x87, 0xD2, 0xF4, /* 0xF0-0xF3 */ + 0xED, 0x88, 0xD4, 0xCF, 0xC9, 0xD8, 0xED, 0x89, /* 0xF4-0xF7 */ + 0xED, 0x8A, 0xED, 0x8B, 0xED, 0x8C, 0xED, 0x8D, /* 0xF8-0xFB */ + 0xED, 0x8E, 0xED, 0x8F, 0xED, 0x90, 0xED, 0x91, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0xED, 0x92, 0xED, 0x93, 0xED, 0x94, 0xED, 0x95, /* 0x00-0x03 */ + 0xED, 0x96, 0xED, 0x97, 0xED, 0x98, 0xED, 0x99, /* 0x04-0x07 */ + 0xED, 0x9A, 0xED, 0x9B, 0xED, 0x9C, 0xED, 0x9D, /* 0x08-0x0B */ + 0xED, 0x9E, 0xED, 0x9F, 0xED, 0xA0, 0xEE, 0x40, /* 0x0C-0x0F */ + 0xEE, 0x41, 0xEE, 0x42, 0xEE, 0x43, 0xEE, 0x44, /* 0x10-0x13 */ + 0xEE, 0x45, 0xEE, 0x46, 0xEE, 0x47, 0xEE, 0x48, /* 0x14-0x17 */ + 0xEE, 0x49, 0xEE, 0x4A, 0xEE, 0x4B, 0xEE, 0x4C, /* 0x18-0x1B */ + 0xEE, 0x4D, 0xEE, 0x4E, 0xEE, 0x4F, 0xEE, 0x50, /* 0x1C-0x1F */ + 0xEE, 0x51, 0xEE, 0x52, 0xEE, 0x53, 0xEE, 0x54, /* 0x20-0x23 */ + 0xEE, 0x55, 0xEE, 0x56, 0xEE, 0x57, 0xEE, 0x58, /* 0x24-0x27 */ + 0xEE, 0x59, 0xEE, 0x5A, 0xEE, 0x5B, 0xEE, 0x5C, /* 0x28-0x2B */ + 0xEE, 0x5D, 0xEE, 0x5E, 0xEE, 0x5F, 0xEE, 0x60, /* 0x2C-0x2F */ + 0xEE, 0x61, 0xEE, 0x62, 0xEE, 0x63, 0xEE, 0x64, /* 0x30-0x33 */ + 0xEE, 0x65, 0xEE, 0x66, 0xEE, 0x67, 0xEE, 0x68, /* 0x34-0x37 */ + 0xEE, 0x69, 0xEE, 0x6A, 0xEE, 0x6B, 0xEE, 0x6C, /* 0x38-0x3B */ + 0xEE, 0x6D, 0xEE, 0x6E, 0xEE, 0x6F, 0xEE, 0x70, /* 0x3C-0x3F */ + 0xEE, 0x71, 0xEE, 0x72, 0xEE, 0x73, 0xEE, 0x74, /* 0x40-0x43 */ + 0xEE, 0x75, 0xEE, 0x76, 0xEE, 0x77, 0xEE, 0x78, /* 0x44-0x47 */ + 0xEE, 0x79, 0xEE, 0x7A, 0xEE, 0x7B, 0xEE, 0x7C, /* 0x48-0x4B */ + 0xEE, 0x7D, 0xEE, 0x7E, 0xEE, 0x80, 0xEE, 0x81, /* 0x4C-0x4F */ + 0xEE, 0x82, 0xEE, 0x83, 0xEE, 0x84, 0xEE, 0x85, /* 0x50-0x53 */ + 0xEE, 0x86, 0xEE, 0x87, 0xEE, 0x88, 0xEE, 0x89, /* 0x54-0x57 */ + 0xEE, 0x8A, 0xEE, 0x8B, 0xEE, 0x8C, 0xEE, 0x8D, /* 0x58-0x5B */ + 0xEE, 0x8E, 0xEE, 0x8F, 0xEE, 0x90, 0xEE, 0x91, /* 0x5C-0x5F */ + 0xEE, 0x92, 0xEE, 0x93, 0xEE, 0x94, 0xEE, 0x95, /* 0x60-0x63 */ + 0xEE, 0x96, 0xEE, 0x97, 0xEE, 0x98, 0xEE, 0x99, /* 0x64-0x67 */ + 0xEE, 0x9A, 0xEE, 0x9B, 0xEE, 0x9C, 0xEE, 0x9D, /* 0x68-0x6B */ + 0xEE, 0x9E, 0xEE, 0x9F, 0xEE, 0xA0, 0xEF, 0x40, /* 0x6C-0x6F */ + 0xEF, 0x41, 0xEF, 0x42, 0xEF, 0x43, 0xEF, 0x44, /* 0x70-0x73 */ + 0xEF, 0x45, 0xD2, 0xB3, 0xB6, 0xA5, 0xC7, 0xEA, /* 0x74-0x77 */ + 0xF1, 0xFC, 0xCF, 0xEE, 0xCB, 0xB3, 0xD0, 0xEB, /* 0x78-0x7B */ + 0xE7, 0xEF, 0xCD, 0xE7, 0xB9, 0xCB, 0xB6, 0xD9, /* 0x7C-0x7F */ + + 0xF1, 0xFD, 0xB0, 0xE4, 0xCB, 0xCC, 0xF1, 0xFE, /* 0x80-0x83 */ + 0xD4, 0xA4, 0xC2, 0xAD, 0xC1, 0xEC, 0xC6, 0xC4, /* 0x84-0x87 */ + 0xBE, 0xB1, 0xF2, 0xA1, 0xBC, 0xD5, 0xEF, 0x46, /* 0x88-0x8B */ + 0xF2, 0xA2, 0xF2, 0xA3, 0xEF, 0x47, 0xF2, 0xA4, /* 0x8C-0x8F */ + 0xD2, 0xC3, 0xC6, 0xB5, 0xEF, 0x48, 0xCD, 0xC7, /* 0x90-0x93 */ + 0xF2, 0xA5, 0xEF, 0x49, 0xD3, 0xB1, 0xBF, 0xC5, /* 0x94-0x97 */ + 0xCC, 0xE2, 0xEF, 0x4A, 0xF2, 0xA6, 0xF2, 0xA7, /* 0x98-0x9B */ + 0xD1, 0xD5, 0xB6, 0xEE, 0xF2, 0xA8, 0xF2, 0xA9, /* 0x9C-0x9F */ + 0xB5, 0xDF, 0xF2, 0xAA, 0xF2, 0xAB, 0xEF, 0x4B, /* 0xA0-0xA3 */ + 0xB2, 0xFC, 0xF2, 0xAC, 0xF2, 0xAD, 0xC8, 0xA7, /* 0xA4-0xA7 */ + 0xEF, 0x4C, 0xEF, 0x4D, 0xEF, 0x4E, 0xEF, 0x4F, /* 0xA8-0xAB */ + 0xEF, 0x50, 0xEF, 0x51, 0xEF, 0x52, 0xEF, 0x53, /* 0xAC-0xAF */ + 0xEF, 0x54, 0xEF, 0x55, 0xEF, 0x56, 0xEF, 0x57, /* 0xB0-0xB3 */ + 0xEF, 0x58, 0xEF, 0x59, 0xEF, 0x5A, 0xEF, 0x5B, /* 0xB4-0xB7 */ + 0xEF, 0x5C, 0xEF, 0x5D, 0xEF, 0x5E, 0xEF, 0x5F, /* 0xB8-0xBB */ + 0xEF, 0x60, 0xEF, 0x61, 0xEF, 0x62, 0xEF, 0x63, /* 0xBC-0xBF */ + 0xEF, 0x64, 0xEF, 0x65, 0xEF, 0x66, 0xEF, 0x67, /* 0xC0-0xC3 */ + 0xEF, 0x68, 0xEF, 0x69, 0xEF, 0x6A, 0xEF, 0x6B, /* 0xC4-0xC7 */ + 0xEF, 0x6C, 0xEF, 0x6D, 0xEF, 0x6E, 0xEF, 0x6F, /* 0xC8-0xCB */ + 0xEF, 0x70, 0xEF, 0x71, 0xB7, 0xE7, 0xEF, 0x72, /* 0xCC-0xCF */ + 0xEF, 0x73, 0xEC, 0xA9, 0xEC, 0xAA, 0xEC, 0xAB, /* 0xD0-0xD3 */ + 0xEF, 0x74, 0xEC, 0xAC, 0xEF, 0x75, 0xEF, 0x76, /* 0xD4-0xD7 */ + 0xC6, 0xAE, 0xEC, 0xAD, 0xEC, 0xAE, 0xEF, 0x77, /* 0xD8-0xDB */ + 0xEF, 0x78, 0xEF, 0x79, 0xB7, 0xC9, 0xCA, 0xB3, /* 0xDC-0xDF */ + 0xEF, 0x7A, 0xEF, 0x7B, 0xEF, 0x7C, 0xEF, 0x7D, /* 0xE0-0xE3 */ + 0xEF, 0x7E, 0xEF, 0x80, 0xEF, 0x81, 0xE2, 0xB8, /* 0xE4-0xE7 */ + 0xF7, 0xCF, 0xEF, 0x82, 0xEF, 0x83, 0xEF, 0x84, /* 0xE8-0xEB */ + 0xEF, 0x85, 0xEF, 0x86, 0xEF, 0x87, 0xEF, 0x88, /* 0xEC-0xEF */ + 0xEF, 0x89, 0xEF, 0x8A, 0xEF, 0x8B, 0xEF, 0x8C, /* 0xF0-0xF3 */ + 0xEF, 0x8D, 0xEF, 0x8E, 0xEF, 0x8F, 0xEF, 0x90, /* 0xF4-0xF7 */ + 0xEF, 0x91, 0xEF, 0x92, 0xEF, 0x93, 0xEF, 0x94, /* 0xF8-0xFB */ + 0xEF, 0x95, 0xEF, 0x96, 0xEF, 0x97, 0xEF, 0x98, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0xEF, 0x99, 0xEF, 0x9A, 0xEF, 0x9B, 0xEF, 0x9C, /* 0x00-0x03 */ + 0xEF, 0x9D, 0xEF, 0x9E, 0xEF, 0x9F, 0xEF, 0xA0, /* 0x04-0x07 */ + 0xF0, 0x40, 0xF0, 0x41, 0xF0, 0x42, 0xF0, 0x43, /* 0x08-0x0B */ + 0xF0, 0x44, 0xF7, 0xD0, 0xF0, 0x45, 0xF0, 0x46, /* 0x0C-0x0F */ + 0xB2, 0xCD, 0xF0, 0x47, 0xF0, 0x48, 0xF0, 0x49, /* 0x10-0x13 */ + 0xF0, 0x4A, 0xF0, 0x4B, 0xF0, 0x4C, 0xF0, 0x4D, /* 0x14-0x17 */ + 0xF0, 0x4E, 0xF0, 0x4F, 0xF0, 0x50, 0xF0, 0x51, /* 0x18-0x1B */ + 0xF0, 0x52, 0xF0, 0x53, 0xF0, 0x54, 0xF0, 0x55, /* 0x1C-0x1F */ + 0xF0, 0x56, 0xF0, 0x57, 0xF0, 0x58, 0xF0, 0x59, /* 0x20-0x23 */ + 0xF0, 0x5A, 0xF0, 0x5B, 0xF0, 0x5C, 0xF0, 0x5D, /* 0x24-0x27 */ + 0xF0, 0x5E, 0xF0, 0x5F, 0xF0, 0x60, 0xF0, 0x61, /* 0x28-0x2B */ + 0xF0, 0x62, 0xF0, 0x63, 0xF7, 0xD1, 0xF0, 0x64, /* 0x2C-0x2F */ + 0xF0, 0x65, 0xF0, 0x66, 0xF0, 0x67, 0xF0, 0x68, /* 0x30-0x33 */ + 0xF0, 0x69, 0xF0, 0x6A, 0xF0, 0x6B, 0xF0, 0x6C, /* 0x34-0x37 */ + 0xF0, 0x6D, 0xF0, 0x6E, 0xF0, 0x6F, 0xF0, 0x70, /* 0x38-0x3B */ + 0xF0, 0x71, 0xF0, 0x72, 0xF0, 0x73, 0xF0, 0x74, /* 0x3C-0x3F */ + 0xF0, 0x75, 0xF0, 0x76, 0xF0, 0x77, 0xF0, 0x78, /* 0x40-0x43 */ + 0xF0, 0x79, 0xF0, 0x7A, 0xF0, 0x7B, 0xF0, 0x7C, /* 0x44-0x47 */ + 0xF0, 0x7D, 0xF0, 0x7E, 0xF0, 0x80, 0xF0, 0x81, /* 0x48-0x4B */ + 0xF0, 0x82, 0xF0, 0x83, 0xF0, 0x84, 0xF0, 0x85, /* 0x4C-0x4F */ + 0xF0, 0x86, 0xF0, 0x87, 0xF0, 0x88, 0xF0, 0x89, /* 0x50-0x53 */ + 0xF7, 0xD3, 0xF7, 0xD2, 0xF0, 0x8A, 0xF0, 0x8B, /* 0x54-0x57 */ + 0xF0, 0x8C, 0xF0, 0x8D, 0xF0, 0x8E, 0xF0, 0x8F, /* 0x58-0x5B */ + 0xF0, 0x90, 0xF0, 0x91, 0xF0, 0x92, 0xF0, 0x93, /* 0x5C-0x5F */ + 0xF0, 0x94, 0xF0, 0x95, 0xF0, 0x96, 0xE2, 0xBB, /* 0x60-0x63 */ + 0xF0, 0x97, 0xBC, 0xA2, 0xF0, 0x98, 0xE2, 0xBC, /* 0x64-0x67 */ + 0xE2, 0xBD, 0xE2, 0xBE, 0xE2, 0xBF, 0xE2, 0xC0, /* 0x68-0x6B */ + 0xE2, 0xC1, 0xB7, 0xB9, 0xD2, 0xFB, 0xBD, 0xA4, /* 0x6C-0x6F */ + 0xCA, 0xCE, 0xB1, 0xA5, 0xCB, 0xC7, 0xF0, 0x99, /* 0x70-0x73 */ + 0xE2, 0xC2, 0xB6, 0xFC, 0xC8, 0xC4, 0xE2, 0xC3, /* 0x74-0x77 */ + 0xF0, 0x9A, 0xF0, 0x9B, 0xBD, 0xC8, 0xF0, 0x9C, /* 0x78-0x7B */ + 0xB1, 0xFD, 0xE2, 0xC4, 0xF0, 0x9D, 0xB6, 0xF6, /* 0x7C-0x7F */ + + 0xE2, 0xC5, 0xC4, 0xD9, 0xF0, 0x9E, 0xF0, 0x9F, /* 0x80-0x83 */ + 0xE2, 0xC6, 0xCF, 0xDA, 0xB9, 0xDD, 0xE2, 0xC7, /* 0x84-0x87 */ + 0xC0, 0xA1, 0xF0, 0xA0, 0xE2, 0xC8, 0xB2, 0xF6, /* 0x88-0x8B */ + 0xF1, 0x40, 0xE2, 0xC9, 0xF1, 0x41, 0xC1, 0xF3, /* 0x8C-0x8F */ + 0xE2, 0xCA, 0xE2, 0xCB, 0xC2, 0xF8, 0xE2, 0xCC, /* 0x90-0x93 */ + 0xE2, 0xCD, 0xE2, 0xCE, 0xCA, 0xD7, 0xD8, 0xB8, /* 0x94-0x97 */ + 0xD9, 0xE5, 0xCF, 0xE3, 0xF1, 0x42, 0xF1, 0x43, /* 0x98-0x9B */ + 0xF1, 0x44, 0xF1, 0x45, 0xF1, 0x46, 0xF1, 0x47, /* 0x9C-0x9F */ + 0xF1, 0x48, 0xF1, 0x49, 0xF1, 0x4A, 0xF1, 0x4B, /* 0xA0-0xA3 */ + 0xF1, 0x4C, 0xF0, 0xA5, 0xF1, 0x4D, 0xF1, 0x4E, /* 0xA4-0xA7 */ + 0xDC, 0xB0, 0xF1, 0x4F, 0xF1, 0x50, 0xF1, 0x51, /* 0xA8-0xAB */ + 0xF1, 0x52, 0xF1, 0x53, 0xF1, 0x54, 0xF1, 0x55, /* 0xAC-0xAF */ + 0xF1, 0x56, 0xF1, 0x57, 0xF1, 0x58, 0xF1, 0x59, /* 0xB0-0xB3 */ + 0xF1, 0x5A, 0xF1, 0x5B, 0xF1, 0x5C, 0xF1, 0x5D, /* 0xB4-0xB7 */ + 0xF1, 0x5E, 0xF1, 0x5F, 0xF1, 0x60, 0xF1, 0x61, /* 0xB8-0xBB */ + 0xF1, 0x62, 0xF1, 0x63, 0xF1, 0x64, 0xF1, 0x65, /* 0xBC-0xBF */ + 0xF1, 0x66, 0xF1, 0x67, 0xF1, 0x68, 0xF1, 0x69, /* 0xC0-0xC3 */ + 0xF1, 0x6A, 0xF1, 0x6B, 0xF1, 0x6C, 0xF1, 0x6D, /* 0xC4-0xC7 */ + 0xF1, 0x6E, 0xF1, 0x6F, 0xF1, 0x70, 0xF1, 0x71, /* 0xC8-0xCB */ + 0xF1, 0x72, 0xF1, 0x73, 0xF1, 0x74, 0xF1, 0x75, /* 0xCC-0xCF */ + 0xF1, 0x76, 0xF1, 0x77, 0xF1, 0x78, 0xF1, 0x79, /* 0xD0-0xD3 */ + 0xF1, 0x7A, 0xF1, 0x7B, 0xF1, 0x7C, 0xF1, 0x7D, /* 0xD4-0xD7 */ + 0xF1, 0x7E, 0xF1, 0x80, 0xF1, 0x81, 0xF1, 0x82, /* 0xD8-0xDB */ + 0xF1, 0x83, 0xF1, 0x84, 0xF1, 0x85, 0xF1, 0x86, /* 0xDC-0xDF */ + 0xF1, 0x87, 0xF1, 0x88, 0xF1, 0x89, 0xF1, 0x8A, /* 0xE0-0xE3 */ + 0xF1, 0x8B, 0xF1, 0x8C, 0xF1, 0x8D, 0xF1, 0x8E, /* 0xE4-0xE7 */ + 0xF1, 0x8F, 0xF1, 0x90, 0xF1, 0x91, 0xF1, 0x92, /* 0xE8-0xEB */ + 0xF1, 0x93, 0xF1, 0x94, 0xF1, 0x95, 0xF1, 0x96, /* 0xEC-0xEF */ + 0xF1, 0x97, 0xF1, 0x98, 0xF1, 0x99, 0xF1, 0x9A, /* 0xF0-0xF3 */ + 0xF1, 0x9B, 0xF1, 0x9C, 0xF1, 0x9D, 0xF1, 0x9E, /* 0xF4-0xF7 */ + 0xF1, 0x9F, 0xF1, 0xA0, 0xF2, 0x40, 0xF2, 0x41, /* 0xF8-0xFB */ + 0xF2, 0x42, 0xF2, 0x43, 0xF2, 0x44, 0xF2, 0x45, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0xF2, 0x46, 0xF2, 0x47, 0xF2, 0x48, 0xF2, 0x49, /* 0x00-0x03 */ + 0xF2, 0x4A, 0xF2, 0x4B, 0xF2, 0x4C, 0xF2, 0x4D, /* 0x04-0x07 */ + 0xF2, 0x4E, 0xF2, 0x4F, 0xF2, 0x50, 0xF2, 0x51, /* 0x08-0x0B */ + 0xF2, 0x52, 0xF2, 0x53, 0xF2, 0x54, 0xF2, 0x55, /* 0x0C-0x0F */ + 0xF2, 0x56, 0xF2, 0x57, 0xF2, 0x58, 0xF2, 0x59, /* 0x10-0x13 */ + 0xF2, 0x5A, 0xF2, 0x5B, 0xF2, 0x5C, 0xF2, 0x5D, /* 0x14-0x17 */ + 0xF2, 0x5E, 0xF2, 0x5F, 0xF2, 0x60, 0xF2, 0x61, /* 0x18-0x1B */ + 0xF2, 0x62, 0xF2, 0x63, 0xF2, 0x64, 0xF2, 0x65, /* 0x1C-0x1F */ + 0xF2, 0x66, 0xF2, 0x67, 0xF2, 0x68, 0xF2, 0x69, /* 0x20-0x23 */ + 0xF2, 0x6A, 0xF2, 0x6B, 0xF2, 0x6C, 0xF2, 0x6D, /* 0x24-0x27 */ + 0xF2, 0x6E, 0xF2, 0x6F, 0xF2, 0x70, 0xF2, 0x71, /* 0x28-0x2B */ + 0xF2, 0x72, 0xF2, 0x73, 0xF2, 0x74, 0xF2, 0x75, /* 0x2C-0x2F */ + 0xF2, 0x76, 0xF2, 0x77, 0xF2, 0x78, 0xF2, 0x79, /* 0x30-0x33 */ + 0xF2, 0x7A, 0xF2, 0x7B, 0xF2, 0x7C, 0xF2, 0x7D, /* 0x34-0x37 */ + 0xF2, 0x7E, 0xF2, 0x80, 0xF2, 0x81, 0xF2, 0x82, /* 0x38-0x3B */ + 0xF2, 0x83, 0xF2, 0x84, 0xF2, 0x85, 0xF2, 0x86, /* 0x3C-0x3F */ + 0xF2, 0x87, 0xF2, 0x88, 0xF2, 0x89, 0xF2, 0x8A, /* 0x40-0x43 */ + 0xF2, 0x8B, 0xF2, 0x8C, 0xF2, 0x8D, 0xF2, 0x8E, /* 0x44-0x47 */ + 0xF2, 0x8F, 0xF2, 0x90, 0xF2, 0x91, 0xF2, 0x92, /* 0x48-0x4B */ + 0xF2, 0x93, 0xF2, 0x94, 0xF2, 0x95, 0xF2, 0x96, /* 0x4C-0x4F */ + 0xF2, 0x97, 0xF2, 0x98, 0xF2, 0x99, 0xF2, 0x9A, /* 0x50-0x53 */ + 0xF2, 0x9B, 0xF2, 0x9C, 0xF2, 0x9D, 0xF2, 0x9E, /* 0x54-0x57 */ + 0xF2, 0x9F, 0xF2, 0xA0, 0xF3, 0x40, 0xF3, 0x41, /* 0x58-0x5B */ + 0xF3, 0x42, 0xF3, 0x43, 0xF3, 0x44, 0xF3, 0x45, /* 0x5C-0x5F */ + 0xF3, 0x46, 0xF3, 0x47, 0xF3, 0x48, 0xF3, 0x49, /* 0x60-0x63 */ + 0xF3, 0x4A, 0xF3, 0x4B, 0xF3, 0x4C, 0xF3, 0x4D, /* 0x64-0x67 */ + 0xF3, 0x4E, 0xF3, 0x4F, 0xF3, 0x50, 0xF3, 0x51, /* 0x68-0x6B */ + 0xC2, 0xED, 0xD4, 0xA6, 0xCD, 0xD4, 0xD1, 0xB1, /* 0x6C-0x6F */ + 0xB3, 0xDB, 0xC7, 0xFD, 0xF3, 0x52, 0xB2, 0xB5, /* 0x70-0x73 */ + 0xC2, 0xBF, 0xE6, 0xE0, 0xCA, 0xBB, 0xE6, 0xE1, /* 0x74-0x77 */ + 0xE6, 0xE2, 0xBE, 0xD4, 0xE6, 0xE3, 0xD7, 0xA4, /* 0x78-0x7B */ + 0xCD, 0xD5, 0xE6, 0xE5, 0xBC, 0xDD, 0xE6, 0xE4, /* 0x7C-0x7F */ + + 0xE6, 0xE6, 0xE6, 0xE7, 0xC2, 0xEE, 0xF3, 0x53, /* 0x80-0x83 */ + 0xBD, 0xBE, 0xE6, 0xE8, 0xC2, 0xE6, 0xBA, 0xA7, /* 0x84-0x87 */ + 0xE6, 0xE9, 0xF3, 0x54, 0xE6, 0xEA, 0xB3, 0xD2, /* 0x88-0x8B */ + 0xD1, 0xE9, 0xF3, 0x55, 0xF3, 0x56, 0xBF, 0xA5, /* 0x8C-0x8F */ + 0xE6, 0xEB, 0xC6, 0xEF, 0xE6, 0xEC, 0xE6, 0xED, /* 0x90-0x93 */ + 0xF3, 0x57, 0xF3, 0x58, 0xE6, 0xEE, 0xC6, 0xAD, /* 0x94-0x97 */ + 0xE6, 0xEF, 0xF3, 0x59, 0xC9, 0xA7, 0xE6, 0xF0, /* 0x98-0x9B */ + 0xE6, 0xF1, 0xE6, 0xF2, 0xE5, 0xB9, 0xE6, 0xF3, /* 0x9C-0x9F */ + 0xE6, 0xF4, 0xC2, 0xE2, 0xE6, 0xF5, 0xE6, 0xF6, /* 0xA0-0xA3 */ + 0xD6, 0xE8, 0xE6, 0xF7, 0xF3, 0x5A, 0xE6, 0xF8, /* 0xA4-0xA7 */ + 0xB9, 0xC7, 0xF3, 0x5B, 0xF3, 0x5C, 0xF3, 0x5D, /* 0xA8-0xAB */ + 0xF3, 0x5E, 0xF3, 0x5F, 0xF3, 0x60, 0xF3, 0x61, /* 0xAC-0xAF */ + 0xF7, 0xBB, 0xF7, 0xBA, 0xF3, 0x62, 0xF3, 0x63, /* 0xB0-0xB3 */ + 0xF3, 0x64, 0xF3, 0x65, 0xF7, 0xBE, 0xF7, 0xBC, /* 0xB4-0xB7 */ + 0xBA, 0xA1, 0xF3, 0x66, 0xF7, 0xBF, 0xF3, 0x67, /* 0xB8-0xBB */ + 0xF7, 0xC0, 0xF3, 0x68, 0xF3, 0x69, 0xF3, 0x6A, /* 0xBC-0xBF */ + 0xF7, 0xC2, 0xF7, 0xC1, 0xF7, 0xC4, 0xF3, 0x6B, /* 0xC0-0xC3 */ + 0xF3, 0x6C, 0xF7, 0xC3, 0xF3, 0x6D, 0xF3, 0x6E, /* 0xC4-0xC7 */ + 0xF3, 0x6F, 0xF3, 0x70, 0xF3, 0x71, 0xF7, 0xC5, /* 0xC8-0xCB */ + 0xF7, 0xC6, 0xF3, 0x72, 0xF3, 0x73, 0xF3, 0x74, /* 0xCC-0xCF */ + 0xF3, 0x75, 0xF7, 0xC7, 0xF3, 0x76, 0xCB, 0xE8, /* 0xD0-0xD3 */ + 0xF3, 0x77, 0xF3, 0x78, 0xF3, 0x79, 0xF3, 0x7A, /* 0xD4-0xD7 */ + 0xB8, 0xDF, 0xF3, 0x7B, 0xF3, 0x7C, 0xF3, 0x7D, /* 0xD8-0xDB */ + 0xF3, 0x7E, 0xF3, 0x80, 0xF3, 0x81, 0xF7, 0xD4, /* 0xDC-0xDF */ + 0xF3, 0x82, 0xF7, 0xD5, 0xF3, 0x83, 0xF3, 0x84, /* 0xE0-0xE3 */ + 0xF3, 0x85, 0xF3, 0x86, 0xF7, 0xD6, 0xF3, 0x87, /* 0xE4-0xE7 */ + 0xF3, 0x88, 0xF3, 0x89, 0xF3, 0x8A, 0xF7, 0xD8, /* 0xE8-0xEB */ + 0xF3, 0x8B, 0xF7, 0xDA, 0xF3, 0x8C, 0xF7, 0xD7, /* 0xEC-0xEF */ + 0xF3, 0x8D, 0xF3, 0x8E, 0xF3, 0x8F, 0xF3, 0x90, /* 0xF0-0xF3 */ + 0xF3, 0x91, 0xF3, 0x92, 0xF3, 0x93, 0xF3, 0x94, /* 0xF4-0xF7 */ + 0xF3, 0x95, 0xF7, 0xDB, 0xF3, 0x96, 0xF7, 0xD9, /* 0xF8-0xFB */ + 0xF3, 0x97, 0xF3, 0x98, 0xF3, 0x99, 0xF3, 0x9A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9B[512] = { + 0xF3, 0x9B, 0xF3, 0x9C, 0xF3, 0x9D, 0xD7, 0xD7, /* 0x00-0x03 */ + 0xF3, 0x9E, 0xF3, 0x9F, 0xF3, 0xA0, 0xF4, 0x40, /* 0x04-0x07 */ + 0xF7, 0xDC, 0xF4, 0x41, 0xF4, 0x42, 0xF4, 0x43, /* 0x08-0x0B */ + 0xF4, 0x44, 0xF4, 0x45, 0xF4, 0x46, 0xF7, 0xDD, /* 0x0C-0x0F */ + 0xF4, 0x47, 0xF4, 0x48, 0xF4, 0x49, 0xF7, 0xDE, /* 0x10-0x13 */ + 0xF4, 0x4A, 0xF4, 0x4B, 0xF4, 0x4C, 0xF4, 0x4D, /* 0x14-0x17 */ + 0xF4, 0x4E, 0xF4, 0x4F, 0xF4, 0x50, 0xF4, 0x51, /* 0x18-0x1B */ + 0xF4, 0x52, 0xF4, 0x53, 0xF4, 0x54, 0xF7, 0xDF, /* 0x1C-0x1F */ + 0xF4, 0x55, 0xF4, 0x56, 0xF4, 0x57, 0xF7, 0xE0, /* 0x20-0x23 */ + 0xF4, 0x58, 0xF4, 0x59, 0xF4, 0x5A, 0xF4, 0x5B, /* 0x24-0x27 */ + 0xF4, 0x5C, 0xF4, 0x5D, 0xF4, 0x5E, 0xF4, 0x5F, /* 0x28-0x2B */ + 0xF4, 0x60, 0xF4, 0x61, 0xF4, 0x62, 0xDB, 0xCB, /* 0x2C-0x2F */ + 0xF4, 0x63, 0xF4, 0x64, 0xD8, 0xAA, 0xF4, 0x65, /* 0x30-0x33 */ + 0xF4, 0x66, 0xF4, 0x67, 0xF4, 0x68, 0xF4, 0x69, /* 0x34-0x37 */ + 0xF4, 0x6A, 0xF4, 0x6B, 0xF4, 0x6C, 0xE5, 0xF7, /* 0x38-0x3B */ + 0xB9, 0xED, 0xF4, 0x6D, 0xF4, 0x6E, 0xF4, 0x6F, /* 0x3C-0x3F */ + 0xF4, 0x70, 0xBF, 0xFD, 0xBB, 0xEA, 0xF7, 0xC9, /* 0x40-0x43 */ + 0xC6, 0xC7, 0xF7, 0xC8, 0xF4, 0x71, 0xF7, 0xCA, /* 0x44-0x47 */ + 0xF7, 0xCC, 0xF7, 0xCB, 0xF4, 0x72, 0xF4, 0x73, /* 0x48-0x4B */ + 0xF4, 0x74, 0xF7, 0xCD, 0xF4, 0x75, 0xCE, 0xBA, /* 0x4C-0x4F */ + 0xF4, 0x76, 0xF7, 0xCE, 0xF4, 0x77, 0xF4, 0x78, /* 0x50-0x53 */ + 0xC4, 0xA7, 0xF4, 0x79, 0xF4, 0x7A, 0xF4, 0x7B, /* 0x54-0x57 */ + 0xF4, 0x7C, 0xF4, 0x7D, 0xF4, 0x7E, 0xF4, 0x80, /* 0x58-0x5B */ + 0xF4, 0x81, 0xF4, 0x82, 0xF4, 0x83, 0xF4, 0x84, /* 0x5C-0x5F */ + 0xF4, 0x85, 0xF4, 0x86, 0xF4, 0x87, 0xF4, 0x88, /* 0x60-0x63 */ + 0xF4, 0x89, 0xF4, 0x8A, 0xF4, 0x8B, 0xF4, 0x8C, /* 0x64-0x67 */ + 0xF4, 0x8D, 0xF4, 0x8E, 0xF4, 0x8F, 0xF4, 0x90, /* 0x68-0x6B */ + 0xF4, 0x91, 0xF4, 0x92, 0xF4, 0x93, 0xF4, 0x94, /* 0x6C-0x6F */ + 0xF4, 0x95, 0xF4, 0x96, 0xF4, 0x97, 0xF4, 0x98, /* 0x70-0x73 */ + 0xF4, 0x99, 0xF4, 0x9A, 0xF4, 0x9B, 0xF4, 0x9C, /* 0x74-0x77 */ + 0xF4, 0x9D, 0xF4, 0x9E, 0xF4, 0x9F, 0xF4, 0xA0, /* 0x78-0x7B */ + 0xF5, 0x40, 0xF5, 0x41, 0xF5, 0x42, 0xF5, 0x43, /* 0x7C-0x7F */ + + 0xF5, 0x44, 0xF5, 0x45, 0xF5, 0x46, 0xF5, 0x47, /* 0x80-0x83 */ + 0xF5, 0x48, 0xF5, 0x49, 0xF5, 0x4A, 0xF5, 0x4B, /* 0x84-0x87 */ + 0xF5, 0x4C, 0xF5, 0x4D, 0xF5, 0x4E, 0xF5, 0x4F, /* 0x88-0x8B */ + 0xF5, 0x50, 0xF5, 0x51, 0xF5, 0x52, 0xF5, 0x53, /* 0x8C-0x8F */ + 0xF5, 0x54, 0xF5, 0x55, 0xF5, 0x56, 0xF5, 0x57, /* 0x90-0x93 */ + 0xF5, 0x58, 0xF5, 0x59, 0xF5, 0x5A, 0xF5, 0x5B, /* 0x94-0x97 */ + 0xF5, 0x5C, 0xF5, 0x5D, 0xF5, 0x5E, 0xF5, 0x5F, /* 0x98-0x9B */ + 0xF5, 0x60, 0xF5, 0x61, 0xF5, 0x62, 0xF5, 0x63, /* 0x9C-0x9F */ + 0xF5, 0x64, 0xF5, 0x65, 0xF5, 0x66, 0xF5, 0x67, /* 0xA0-0xA3 */ + 0xF5, 0x68, 0xF5, 0x69, 0xF5, 0x6A, 0xF5, 0x6B, /* 0xA4-0xA7 */ + 0xF5, 0x6C, 0xF5, 0x6D, 0xF5, 0x6E, 0xF5, 0x6F, /* 0xA8-0xAB */ + 0xF5, 0x70, 0xF5, 0x71, 0xF5, 0x72, 0xF5, 0x73, /* 0xAC-0xAF */ + 0xF5, 0x74, 0xF5, 0x75, 0xF5, 0x76, 0xF5, 0x77, /* 0xB0-0xB3 */ + 0xF5, 0x78, 0xF5, 0x79, 0xF5, 0x7A, 0xF5, 0x7B, /* 0xB4-0xB7 */ + 0xF5, 0x7C, 0xF5, 0x7D, 0xF5, 0x7E, 0xF5, 0x80, /* 0xB8-0xBB */ + 0xF5, 0x81, 0xF5, 0x82, 0xF5, 0x83, 0xF5, 0x84, /* 0xBC-0xBF */ + 0xF5, 0x85, 0xF5, 0x86, 0xF5, 0x87, 0xF5, 0x88, /* 0xC0-0xC3 */ + 0xF5, 0x89, 0xF5, 0x8A, 0xF5, 0x8B, 0xF5, 0x8C, /* 0xC4-0xC7 */ + 0xF5, 0x8D, 0xF5, 0x8E, 0xF5, 0x8F, 0xF5, 0x90, /* 0xC8-0xCB */ + 0xF5, 0x91, 0xF5, 0x92, 0xF5, 0x93, 0xF5, 0x94, /* 0xCC-0xCF */ + 0xF5, 0x95, 0xF5, 0x96, 0xF5, 0x97, 0xF5, 0x98, /* 0xD0-0xD3 */ + 0xF5, 0x99, 0xF5, 0x9A, 0xF5, 0x9B, 0xF5, 0x9C, /* 0xD4-0xD7 */ + 0xF5, 0x9D, 0xF5, 0x9E, 0xF5, 0x9F, 0xF5, 0xA0, /* 0xD8-0xDB */ + 0xF6, 0x40, 0xF6, 0x41, 0xF6, 0x42, 0xF6, 0x43, /* 0xDC-0xDF */ + 0xF6, 0x44, 0xF6, 0x45, 0xF6, 0x46, 0xF6, 0x47, /* 0xE0-0xE3 */ + 0xF6, 0x48, 0xF6, 0x49, 0xF6, 0x4A, 0xF6, 0x4B, /* 0xE4-0xE7 */ + 0xF6, 0x4C, 0xF6, 0x4D, 0xF6, 0x4E, 0xF6, 0x4F, /* 0xE8-0xEB */ + 0xF6, 0x50, 0xF6, 0x51, 0xF6, 0x52, 0xF6, 0x53, /* 0xEC-0xEF */ + 0xF6, 0x54, 0xF6, 0x55, 0xF6, 0x56, 0xF6, 0x57, /* 0xF0-0xF3 */ + 0xF6, 0x58, 0xF6, 0x59, 0xF6, 0x5A, 0xF6, 0x5B, /* 0xF4-0xF7 */ + 0xF6, 0x5C, 0xF6, 0x5D, 0xF6, 0x5E, 0xF6, 0x5F, /* 0xF8-0xFB */ + 0xF6, 0x60, 0xF6, 0x61, 0xF6, 0x62, 0xF6, 0x63, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9C[512] = { + 0xF6, 0x64, 0xF6, 0x65, 0xF6, 0x66, 0xF6, 0x67, /* 0x00-0x03 */ + 0xF6, 0x68, 0xF6, 0x69, 0xF6, 0x6A, 0xF6, 0x6B, /* 0x04-0x07 */ + 0xF6, 0x6C, 0xF6, 0x6D, 0xF6, 0x6E, 0xF6, 0x6F, /* 0x08-0x0B */ + 0xF6, 0x70, 0xF6, 0x71, 0xF6, 0x72, 0xF6, 0x73, /* 0x0C-0x0F */ + 0xF6, 0x74, 0xF6, 0x75, 0xF6, 0x76, 0xF6, 0x77, /* 0x10-0x13 */ + 0xF6, 0x78, 0xF6, 0x79, 0xF6, 0x7A, 0xF6, 0x7B, /* 0x14-0x17 */ + 0xF6, 0x7C, 0xF6, 0x7D, 0xF6, 0x7E, 0xF6, 0x80, /* 0x18-0x1B */ + 0xF6, 0x81, 0xF6, 0x82, 0xF6, 0x83, 0xF6, 0x84, /* 0x1C-0x1F */ + 0xF6, 0x85, 0xF6, 0x86, 0xF6, 0x87, 0xF6, 0x88, /* 0x20-0x23 */ + 0xF6, 0x89, 0xF6, 0x8A, 0xF6, 0x8B, 0xF6, 0x8C, /* 0x24-0x27 */ + 0xF6, 0x8D, 0xF6, 0x8E, 0xF6, 0x8F, 0xF6, 0x90, /* 0x28-0x2B */ + 0xF6, 0x91, 0xF6, 0x92, 0xF6, 0x93, 0xF6, 0x94, /* 0x2C-0x2F */ + 0xF6, 0x95, 0xF6, 0x96, 0xF6, 0x97, 0xF6, 0x98, /* 0x30-0x33 */ + 0xF6, 0x99, 0xF6, 0x9A, 0xF6, 0x9B, 0xF6, 0x9C, /* 0x34-0x37 */ + 0xF6, 0x9D, 0xF6, 0x9E, 0xF6, 0x9F, 0xF6, 0xA0, /* 0x38-0x3B */ + 0xF7, 0x40, 0xF7, 0x41, 0xF7, 0x42, 0xF7, 0x43, /* 0x3C-0x3F */ + 0xF7, 0x44, 0xF7, 0x45, 0xF7, 0x46, 0xF7, 0x47, /* 0x40-0x43 */ + 0xF7, 0x48, 0xF7, 0x49, 0xF7, 0x4A, 0xF7, 0x4B, /* 0x44-0x47 */ + 0xF7, 0x4C, 0xF7, 0x4D, 0xF7, 0x4E, 0xF7, 0x4F, /* 0x48-0x4B */ + 0xF7, 0x50, 0xF7, 0x51, 0xF7, 0x52, 0xF7, 0x53, /* 0x4C-0x4F */ + 0xF7, 0x54, 0xF7, 0x55, 0xF7, 0x56, 0xF7, 0x57, /* 0x50-0x53 */ + 0xF7, 0x58, 0xF7, 0x59, 0xF7, 0x5A, 0xF7, 0x5B, /* 0x54-0x57 */ + 0xF7, 0x5C, 0xF7, 0x5D, 0xF7, 0x5E, 0xF7, 0x5F, /* 0x58-0x5B */ + 0xF7, 0x60, 0xF7, 0x61, 0xF7, 0x62, 0xF7, 0x63, /* 0x5C-0x5F */ + 0xF7, 0x64, 0xF7, 0x65, 0xF7, 0x66, 0xF7, 0x67, /* 0x60-0x63 */ + 0xF7, 0x68, 0xF7, 0x69, 0xF7, 0x6A, 0xF7, 0x6B, /* 0x64-0x67 */ + 0xF7, 0x6C, 0xF7, 0x6D, 0xF7, 0x6E, 0xF7, 0x6F, /* 0x68-0x6B */ + 0xF7, 0x70, 0xF7, 0x71, 0xF7, 0x72, 0xF7, 0x73, /* 0x6C-0x6F */ + 0xF7, 0x74, 0xF7, 0x75, 0xF7, 0x76, 0xF7, 0x77, /* 0x70-0x73 */ + 0xF7, 0x78, 0xF7, 0x79, 0xF7, 0x7A, 0xF7, 0x7B, /* 0x74-0x77 */ + 0xF7, 0x7C, 0xF7, 0x7D, 0xF7, 0x7E, 0xF7, 0x80, /* 0x78-0x7B */ + 0xD3, 0xE3, 0xF7, 0x81, 0xF7, 0x82, 0xF6, 0xCF, /* 0x7C-0x7F */ + + 0xF7, 0x83, 0xC2, 0xB3, 0xF6, 0xD0, 0xF7, 0x84, /* 0x80-0x83 */ + 0xF7, 0x85, 0xF6, 0xD1, 0xF6, 0xD2, 0xF6, 0xD3, /* 0x84-0x87 */ + 0xF6, 0xD4, 0xF7, 0x86, 0xF7, 0x87, 0xF6, 0xD6, /* 0x88-0x8B */ + 0xF7, 0x88, 0xB1, 0xAB, 0xF6, 0xD7, 0xF7, 0x89, /* 0x8C-0x8F */ + 0xF6, 0xD8, 0xF6, 0xD9, 0xF6, 0xDA, 0xF7, 0x8A, /* 0x90-0x93 */ + 0xF6, 0xDB, 0xF6, 0xDC, 0xF7, 0x8B, 0xF7, 0x8C, /* 0x94-0x97 */ + 0xF7, 0x8D, 0xF7, 0x8E, 0xF6, 0xDD, 0xF6, 0xDE, /* 0x98-0x9B */ + 0xCF, 0xCA, 0xF7, 0x8F, 0xF6, 0xDF, 0xF6, 0xE0, /* 0x9C-0x9F */ + 0xF6, 0xE1, 0xF6, 0xE2, 0xF6, 0xE3, 0xF6, 0xE4, /* 0xA0-0xA3 */ + 0xC0, 0xF0, 0xF6, 0xE5, 0xF6, 0xE6, 0xF6, 0xE7, /* 0xA4-0xA7 */ + 0xF6, 0xE8, 0xF6, 0xE9, 0xF7, 0x90, 0xF6, 0xEA, /* 0xA8-0xAB */ + 0xF7, 0x91, 0xF6, 0xEB, 0xF6, 0xEC, 0xF7, 0x92, /* 0xAC-0xAF */ + 0xF6, 0xED, 0xF6, 0xEE, 0xF6, 0xEF, 0xF6, 0xF0, /* 0xB0-0xB3 */ + 0xF6, 0xF1, 0xF6, 0xF2, 0xF6, 0xF3, 0xF6, 0xF4, /* 0xB4-0xB7 */ + 0xBE, 0xA8, 0xF7, 0x93, 0xF6, 0xF5, 0xF6, 0xF6, /* 0xB8-0xBB */ + 0xF6, 0xF7, 0xF6, 0xF8, 0xF7, 0x94, 0xF7, 0x95, /* 0xBC-0xBF */ + 0xF7, 0x96, 0xF7, 0x97, 0xF7, 0x98, 0xC8, 0xFA, /* 0xC0-0xC3 */ + 0xF6, 0xF9, 0xF6, 0xFA, 0xF6, 0xFB, 0xF6, 0xFC, /* 0xC4-0xC7 */ + 0xF7, 0x99, 0xF7, 0x9A, 0xF6, 0xFD, 0xF6, 0xFE, /* 0xC8-0xCB */ + 0xF7, 0xA1, 0xF7, 0xA2, 0xF7, 0xA3, 0xF7, 0xA4, /* 0xCC-0xCF */ + 0xF7, 0xA5, 0xF7, 0x9B, 0xF7, 0x9C, 0xF7, 0xA6, /* 0xD0-0xD3 */ + 0xF7, 0xA7, 0xF7, 0xA8, 0xB1, 0xEE, 0xF7, 0xA9, /* 0xD4-0xD7 */ + 0xF7, 0xAA, 0xF7, 0xAB, 0xF7, 0x9D, 0xF7, 0x9E, /* 0xD8-0xDB */ + 0xF7, 0xAC, 0xF7, 0xAD, 0xC1, 0xDB, 0xF7, 0xAE, /* 0xDC-0xDF */ + 0xF7, 0x9F, 0xF7, 0xA0, 0xF7, 0xAF, 0xF8, 0x40, /* 0xE0-0xE3 */ + 0xF8, 0x41, 0xF8, 0x42, 0xF8, 0x43, 0xF8, 0x44, /* 0xE4-0xE7 */ + 0xF8, 0x45, 0xF8, 0x46, 0xF8, 0x47, 0xF8, 0x48, /* 0xE8-0xEB */ + 0xF8, 0x49, 0xF8, 0x4A, 0xF8, 0x4B, 0xF8, 0x4C, /* 0xEC-0xEF */ + 0xF8, 0x4D, 0xF8, 0x4E, 0xF8, 0x4F, 0xF8, 0x50, /* 0xF0-0xF3 */ + 0xF8, 0x51, 0xF8, 0x52, 0xF8, 0x53, 0xF8, 0x54, /* 0xF4-0xF7 */ + 0xF8, 0x55, 0xF8, 0x56, 0xF8, 0x57, 0xF8, 0x58, /* 0xF8-0xFB */ + 0xF8, 0x59, 0xF8, 0x5A, 0xF8, 0x5B, 0xF8, 0x5C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9D[512] = { + 0xF8, 0x5D, 0xF8, 0x5E, 0xF8, 0x5F, 0xF8, 0x60, /* 0x00-0x03 */ + 0xF8, 0x61, 0xF8, 0x62, 0xF8, 0x63, 0xF8, 0x64, /* 0x04-0x07 */ + 0xF8, 0x65, 0xF8, 0x66, 0xF8, 0x67, 0xF8, 0x68, /* 0x08-0x0B */ + 0xF8, 0x69, 0xF8, 0x6A, 0xF8, 0x6B, 0xF8, 0x6C, /* 0x0C-0x0F */ + 0xF8, 0x6D, 0xF8, 0x6E, 0xF8, 0x6F, 0xF8, 0x70, /* 0x10-0x13 */ + 0xF8, 0x71, 0xF8, 0x72, 0xF8, 0x73, 0xF8, 0x74, /* 0x14-0x17 */ + 0xF8, 0x75, 0xF8, 0x76, 0xF8, 0x77, 0xF8, 0x78, /* 0x18-0x1B */ + 0xF8, 0x79, 0xF8, 0x7A, 0xF8, 0x7B, 0xF8, 0x7C, /* 0x1C-0x1F */ + 0xF8, 0x7D, 0xF8, 0x7E, 0xF8, 0x80, 0xF8, 0x81, /* 0x20-0x23 */ + 0xF8, 0x82, 0xF8, 0x83, 0xF8, 0x84, 0xF8, 0x85, /* 0x24-0x27 */ + 0xF8, 0x86, 0xF8, 0x87, 0xF8, 0x88, 0xF8, 0x89, /* 0x28-0x2B */ + 0xF8, 0x8A, 0xF8, 0x8B, 0xF8, 0x8C, 0xF8, 0x8D, /* 0x2C-0x2F */ + 0xF8, 0x8E, 0xF8, 0x8F, 0xF8, 0x90, 0xF8, 0x91, /* 0x30-0x33 */ + 0xF8, 0x92, 0xF8, 0x93, 0xF8, 0x94, 0xF8, 0x95, /* 0x34-0x37 */ + 0xF8, 0x96, 0xF8, 0x97, 0xF8, 0x98, 0xF8, 0x99, /* 0x38-0x3B */ + 0xF8, 0x9A, 0xF8, 0x9B, 0xF8, 0x9C, 0xF8, 0x9D, /* 0x3C-0x3F */ + 0xF8, 0x9E, 0xF8, 0x9F, 0xF8, 0xA0, 0xF9, 0x40, /* 0x40-0x43 */ + 0xF9, 0x41, 0xF9, 0x42, 0xF9, 0x43, 0xF9, 0x44, /* 0x44-0x47 */ + 0xF9, 0x45, 0xF9, 0x46, 0xF9, 0x47, 0xF9, 0x48, /* 0x48-0x4B */ + 0xF9, 0x49, 0xF9, 0x4A, 0xF9, 0x4B, 0xF9, 0x4C, /* 0x4C-0x4F */ + 0xF9, 0x4D, 0xF9, 0x4E, 0xF9, 0x4F, 0xF9, 0x50, /* 0x50-0x53 */ + 0xF9, 0x51, 0xF9, 0x52, 0xF9, 0x53, 0xF9, 0x54, /* 0x54-0x57 */ + 0xF9, 0x55, 0xF9, 0x56, 0xF9, 0x57, 0xF9, 0x58, /* 0x58-0x5B */ + 0xF9, 0x59, 0xF9, 0x5A, 0xF9, 0x5B, 0xF9, 0x5C, /* 0x5C-0x5F */ + 0xF9, 0x5D, 0xF9, 0x5E, 0xF9, 0x5F, 0xF9, 0x60, /* 0x60-0x63 */ + 0xF9, 0x61, 0xF9, 0x62, 0xF9, 0x63, 0xF9, 0x64, /* 0x64-0x67 */ + 0xF9, 0x65, 0xF9, 0x66, 0xF9, 0x67, 0xF9, 0x68, /* 0x68-0x6B */ + 0xF9, 0x69, 0xF9, 0x6A, 0xF9, 0x6B, 0xF9, 0x6C, /* 0x6C-0x6F */ + 0xF9, 0x6D, 0xF9, 0x6E, 0xF9, 0x6F, 0xF9, 0x70, /* 0x70-0x73 */ + 0xF9, 0x71, 0xF9, 0x72, 0xF9, 0x73, 0xF9, 0x74, /* 0x74-0x77 */ + 0xF9, 0x75, 0xF9, 0x76, 0xF9, 0x77, 0xF9, 0x78, /* 0x78-0x7B */ + 0xF9, 0x79, 0xF9, 0x7A, 0xF9, 0x7B, 0xF9, 0x7C, /* 0x7C-0x7F */ + + 0xF9, 0x7D, 0xF9, 0x7E, 0xF9, 0x80, 0xF9, 0x81, /* 0x80-0x83 */ + 0xF9, 0x82, 0xF9, 0x83, 0xF9, 0x84, 0xF9, 0x85, /* 0x84-0x87 */ + 0xF9, 0x86, 0xF9, 0x87, 0xF9, 0x88, 0xF9, 0x89, /* 0x88-0x8B */ + 0xF9, 0x8A, 0xF9, 0x8B, 0xF9, 0x8C, 0xF9, 0x8D, /* 0x8C-0x8F */ + 0xF9, 0x8E, 0xF9, 0x8F, 0xF9, 0x90, 0xF9, 0x91, /* 0x90-0x93 */ + 0xF9, 0x92, 0xF9, 0x93, 0xF9, 0x94, 0xF9, 0x95, /* 0x94-0x97 */ + 0xF9, 0x96, 0xF9, 0x97, 0xF9, 0x98, 0xF9, 0x99, /* 0x98-0x9B */ + 0xF9, 0x9A, 0xF9, 0x9B, 0xF9, 0x9C, 0xF9, 0x9D, /* 0x9C-0x9F */ + 0xF9, 0x9E, 0xF9, 0x9F, 0xF9, 0xA0, 0xFA, 0x40, /* 0xA0-0xA3 */ + 0xFA, 0x41, 0xFA, 0x42, 0xFA, 0x43, 0xFA, 0x44, /* 0xA4-0xA7 */ + 0xFA, 0x45, 0xFA, 0x46, 0xFA, 0x47, 0xFA, 0x48, /* 0xA8-0xAB */ + 0xFA, 0x49, 0xFA, 0x4A, 0xFA, 0x4B, 0xFA, 0x4C, /* 0xAC-0xAF */ + 0xFA, 0x4D, 0xFA, 0x4E, 0xFA, 0x4F, 0xFA, 0x50, /* 0xB0-0xB3 */ + 0xFA, 0x51, 0xFA, 0x52, 0xFA, 0x53, 0xFA, 0x54, /* 0xB4-0xB7 */ + 0xFA, 0x55, 0xFA, 0x56, 0xFA, 0x57, 0xFA, 0x58, /* 0xB8-0xBB */ + 0xFA, 0x59, 0xFA, 0x5A, 0xFA, 0x5B, 0xFA, 0x5C, /* 0xBC-0xBF */ + 0xFA, 0x5D, 0xFA, 0x5E, 0xFA, 0x5F, 0xFA, 0x60, /* 0xC0-0xC3 */ + 0xFA, 0x61, 0xFA, 0x62, 0xFA, 0x63, 0xFA, 0x64, /* 0xC4-0xC7 */ + 0xFA, 0x65, 0xFA, 0x66, 0xFA, 0x67, 0xFA, 0x68, /* 0xC8-0xCB */ + 0xFA, 0x69, 0xFA, 0x6A, 0xFA, 0x6B, 0xFA, 0x6C, /* 0xCC-0xCF */ + 0xFA, 0x6D, 0xFA, 0x6E, 0xFA, 0x6F, 0xFA, 0x70, /* 0xD0-0xD3 */ + 0xFA, 0x71, 0xFA, 0x72, 0xFA, 0x73, 0xFA, 0x74, /* 0xD4-0xD7 */ + 0xFA, 0x75, 0xFA, 0x76, 0xFA, 0x77, 0xFA, 0x78, /* 0xD8-0xDB */ + 0xFA, 0x79, 0xFA, 0x7A, 0xFA, 0x7B, 0xFA, 0x7C, /* 0xDC-0xDF */ + 0xFA, 0x7D, 0xFA, 0x7E, 0xFA, 0x80, 0xFA, 0x81, /* 0xE0-0xE3 */ + 0xFA, 0x82, 0xFA, 0x83, 0xFA, 0x84, 0xFA, 0x85, /* 0xE4-0xE7 */ + 0xFA, 0x86, 0xFA, 0x87, 0xFA, 0x88, 0xFA, 0x89, /* 0xE8-0xEB */ + 0xFA, 0x8A, 0xFA, 0x8B, 0xFA, 0x8C, 0xFA, 0x8D, /* 0xEC-0xEF */ + 0xFA, 0x8E, 0xFA, 0x8F, 0xFA, 0x90, 0xFA, 0x91, /* 0xF0-0xF3 */ + 0xFA, 0x92, 0xFA, 0x93, 0xFA, 0x94, 0xFA, 0x95, /* 0xF4-0xF7 */ + 0xFA, 0x96, 0xFA, 0x97, 0xFA, 0x98, 0xFA, 0x99, /* 0xF8-0xFB */ + 0xFA, 0x9A, 0xFA, 0x9B, 0xFA, 0x9C, 0xFA, 0x9D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0xFA, 0x9E, 0xFA, 0x9F, 0xFA, 0xA0, 0xFB, 0x40, /* 0x00-0x03 */ + 0xFB, 0x41, 0xFB, 0x42, 0xFB, 0x43, 0xFB, 0x44, /* 0x04-0x07 */ + 0xFB, 0x45, 0xFB, 0x46, 0xFB, 0x47, 0xFB, 0x48, /* 0x08-0x0B */ + 0xFB, 0x49, 0xFB, 0x4A, 0xFB, 0x4B, 0xFB, 0x4C, /* 0x0C-0x0F */ + 0xFB, 0x4D, 0xFB, 0x4E, 0xFB, 0x4F, 0xFB, 0x50, /* 0x10-0x13 */ + 0xFB, 0x51, 0xFB, 0x52, 0xFB, 0x53, 0xFB, 0x54, /* 0x14-0x17 */ + 0xFB, 0x55, 0xFB, 0x56, 0xFB, 0x57, 0xFB, 0x58, /* 0x18-0x1B */ + 0xFB, 0x59, 0xFB, 0x5A, 0xFB, 0x5B, 0xC4, 0xF1, /* 0x1C-0x1F */ + 0xF0, 0xAF, 0xBC, 0xA6, 0xF0, 0xB0, 0xC3, 0xF9, /* 0x20-0x23 */ + 0xFB, 0x5C, 0xC5, 0xB8, 0xD1, 0xBB, 0xFB, 0x5D, /* 0x24-0x27 */ + 0xF0, 0xB1, 0xF0, 0xB2, 0xF0, 0xB3, 0xF0, 0xB4, /* 0x28-0x2B */ + 0xF0, 0xB5, 0xD1, 0xBC, 0xFB, 0x5E, 0xD1, 0xEC, /* 0x2C-0x2F */ + 0xFB, 0x5F, 0xF0, 0xB7, 0xF0, 0xB6, 0xD4, 0xA7, /* 0x30-0x33 */ + 0xFB, 0x60, 0xCD, 0xD2, 0xF0, 0xB8, 0xF0, 0xBA, /* 0x34-0x37 */ + 0xF0, 0xB9, 0xF0, 0xBB, 0xF0, 0xBC, 0xFB, 0x61, /* 0x38-0x3B */ + 0xFB, 0x62, 0xB8, 0xEB, 0xF0, 0xBD, 0xBA, 0xE8, /* 0x3C-0x3F */ + 0xFB, 0x63, 0xF0, 0xBE, 0xF0, 0xBF, 0xBE, 0xE9, /* 0x40-0x43 */ + 0xF0, 0xC0, 0xB6, 0xEC, 0xF0, 0xC1, 0xF0, 0xC2, /* 0x44-0x47 */ + 0xF0, 0xC3, 0xF0, 0xC4, 0xC8, 0xB5, 0xF0, 0xC5, /* 0x48-0x4B */ + 0xF0, 0xC6, 0xFB, 0x64, 0xF0, 0xC7, 0xC5, 0xF4, /* 0x4C-0x4F */ + 0xFB, 0x65, 0xF0, 0xC8, 0xFB, 0x66, 0xFB, 0x67, /* 0x50-0x53 */ + 0xFB, 0x68, 0xF0, 0xC9, 0xFB, 0x69, 0xF0, 0xCA, /* 0x54-0x57 */ + 0xF7, 0xBD, 0xFB, 0x6A, 0xF0, 0xCB, 0xF0, 0xCC, /* 0x58-0x5B */ + 0xF0, 0xCD, 0xFB, 0x6B, 0xF0, 0xCE, 0xFB, 0x6C, /* 0x5C-0x5F */ + 0xFB, 0x6D, 0xFB, 0x6E, 0xFB, 0x6F, 0xF0, 0xCF, /* 0x60-0x63 */ + 0xBA, 0xD7, 0xFB, 0x70, 0xF0, 0xD0, 0xF0, 0xD1, /* 0x64-0x67 */ + 0xF0, 0xD2, 0xF0, 0xD3, 0xF0, 0xD4, 0xF0, 0xD5, /* 0x68-0x6B */ + 0xF0, 0xD6, 0xF0, 0xD8, 0xFB, 0x71, 0xFB, 0x72, /* 0x6C-0x6F */ + 0xD3, 0xA5, 0xF0, 0xD7, 0xFB, 0x73, 0xF0, 0xD9, /* 0x70-0x73 */ + 0xFB, 0x74, 0xFB, 0x75, 0xFB, 0x76, 0xFB, 0x77, /* 0x74-0x77 */ + 0xFB, 0x78, 0xFB, 0x79, 0xFB, 0x7A, 0xFB, 0x7B, /* 0x78-0x7B */ + 0xFB, 0x7C, 0xFB, 0x7D, 0xF5, 0xBA, 0xC2, 0xB9, /* 0x7C-0x7F */ + + 0xFB, 0x7E, 0xFB, 0x80, 0xF7, 0xE4, 0xFB, 0x81, /* 0x80-0x83 */ + 0xFB, 0x82, 0xFB, 0x83, 0xFB, 0x84, 0xF7, 0xE5, /* 0x84-0x87 */ + 0xF7, 0xE6, 0xFB, 0x85, 0xFB, 0x86, 0xF7, 0xE7, /* 0x88-0x8B */ + 0xFB, 0x87, 0xFB, 0x88, 0xFB, 0x89, 0xFB, 0x8A, /* 0x8C-0x8F */ + 0xFB, 0x8B, 0xFB, 0x8C, 0xF7, 0xE8, 0xC2, 0xB4, /* 0x90-0x93 */ + 0xFB, 0x8D, 0xFB, 0x8E, 0xFB, 0x8F, 0xFB, 0x90, /* 0x94-0x97 */ + 0xFB, 0x91, 0xFB, 0x92, 0xFB, 0x93, 0xFB, 0x94, /* 0x98-0x9B */ + 0xFB, 0x95, 0xF7, 0xEA, 0xFB, 0x96, 0xF7, 0xEB, /* 0x9C-0x9F */ + 0xFB, 0x97, 0xFB, 0x98, 0xFB, 0x99, 0xFB, 0x9A, /* 0xA0-0xA3 */ + 0xFB, 0x9B, 0xFB, 0x9C, 0xC2, 0xF3, 0xFB, 0x9D, /* 0xA4-0xA7 */ + 0xFB, 0x9E, 0xFB, 0x9F, 0xFB, 0xA0, 0xFC, 0x40, /* 0xA8-0xAB */ + 0xFC, 0x41, 0xFC, 0x42, 0xFC, 0x43, 0xFC, 0x44, /* 0xAC-0xAF */ + 0xFC, 0x45, 0xFC, 0x46, 0xFC, 0x47, 0xFC, 0x48, /* 0xB0-0xB3 */ + 0xF4, 0xF0, 0xFC, 0x49, 0xFC, 0x4A, 0xFC, 0x4B, /* 0xB4-0xB7 */ + 0xF4, 0xEF, 0xFC, 0x4C, 0xFC, 0x4D, 0xC2, 0xE9, /* 0xB8-0xBB */ + 0xFC, 0x4E, 0xF7, 0xE1, 0xF7, 0xE2, 0xFC, 0x4F, /* 0xBC-0xBF */ + 0xFC, 0x50, 0xFC, 0x51, 0xFC, 0x52, 0xFC, 0x53, /* 0xC0-0xC3 */ + 0xBB, 0xC6, 0xFC, 0x54, 0xFC, 0x55, 0xFC, 0x56, /* 0xC4-0xC7 */ + 0xFC, 0x57, 0xD9, 0xE4, 0xFC, 0x58, 0xFC, 0x59, /* 0xC8-0xCB */ + 0xFC, 0x5A, 0xCA, 0xF2, 0xC0, 0xE8, 0xF0, 0xA4, /* 0xCC-0xCF */ + 0xFC, 0x5B, 0xBA, 0xDA, 0xFC, 0x5C, 0xFC, 0x5D, /* 0xD0-0xD3 */ + 0xC7, 0xAD, 0xFC, 0x5E, 0xFC, 0x5F, 0xFC, 0x60, /* 0xD4-0xD7 */ + 0xC4, 0xAC, 0xFC, 0x61, 0xFC, 0x62, 0xF7, 0xEC, /* 0xD8-0xDB */ + 0xF7, 0xED, 0xF7, 0xEE, 0xFC, 0x63, 0xF7, 0xF0, /* 0xDC-0xDF */ + 0xF7, 0xEF, 0xFC, 0x64, 0xF7, 0xF1, 0xFC, 0x65, /* 0xE0-0xE3 */ + 0xFC, 0x66, 0xF7, 0xF4, 0xFC, 0x67, 0xF7, 0xF3, /* 0xE4-0xE7 */ + 0xFC, 0x68, 0xF7, 0xF2, 0xF7, 0xF5, 0xFC, 0x69, /* 0xE8-0xEB */ + 0xFC, 0x6A, 0xFC, 0x6B, 0xFC, 0x6C, 0xF7, 0xF6, /* 0xEC-0xEF */ + 0xFC, 0x6D, 0xFC, 0x6E, 0xFC, 0x6F, 0xFC, 0x70, /* 0xF0-0xF3 */ + 0xFC, 0x71, 0xFC, 0x72, 0xFC, 0x73, 0xFC, 0x74, /* 0xF4-0xF7 */ + 0xFC, 0x75, 0xED, 0xE9, 0xFC, 0x76, 0xED, 0xEA, /* 0xF8-0xFB */ + 0xED, 0xEB, 0xFC, 0x77, 0xF6, 0xBC, 0xFC, 0x78, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0xFC, 0x79, 0xFC, 0x7A, 0xFC, 0x7B, 0xFC, 0x7C, /* 0x00-0x03 */ + 0xFC, 0x7D, 0xFC, 0x7E, 0xFC, 0x80, 0xFC, 0x81, /* 0x04-0x07 */ + 0xFC, 0x82, 0xFC, 0x83, 0xFC, 0x84, 0xF6, 0xBD, /* 0x08-0x0B */ + 0xFC, 0x85, 0xF6, 0xBE, 0xB6, 0xA6, 0xFC, 0x86, /* 0x0C-0x0F */ + 0xD8, 0xBE, 0xFC, 0x87, 0xFC, 0x88, 0xB9, 0xC4, /* 0x10-0x13 */ + 0xFC, 0x89, 0xFC, 0x8A, 0xFC, 0x8B, 0xD8, 0xBB, /* 0x14-0x17 */ + 0xFC, 0x8C, 0xDC, 0xB1, 0xFC, 0x8D, 0xFC, 0x8E, /* 0x18-0x1B */ + 0xFC, 0x8F, 0xFC, 0x90, 0xFC, 0x91, 0xFC, 0x92, /* 0x1C-0x1F */ + 0xCA, 0xF3, 0xFC, 0x93, 0xF7, 0xF7, 0xFC, 0x94, /* 0x20-0x23 */ + 0xFC, 0x95, 0xFC, 0x96, 0xFC, 0x97, 0xFC, 0x98, /* 0x24-0x27 */ + 0xFC, 0x99, 0xFC, 0x9A, 0xFC, 0x9B, 0xFC, 0x9C, /* 0x28-0x2B */ + 0xF7, 0xF8, 0xFC, 0x9D, 0xFC, 0x9E, 0xF7, 0xF9, /* 0x2C-0x2F */ + 0xFC, 0x9F, 0xFC, 0xA0, 0xFD, 0x40, 0xFD, 0x41, /* 0x30-0x33 */ + 0xFD, 0x42, 0xFD, 0x43, 0xFD, 0x44, 0xF7, 0xFB, /* 0x34-0x37 */ + 0xFD, 0x45, 0xF7, 0xFA, 0xFD, 0x46, 0xB1, 0xC7, /* 0x38-0x3B */ + 0xFD, 0x47, 0xF7, 0xFC, 0xF7, 0xFD, 0xFD, 0x48, /* 0x3C-0x3F */ + 0xFD, 0x49, 0xFD, 0x4A, 0xFD, 0x4B, 0xFD, 0x4C, /* 0x40-0x43 */ + 0xF7, 0xFE, 0xFD, 0x4D, 0xFD, 0x4E, 0xFD, 0x4F, /* 0x44-0x47 */ + 0xFD, 0x50, 0xFD, 0x51, 0xFD, 0x52, 0xFD, 0x53, /* 0x48-0x4B */ + 0xFD, 0x54, 0xFD, 0x55, 0xFD, 0x56, 0xFD, 0x57, /* 0x4C-0x4F */ + 0xC6, 0xEB, 0xEC, 0xB4, 0xFD, 0x58, 0xFD, 0x59, /* 0x50-0x53 */ + 0xFD, 0x5A, 0xFD, 0x5B, 0xFD, 0x5C, 0xFD, 0x5D, /* 0x54-0x57 */ + 0xFD, 0x5E, 0xFD, 0x5F, 0xFD, 0x60, 0xFD, 0x61, /* 0x58-0x5B */ + 0xFD, 0x62, 0xFD, 0x63, 0xFD, 0x64, 0xFD, 0x65, /* 0x5C-0x5F */ + 0xFD, 0x66, 0xFD, 0x67, 0xFD, 0x68, 0xFD, 0x69, /* 0x60-0x63 */ + 0xFD, 0x6A, 0xFD, 0x6B, 0xFD, 0x6C, 0xFD, 0x6D, /* 0x64-0x67 */ + 0xFD, 0x6E, 0xFD, 0x6F, 0xFD, 0x70, 0xFD, 0x71, /* 0x68-0x6B */ + 0xFD, 0x72, 0xFD, 0x73, 0xFD, 0x74, 0xFD, 0x75, /* 0x6C-0x6F */ + 0xFD, 0x76, 0xFD, 0x77, 0xFD, 0x78, 0xFD, 0x79, /* 0x70-0x73 */ + 0xFD, 0x7A, 0xFD, 0x7B, 0xFD, 0x7C, 0xFD, 0x7D, /* 0x74-0x77 */ + 0xFD, 0x7E, 0xFD, 0x80, 0xFD, 0x81, 0xFD, 0x82, /* 0x78-0x7B */ + 0xFD, 0x83, 0xFD, 0x84, 0xFD, 0x85, 0xB3, 0xDD, /* 0x7C-0x7F */ + + 0xF6, 0xB3, 0xFD, 0x86, 0xFD, 0x87, 0xF6, 0xB4, /* 0x80-0x83 */ + 0xC1, 0xE4, 0xF6, 0xB5, 0xF6, 0xB6, 0xF6, 0xB7, /* 0x84-0x87 */ + 0xF6, 0xB8, 0xF6, 0xB9, 0xF6, 0xBA, 0xC8, 0xA3, /* 0x88-0x8B */ + 0xF6, 0xBB, 0xFD, 0x88, 0xFD, 0x89, 0xFD, 0x8A, /* 0x8C-0x8F */ + 0xFD, 0x8B, 0xFD, 0x8C, 0xFD, 0x8D, 0xFD, 0x8E, /* 0x90-0x93 */ + 0xFD, 0x8F, 0xFD, 0x90, 0xFD, 0x91, 0xFD, 0x92, /* 0x94-0x97 */ + 0xFD, 0x93, 0xC1, 0xFA, 0xB9, 0xA8, 0xED, 0xE8, /* 0x98-0x9B */ + 0xFD, 0x94, 0xFD, 0x95, 0xFD, 0x96, 0xB9, 0xEA, /* 0x9C-0x9F */ + 0xD9, 0xDF, 0xFD, 0x97, 0xFD, 0x98, 0xFD, 0x99, /* 0xA0-0xA3 */ + 0xFD, 0x9A, 0xFD, 0x9B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_F9[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xFD, 0x9C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xFD, 0x9D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xFD, 0x9E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0x9F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xFD, 0xA0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xFE, 0x40, 0xFE, 0x41, 0xFE, 0x42, 0xFE, 0x43, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xFE, 0x44, 0x3F, 0x3F, 0xFE, 0x45, /* 0x10-0x13 */ + 0xFE, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xFE, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFE, 0x48, /* 0x1C-0x1F */ + 0xFE, 0x49, 0xFE, 0x4A, 0x3F, 0x3F, 0xFE, 0x4B, /* 0x20-0x23 */ + 0xFE, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0xFE, 0x4D, /* 0x24-0x27 */ + 0xFE, 0x4E, 0xFE, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FE[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xA9, 0x55, 0xA6, 0xF2, 0x3F, 0x3F, 0xA6, 0xF4, /* 0x30-0x33 */ + 0xA6, 0xF5, 0xA6, 0xE0, 0xA6, 0xE1, 0xA6, 0xF0, /* 0x34-0x37 */ + 0xA6, 0xF1, 0xA6, 0xE2, 0xA6, 0xE3, 0xA6, 0xEE, /* 0x38-0x3B */ + 0xA6, 0xEF, 0xA6, 0xE6, 0xA6, 0xE7, 0xA6, 0xE4, /* 0x3C-0x3F */ + 0xA6, 0xE5, 0xA6, 0xE8, 0xA6, 0xE9, 0xA6, 0xEA, /* 0x40-0x43 */ + 0xA6, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xA9, 0x68, 0xA9, 0x69, 0xA9, 0x6A, /* 0x48-0x4B */ + 0xA9, 0x6B, 0xA9, 0x6C, 0xA9, 0x6D, 0xA9, 0x6E, /* 0x4C-0x4F */ + 0xA9, 0x6F, 0xA9, 0x70, 0xA9, 0x71, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xA9, 0x72, 0xA9, 0x73, 0xA9, 0x74, 0xA9, 0x75, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xA9, 0x76, 0xA9, 0x77, 0xA9, 0x78, /* 0x58-0x5B */ + 0xA9, 0x79, 0xA9, 0x7A, 0xA9, 0x7B, 0xA9, 0x7C, /* 0x5C-0x5F */ + 0xA9, 0x7D, 0xA9, 0x7E, 0xA9, 0x80, 0xA9, 0x81, /* 0x60-0x63 */ + 0xA9, 0x82, 0xA9, 0x83, 0xA9, 0x84, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xA9, 0x85, 0xA9, 0x86, 0xA9, 0x87, 0xA9, 0x88, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FF[512] = { + 0x3F, 0x3F, 0xA3, 0xA1, 0xA3, 0xA2, 0xA3, 0xA3, /* 0x00-0x03 */ + 0xA1, 0xE7, 0xA3, 0xA5, 0xA3, 0xA6, 0xA3, 0xA7, /* 0x04-0x07 */ + 0xA3, 0xA8, 0xA3, 0xA9, 0xA3, 0xAA, 0xA3, 0xAB, /* 0x08-0x0B */ + 0xA3, 0xAC, 0xA3, 0xAD, 0xA3, 0xAE, 0xA3, 0xAF, /* 0x0C-0x0F */ + 0xA3, 0xB0, 0xA3, 0xB1, 0xA3, 0xB2, 0xA3, 0xB3, /* 0x10-0x13 */ + 0xA3, 0xB4, 0xA3, 0xB5, 0xA3, 0xB6, 0xA3, 0xB7, /* 0x14-0x17 */ + 0xA3, 0xB8, 0xA3, 0xB9, 0xA3, 0xBA, 0xA3, 0xBB, /* 0x18-0x1B */ + 0xA3, 0xBC, 0xA3, 0xBD, 0xA3, 0xBE, 0xA3, 0xBF, /* 0x1C-0x1F */ + 0xA3, 0xC0, 0xA3, 0xC1, 0xA3, 0xC2, 0xA3, 0xC3, /* 0x20-0x23 */ + 0xA3, 0xC4, 0xA3, 0xC5, 0xA3, 0xC6, 0xA3, 0xC7, /* 0x24-0x27 */ + 0xA3, 0xC8, 0xA3, 0xC9, 0xA3, 0xCA, 0xA3, 0xCB, /* 0x28-0x2B */ + 0xA3, 0xCC, 0xA3, 0xCD, 0xA3, 0xCE, 0xA3, 0xCF, /* 0x2C-0x2F */ + 0xA3, 0xD0, 0xA3, 0xD1, 0xA3, 0xD2, 0xA3, 0xD3, /* 0x30-0x33 */ + 0xA3, 0xD4, 0xA3, 0xD5, 0xA3, 0xD6, 0xA3, 0xD7, /* 0x34-0x37 */ + 0xA3, 0xD8, 0xA3, 0xD9, 0xA3, 0xDA, 0xA3, 0xDB, /* 0x38-0x3B */ + 0xA3, 0xDC, 0xA3, 0xDD, 0xA3, 0xDE, 0xA3, 0xDF, /* 0x3C-0x3F */ + 0xA3, 0xE0, 0xA3, 0xE1, 0xA3, 0xE2, 0xA3, 0xE3, /* 0x40-0x43 */ + 0xA3, 0xE4, 0xA3, 0xE5, 0xA3, 0xE6, 0xA3, 0xE7, /* 0x44-0x47 */ + 0xA3, 0xE8, 0xA3, 0xE9, 0xA3, 0xEA, 0xA3, 0xEB, /* 0x48-0x4B */ + 0xA3, 0xEC, 0xA3, 0xED, 0xA3, 0xEE, 0xA3, 0xEF, /* 0x4C-0x4F */ + 0xA3, 0xF0, 0xA3, 0xF1, 0xA3, 0xF2, 0xA3, 0xF3, /* 0x50-0x53 */ + 0xA3, 0xF4, 0xA3, 0xF5, 0xA3, 0xF6, 0xA3, 0xF7, /* 0x54-0x57 */ + 0xA3, 0xF8, 0xA3, 0xF9, 0xA3, 0xFA, 0xA3, 0xFB, /* 0x58-0x5B */ + 0xA3, 0xFC, 0xA3, 0xFD, 0xA1, 0xAB, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xA1, 0xE9, 0xA1, 0xEA, 0xA9, 0x56, 0xA3, 0xFE, /* 0xE0-0xE3 */ + 0xA9, 0x57, 0xA3, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, u2c_01, u2c_02, u2c_03, u2c_04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, u2c_24, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, u2c_31, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, u2c_FE, u2c_FF, }; + +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + uni2charset = page_uni2charset[ch]; + *outlen = 0; + if (uni2charset){ + if (boundlen <= 1) + return; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + *outlen = 1; + } else if (ch==0 && cl) + out[0] = cl; + else + out[0] = '?'; + (*outlen)++; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + unsigned char ch, cl; + struct nls_unicode *charset2uni; + + ch = rawstring[0]; + cl = rawstring[1]; + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl){ + *uni1 = charset2uni[cl].uni2; + *uni2 = charset2uni[cl].uni1; + *offset = 2; + } else{ + *uni1 = ch; + *uni2 = 0x00; + *offset = 1; + } + return; +} + +static void inc_use_count(void) +{ + MOD_INC_USE_COUNT; +} + +static void dec_use_count(void) +{ + MOD_DEC_USE_COUNT; +} + +static struct nls_table table = { + "cp936", + uni2char, + char2uni, + inc_use_count, + dec_use_count, + NULL +}; + +int init_nls_cp936(void) +{ + return register_nls(&table); +} + +#ifdef MODULE +int init_module(void) +{ + return init_nls_cp936(); +} + + +void cleanup_module(void) +{ + unregister_nls(&table); + return; +} +#endif + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp949.c linux.16p3/fs/nls/nls_cp949.c --- linux.vanilla/fs/nls/nls_cp949.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/fs/nls/nls_cp949.c Wed Apr 19 13:58:56 2000 @@ -0,0 +1,18402 @@ +/* + * linux/fs/nls_cp949.c + * + * Charset cp949 translation tables. + * Generated automatically from the Microsoft + */ + +#include +#include +#include +#include + +static struct nls_unicode c2u_81[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xAC, 0x02}, {0xAC, 0x03}, {0xAC, 0x05}, /* 0x40-0x43 */ + {0xAC, 0x06}, {0xAC, 0x0B}, {0xAC, 0x0C}, {0xAC, 0x0D}, /* 0x44-0x47 */ + {0xAC, 0x0E}, {0xAC, 0x0F}, {0xAC, 0x18}, {0xAC, 0x1E}, /* 0x48-0x4B */ + {0xAC, 0x1F}, {0xAC, 0x21}, {0xAC, 0x22}, {0xAC, 0x23}, /* 0x4C-0x4F */ + {0xAC, 0x25}, {0xAC, 0x26}, {0xAC, 0x27}, {0xAC, 0x28}, /* 0x50-0x53 */ + {0xAC, 0x29}, {0xAC, 0x2A}, {0xAC, 0x2B}, {0xAC, 0x2E}, /* 0x54-0x57 */ + {0xAC, 0x32}, {0xAC, 0x33}, {0xAC, 0x34}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xAC, 0x35}, {0xAC, 0x36}, {0xAC, 0x37}, /* 0x60-0x63 */ + {0xAC, 0x3A}, {0xAC, 0x3B}, {0xAC, 0x3D}, {0xAC, 0x3E}, /* 0x64-0x67 */ + {0xAC, 0x3F}, {0xAC, 0x41}, {0xAC, 0x42}, {0xAC, 0x43}, /* 0x68-0x6B */ + {0xAC, 0x44}, {0xAC, 0x45}, {0xAC, 0x46}, {0xAC, 0x47}, /* 0x6C-0x6F */ + {0xAC, 0x48}, {0xAC, 0x49}, {0xAC, 0x4A}, {0xAC, 0x4C}, /* 0x70-0x73 */ + {0xAC, 0x4E}, {0xAC, 0x4F}, {0xAC, 0x50}, {0xAC, 0x51}, /* 0x74-0x77 */ + {0xAC, 0x52}, {0xAC, 0x53}, {0xAC, 0x55}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xAC, 0x56}, {0xAC, 0x57}, {0xAC, 0x59}, /* 0x80-0x83 */ + {0xAC, 0x5A}, {0xAC, 0x5B}, {0xAC, 0x5D}, {0xAC, 0x5E}, /* 0x84-0x87 */ + {0xAC, 0x5F}, {0xAC, 0x60}, {0xAC, 0x61}, {0xAC, 0x62}, /* 0x88-0x8B */ + {0xAC, 0x63}, {0xAC, 0x64}, {0xAC, 0x65}, {0xAC, 0x66}, /* 0x8C-0x8F */ + {0xAC, 0x67}, {0xAC, 0x68}, {0xAC, 0x69}, {0xAC, 0x6A}, /* 0x90-0x93 */ + {0xAC, 0x6B}, {0xAC, 0x6C}, {0xAC, 0x6D}, {0xAC, 0x6E}, /* 0x94-0x97 */ + {0xAC, 0x6F}, {0xAC, 0x72}, {0xAC, 0x73}, {0xAC, 0x75}, /* 0x98-0x9B */ + {0xAC, 0x76}, {0xAC, 0x79}, {0xAC, 0x7B}, {0xAC, 0x7C}, /* 0x9C-0x9F */ + {0xAC, 0x7D}, {0xAC, 0x7E}, {0xAC, 0x7F}, {0xAC, 0x82}, /* 0xA0-0xA3 */ + {0xAC, 0x87}, {0xAC, 0x88}, {0xAC, 0x8D}, {0xAC, 0x8E}, /* 0xA4-0xA7 */ + {0xAC, 0x8F}, {0xAC, 0x91}, {0xAC, 0x92}, {0xAC, 0x93}, /* 0xA8-0xAB */ + {0xAC, 0x95}, {0xAC, 0x96}, {0xAC, 0x97}, {0xAC, 0x98}, /* 0xAC-0xAF */ + {0xAC, 0x99}, {0xAC, 0x9A}, {0xAC, 0x9B}, {0xAC, 0x9E}, /* 0xB0-0xB3 */ + {0xAC, 0xA2}, {0xAC, 0xA3}, {0xAC, 0xA4}, {0xAC, 0xA5}, /* 0xB4-0xB7 */ + {0xAC, 0xA6}, {0xAC, 0xA7}, {0xAC, 0xAB}, {0xAC, 0xAD}, /* 0xB8-0xBB */ + {0xAC, 0xAE}, {0xAC, 0xB1}, {0xAC, 0xB2}, {0xAC, 0xB3}, /* 0xBC-0xBF */ + {0xAC, 0xB4}, {0xAC, 0xB5}, {0xAC, 0xB6}, {0xAC, 0xB7}, /* 0xC0-0xC3 */ + {0xAC, 0xBA}, {0xAC, 0xBE}, {0xAC, 0xBF}, {0xAC, 0xC0}, /* 0xC4-0xC7 */ + {0xAC, 0xC2}, {0xAC, 0xC3}, {0xAC, 0xC5}, {0xAC, 0xC6}, /* 0xC8-0xCB */ + {0xAC, 0xC7}, {0xAC, 0xC9}, {0xAC, 0xCA}, {0xAC, 0xCB}, /* 0xCC-0xCF */ + {0xAC, 0xCD}, {0xAC, 0xCE}, {0xAC, 0xCF}, {0xAC, 0xD0}, /* 0xD0-0xD3 */ + {0xAC, 0xD1}, {0xAC, 0xD2}, {0xAC, 0xD3}, {0xAC, 0xD4}, /* 0xD4-0xD7 */ + {0xAC, 0xD6}, {0xAC, 0xD8}, {0xAC, 0xD9}, {0xAC, 0xDA}, /* 0xD8-0xDB */ + {0xAC, 0xDB}, {0xAC, 0xDC}, {0xAC, 0xDD}, {0xAC, 0xDE}, /* 0xDC-0xDF */ + {0xAC, 0xDF}, {0xAC, 0xE2}, {0xAC, 0xE3}, {0xAC, 0xE5}, /* 0xE0-0xE3 */ + {0xAC, 0xE6}, {0xAC, 0xE9}, {0xAC, 0xEB}, {0xAC, 0xED}, /* 0xE4-0xE7 */ + {0xAC, 0xEE}, {0xAC, 0xF2}, {0xAC, 0xF4}, {0xAC, 0xF7}, /* 0xE8-0xEB */ + {0xAC, 0xF8}, {0xAC, 0xF9}, {0xAC, 0xFA}, {0xAC, 0xFB}, /* 0xEC-0xEF */ + {0xAC, 0xFE}, {0xAC, 0xFF}, {0xAD, 0x01}, {0xAD, 0x02}, /* 0xF0-0xF3 */ + {0xAD, 0x03}, {0xAD, 0x05}, {0xAD, 0x07}, {0xAD, 0x08}, /* 0xF4-0xF7 */ + {0xAD, 0x09}, {0xAD, 0x0A}, {0xAD, 0x0B}, {0xAD, 0x0E}, /* 0xF8-0xFB */ + {0xAD, 0x10}, {0xAD, 0x12}, {0xAD, 0x13}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_82[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xAD, 0x14}, {0xAD, 0x15}, {0xAD, 0x16}, /* 0x40-0x43 */ + {0xAD, 0x17}, {0xAD, 0x19}, {0xAD, 0x1A}, {0xAD, 0x1B}, /* 0x44-0x47 */ + {0xAD, 0x1D}, {0xAD, 0x1E}, {0xAD, 0x1F}, {0xAD, 0x21}, /* 0x48-0x4B */ + {0xAD, 0x22}, {0xAD, 0x23}, {0xAD, 0x24}, {0xAD, 0x25}, /* 0x4C-0x4F */ + {0xAD, 0x26}, {0xAD, 0x27}, {0xAD, 0x28}, {0xAD, 0x2A}, /* 0x50-0x53 */ + {0xAD, 0x2B}, {0xAD, 0x2E}, {0xAD, 0x2F}, {0xAD, 0x30}, /* 0x54-0x57 */ + {0xAD, 0x31}, {0xAD, 0x32}, {0xAD, 0x33}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xAD, 0x36}, {0xAD, 0x37}, {0xAD, 0x39}, /* 0x60-0x63 */ + {0xAD, 0x3A}, {0xAD, 0x3B}, {0xAD, 0x3D}, {0xAD, 0x3E}, /* 0x64-0x67 */ + {0xAD, 0x3F}, {0xAD, 0x40}, {0xAD, 0x41}, {0xAD, 0x42}, /* 0x68-0x6B */ + {0xAD, 0x43}, {0xAD, 0x46}, {0xAD, 0x48}, {0xAD, 0x4A}, /* 0x6C-0x6F */ + {0xAD, 0x4B}, {0xAD, 0x4C}, {0xAD, 0x4D}, {0xAD, 0x4E}, /* 0x70-0x73 */ + {0xAD, 0x4F}, {0xAD, 0x51}, {0xAD, 0x52}, {0xAD, 0x53}, /* 0x74-0x77 */ + {0xAD, 0x55}, {0xAD, 0x56}, {0xAD, 0x57}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xAD, 0x59}, {0xAD, 0x5A}, {0xAD, 0x5B}, /* 0x80-0x83 */ + {0xAD, 0x5C}, {0xAD, 0x5D}, {0xAD, 0x5E}, {0xAD, 0x5F}, /* 0x84-0x87 */ + {0xAD, 0x60}, {0xAD, 0x62}, {0xAD, 0x64}, {0xAD, 0x65}, /* 0x88-0x8B */ + {0xAD, 0x66}, {0xAD, 0x67}, {0xAD, 0x68}, {0xAD, 0x69}, /* 0x8C-0x8F */ + {0xAD, 0x6A}, {0xAD, 0x6B}, {0xAD, 0x6E}, {0xAD, 0x6F}, /* 0x90-0x93 */ + {0xAD, 0x71}, {0xAD, 0x72}, {0xAD, 0x77}, {0xAD, 0x78}, /* 0x94-0x97 */ + {0xAD, 0x79}, {0xAD, 0x7A}, {0xAD, 0x7E}, {0xAD, 0x80}, /* 0x98-0x9B */ + {0xAD, 0x83}, {0xAD, 0x84}, {0xAD, 0x85}, {0xAD, 0x86}, /* 0x9C-0x9F */ + {0xAD, 0x87}, {0xAD, 0x8A}, {0xAD, 0x8B}, {0xAD, 0x8D}, /* 0xA0-0xA3 */ + {0xAD, 0x8E}, {0xAD, 0x8F}, {0xAD, 0x91}, {0xAD, 0x92}, /* 0xA4-0xA7 */ + {0xAD, 0x93}, {0xAD, 0x94}, {0xAD, 0x95}, {0xAD, 0x96}, /* 0xA8-0xAB */ + {0xAD, 0x97}, {0xAD, 0x98}, {0xAD, 0x99}, {0xAD, 0x9A}, /* 0xAC-0xAF */ + {0xAD, 0x9B}, {0xAD, 0x9E}, {0xAD, 0x9F}, {0xAD, 0xA0}, /* 0xB0-0xB3 */ + {0xAD, 0xA1}, {0xAD, 0xA2}, {0xAD, 0xA3}, {0xAD, 0xA5}, /* 0xB4-0xB7 */ + {0xAD, 0xA6}, {0xAD, 0xA7}, {0xAD, 0xA8}, {0xAD, 0xA9}, /* 0xB8-0xBB */ + {0xAD, 0xAA}, {0xAD, 0xAB}, {0xAD, 0xAC}, {0xAD, 0xAD}, /* 0xBC-0xBF */ + {0xAD, 0xAE}, {0xAD, 0xAF}, {0xAD, 0xB0}, {0xAD, 0xB1}, /* 0xC0-0xC3 */ + {0xAD, 0xB2}, {0xAD, 0xB3}, {0xAD, 0xB4}, {0xAD, 0xB5}, /* 0xC4-0xC7 */ + {0xAD, 0xB6}, {0xAD, 0xB8}, {0xAD, 0xB9}, {0xAD, 0xBA}, /* 0xC8-0xCB */ + {0xAD, 0xBB}, {0xAD, 0xBC}, {0xAD, 0xBD}, {0xAD, 0xBE}, /* 0xCC-0xCF */ + {0xAD, 0xBF}, {0xAD, 0xC2}, {0xAD, 0xC3}, {0xAD, 0xC5}, /* 0xD0-0xD3 */ + {0xAD, 0xC6}, {0xAD, 0xC7}, {0xAD, 0xC9}, {0xAD, 0xCA}, /* 0xD4-0xD7 */ + {0xAD, 0xCB}, {0xAD, 0xCC}, {0xAD, 0xCD}, {0xAD, 0xCE}, /* 0xD8-0xDB */ + {0xAD, 0xCF}, {0xAD, 0xD2}, {0xAD, 0xD4}, {0xAD, 0xD5}, /* 0xDC-0xDF */ + {0xAD, 0xD6}, {0xAD, 0xD7}, {0xAD, 0xD8}, {0xAD, 0xD9}, /* 0xE0-0xE3 */ + {0xAD, 0xDA}, {0xAD, 0xDB}, {0xAD, 0xDD}, {0xAD, 0xDE}, /* 0xE4-0xE7 */ + {0xAD, 0xDF}, {0xAD, 0xE1}, {0xAD, 0xE2}, {0xAD, 0xE3}, /* 0xE8-0xEB */ + {0xAD, 0xE5}, {0xAD, 0xE6}, {0xAD, 0xE7}, {0xAD, 0xE8}, /* 0xEC-0xEF */ + {0xAD, 0xE9}, {0xAD, 0xEA}, {0xAD, 0xEB}, {0xAD, 0xEC}, /* 0xF0-0xF3 */ + {0xAD, 0xED}, {0xAD, 0xEE}, {0xAD, 0xEF}, {0xAD, 0xF0}, /* 0xF4-0xF7 */ + {0xAD, 0xF1}, {0xAD, 0xF2}, {0xAD, 0xF3}, {0xAD, 0xF4}, /* 0xF8-0xFB */ + {0xAD, 0xF5}, {0xAD, 0xF6}, {0xAD, 0xF7}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_83[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xAD, 0xFA}, {0xAD, 0xFB}, {0xAD, 0xFD}, /* 0x40-0x43 */ + {0xAD, 0xFE}, {0xAE, 0x02}, {0xAE, 0x03}, {0xAE, 0x04}, /* 0x44-0x47 */ + {0xAE, 0x05}, {0xAE, 0x06}, {0xAE, 0x07}, {0xAE, 0x0A}, /* 0x48-0x4B */ + {0xAE, 0x0C}, {0xAE, 0x0E}, {0xAE, 0x0F}, {0xAE, 0x10}, /* 0x4C-0x4F */ + {0xAE, 0x11}, {0xAE, 0x12}, {0xAE, 0x13}, {0xAE, 0x15}, /* 0x50-0x53 */ + {0xAE, 0x16}, {0xAE, 0x17}, {0xAE, 0x18}, {0xAE, 0x19}, /* 0x54-0x57 */ + {0xAE, 0x1A}, {0xAE, 0x1B}, {0xAE, 0x1C}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xAE, 0x1D}, {0xAE, 0x1E}, {0xAE, 0x1F}, /* 0x60-0x63 */ + {0xAE, 0x20}, {0xAE, 0x21}, {0xAE, 0x22}, {0xAE, 0x23}, /* 0x64-0x67 */ + {0xAE, 0x24}, {0xAE, 0x25}, {0xAE, 0x26}, {0xAE, 0x27}, /* 0x68-0x6B */ + {0xAE, 0x28}, {0xAE, 0x29}, {0xAE, 0x2A}, {0xAE, 0x2B}, /* 0x6C-0x6F */ + {0xAE, 0x2C}, {0xAE, 0x2D}, {0xAE, 0x2E}, {0xAE, 0x2F}, /* 0x70-0x73 */ + {0xAE, 0x32}, {0xAE, 0x33}, {0xAE, 0x35}, {0xAE, 0x36}, /* 0x74-0x77 */ + {0xAE, 0x39}, {0xAE, 0x3B}, {0xAE, 0x3C}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xAE, 0x3D}, {0xAE, 0x3E}, {0xAE, 0x3F}, /* 0x80-0x83 */ + {0xAE, 0x42}, {0xAE, 0x44}, {0xAE, 0x47}, {0xAE, 0x48}, /* 0x84-0x87 */ + {0xAE, 0x49}, {0xAE, 0x4B}, {0xAE, 0x4F}, {0xAE, 0x51}, /* 0x88-0x8B */ + {0xAE, 0x52}, {0xAE, 0x53}, {0xAE, 0x55}, {0xAE, 0x57}, /* 0x8C-0x8F */ + {0xAE, 0x58}, {0xAE, 0x59}, {0xAE, 0x5A}, {0xAE, 0x5B}, /* 0x90-0x93 */ + {0xAE, 0x5E}, {0xAE, 0x62}, {0xAE, 0x63}, {0xAE, 0x64}, /* 0x94-0x97 */ + {0xAE, 0x66}, {0xAE, 0x67}, {0xAE, 0x6A}, {0xAE, 0x6B}, /* 0x98-0x9B */ + {0xAE, 0x6D}, {0xAE, 0x6E}, {0xAE, 0x6F}, {0xAE, 0x71}, /* 0x9C-0x9F */ + {0xAE, 0x72}, {0xAE, 0x73}, {0xAE, 0x74}, {0xAE, 0x75}, /* 0xA0-0xA3 */ + {0xAE, 0x76}, {0xAE, 0x77}, {0xAE, 0x7A}, {0xAE, 0x7E}, /* 0xA4-0xA7 */ + {0xAE, 0x7F}, {0xAE, 0x80}, {0xAE, 0x81}, {0xAE, 0x82}, /* 0xA8-0xAB */ + {0xAE, 0x83}, {0xAE, 0x86}, {0xAE, 0x87}, {0xAE, 0x88}, /* 0xAC-0xAF */ + {0xAE, 0x89}, {0xAE, 0x8A}, {0xAE, 0x8B}, {0xAE, 0x8D}, /* 0xB0-0xB3 */ + {0xAE, 0x8E}, {0xAE, 0x8F}, {0xAE, 0x90}, {0xAE, 0x91}, /* 0xB4-0xB7 */ + {0xAE, 0x92}, {0xAE, 0x93}, {0xAE, 0x94}, {0xAE, 0x95}, /* 0xB8-0xBB */ + {0xAE, 0x96}, {0xAE, 0x97}, {0xAE, 0x98}, {0xAE, 0x99}, /* 0xBC-0xBF */ + {0xAE, 0x9A}, {0xAE, 0x9B}, {0xAE, 0x9C}, {0xAE, 0x9D}, /* 0xC0-0xC3 */ + {0xAE, 0x9E}, {0xAE, 0x9F}, {0xAE, 0xA0}, {0xAE, 0xA1}, /* 0xC4-0xC7 */ + {0xAE, 0xA2}, {0xAE, 0xA3}, {0xAE, 0xA4}, {0xAE, 0xA5}, /* 0xC8-0xCB */ + {0xAE, 0xA6}, {0xAE, 0xA7}, {0xAE, 0xA8}, {0xAE, 0xA9}, /* 0xCC-0xCF */ + {0xAE, 0xAA}, {0xAE, 0xAB}, {0xAE, 0xAC}, {0xAE, 0xAD}, /* 0xD0-0xD3 */ + {0xAE, 0xAE}, {0xAE, 0xAF}, {0xAE, 0xB0}, {0xAE, 0xB1}, /* 0xD4-0xD7 */ + {0xAE, 0xB2}, {0xAE, 0xB3}, {0xAE, 0xB4}, {0xAE, 0xB5}, /* 0xD8-0xDB */ + {0xAE, 0xB6}, {0xAE, 0xB7}, {0xAE, 0xB8}, {0xAE, 0xB9}, /* 0xDC-0xDF */ + {0xAE, 0xBA}, {0xAE, 0xBB}, {0xAE, 0xBF}, {0xAE, 0xC1}, /* 0xE0-0xE3 */ + {0xAE, 0xC2}, {0xAE, 0xC3}, {0xAE, 0xC5}, {0xAE, 0xC6}, /* 0xE4-0xE7 */ + {0xAE, 0xC7}, {0xAE, 0xC8}, {0xAE, 0xC9}, {0xAE, 0xCA}, /* 0xE8-0xEB */ + {0xAE, 0xCB}, {0xAE, 0xCE}, {0xAE, 0xD2}, {0xAE, 0xD3}, /* 0xEC-0xEF */ + {0xAE, 0xD4}, {0xAE, 0xD5}, {0xAE, 0xD6}, {0xAE, 0xD7}, /* 0xF0-0xF3 */ + {0xAE, 0xDA}, {0xAE, 0xDB}, {0xAE, 0xDD}, {0xAE, 0xDE}, /* 0xF4-0xF7 */ + {0xAE, 0xDF}, {0xAE, 0xE0}, {0xAE, 0xE1}, {0xAE, 0xE2}, /* 0xF8-0xFB */ + {0xAE, 0xE3}, {0xAE, 0xE4}, {0xAE, 0xE5}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_84[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xAE, 0xE6}, {0xAE, 0xE7}, {0xAE, 0xE9}, /* 0x40-0x43 */ + {0xAE, 0xEA}, {0xAE, 0xEC}, {0xAE, 0xEE}, {0xAE, 0xEF}, /* 0x44-0x47 */ + {0xAE, 0xF0}, {0xAE, 0xF1}, {0xAE, 0xF2}, {0xAE, 0xF3}, /* 0x48-0x4B */ + {0xAE, 0xF5}, {0xAE, 0xF6}, {0xAE, 0xF7}, {0xAE, 0xF9}, /* 0x4C-0x4F */ + {0xAE, 0xFA}, {0xAE, 0xFB}, {0xAE, 0xFD}, {0xAE, 0xFE}, /* 0x50-0x53 */ + {0xAE, 0xFF}, {0xAF, 0x00}, {0xAF, 0x01}, {0xAF, 0x02}, /* 0x54-0x57 */ + {0xAF, 0x03}, {0xAF, 0x04}, {0xAF, 0x05}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xAF, 0x06}, {0xAF, 0x09}, {0xAF, 0x0A}, /* 0x60-0x63 */ + {0xAF, 0x0B}, {0xAF, 0x0C}, {0xAF, 0x0E}, {0xAF, 0x0F}, /* 0x64-0x67 */ + {0xAF, 0x11}, {0xAF, 0x12}, {0xAF, 0x13}, {0xAF, 0x14}, /* 0x68-0x6B */ + {0xAF, 0x15}, {0xAF, 0x16}, {0xAF, 0x17}, {0xAF, 0x18}, /* 0x6C-0x6F */ + {0xAF, 0x19}, {0xAF, 0x1A}, {0xAF, 0x1B}, {0xAF, 0x1C}, /* 0x70-0x73 */ + {0xAF, 0x1D}, {0xAF, 0x1E}, {0xAF, 0x1F}, {0xAF, 0x20}, /* 0x74-0x77 */ + {0xAF, 0x21}, {0xAF, 0x22}, {0xAF, 0x23}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xAF, 0x24}, {0xAF, 0x25}, {0xAF, 0x26}, /* 0x80-0x83 */ + {0xAF, 0x27}, {0xAF, 0x28}, {0xAF, 0x29}, {0xAF, 0x2A}, /* 0x84-0x87 */ + {0xAF, 0x2B}, {0xAF, 0x2E}, {0xAF, 0x2F}, {0xAF, 0x31}, /* 0x88-0x8B */ + {0xAF, 0x33}, {0xAF, 0x35}, {0xAF, 0x36}, {0xAF, 0x37}, /* 0x8C-0x8F */ + {0xAF, 0x38}, {0xAF, 0x39}, {0xAF, 0x3A}, {0xAF, 0x3B}, /* 0x90-0x93 */ + {0xAF, 0x3E}, {0xAF, 0x40}, {0xAF, 0x44}, {0xAF, 0x45}, /* 0x94-0x97 */ + {0xAF, 0x46}, {0xAF, 0x47}, {0xAF, 0x4A}, {0xAF, 0x4B}, /* 0x98-0x9B */ + {0xAF, 0x4C}, {0xAF, 0x4D}, {0xAF, 0x4E}, {0xAF, 0x4F}, /* 0x9C-0x9F */ + {0xAF, 0x51}, {0xAF, 0x52}, {0xAF, 0x53}, {0xAF, 0x54}, /* 0xA0-0xA3 */ + {0xAF, 0x55}, {0xAF, 0x56}, {0xAF, 0x57}, {0xAF, 0x58}, /* 0xA4-0xA7 */ + {0xAF, 0x59}, {0xAF, 0x5A}, {0xAF, 0x5B}, {0xAF, 0x5E}, /* 0xA8-0xAB */ + {0xAF, 0x5F}, {0xAF, 0x60}, {0xAF, 0x61}, {0xAF, 0x62}, /* 0xAC-0xAF */ + {0xAF, 0x63}, {0xAF, 0x66}, {0xAF, 0x67}, {0xAF, 0x68}, /* 0xB0-0xB3 */ + {0xAF, 0x69}, {0xAF, 0x6A}, {0xAF, 0x6B}, {0xAF, 0x6C}, /* 0xB4-0xB7 */ + {0xAF, 0x6D}, {0xAF, 0x6E}, {0xAF, 0x6F}, {0xAF, 0x70}, /* 0xB8-0xBB */ + {0xAF, 0x71}, {0xAF, 0x72}, {0xAF, 0x73}, {0xAF, 0x74}, /* 0xBC-0xBF */ + {0xAF, 0x75}, {0xAF, 0x76}, {0xAF, 0x77}, {0xAF, 0x78}, /* 0xC0-0xC3 */ + {0xAF, 0x7A}, {0xAF, 0x7B}, {0xAF, 0x7C}, {0xAF, 0x7D}, /* 0xC4-0xC7 */ + {0xAF, 0x7E}, {0xAF, 0x7F}, {0xAF, 0x81}, {0xAF, 0x82}, /* 0xC8-0xCB */ + {0xAF, 0x83}, {0xAF, 0x85}, {0xAF, 0x86}, {0xAF, 0x87}, /* 0xCC-0xCF */ + {0xAF, 0x89}, {0xAF, 0x8A}, {0xAF, 0x8B}, {0xAF, 0x8C}, /* 0xD0-0xD3 */ + {0xAF, 0x8D}, {0xAF, 0x8E}, {0xAF, 0x8F}, {0xAF, 0x92}, /* 0xD4-0xD7 */ + {0xAF, 0x93}, {0xAF, 0x94}, {0xAF, 0x96}, {0xAF, 0x97}, /* 0xD8-0xDB */ + {0xAF, 0x98}, {0xAF, 0x99}, {0xAF, 0x9A}, {0xAF, 0x9B}, /* 0xDC-0xDF */ + {0xAF, 0x9D}, {0xAF, 0x9E}, {0xAF, 0x9F}, {0xAF, 0xA0}, /* 0xE0-0xE3 */ + {0xAF, 0xA1}, {0xAF, 0xA2}, {0xAF, 0xA3}, {0xAF, 0xA4}, /* 0xE4-0xE7 */ + {0xAF, 0xA5}, {0xAF, 0xA6}, {0xAF, 0xA7}, {0xAF, 0xA8}, /* 0xE8-0xEB */ + {0xAF, 0xA9}, {0xAF, 0xAA}, {0xAF, 0xAB}, {0xAF, 0xAC}, /* 0xEC-0xEF */ + {0xAF, 0xAD}, {0xAF, 0xAE}, {0xAF, 0xAF}, {0xAF, 0xB0}, /* 0xF0-0xF3 */ + {0xAF, 0xB1}, {0xAF, 0xB2}, {0xAF, 0xB3}, {0xAF, 0xB4}, /* 0xF4-0xF7 */ + {0xAF, 0xB5}, {0xAF, 0xB6}, {0xAF, 0xB7}, {0xAF, 0xBA}, /* 0xF8-0xFB */ + {0xAF, 0xBB}, {0xAF, 0xBD}, {0xAF, 0xBE}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_85[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xAF, 0xBF}, {0xAF, 0xC1}, {0xAF, 0xC2}, /* 0x40-0x43 */ + {0xAF, 0xC3}, {0xAF, 0xC4}, {0xAF, 0xC5}, {0xAF, 0xC6}, /* 0x44-0x47 */ + {0xAF, 0xCA}, {0xAF, 0xCC}, {0xAF, 0xCF}, {0xAF, 0xD0}, /* 0x48-0x4B */ + {0xAF, 0xD1}, {0xAF, 0xD2}, {0xAF, 0xD3}, {0xAF, 0xD5}, /* 0x4C-0x4F */ + {0xAF, 0xD6}, {0xAF, 0xD7}, {0xAF, 0xD8}, {0xAF, 0xD9}, /* 0x50-0x53 */ + {0xAF, 0xDA}, {0xAF, 0xDB}, {0xAF, 0xDD}, {0xAF, 0xDE}, /* 0x54-0x57 */ + {0xAF, 0xDF}, {0xAF, 0xE0}, {0xAF, 0xE1}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xAF, 0xE2}, {0xAF, 0xE3}, {0xAF, 0xE4}, /* 0x60-0x63 */ + {0xAF, 0xE5}, {0xAF, 0xE6}, {0xAF, 0xE7}, {0xAF, 0xEA}, /* 0x64-0x67 */ + {0xAF, 0xEB}, {0xAF, 0xEC}, {0xAF, 0xED}, {0xAF, 0xEE}, /* 0x68-0x6B */ + {0xAF, 0xEF}, {0xAF, 0xF2}, {0xAF, 0xF3}, {0xAF, 0xF5}, /* 0x6C-0x6F */ + {0xAF, 0xF6}, {0xAF, 0xF7}, {0xAF, 0xF9}, {0xAF, 0xFA}, /* 0x70-0x73 */ + {0xAF, 0xFB}, {0xAF, 0xFC}, {0xAF, 0xFD}, {0xAF, 0xFE}, /* 0x74-0x77 */ + {0xAF, 0xFF}, {0xB0, 0x02}, {0xB0, 0x03}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB0, 0x05}, {0xB0, 0x06}, {0xB0, 0x07}, /* 0x80-0x83 */ + {0xB0, 0x08}, {0xB0, 0x09}, {0xB0, 0x0A}, {0xB0, 0x0B}, /* 0x84-0x87 */ + {0xB0, 0x0D}, {0xB0, 0x0E}, {0xB0, 0x0F}, {0xB0, 0x11}, /* 0x88-0x8B */ + {0xB0, 0x12}, {0xB0, 0x13}, {0xB0, 0x15}, {0xB0, 0x16}, /* 0x8C-0x8F */ + {0xB0, 0x17}, {0xB0, 0x18}, {0xB0, 0x19}, {0xB0, 0x1A}, /* 0x90-0x93 */ + {0xB0, 0x1B}, {0xB0, 0x1E}, {0xB0, 0x1F}, {0xB0, 0x20}, /* 0x94-0x97 */ + {0xB0, 0x21}, {0xB0, 0x22}, {0xB0, 0x23}, {0xB0, 0x24}, /* 0x98-0x9B */ + {0xB0, 0x25}, {0xB0, 0x26}, {0xB0, 0x27}, {0xB0, 0x29}, /* 0x9C-0x9F */ + {0xB0, 0x2A}, {0xB0, 0x2B}, {0xB0, 0x2C}, {0xB0, 0x2D}, /* 0xA0-0xA3 */ + {0xB0, 0x2E}, {0xB0, 0x2F}, {0xB0, 0x30}, {0xB0, 0x31}, /* 0xA4-0xA7 */ + {0xB0, 0x32}, {0xB0, 0x33}, {0xB0, 0x34}, {0xB0, 0x35}, /* 0xA8-0xAB */ + {0xB0, 0x36}, {0xB0, 0x37}, {0xB0, 0x38}, {0xB0, 0x39}, /* 0xAC-0xAF */ + {0xB0, 0x3A}, {0xB0, 0x3B}, {0xB0, 0x3C}, {0xB0, 0x3D}, /* 0xB0-0xB3 */ + {0xB0, 0x3E}, {0xB0, 0x3F}, {0xB0, 0x40}, {0xB0, 0x41}, /* 0xB4-0xB7 */ + {0xB0, 0x42}, {0xB0, 0x43}, {0xB0, 0x46}, {0xB0, 0x47}, /* 0xB8-0xBB */ + {0xB0, 0x49}, {0xB0, 0x4B}, {0xB0, 0x4D}, {0xB0, 0x4F}, /* 0xBC-0xBF */ + {0xB0, 0x50}, {0xB0, 0x51}, {0xB0, 0x52}, {0xB0, 0x56}, /* 0xC0-0xC3 */ + {0xB0, 0x58}, {0xB0, 0x5A}, {0xB0, 0x5B}, {0xB0, 0x5C}, /* 0xC4-0xC7 */ + {0xB0, 0x5E}, {0xB0, 0x5F}, {0xB0, 0x60}, {0xB0, 0x61}, /* 0xC8-0xCB */ + {0xB0, 0x62}, {0xB0, 0x63}, {0xB0, 0x64}, {0xB0, 0x65}, /* 0xCC-0xCF */ + {0xB0, 0x66}, {0xB0, 0x67}, {0xB0, 0x68}, {0xB0, 0x69}, /* 0xD0-0xD3 */ + {0xB0, 0x6A}, {0xB0, 0x6B}, {0xB0, 0x6C}, {0xB0, 0x6D}, /* 0xD4-0xD7 */ + {0xB0, 0x6E}, {0xB0, 0x6F}, {0xB0, 0x70}, {0xB0, 0x71}, /* 0xD8-0xDB */ + {0xB0, 0x72}, {0xB0, 0x73}, {0xB0, 0x74}, {0xB0, 0x75}, /* 0xDC-0xDF */ + {0xB0, 0x76}, {0xB0, 0x77}, {0xB0, 0x78}, {0xB0, 0x79}, /* 0xE0-0xE3 */ + {0xB0, 0x7A}, {0xB0, 0x7B}, {0xB0, 0x7E}, {0xB0, 0x7F}, /* 0xE4-0xE7 */ + {0xB0, 0x81}, {0xB0, 0x82}, {0xB0, 0x83}, {0xB0, 0x85}, /* 0xE8-0xEB */ + {0xB0, 0x86}, {0xB0, 0x87}, {0xB0, 0x88}, {0xB0, 0x89}, /* 0xEC-0xEF */ + {0xB0, 0x8A}, {0xB0, 0x8B}, {0xB0, 0x8E}, {0xB0, 0x90}, /* 0xF0-0xF3 */ + {0xB0, 0x92}, {0xB0, 0x93}, {0xB0, 0x94}, {0xB0, 0x95}, /* 0xF4-0xF7 */ + {0xB0, 0x96}, {0xB0, 0x97}, {0xB0, 0x9B}, {0xB0, 0x9D}, /* 0xF8-0xFB */ + {0xB0, 0x9E}, {0xB0, 0xA3}, {0xB0, 0xA4}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_86[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB0, 0xA5}, {0xB0, 0xA6}, {0xB0, 0xA7}, /* 0x40-0x43 */ + {0xB0, 0xAA}, {0xB0, 0xB0}, {0xB0, 0xB2}, {0xB0, 0xB6}, /* 0x44-0x47 */ + {0xB0, 0xB7}, {0xB0, 0xB9}, {0xB0, 0xBA}, {0xB0, 0xBB}, /* 0x48-0x4B */ + {0xB0, 0xBD}, {0xB0, 0xBE}, {0xB0, 0xBF}, {0xB0, 0xC0}, /* 0x4C-0x4F */ + {0xB0, 0xC1}, {0xB0, 0xC2}, {0xB0, 0xC3}, {0xB0, 0xC6}, /* 0x50-0x53 */ + {0xB0, 0xCA}, {0xB0, 0xCB}, {0xB0, 0xCC}, {0xB0, 0xCD}, /* 0x54-0x57 */ + {0xB0, 0xCE}, {0xB0, 0xCF}, {0xB0, 0xD2}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB0, 0xD3}, {0xB0, 0xD5}, {0xB0, 0xD6}, /* 0x60-0x63 */ + {0xB0, 0xD7}, {0xB0, 0xD9}, {0xB0, 0xDA}, {0xB0, 0xDB}, /* 0x64-0x67 */ + {0xB0, 0xDC}, {0xB0, 0xDD}, {0xB0, 0xDE}, {0xB0, 0xDF}, /* 0x68-0x6B */ + {0xB0, 0xE1}, {0xB0, 0xE2}, {0xB0, 0xE3}, {0xB0, 0xE4}, /* 0x6C-0x6F */ + {0xB0, 0xE6}, {0xB0, 0xE7}, {0xB0, 0xE8}, {0xB0, 0xE9}, /* 0x70-0x73 */ + {0xB0, 0xEA}, {0xB0, 0xEB}, {0xB0, 0xEC}, {0xB0, 0xED}, /* 0x74-0x77 */ + {0xB0, 0xEE}, {0xB0, 0xEF}, {0xB0, 0xF0}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB0, 0xF1}, {0xB0, 0xF2}, {0xB0, 0xF3}, /* 0x80-0x83 */ + {0xB0, 0xF4}, {0xB0, 0xF5}, {0xB0, 0xF6}, {0xB0, 0xF7}, /* 0x84-0x87 */ + {0xB0, 0xF8}, {0xB0, 0xF9}, {0xB0, 0xFA}, {0xB0, 0xFB}, /* 0x88-0x8B */ + {0xB0, 0xFC}, {0xB0, 0xFD}, {0xB0, 0xFE}, {0xB0, 0xFF}, /* 0x8C-0x8F */ + {0xB1, 0x00}, {0xB1, 0x01}, {0xB1, 0x02}, {0xB1, 0x03}, /* 0x90-0x93 */ + {0xB1, 0x04}, {0xB1, 0x05}, {0xB1, 0x06}, {0xB1, 0x07}, /* 0x94-0x97 */ + {0xB1, 0x0A}, {0xB1, 0x0D}, {0xB1, 0x0E}, {0xB1, 0x0F}, /* 0x98-0x9B */ + {0xB1, 0x11}, {0xB1, 0x14}, {0xB1, 0x15}, {0xB1, 0x16}, /* 0x9C-0x9F */ + {0xB1, 0x17}, {0xB1, 0x1A}, {0xB1, 0x1E}, {0xB1, 0x1F}, /* 0xA0-0xA3 */ + {0xB1, 0x20}, {0xB1, 0x21}, {0xB1, 0x22}, {0xB1, 0x26}, /* 0xA4-0xA7 */ + {0xB1, 0x27}, {0xB1, 0x29}, {0xB1, 0x2A}, {0xB1, 0x2B}, /* 0xA8-0xAB */ + {0xB1, 0x2D}, {0xB1, 0x2E}, {0xB1, 0x2F}, {0xB1, 0x30}, /* 0xAC-0xAF */ + {0xB1, 0x31}, {0xB1, 0x32}, {0xB1, 0x33}, {0xB1, 0x36}, /* 0xB0-0xB3 */ + {0xB1, 0x3A}, {0xB1, 0x3B}, {0xB1, 0x3C}, {0xB1, 0x3D}, /* 0xB4-0xB7 */ + {0xB1, 0x3E}, {0xB1, 0x3F}, {0xB1, 0x42}, {0xB1, 0x43}, /* 0xB8-0xBB */ + {0xB1, 0x45}, {0xB1, 0x46}, {0xB1, 0x47}, {0xB1, 0x49}, /* 0xBC-0xBF */ + {0xB1, 0x4A}, {0xB1, 0x4B}, {0xB1, 0x4C}, {0xB1, 0x4D}, /* 0xC0-0xC3 */ + {0xB1, 0x4E}, {0xB1, 0x4F}, {0xB1, 0x52}, {0xB1, 0x53}, /* 0xC4-0xC7 */ + {0xB1, 0x56}, {0xB1, 0x57}, {0xB1, 0x59}, {0xB1, 0x5A}, /* 0xC8-0xCB */ + {0xB1, 0x5B}, {0xB1, 0x5D}, {0xB1, 0x5E}, {0xB1, 0x5F}, /* 0xCC-0xCF */ + {0xB1, 0x61}, {0xB1, 0x62}, {0xB1, 0x63}, {0xB1, 0x64}, /* 0xD0-0xD3 */ + {0xB1, 0x65}, {0xB1, 0x66}, {0xB1, 0x67}, {0xB1, 0x68}, /* 0xD4-0xD7 */ + {0xB1, 0x69}, {0xB1, 0x6A}, {0xB1, 0x6B}, {0xB1, 0x6C}, /* 0xD8-0xDB */ + {0xB1, 0x6D}, {0xB1, 0x6E}, {0xB1, 0x6F}, {0xB1, 0x70}, /* 0xDC-0xDF */ + {0xB1, 0x71}, {0xB1, 0x72}, {0xB1, 0x73}, {0xB1, 0x74}, /* 0xE0-0xE3 */ + {0xB1, 0x75}, {0xB1, 0x76}, {0xB1, 0x77}, {0xB1, 0x7A}, /* 0xE4-0xE7 */ + {0xB1, 0x7B}, {0xB1, 0x7D}, {0xB1, 0x7E}, {0xB1, 0x7F}, /* 0xE8-0xEB */ + {0xB1, 0x81}, {0xB1, 0x83}, {0xB1, 0x84}, {0xB1, 0x85}, /* 0xEC-0xEF */ + {0xB1, 0x86}, {0xB1, 0x87}, {0xB1, 0x8A}, {0xB1, 0x8C}, /* 0xF0-0xF3 */ + {0xB1, 0x8E}, {0xB1, 0x8F}, {0xB1, 0x90}, {0xB1, 0x91}, /* 0xF4-0xF7 */ + {0xB1, 0x95}, {0xB1, 0x96}, {0xB1, 0x97}, {0xB1, 0x99}, /* 0xF8-0xFB */ + {0xB1, 0x9A}, {0xB1, 0x9B}, {0xB1, 0x9D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_87[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB1, 0x9E}, {0xB1, 0x9F}, {0xB1, 0xA0}, /* 0x40-0x43 */ + {0xB1, 0xA1}, {0xB1, 0xA2}, {0xB1, 0xA3}, {0xB1, 0xA4}, /* 0x44-0x47 */ + {0xB1, 0xA5}, {0xB1, 0xA6}, {0xB1, 0xA7}, {0xB1, 0xA9}, /* 0x48-0x4B */ + {0xB1, 0xAA}, {0xB1, 0xAB}, {0xB1, 0xAC}, {0xB1, 0xAD}, /* 0x4C-0x4F */ + {0xB1, 0xAE}, {0xB1, 0xAF}, {0xB1, 0xB0}, {0xB1, 0xB1}, /* 0x50-0x53 */ + {0xB1, 0xB2}, {0xB1, 0xB3}, {0xB1, 0xB4}, {0xB1, 0xB5}, /* 0x54-0x57 */ + {0xB1, 0xB6}, {0xB1, 0xB7}, {0xB1, 0xB8}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB1, 0xB9}, {0xB1, 0xBA}, {0xB1, 0xBB}, /* 0x60-0x63 */ + {0xB1, 0xBC}, {0xB1, 0xBD}, {0xB1, 0xBE}, {0xB1, 0xBF}, /* 0x64-0x67 */ + {0xB1, 0xC0}, {0xB1, 0xC1}, {0xB1, 0xC2}, {0xB1, 0xC3}, /* 0x68-0x6B */ + {0xB1, 0xC4}, {0xB1, 0xC5}, {0xB1, 0xC6}, {0xB1, 0xC7}, /* 0x6C-0x6F */ + {0xB1, 0xC8}, {0xB1, 0xC9}, {0xB1, 0xCA}, {0xB1, 0xCB}, /* 0x70-0x73 */ + {0xB1, 0xCD}, {0xB1, 0xCE}, {0xB1, 0xCF}, {0xB1, 0xD1}, /* 0x74-0x77 */ + {0xB1, 0xD2}, {0xB1, 0xD3}, {0xB1, 0xD5}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB1, 0xD6}, {0xB1, 0xD7}, {0xB1, 0xD8}, /* 0x80-0x83 */ + {0xB1, 0xD9}, {0xB1, 0xDA}, {0xB1, 0xDB}, {0xB1, 0xDE}, /* 0x84-0x87 */ + {0xB1, 0xE0}, {0xB1, 0xE1}, {0xB1, 0xE2}, {0xB1, 0xE3}, /* 0x88-0x8B */ + {0xB1, 0xE4}, {0xB1, 0xE5}, {0xB1, 0xE6}, {0xB1, 0xE7}, /* 0x8C-0x8F */ + {0xB1, 0xEA}, {0xB1, 0xEB}, {0xB1, 0xED}, {0xB1, 0xEE}, /* 0x90-0x93 */ + {0xB1, 0xEF}, {0xB1, 0xF1}, {0xB1, 0xF2}, {0xB1, 0xF3}, /* 0x94-0x97 */ + {0xB1, 0xF4}, {0xB1, 0xF5}, {0xB1, 0xF6}, {0xB1, 0xF7}, /* 0x98-0x9B */ + {0xB1, 0xF8}, {0xB1, 0xFA}, {0xB1, 0xFC}, {0xB1, 0xFE}, /* 0x9C-0x9F */ + {0xB1, 0xFF}, {0xB2, 0x00}, {0xB2, 0x01}, {0xB2, 0x02}, /* 0xA0-0xA3 */ + {0xB2, 0x03}, {0xB2, 0x06}, {0xB2, 0x07}, {0xB2, 0x09}, /* 0xA4-0xA7 */ + {0xB2, 0x0A}, {0xB2, 0x0D}, {0xB2, 0x0E}, {0xB2, 0x0F}, /* 0xA8-0xAB */ + {0xB2, 0x10}, {0xB2, 0x11}, {0xB2, 0x12}, {0xB2, 0x13}, /* 0xAC-0xAF */ + {0xB2, 0x16}, {0xB2, 0x18}, {0xB2, 0x1A}, {0xB2, 0x1B}, /* 0xB0-0xB3 */ + {0xB2, 0x1C}, {0xB2, 0x1D}, {0xB2, 0x1E}, {0xB2, 0x1F}, /* 0xB4-0xB7 */ + {0xB2, 0x21}, {0xB2, 0x22}, {0xB2, 0x23}, {0xB2, 0x24}, /* 0xB8-0xBB */ + {0xB2, 0x25}, {0xB2, 0x26}, {0xB2, 0x27}, {0xB2, 0x28}, /* 0xBC-0xBF */ + {0xB2, 0x29}, {0xB2, 0x2A}, {0xB2, 0x2B}, {0xB2, 0x2C}, /* 0xC0-0xC3 */ + {0xB2, 0x2D}, {0xB2, 0x2E}, {0xB2, 0x2F}, {0xB2, 0x30}, /* 0xC4-0xC7 */ + {0xB2, 0x31}, {0xB2, 0x32}, {0xB2, 0x33}, {0xB2, 0x35}, /* 0xC8-0xCB */ + {0xB2, 0x36}, {0xB2, 0x37}, {0xB2, 0x38}, {0xB2, 0x39}, /* 0xCC-0xCF */ + {0xB2, 0x3A}, {0xB2, 0x3B}, {0xB2, 0x3D}, {0xB2, 0x3E}, /* 0xD0-0xD3 */ + {0xB2, 0x3F}, {0xB2, 0x40}, {0xB2, 0x41}, {0xB2, 0x42}, /* 0xD4-0xD7 */ + {0xB2, 0x43}, {0xB2, 0x44}, {0xB2, 0x45}, {0xB2, 0x46}, /* 0xD8-0xDB */ + {0xB2, 0x47}, {0xB2, 0x48}, {0xB2, 0x49}, {0xB2, 0x4A}, /* 0xDC-0xDF */ + {0xB2, 0x4B}, {0xB2, 0x4C}, {0xB2, 0x4D}, {0xB2, 0x4E}, /* 0xE0-0xE3 */ + {0xB2, 0x4F}, {0xB2, 0x50}, {0xB2, 0x51}, {0xB2, 0x52}, /* 0xE4-0xE7 */ + {0xB2, 0x53}, {0xB2, 0x54}, {0xB2, 0x55}, {0xB2, 0x56}, /* 0xE8-0xEB */ + {0xB2, 0x57}, {0xB2, 0x59}, {0xB2, 0x5A}, {0xB2, 0x5B}, /* 0xEC-0xEF */ + {0xB2, 0x5D}, {0xB2, 0x5E}, {0xB2, 0x5F}, {0xB2, 0x61}, /* 0xF0-0xF3 */ + {0xB2, 0x62}, {0xB2, 0x63}, {0xB2, 0x64}, {0xB2, 0x65}, /* 0xF4-0xF7 */ + {0xB2, 0x66}, {0xB2, 0x67}, {0xB2, 0x6A}, {0xB2, 0x6B}, /* 0xF8-0xFB */ + {0xB2, 0x6C}, {0xB2, 0x6D}, {0xB2, 0x6E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_88[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB2, 0x6F}, {0xB2, 0x70}, {0xB2, 0x71}, /* 0x40-0x43 */ + {0xB2, 0x72}, {0xB2, 0x73}, {0xB2, 0x76}, {0xB2, 0x77}, /* 0x44-0x47 */ + {0xB2, 0x78}, {0xB2, 0x79}, {0xB2, 0x7A}, {0xB2, 0x7B}, /* 0x48-0x4B */ + {0xB2, 0x7D}, {0xB2, 0x7E}, {0xB2, 0x7F}, {0xB2, 0x80}, /* 0x4C-0x4F */ + {0xB2, 0x81}, {0xB2, 0x82}, {0xB2, 0x83}, {0xB2, 0x86}, /* 0x50-0x53 */ + {0xB2, 0x87}, {0xB2, 0x88}, {0xB2, 0x8A}, {0xB2, 0x8B}, /* 0x54-0x57 */ + {0xB2, 0x8C}, {0xB2, 0x8D}, {0xB2, 0x8E}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB2, 0x8F}, {0xB2, 0x92}, {0xB2, 0x93}, /* 0x60-0x63 */ + {0xB2, 0x95}, {0xB2, 0x96}, {0xB2, 0x97}, {0xB2, 0x9B}, /* 0x64-0x67 */ + {0xB2, 0x9C}, {0xB2, 0x9D}, {0xB2, 0x9E}, {0xB2, 0x9F}, /* 0x68-0x6B */ + {0xB2, 0xA2}, {0xB2, 0xA4}, {0xB2, 0xA7}, {0xB2, 0xA8}, /* 0x6C-0x6F */ + {0xB2, 0xA9}, {0xB2, 0xAB}, {0xB2, 0xAD}, {0xB2, 0xAE}, /* 0x70-0x73 */ + {0xB2, 0xAF}, {0xB2, 0xB1}, {0xB2, 0xB2}, {0xB2, 0xB3}, /* 0x74-0x77 */ + {0xB2, 0xB5}, {0xB2, 0xB6}, {0xB2, 0xB7}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB2, 0xB8}, {0xB2, 0xB9}, {0xB2, 0xBA}, /* 0x80-0x83 */ + {0xB2, 0xBB}, {0xB2, 0xBC}, {0xB2, 0xBD}, {0xB2, 0xBE}, /* 0x84-0x87 */ + {0xB2, 0xBF}, {0xB2, 0xC0}, {0xB2, 0xC1}, {0xB2, 0xC2}, /* 0x88-0x8B */ + {0xB2, 0xC3}, {0xB2, 0xC4}, {0xB2, 0xC5}, {0xB2, 0xC6}, /* 0x8C-0x8F */ + {0xB2, 0xC7}, {0xB2, 0xCA}, {0xB2, 0xCB}, {0xB2, 0xCD}, /* 0x90-0x93 */ + {0xB2, 0xCE}, {0xB2, 0xCF}, {0xB2, 0xD1}, {0xB2, 0xD3}, /* 0x94-0x97 */ + {0xB2, 0xD4}, {0xB2, 0xD5}, {0xB2, 0xD6}, {0xB2, 0xD7}, /* 0x98-0x9B */ + {0xB2, 0xDA}, {0xB2, 0xDC}, {0xB2, 0xDE}, {0xB2, 0xDF}, /* 0x9C-0x9F */ + {0xB2, 0xE0}, {0xB2, 0xE1}, {0xB2, 0xE3}, {0xB2, 0xE7}, /* 0xA0-0xA3 */ + {0xB2, 0xE9}, {0xB2, 0xEA}, {0xB2, 0xF0}, {0xB2, 0xF1}, /* 0xA4-0xA7 */ + {0xB2, 0xF2}, {0xB2, 0xF6}, {0xB2, 0xFC}, {0xB2, 0xFD}, /* 0xA8-0xAB */ + {0xB2, 0xFE}, {0xB3, 0x02}, {0xB3, 0x03}, {0xB3, 0x05}, /* 0xAC-0xAF */ + {0xB3, 0x06}, {0xB3, 0x07}, {0xB3, 0x09}, {0xB3, 0x0A}, /* 0xB0-0xB3 */ + {0xB3, 0x0B}, {0xB3, 0x0C}, {0xB3, 0x0D}, {0xB3, 0x0E}, /* 0xB4-0xB7 */ + {0xB3, 0x0F}, {0xB3, 0x12}, {0xB3, 0x16}, {0xB3, 0x17}, /* 0xB8-0xBB */ + {0xB3, 0x18}, {0xB3, 0x19}, {0xB3, 0x1A}, {0xB3, 0x1B}, /* 0xBC-0xBF */ + {0xB3, 0x1D}, {0xB3, 0x1E}, {0xB3, 0x1F}, {0xB3, 0x20}, /* 0xC0-0xC3 */ + {0xB3, 0x21}, {0xB3, 0x22}, {0xB3, 0x23}, {0xB3, 0x24}, /* 0xC4-0xC7 */ + {0xB3, 0x25}, {0xB3, 0x26}, {0xB3, 0x27}, {0xB3, 0x28}, /* 0xC8-0xCB */ + {0xB3, 0x29}, {0xB3, 0x2A}, {0xB3, 0x2B}, {0xB3, 0x2C}, /* 0xCC-0xCF */ + {0xB3, 0x2D}, {0xB3, 0x2E}, {0xB3, 0x2F}, {0xB3, 0x30}, /* 0xD0-0xD3 */ + {0xB3, 0x31}, {0xB3, 0x32}, {0xB3, 0x33}, {0xB3, 0x34}, /* 0xD4-0xD7 */ + {0xB3, 0x35}, {0xB3, 0x36}, {0xB3, 0x37}, {0xB3, 0x38}, /* 0xD8-0xDB */ + {0xB3, 0x39}, {0xB3, 0x3A}, {0xB3, 0x3B}, {0xB3, 0x3C}, /* 0xDC-0xDF */ + {0xB3, 0x3D}, {0xB3, 0x3E}, {0xB3, 0x3F}, {0xB3, 0x40}, /* 0xE0-0xE3 */ + {0xB3, 0x41}, {0xB3, 0x42}, {0xB3, 0x43}, {0xB3, 0x44}, /* 0xE4-0xE7 */ + {0xB3, 0x45}, {0xB3, 0x46}, {0xB3, 0x47}, {0xB3, 0x48}, /* 0xE8-0xEB */ + {0xB3, 0x49}, {0xB3, 0x4A}, {0xB3, 0x4B}, {0xB3, 0x4C}, /* 0xEC-0xEF */ + {0xB3, 0x4D}, {0xB3, 0x4E}, {0xB3, 0x4F}, {0xB3, 0x50}, /* 0xF0-0xF3 */ + {0xB3, 0x51}, {0xB3, 0x52}, {0xB3, 0x53}, {0xB3, 0x57}, /* 0xF4-0xF7 */ + {0xB3, 0x59}, {0xB3, 0x5A}, {0xB3, 0x5D}, {0xB3, 0x60}, /* 0xF8-0xFB */ + {0xB3, 0x61}, {0xB3, 0x62}, {0xB3, 0x63}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_89[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB3, 0x66}, {0xB3, 0x68}, {0xB3, 0x6A}, /* 0x40-0x43 */ + {0xB3, 0x6C}, {0xB3, 0x6D}, {0xB3, 0x6F}, {0xB3, 0x72}, /* 0x44-0x47 */ + {0xB3, 0x73}, {0xB3, 0x75}, {0xB3, 0x76}, {0xB3, 0x77}, /* 0x48-0x4B */ + {0xB3, 0x79}, {0xB3, 0x7A}, {0xB3, 0x7B}, {0xB3, 0x7C}, /* 0x4C-0x4F */ + {0xB3, 0x7D}, {0xB3, 0x7E}, {0xB3, 0x7F}, {0xB3, 0x82}, /* 0x50-0x53 */ + {0xB3, 0x86}, {0xB3, 0x87}, {0xB3, 0x88}, {0xB3, 0x89}, /* 0x54-0x57 */ + {0xB3, 0x8A}, {0xB3, 0x8B}, {0xB3, 0x8D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB3, 0x8E}, {0xB3, 0x8F}, {0xB3, 0x91}, /* 0x60-0x63 */ + {0xB3, 0x92}, {0xB3, 0x93}, {0xB3, 0x95}, {0xB3, 0x96}, /* 0x64-0x67 */ + {0xB3, 0x97}, {0xB3, 0x98}, {0xB3, 0x99}, {0xB3, 0x9A}, /* 0x68-0x6B */ + {0xB3, 0x9B}, {0xB3, 0x9C}, {0xB3, 0x9D}, {0xB3, 0x9E}, /* 0x6C-0x6F */ + {0xB3, 0x9F}, {0xB3, 0xA2}, {0xB3, 0xA3}, {0xB3, 0xA4}, /* 0x70-0x73 */ + {0xB3, 0xA5}, {0xB3, 0xA6}, {0xB3, 0xA7}, {0xB3, 0xA9}, /* 0x74-0x77 */ + {0xB3, 0xAA}, {0xB3, 0xAB}, {0xB3, 0xAD}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB3, 0xAE}, {0xB3, 0xAF}, {0xB3, 0xB0}, /* 0x80-0x83 */ + {0xB3, 0xB1}, {0xB3, 0xB2}, {0xB3, 0xB3}, {0xB3, 0xB4}, /* 0x84-0x87 */ + {0xB3, 0xB5}, {0xB3, 0xB6}, {0xB3, 0xB7}, {0xB3, 0xB8}, /* 0x88-0x8B */ + {0xB3, 0xB9}, {0xB3, 0xBA}, {0xB3, 0xBB}, {0xB3, 0xBC}, /* 0x8C-0x8F */ + {0xB3, 0xBD}, {0xB3, 0xBE}, {0xB3, 0xBF}, {0xB3, 0xC0}, /* 0x90-0x93 */ + {0xB3, 0xC1}, {0xB3, 0xC2}, {0xB3, 0xC3}, {0xB3, 0xC6}, /* 0x94-0x97 */ + {0xB3, 0xC7}, {0xB3, 0xC9}, {0xB3, 0xCA}, {0xB3, 0xCD}, /* 0x98-0x9B */ + {0xB3, 0xCF}, {0xB3, 0xD1}, {0xB3, 0xD2}, {0xB3, 0xD3}, /* 0x9C-0x9F */ + {0xB3, 0xD6}, {0xB3, 0xD8}, {0xB3, 0xDA}, {0xB3, 0xDC}, /* 0xA0-0xA3 */ + {0xB3, 0xDE}, {0xB3, 0xDF}, {0xB3, 0xE1}, {0xB3, 0xE2}, /* 0xA4-0xA7 */ + {0xB3, 0xE3}, {0xB3, 0xE5}, {0xB3, 0xE6}, {0xB3, 0xE7}, /* 0xA8-0xAB */ + {0xB3, 0xE9}, {0xB3, 0xEA}, {0xB3, 0xEB}, {0xB3, 0xEC}, /* 0xAC-0xAF */ + {0xB3, 0xED}, {0xB3, 0xEE}, {0xB3, 0xEF}, {0xB3, 0xF0}, /* 0xB0-0xB3 */ + {0xB3, 0xF1}, {0xB3, 0xF2}, {0xB3, 0xF3}, {0xB3, 0xF4}, /* 0xB4-0xB7 */ + {0xB3, 0xF5}, {0xB3, 0xF6}, {0xB3, 0xF7}, {0xB3, 0xF8}, /* 0xB8-0xBB */ + {0xB3, 0xF9}, {0xB3, 0xFA}, {0xB3, 0xFB}, {0xB3, 0xFD}, /* 0xBC-0xBF */ + {0xB3, 0xFE}, {0xB3, 0xFF}, {0xB4, 0x00}, {0xB4, 0x01}, /* 0xC0-0xC3 */ + {0xB4, 0x02}, {0xB4, 0x03}, {0xB4, 0x04}, {0xB4, 0x05}, /* 0xC4-0xC7 */ + {0xB4, 0x06}, {0xB4, 0x07}, {0xB4, 0x08}, {0xB4, 0x09}, /* 0xC8-0xCB */ + {0xB4, 0x0A}, {0xB4, 0x0B}, {0xB4, 0x0C}, {0xB4, 0x0D}, /* 0xCC-0xCF */ + {0xB4, 0x0E}, {0xB4, 0x0F}, {0xB4, 0x11}, {0xB4, 0x12}, /* 0xD0-0xD3 */ + {0xB4, 0x13}, {0xB4, 0x14}, {0xB4, 0x15}, {0xB4, 0x16}, /* 0xD4-0xD7 */ + {0xB4, 0x17}, {0xB4, 0x19}, {0xB4, 0x1A}, {0xB4, 0x1B}, /* 0xD8-0xDB */ + {0xB4, 0x1D}, {0xB4, 0x1E}, {0xB4, 0x1F}, {0xB4, 0x21}, /* 0xDC-0xDF */ + {0xB4, 0x22}, {0xB4, 0x23}, {0xB4, 0x24}, {0xB4, 0x25}, /* 0xE0-0xE3 */ + {0xB4, 0x26}, {0xB4, 0x27}, {0xB4, 0x2A}, {0xB4, 0x2C}, /* 0xE4-0xE7 */ + {0xB4, 0x2D}, {0xB4, 0x2E}, {0xB4, 0x2F}, {0xB4, 0x30}, /* 0xE8-0xEB */ + {0xB4, 0x31}, {0xB4, 0x32}, {0xB4, 0x33}, {0xB4, 0x35}, /* 0xEC-0xEF */ + {0xB4, 0x36}, {0xB4, 0x37}, {0xB4, 0x38}, {0xB4, 0x39}, /* 0xF0-0xF3 */ + {0xB4, 0x3A}, {0xB4, 0x3B}, {0xB4, 0x3C}, {0xB4, 0x3D}, /* 0xF4-0xF7 */ + {0xB4, 0x3E}, {0xB4, 0x3F}, {0xB4, 0x40}, {0xB4, 0x41}, /* 0xF8-0xFB */ + {0xB4, 0x42}, {0xB4, 0x43}, {0xB4, 0x44}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8A[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB4, 0x45}, {0xB4, 0x46}, {0xB4, 0x47}, /* 0x40-0x43 */ + {0xB4, 0x48}, {0xB4, 0x49}, {0xB4, 0x4A}, {0xB4, 0x4B}, /* 0x44-0x47 */ + {0xB4, 0x4C}, {0xB4, 0x4D}, {0xB4, 0x4E}, {0xB4, 0x4F}, /* 0x48-0x4B */ + {0xB4, 0x52}, {0xB4, 0x53}, {0xB4, 0x55}, {0xB4, 0x56}, /* 0x4C-0x4F */ + {0xB4, 0x57}, {0xB4, 0x59}, {0xB4, 0x5A}, {0xB4, 0x5B}, /* 0x50-0x53 */ + {0xB4, 0x5C}, {0xB4, 0x5D}, {0xB4, 0x5E}, {0xB4, 0x5F}, /* 0x54-0x57 */ + {0xB4, 0x62}, {0xB4, 0x64}, {0xB4, 0x66}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB4, 0x67}, {0xB4, 0x68}, {0xB4, 0x69}, /* 0x60-0x63 */ + {0xB4, 0x6A}, {0xB4, 0x6B}, {0xB4, 0x6D}, {0xB4, 0x6E}, /* 0x64-0x67 */ + {0xB4, 0x6F}, {0xB4, 0x70}, {0xB4, 0x71}, {0xB4, 0x72}, /* 0x68-0x6B */ + {0xB4, 0x73}, {0xB4, 0x74}, {0xB4, 0x75}, {0xB4, 0x76}, /* 0x6C-0x6F */ + {0xB4, 0x77}, {0xB4, 0x78}, {0xB4, 0x79}, {0xB4, 0x7A}, /* 0x70-0x73 */ + {0xB4, 0x7B}, {0xB4, 0x7C}, {0xB4, 0x7D}, {0xB4, 0x7E}, /* 0x74-0x77 */ + {0xB4, 0x7F}, {0xB4, 0x81}, {0xB4, 0x82}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB4, 0x83}, {0xB4, 0x84}, {0xB4, 0x85}, /* 0x80-0x83 */ + {0xB4, 0x86}, {0xB4, 0x87}, {0xB4, 0x89}, {0xB4, 0x8A}, /* 0x84-0x87 */ + {0xB4, 0x8B}, {0xB4, 0x8C}, {0xB4, 0x8D}, {0xB4, 0x8E}, /* 0x88-0x8B */ + {0xB4, 0x8F}, {0xB4, 0x90}, {0xB4, 0x91}, {0xB4, 0x92}, /* 0x8C-0x8F */ + {0xB4, 0x93}, {0xB4, 0x94}, {0xB4, 0x95}, {0xB4, 0x96}, /* 0x90-0x93 */ + {0xB4, 0x97}, {0xB4, 0x98}, {0xB4, 0x99}, {0xB4, 0x9A}, /* 0x94-0x97 */ + {0xB4, 0x9B}, {0xB4, 0x9C}, {0xB4, 0x9E}, {0xB4, 0x9F}, /* 0x98-0x9B */ + {0xB4, 0xA0}, {0xB4, 0xA1}, {0xB4, 0xA2}, {0xB4, 0xA3}, /* 0x9C-0x9F */ + {0xB4, 0xA5}, {0xB4, 0xA6}, {0xB4, 0xA7}, {0xB4, 0xA9}, /* 0xA0-0xA3 */ + {0xB4, 0xAA}, {0xB4, 0xAB}, {0xB4, 0xAD}, {0xB4, 0xAE}, /* 0xA4-0xA7 */ + {0xB4, 0xAF}, {0xB4, 0xB0}, {0xB4, 0xB1}, {0xB4, 0xB2}, /* 0xA8-0xAB */ + {0xB4, 0xB3}, {0xB4, 0xB4}, {0xB4, 0xB6}, {0xB4, 0xB8}, /* 0xAC-0xAF */ + {0xB4, 0xBA}, {0xB4, 0xBB}, {0xB4, 0xBC}, {0xB4, 0xBD}, /* 0xB0-0xB3 */ + {0xB4, 0xBE}, {0xB4, 0xBF}, {0xB4, 0xC1}, {0xB4, 0xC2}, /* 0xB4-0xB7 */ + {0xB4, 0xC3}, {0xB4, 0xC5}, {0xB4, 0xC6}, {0xB4, 0xC7}, /* 0xB8-0xBB */ + {0xB4, 0xC9}, {0xB4, 0xCA}, {0xB4, 0xCB}, {0xB4, 0xCC}, /* 0xBC-0xBF */ + {0xB4, 0xCD}, {0xB4, 0xCE}, {0xB4, 0xCF}, {0xB4, 0xD1}, /* 0xC0-0xC3 */ + {0xB4, 0xD2}, {0xB4, 0xD3}, {0xB4, 0xD4}, {0xB4, 0xD6}, /* 0xC4-0xC7 */ + {0xB4, 0xD7}, {0xB4, 0xD8}, {0xB4, 0xD9}, {0xB4, 0xDA}, /* 0xC8-0xCB */ + {0xB4, 0xDB}, {0xB4, 0xDE}, {0xB4, 0xDF}, {0xB4, 0xE1}, /* 0xCC-0xCF */ + {0xB4, 0xE2}, {0xB4, 0xE5}, {0xB4, 0xE7}, {0xB4, 0xE8}, /* 0xD0-0xD3 */ + {0xB4, 0xE9}, {0xB4, 0xEA}, {0xB4, 0xEB}, {0xB4, 0xEE}, /* 0xD4-0xD7 */ + {0xB4, 0xF0}, {0xB4, 0xF2}, {0xB4, 0xF3}, {0xB4, 0xF4}, /* 0xD8-0xDB */ + {0xB4, 0xF5}, {0xB4, 0xF6}, {0xB4, 0xF7}, {0xB4, 0xF9}, /* 0xDC-0xDF */ + {0xB4, 0xFA}, {0xB4, 0xFB}, {0xB4, 0xFC}, {0xB4, 0xFD}, /* 0xE0-0xE3 */ + {0xB4, 0xFE}, {0xB4, 0xFF}, {0xB5, 0x00}, {0xB5, 0x01}, /* 0xE4-0xE7 */ + {0xB5, 0x02}, {0xB5, 0x03}, {0xB5, 0x04}, {0xB5, 0x05}, /* 0xE8-0xEB */ + {0xB5, 0x06}, {0xB5, 0x07}, {0xB5, 0x08}, {0xB5, 0x09}, /* 0xEC-0xEF */ + {0xB5, 0x0A}, {0xB5, 0x0B}, {0xB5, 0x0C}, {0xB5, 0x0D}, /* 0xF0-0xF3 */ + {0xB5, 0x0E}, {0xB5, 0x0F}, {0xB5, 0x10}, {0xB5, 0x11}, /* 0xF4-0xF7 */ + {0xB5, 0x12}, {0xB5, 0x13}, {0xB5, 0x16}, {0xB5, 0x17}, /* 0xF8-0xFB */ + {0xB5, 0x19}, {0xB5, 0x1A}, {0xB5, 0x1D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8B[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB5, 0x1E}, {0xB5, 0x1F}, {0xB5, 0x20}, /* 0x40-0x43 */ + {0xB5, 0x21}, {0xB5, 0x22}, {0xB5, 0x23}, {0xB5, 0x26}, /* 0x44-0x47 */ + {0xB5, 0x2B}, {0xB5, 0x2C}, {0xB5, 0x2D}, {0xB5, 0x2E}, /* 0x48-0x4B */ + {0xB5, 0x2F}, {0xB5, 0x32}, {0xB5, 0x33}, {0xB5, 0x35}, /* 0x4C-0x4F */ + {0xB5, 0x36}, {0xB5, 0x37}, {0xB5, 0x39}, {0xB5, 0x3A}, /* 0x50-0x53 */ + {0xB5, 0x3B}, {0xB5, 0x3C}, {0xB5, 0x3D}, {0xB5, 0x3E}, /* 0x54-0x57 */ + {0xB5, 0x3F}, {0xB5, 0x42}, {0xB5, 0x46}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB5, 0x47}, {0xB5, 0x48}, {0xB5, 0x49}, /* 0x60-0x63 */ + {0xB5, 0x4A}, {0xB5, 0x4E}, {0xB5, 0x4F}, {0xB5, 0x51}, /* 0x64-0x67 */ + {0xB5, 0x52}, {0xB5, 0x53}, {0xB5, 0x55}, {0xB5, 0x56}, /* 0x68-0x6B */ + {0xB5, 0x57}, {0xB5, 0x58}, {0xB5, 0x59}, {0xB5, 0x5A}, /* 0x6C-0x6F */ + {0xB5, 0x5B}, {0xB5, 0x5E}, {0xB5, 0x62}, {0xB5, 0x63}, /* 0x70-0x73 */ + {0xB5, 0x64}, {0xB5, 0x65}, {0xB5, 0x66}, {0xB5, 0x67}, /* 0x74-0x77 */ + {0xB5, 0x68}, {0xB5, 0x69}, {0xB5, 0x6A}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB5, 0x6B}, {0xB5, 0x6C}, {0xB5, 0x6D}, /* 0x80-0x83 */ + {0xB5, 0x6E}, {0xB5, 0x6F}, {0xB5, 0x70}, {0xB5, 0x71}, /* 0x84-0x87 */ + {0xB5, 0x72}, {0xB5, 0x73}, {0xB5, 0x74}, {0xB5, 0x75}, /* 0x88-0x8B */ + {0xB5, 0x76}, {0xB5, 0x77}, {0xB5, 0x78}, {0xB5, 0x79}, /* 0x8C-0x8F */ + {0xB5, 0x7A}, {0xB5, 0x7B}, {0xB5, 0x7C}, {0xB5, 0x7D}, /* 0x90-0x93 */ + {0xB5, 0x7E}, {0xB5, 0x7F}, {0xB5, 0x80}, {0xB5, 0x81}, /* 0x94-0x97 */ + {0xB5, 0x82}, {0xB5, 0x83}, {0xB5, 0x84}, {0xB5, 0x85}, /* 0x98-0x9B */ + {0xB5, 0x86}, {0xB5, 0x87}, {0xB5, 0x88}, {0xB5, 0x89}, /* 0x9C-0x9F */ + {0xB5, 0x8A}, {0xB5, 0x8B}, {0xB5, 0x8C}, {0xB5, 0x8D}, /* 0xA0-0xA3 */ + {0xB5, 0x8E}, {0xB5, 0x8F}, {0xB5, 0x90}, {0xB5, 0x91}, /* 0xA4-0xA7 */ + {0xB5, 0x92}, {0xB5, 0x93}, {0xB5, 0x94}, {0xB5, 0x95}, /* 0xA8-0xAB */ + {0xB5, 0x96}, {0xB5, 0x97}, {0xB5, 0x98}, {0xB5, 0x99}, /* 0xAC-0xAF */ + {0xB5, 0x9A}, {0xB5, 0x9B}, {0xB5, 0x9C}, {0xB5, 0x9D}, /* 0xB0-0xB3 */ + {0xB5, 0x9E}, {0xB5, 0x9F}, {0xB5, 0xA2}, {0xB5, 0xA3}, /* 0xB4-0xB7 */ + {0xB5, 0xA5}, {0xB5, 0xA6}, {0xB5, 0xA7}, {0xB5, 0xA9}, /* 0xB8-0xBB */ + {0xB5, 0xAC}, {0xB5, 0xAD}, {0xB5, 0xAE}, {0xB5, 0xAF}, /* 0xBC-0xBF */ + {0xB5, 0xB2}, {0xB5, 0xB6}, {0xB5, 0xB7}, {0xB5, 0xB8}, /* 0xC0-0xC3 */ + {0xB5, 0xB9}, {0xB5, 0xBA}, {0xB5, 0xBE}, {0xB5, 0xBF}, /* 0xC4-0xC7 */ + {0xB5, 0xC1}, {0xB5, 0xC2}, {0xB5, 0xC3}, {0xB5, 0xC5}, /* 0xC8-0xCB */ + {0xB5, 0xC6}, {0xB5, 0xC7}, {0xB5, 0xC8}, {0xB5, 0xC9}, /* 0xCC-0xCF */ + {0xB5, 0xCA}, {0xB5, 0xCB}, {0xB5, 0xCE}, {0xB5, 0xD2}, /* 0xD0-0xD3 */ + {0xB5, 0xD3}, {0xB5, 0xD4}, {0xB5, 0xD5}, {0xB5, 0xD6}, /* 0xD4-0xD7 */ + {0xB5, 0xD7}, {0xB5, 0xD9}, {0xB5, 0xDA}, {0xB5, 0xDB}, /* 0xD8-0xDB */ + {0xB5, 0xDC}, {0xB5, 0xDD}, {0xB5, 0xDE}, {0xB5, 0xDF}, /* 0xDC-0xDF */ + {0xB5, 0xE0}, {0xB5, 0xE1}, {0xB5, 0xE2}, {0xB5, 0xE3}, /* 0xE0-0xE3 */ + {0xB5, 0xE4}, {0xB5, 0xE5}, {0xB5, 0xE6}, {0xB5, 0xE7}, /* 0xE4-0xE7 */ + {0xB5, 0xE8}, {0xB5, 0xE9}, {0xB5, 0xEA}, {0xB5, 0xEB}, /* 0xE8-0xEB */ + {0xB5, 0xED}, {0xB5, 0xEE}, {0xB5, 0xEF}, {0xB5, 0xF0}, /* 0xEC-0xEF */ + {0xB5, 0xF1}, {0xB5, 0xF2}, {0xB5, 0xF3}, {0xB5, 0xF4}, /* 0xF0-0xF3 */ + {0xB5, 0xF5}, {0xB5, 0xF6}, {0xB5, 0xF7}, {0xB5, 0xF8}, /* 0xF4-0xF7 */ + {0xB5, 0xF9}, {0xB5, 0xFA}, {0xB5, 0xFB}, {0xB5, 0xFC}, /* 0xF8-0xFB */ + {0xB5, 0xFD}, {0xB5, 0xFE}, {0xB5, 0xFF}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8C[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB6, 0x00}, {0xB6, 0x01}, {0xB6, 0x02}, /* 0x40-0x43 */ + {0xB6, 0x03}, {0xB6, 0x04}, {0xB6, 0x05}, {0xB6, 0x06}, /* 0x44-0x47 */ + {0xB6, 0x07}, {0xB6, 0x08}, {0xB6, 0x09}, {0xB6, 0x0A}, /* 0x48-0x4B */ + {0xB6, 0x0B}, {0xB6, 0x0C}, {0xB6, 0x0D}, {0xB6, 0x0E}, /* 0x4C-0x4F */ + {0xB6, 0x0F}, {0xB6, 0x12}, {0xB6, 0x13}, {0xB6, 0x15}, /* 0x50-0x53 */ + {0xB6, 0x16}, {0xB6, 0x17}, {0xB6, 0x19}, {0xB6, 0x1A}, /* 0x54-0x57 */ + {0xB6, 0x1B}, {0xB6, 0x1C}, {0xB6, 0x1D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB6, 0x1E}, {0xB6, 0x1F}, {0xB6, 0x20}, /* 0x60-0x63 */ + {0xB6, 0x21}, {0xB6, 0x22}, {0xB6, 0x23}, {0xB6, 0x24}, /* 0x64-0x67 */ + {0xB6, 0x26}, {0xB6, 0x27}, {0xB6, 0x28}, {0xB6, 0x29}, /* 0x68-0x6B */ + {0xB6, 0x2A}, {0xB6, 0x2B}, {0xB6, 0x2D}, {0xB6, 0x2E}, /* 0x6C-0x6F */ + {0xB6, 0x2F}, {0xB6, 0x30}, {0xB6, 0x31}, {0xB6, 0x32}, /* 0x70-0x73 */ + {0xB6, 0x33}, {0xB6, 0x35}, {0xB6, 0x36}, {0xB6, 0x37}, /* 0x74-0x77 */ + {0xB6, 0x38}, {0xB6, 0x39}, {0xB6, 0x3A}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB6, 0x3B}, {0xB6, 0x3C}, {0xB6, 0x3D}, /* 0x80-0x83 */ + {0xB6, 0x3E}, {0xB6, 0x3F}, {0xB6, 0x40}, {0xB6, 0x41}, /* 0x84-0x87 */ + {0xB6, 0x42}, {0xB6, 0x43}, {0xB6, 0x44}, {0xB6, 0x45}, /* 0x88-0x8B */ + {0xB6, 0x46}, {0xB6, 0x47}, {0xB6, 0x49}, {0xB6, 0x4A}, /* 0x8C-0x8F */ + {0xB6, 0x4B}, {0xB6, 0x4C}, {0xB6, 0x4D}, {0xB6, 0x4E}, /* 0x90-0x93 */ + {0xB6, 0x4F}, {0xB6, 0x50}, {0xB6, 0x51}, {0xB6, 0x52}, /* 0x94-0x97 */ + {0xB6, 0x53}, {0xB6, 0x54}, {0xB6, 0x55}, {0xB6, 0x56}, /* 0x98-0x9B */ + {0xB6, 0x57}, {0xB6, 0x58}, {0xB6, 0x59}, {0xB6, 0x5A}, /* 0x9C-0x9F */ + {0xB6, 0x5B}, {0xB6, 0x5C}, {0xB6, 0x5D}, {0xB6, 0x5E}, /* 0xA0-0xA3 */ + {0xB6, 0x5F}, {0xB6, 0x60}, {0xB6, 0x61}, {0xB6, 0x62}, /* 0xA4-0xA7 */ + {0xB6, 0x63}, {0xB6, 0x65}, {0xB6, 0x66}, {0xB6, 0x67}, /* 0xA8-0xAB */ + {0xB6, 0x69}, {0xB6, 0x6A}, {0xB6, 0x6B}, {0xB6, 0x6C}, /* 0xAC-0xAF */ + {0xB6, 0x6D}, {0xB6, 0x6E}, {0xB6, 0x6F}, {0xB6, 0x70}, /* 0xB0-0xB3 */ + {0xB6, 0x71}, {0xB6, 0x72}, {0xB6, 0x73}, {0xB6, 0x74}, /* 0xB4-0xB7 */ + {0xB6, 0x75}, {0xB6, 0x76}, {0xB6, 0x77}, {0xB6, 0x78}, /* 0xB8-0xBB */ + {0xB6, 0x79}, {0xB6, 0x7A}, {0xB6, 0x7B}, {0xB6, 0x7C}, /* 0xBC-0xBF */ + {0xB6, 0x7D}, {0xB6, 0x7E}, {0xB6, 0x7F}, {0xB6, 0x80}, /* 0xC0-0xC3 */ + {0xB6, 0x81}, {0xB6, 0x82}, {0xB6, 0x83}, {0xB6, 0x84}, /* 0xC4-0xC7 */ + {0xB6, 0x85}, {0xB6, 0x86}, {0xB6, 0x87}, {0xB6, 0x88}, /* 0xC8-0xCB */ + {0xB6, 0x89}, {0xB6, 0x8A}, {0xB6, 0x8B}, {0xB6, 0x8C}, /* 0xCC-0xCF */ + {0xB6, 0x8D}, {0xB6, 0x8E}, {0xB6, 0x8F}, {0xB6, 0x90}, /* 0xD0-0xD3 */ + {0xB6, 0x91}, {0xB6, 0x92}, {0xB6, 0x93}, {0xB6, 0x94}, /* 0xD4-0xD7 */ + {0xB6, 0x95}, {0xB6, 0x96}, {0xB6, 0x97}, {0xB6, 0x98}, /* 0xD8-0xDB */ + {0xB6, 0x99}, {0xB6, 0x9A}, {0xB6, 0x9B}, {0xB6, 0x9E}, /* 0xDC-0xDF */ + {0xB6, 0x9F}, {0xB6, 0xA1}, {0xB6, 0xA2}, {0xB6, 0xA3}, /* 0xE0-0xE3 */ + {0xB6, 0xA5}, {0xB6, 0xA6}, {0xB6, 0xA7}, {0xB6, 0xA8}, /* 0xE4-0xE7 */ + {0xB6, 0xA9}, {0xB6, 0xAA}, {0xB6, 0xAD}, {0xB6, 0xAE}, /* 0xE8-0xEB */ + {0xB6, 0xAF}, {0xB6, 0xB0}, {0xB6, 0xB2}, {0xB6, 0xB3}, /* 0xEC-0xEF */ + {0xB6, 0xB4}, {0xB6, 0xB5}, {0xB6, 0xB6}, {0xB6, 0xB7}, /* 0xF0-0xF3 */ + {0xB6, 0xB8}, {0xB6, 0xB9}, {0xB6, 0xBA}, {0xB6, 0xBB}, /* 0xF4-0xF7 */ + {0xB6, 0xBC}, {0xB6, 0xBD}, {0xB6, 0xBE}, {0xB6, 0xBF}, /* 0xF8-0xFB */ + {0xB6, 0xC0}, {0xB6, 0xC1}, {0xB6, 0xC2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8D[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB6, 0xC3}, {0xB6, 0xC4}, {0xB6, 0xC5}, /* 0x40-0x43 */ + {0xB6, 0xC6}, {0xB6, 0xC7}, {0xB6, 0xC8}, {0xB6, 0xC9}, /* 0x44-0x47 */ + {0xB6, 0xCA}, {0xB6, 0xCB}, {0xB6, 0xCC}, {0xB6, 0xCD}, /* 0x48-0x4B */ + {0xB6, 0xCE}, {0xB6, 0xCF}, {0xB6, 0xD0}, {0xB6, 0xD1}, /* 0x4C-0x4F */ + {0xB6, 0xD2}, {0xB6, 0xD3}, {0xB6, 0xD5}, {0xB6, 0xD6}, /* 0x50-0x53 */ + {0xB6, 0xD7}, {0xB6, 0xD8}, {0xB6, 0xD9}, {0xB6, 0xDA}, /* 0x54-0x57 */ + {0xB6, 0xDB}, {0xB6, 0xDC}, {0xB6, 0xDD}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB6, 0xDE}, {0xB6, 0xDF}, {0xB6, 0xE0}, /* 0x60-0x63 */ + {0xB6, 0xE1}, {0xB6, 0xE2}, {0xB6, 0xE3}, {0xB6, 0xE4}, /* 0x64-0x67 */ + {0xB6, 0xE5}, {0xB6, 0xE6}, {0xB6, 0xE7}, {0xB6, 0xE8}, /* 0x68-0x6B */ + {0xB6, 0xE9}, {0xB6, 0xEA}, {0xB6, 0xEB}, {0xB6, 0xEC}, /* 0x6C-0x6F */ + {0xB6, 0xED}, {0xB6, 0xEE}, {0xB6, 0xEF}, {0xB6, 0xF1}, /* 0x70-0x73 */ + {0xB6, 0xF2}, {0xB6, 0xF3}, {0xB6, 0xF5}, {0xB6, 0xF6}, /* 0x74-0x77 */ + {0xB6, 0xF7}, {0xB6, 0xF9}, {0xB6, 0xFA}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB6, 0xFB}, {0xB6, 0xFC}, {0xB6, 0xFD}, /* 0x80-0x83 */ + {0xB6, 0xFE}, {0xB6, 0xFF}, {0xB7, 0x02}, {0xB7, 0x03}, /* 0x84-0x87 */ + {0xB7, 0x04}, {0xB7, 0x06}, {0xB7, 0x07}, {0xB7, 0x08}, /* 0x88-0x8B */ + {0xB7, 0x09}, {0xB7, 0x0A}, {0xB7, 0x0B}, {0xB7, 0x0C}, /* 0x8C-0x8F */ + {0xB7, 0x0D}, {0xB7, 0x0E}, {0xB7, 0x0F}, {0xB7, 0x10}, /* 0x90-0x93 */ + {0xB7, 0x11}, {0xB7, 0x12}, {0xB7, 0x13}, {0xB7, 0x14}, /* 0x94-0x97 */ + {0xB7, 0x15}, {0xB7, 0x16}, {0xB7, 0x17}, {0xB7, 0x18}, /* 0x98-0x9B */ + {0xB7, 0x19}, {0xB7, 0x1A}, {0xB7, 0x1B}, {0xB7, 0x1C}, /* 0x9C-0x9F */ + {0xB7, 0x1D}, {0xB7, 0x1E}, {0xB7, 0x1F}, {0xB7, 0x20}, /* 0xA0-0xA3 */ + {0xB7, 0x21}, {0xB7, 0x22}, {0xB7, 0x23}, {0xB7, 0x24}, /* 0xA4-0xA7 */ + {0xB7, 0x25}, {0xB7, 0x26}, {0xB7, 0x27}, {0xB7, 0x2A}, /* 0xA8-0xAB */ + {0xB7, 0x2B}, {0xB7, 0x2D}, {0xB7, 0x2E}, {0xB7, 0x31}, /* 0xAC-0xAF */ + {0xB7, 0x32}, {0xB7, 0x33}, {0xB7, 0x34}, {0xB7, 0x35}, /* 0xB0-0xB3 */ + {0xB7, 0x36}, {0xB7, 0x37}, {0xB7, 0x3A}, {0xB7, 0x3C}, /* 0xB4-0xB7 */ + {0xB7, 0x3D}, {0xB7, 0x3E}, {0xB7, 0x3F}, {0xB7, 0x40}, /* 0xB8-0xBB */ + {0xB7, 0x41}, {0xB7, 0x42}, {0xB7, 0x43}, {0xB7, 0x45}, /* 0xBC-0xBF */ + {0xB7, 0x46}, {0xB7, 0x47}, {0xB7, 0x49}, {0xB7, 0x4A}, /* 0xC0-0xC3 */ + {0xB7, 0x4B}, {0xB7, 0x4D}, {0xB7, 0x4E}, {0xB7, 0x4F}, /* 0xC4-0xC7 */ + {0xB7, 0x50}, {0xB7, 0x51}, {0xB7, 0x52}, {0xB7, 0x53}, /* 0xC8-0xCB */ + {0xB7, 0x56}, {0xB7, 0x57}, {0xB7, 0x58}, {0xB7, 0x59}, /* 0xCC-0xCF */ + {0xB7, 0x5A}, {0xB7, 0x5B}, {0xB7, 0x5C}, {0xB7, 0x5D}, /* 0xD0-0xD3 */ + {0xB7, 0x5E}, {0xB7, 0x5F}, {0xB7, 0x61}, {0xB7, 0x62}, /* 0xD4-0xD7 */ + {0xB7, 0x63}, {0xB7, 0x65}, {0xB7, 0x66}, {0xB7, 0x67}, /* 0xD8-0xDB */ + {0xB7, 0x69}, {0xB7, 0x6A}, {0xB7, 0x6B}, {0xB7, 0x6C}, /* 0xDC-0xDF */ + {0xB7, 0x6D}, {0xB7, 0x6E}, {0xB7, 0x6F}, {0xB7, 0x72}, /* 0xE0-0xE3 */ + {0xB7, 0x74}, {0xB7, 0x76}, {0xB7, 0x77}, {0xB7, 0x78}, /* 0xE4-0xE7 */ + {0xB7, 0x79}, {0xB7, 0x7A}, {0xB7, 0x7B}, {0xB7, 0x7E}, /* 0xE8-0xEB */ + {0xB7, 0x7F}, {0xB7, 0x81}, {0xB7, 0x82}, {0xB7, 0x83}, /* 0xEC-0xEF */ + {0xB7, 0x85}, {0xB7, 0x86}, {0xB7, 0x87}, {0xB7, 0x88}, /* 0xF0-0xF3 */ + {0xB7, 0x89}, {0xB7, 0x8A}, {0xB7, 0x8B}, {0xB7, 0x8E}, /* 0xF4-0xF7 */ + {0xB7, 0x93}, {0xB7, 0x94}, {0xB7, 0x95}, {0xB7, 0x9A}, /* 0xF8-0xFB */ + {0xB7, 0x9B}, {0xB7, 0x9D}, {0xB7, 0x9E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8E[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB7, 0x9F}, {0xB7, 0xA1}, {0xB7, 0xA2}, /* 0x40-0x43 */ + {0xB7, 0xA3}, {0xB7, 0xA4}, {0xB7, 0xA5}, {0xB7, 0xA6}, /* 0x44-0x47 */ + {0xB7, 0xA7}, {0xB7, 0xAA}, {0xB7, 0xAE}, {0xB7, 0xAF}, /* 0x48-0x4B */ + {0xB7, 0xB0}, {0xB7, 0xB1}, {0xB7, 0xB2}, {0xB7, 0xB3}, /* 0x4C-0x4F */ + {0xB7, 0xB6}, {0xB7, 0xB7}, {0xB7, 0xB9}, {0xB7, 0xBA}, /* 0x50-0x53 */ + {0xB7, 0xBB}, {0xB7, 0xBC}, {0xB7, 0xBD}, {0xB7, 0xBE}, /* 0x54-0x57 */ + {0xB7, 0xBF}, {0xB7, 0xC0}, {0xB7, 0xC1}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB7, 0xC2}, {0xB7, 0xC3}, {0xB7, 0xC4}, /* 0x60-0x63 */ + {0xB7, 0xC5}, {0xB7, 0xC6}, {0xB7, 0xC8}, {0xB7, 0xCA}, /* 0x64-0x67 */ + {0xB7, 0xCB}, {0xB7, 0xCC}, {0xB7, 0xCD}, {0xB7, 0xCE}, /* 0x68-0x6B */ + {0xB7, 0xCF}, {0xB7, 0xD0}, {0xB7, 0xD1}, {0xB7, 0xD2}, /* 0x6C-0x6F */ + {0xB7, 0xD3}, {0xB7, 0xD4}, {0xB7, 0xD5}, {0xB7, 0xD6}, /* 0x70-0x73 */ + {0xB7, 0xD7}, {0xB7, 0xD8}, {0xB7, 0xD9}, {0xB7, 0xDA}, /* 0x74-0x77 */ + {0xB7, 0xDB}, {0xB7, 0xDC}, {0xB7, 0xDD}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB7, 0xDE}, {0xB7, 0xDF}, {0xB7, 0xE0}, /* 0x80-0x83 */ + {0xB7, 0xE1}, {0xB7, 0xE2}, {0xB7, 0xE3}, {0xB7, 0xE4}, /* 0x84-0x87 */ + {0xB7, 0xE5}, {0xB7, 0xE6}, {0xB7, 0xE7}, {0xB7, 0xE8}, /* 0x88-0x8B */ + {0xB7, 0xE9}, {0xB7, 0xEA}, {0xB7, 0xEB}, {0xB7, 0xEE}, /* 0x8C-0x8F */ + {0xB7, 0xEF}, {0xB7, 0xF1}, {0xB7, 0xF2}, {0xB7, 0xF3}, /* 0x90-0x93 */ + {0xB7, 0xF5}, {0xB7, 0xF6}, {0xB7, 0xF7}, {0xB7, 0xF8}, /* 0x94-0x97 */ + {0xB7, 0xF9}, {0xB7, 0xFA}, {0xB7, 0xFB}, {0xB7, 0xFE}, /* 0x98-0x9B */ + {0xB8, 0x02}, {0xB8, 0x03}, {0xB8, 0x04}, {0xB8, 0x05}, /* 0x9C-0x9F */ + {0xB8, 0x06}, {0xB8, 0x0A}, {0xB8, 0x0B}, {0xB8, 0x0D}, /* 0xA0-0xA3 */ + {0xB8, 0x0E}, {0xB8, 0x0F}, {0xB8, 0x11}, {0xB8, 0x12}, /* 0xA4-0xA7 */ + {0xB8, 0x13}, {0xB8, 0x14}, {0xB8, 0x15}, {0xB8, 0x16}, /* 0xA8-0xAB */ + {0xB8, 0x17}, {0xB8, 0x1A}, {0xB8, 0x1C}, {0xB8, 0x1E}, /* 0xAC-0xAF */ + {0xB8, 0x1F}, {0xB8, 0x20}, {0xB8, 0x21}, {0xB8, 0x22}, /* 0xB0-0xB3 */ + {0xB8, 0x23}, {0xB8, 0x26}, {0xB8, 0x27}, {0xB8, 0x29}, /* 0xB4-0xB7 */ + {0xB8, 0x2A}, {0xB8, 0x2B}, {0xB8, 0x2D}, {0xB8, 0x2E}, /* 0xB8-0xBB */ + {0xB8, 0x2F}, {0xB8, 0x30}, {0xB8, 0x31}, {0xB8, 0x32}, /* 0xBC-0xBF */ + {0xB8, 0x33}, {0xB8, 0x36}, {0xB8, 0x3A}, {0xB8, 0x3B}, /* 0xC0-0xC3 */ + {0xB8, 0x3C}, {0xB8, 0x3D}, {0xB8, 0x3E}, {0xB8, 0x3F}, /* 0xC4-0xC7 */ + {0xB8, 0x41}, {0xB8, 0x42}, {0xB8, 0x43}, {0xB8, 0x45}, /* 0xC8-0xCB */ + {0xB8, 0x46}, {0xB8, 0x47}, {0xB8, 0x48}, {0xB8, 0x49}, /* 0xCC-0xCF */ + {0xB8, 0x4A}, {0xB8, 0x4B}, {0xB8, 0x4C}, {0xB8, 0x4D}, /* 0xD0-0xD3 */ + {0xB8, 0x4E}, {0xB8, 0x4F}, {0xB8, 0x50}, {0xB8, 0x52}, /* 0xD4-0xD7 */ + {0xB8, 0x54}, {0xB8, 0x55}, {0xB8, 0x56}, {0xB8, 0x57}, /* 0xD8-0xDB */ + {0xB8, 0x58}, {0xB8, 0x59}, {0xB8, 0x5A}, {0xB8, 0x5B}, /* 0xDC-0xDF */ + {0xB8, 0x5E}, {0xB8, 0x5F}, {0xB8, 0x61}, {0xB8, 0x62}, /* 0xE0-0xE3 */ + {0xB8, 0x63}, {0xB8, 0x65}, {0xB8, 0x66}, {0xB8, 0x67}, /* 0xE4-0xE7 */ + {0xB8, 0x68}, {0xB8, 0x69}, {0xB8, 0x6A}, {0xB8, 0x6B}, /* 0xE8-0xEB */ + {0xB8, 0x6E}, {0xB8, 0x70}, {0xB8, 0x72}, {0xB8, 0x73}, /* 0xEC-0xEF */ + {0xB8, 0x74}, {0xB8, 0x75}, {0xB8, 0x76}, {0xB8, 0x77}, /* 0xF0-0xF3 */ + {0xB8, 0x79}, {0xB8, 0x7A}, {0xB8, 0x7B}, {0xB8, 0x7D}, /* 0xF4-0xF7 */ + {0xB8, 0x7E}, {0xB8, 0x7F}, {0xB8, 0x80}, {0xB8, 0x81}, /* 0xF8-0xFB */ + {0xB8, 0x82}, {0xB8, 0x83}, {0xB8, 0x84}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_8F[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB8, 0x85}, {0xB8, 0x86}, {0xB8, 0x87}, /* 0x40-0x43 */ + {0xB8, 0x88}, {0xB8, 0x89}, {0xB8, 0x8A}, {0xB8, 0x8B}, /* 0x44-0x47 */ + {0xB8, 0x8C}, {0xB8, 0x8E}, {0xB8, 0x8F}, {0xB8, 0x90}, /* 0x48-0x4B */ + {0xB8, 0x91}, {0xB8, 0x92}, {0xB8, 0x93}, {0xB8, 0x94}, /* 0x4C-0x4F */ + {0xB8, 0x95}, {0xB8, 0x96}, {0xB8, 0x97}, {0xB8, 0x98}, /* 0x50-0x53 */ + {0xB8, 0x99}, {0xB8, 0x9A}, {0xB8, 0x9B}, {0xB8, 0x9C}, /* 0x54-0x57 */ + {0xB8, 0x9D}, {0xB8, 0x9E}, {0xB8, 0x9F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB8, 0xA0}, {0xB8, 0xA1}, {0xB8, 0xA2}, /* 0x60-0x63 */ + {0xB8, 0xA3}, {0xB8, 0xA4}, {0xB8, 0xA5}, {0xB8, 0xA6}, /* 0x64-0x67 */ + {0xB8, 0xA7}, {0xB8, 0xA9}, {0xB8, 0xAA}, {0xB8, 0xAB}, /* 0x68-0x6B */ + {0xB8, 0xAC}, {0xB8, 0xAD}, {0xB8, 0xAE}, {0xB8, 0xAF}, /* 0x6C-0x6F */ + {0xB8, 0xB1}, {0xB8, 0xB2}, {0xB8, 0xB3}, {0xB8, 0xB5}, /* 0x70-0x73 */ + {0xB8, 0xB6}, {0xB8, 0xB7}, {0xB8, 0xB9}, {0xB8, 0xBA}, /* 0x74-0x77 */ + {0xB8, 0xBB}, {0xB8, 0xBC}, {0xB8, 0xBD}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB8, 0xBE}, {0xB8, 0xBF}, {0xB8, 0xC2}, /* 0x80-0x83 */ + {0xB8, 0xC4}, {0xB8, 0xC6}, {0xB8, 0xC7}, {0xB8, 0xC8}, /* 0x84-0x87 */ + {0xB8, 0xC9}, {0xB8, 0xCA}, {0xB8, 0xCB}, {0xB8, 0xCD}, /* 0x88-0x8B */ + {0xB8, 0xCE}, {0xB8, 0xCF}, {0xB8, 0xD1}, {0xB8, 0xD2}, /* 0x8C-0x8F */ + {0xB8, 0xD3}, {0xB8, 0xD5}, {0xB8, 0xD6}, {0xB8, 0xD7}, /* 0x90-0x93 */ + {0xB8, 0xD8}, {0xB8, 0xD9}, {0xB8, 0xDA}, {0xB8, 0xDB}, /* 0x94-0x97 */ + {0xB8, 0xDC}, {0xB8, 0xDE}, {0xB8, 0xE0}, {0xB8, 0xE2}, /* 0x98-0x9B */ + {0xB8, 0xE3}, {0xB8, 0xE4}, {0xB8, 0xE5}, {0xB8, 0xE6}, /* 0x9C-0x9F */ + {0xB8, 0xE7}, {0xB8, 0xEA}, {0xB8, 0xEB}, {0xB8, 0xED}, /* 0xA0-0xA3 */ + {0xB8, 0xEE}, {0xB8, 0xEF}, {0xB8, 0xF1}, {0xB8, 0xF2}, /* 0xA4-0xA7 */ + {0xB8, 0xF3}, {0xB8, 0xF4}, {0xB8, 0xF5}, {0xB8, 0xF6}, /* 0xA8-0xAB */ + {0xB8, 0xF7}, {0xB8, 0xFA}, {0xB8, 0xFC}, {0xB8, 0xFE}, /* 0xAC-0xAF */ + {0xB8, 0xFF}, {0xB9, 0x00}, {0xB9, 0x01}, {0xB9, 0x02}, /* 0xB0-0xB3 */ + {0xB9, 0x03}, {0xB9, 0x05}, {0xB9, 0x06}, {0xB9, 0x07}, /* 0xB4-0xB7 */ + {0xB9, 0x08}, {0xB9, 0x09}, {0xB9, 0x0A}, {0xB9, 0x0B}, /* 0xB8-0xBB */ + {0xB9, 0x0C}, {0xB9, 0x0D}, {0xB9, 0x0E}, {0xB9, 0x0F}, /* 0xBC-0xBF */ + {0xB9, 0x10}, {0xB9, 0x11}, {0xB9, 0x12}, {0xB9, 0x13}, /* 0xC0-0xC3 */ + {0xB9, 0x14}, {0xB9, 0x15}, {0xB9, 0x16}, {0xB9, 0x17}, /* 0xC4-0xC7 */ + {0xB9, 0x19}, {0xB9, 0x1A}, {0xB9, 0x1B}, {0xB9, 0x1C}, /* 0xC8-0xCB */ + {0xB9, 0x1D}, {0xB9, 0x1E}, {0xB9, 0x1F}, {0xB9, 0x21}, /* 0xCC-0xCF */ + {0xB9, 0x22}, {0xB9, 0x23}, {0xB9, 0x24}, {0xB9, 0x25}, /* 0xD0-0xD3 */ + {0xB9, 0x26}, {0xB9, 0x27}, {0xB9, 0x28}, {0xB9, 0x29}, /* 0xD4-0xD7 */ + {0xB9, 0x2A}, {0xB9, 0x2B}, {0xB9, 0x2C}, {0xB9, 0x2D}, /* 0xD8-0xDB */ + {0xB9, 0x2E}, {0xB9, 0x2F}, {0xB9, 0x30}, {0xB9, 0x31}, /* 0xDC-0xDF */ + {0xB9, 0x32}, {0xB9, 0x33}, {0xB9, 0x34}, {0xB9, 0x35}, /* 0xE0-0xE3 */ + {0xB9, 0x36}, {0xB9, 0x37}, {0xB9, 0x38}, {0xB9, 0x39}, /* 0xE4-0xE7 */ + {0xB9, 0x3A}, {0xB9, 0x3B}, {0xB9, 0x3E}, {0xB9, 0x3F}, /* 0xE8-0xEB */ + {0xB9, 0x41}, {0xB9, 0x42}, {0xB9, 0x43}, {0xB9, 0x45}, /* 0xEC-0xEF */ + {0xB9, 0x46}, {0xB9, 0x47}, {0xB9, 0x48}, {0xB9, 0x49}, /* 0xF0-0xF3 */ + {0xB9, 0x4A}, {0xB9, 0x4B}, {0xB9, 0x4D}, {0xB9, 0x4E}, /* 0xF4-0xF7 */ + {0xB9, 0x50}, {0xB9, 0x52}, {0xB9, 0x53}, {0xB9, 0x54}, /* 0xF8-0xFB */ + {0xB9, 0x55}, {0xB9, 0x56}, {0xB9, 0x57}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_90[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xB9, 0x5A}, {0xB9, 0x5B}, {0xB9, 0x5D}, /* 0x40-0x43 */ + {0xB9, 0x5E}, {0xB9, 0x5F}, {0xB9, 0x61}, {0xB9, 0x62}, /* 0x44-0x47 */ + {0xB9, 0x63}, {0xB9, 0x64}, {0xB9, 0x65}, {0xB9, 0x66}, /* 0x48-0x4B */ + {0xB9, 0x67}, {0xB9, 0x6A}, {0xB9, 0x6C}, {0xB9, 0x6E}, /* 0x4C-0x4F */ + {0xB9, 0x6F}, {0xB9, 0x70}, {0xB9, 0x71}, {0xB9, 0x72}, /* 0x50-0x53 */ + {0xB9, 0x73}, {0xB9, 0x76}, {0xB9, 0x77}, {0xB9, 0x79}, /* 0x54-0x57 */ + {0xB9, 0x7A}, {0xB9, 0x7B}, {0xB9, 0x7D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xB9, 0x7E}, {0xB9, 0x7F}, {0xB9, 0x80}, /* 0x60-0x63 */ + {0xB9, 0x81}, {0xB9, 0x82}, {0xB9, 0x83}, {0xB9, 0x86}, /* 0x64-0x67 */ + {0xB9, 0x88}, {0xB9, 0x8B}, {0xB9, 0x8C}, {0xB9, 0x8F}, /* 0x68-0x6B */ + {0xB9, 0x90}, {0xB9, 0x91}, {0xB9, 0x92}, {0xB9, 0x93}, /* 0x6C-0x6F */ + {0xB9, 0x94}, {0xB9, 0x95}, {0xB9, 0x96}, {0xB9, 0x97}, /* 0x70-0x73 */ + {0xB9, 0x98}, {0xB9, 0x99}, {0xB9, 0x9A}, {0xB9, 0x9B}, /* 0x74-0x77 */ + {0xB9, 0x9C}, {0xB9, 0x9D}, {0xB9, 0x9E}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xB9, 0x9F}, {0xB9, 0xA0}, {0xB9, 0xA1}, /* 0x80-0x83 */ + {0xB9, 0xA2}, {0xB9, 0xA3}, {0xB9, 0xA4}, {0xB9, 0xA5}, /* 0x84-0x87 */ + {0xB9, 0xA6}, {0xB9, 0xA7}, {0xB9, 0xA8}, {0xB9, 0xA9}, /* 0x88-0x8B */ + {0xB9, 0xAA}, {0xB9, 0xAB}, {0xB9, 0xAE}, {0xB9, 0xAF}, /* 0x8C-0x8F */ + {0xB9, 0xB1}, {0xB9, 0xB2}, {0xB9, 0xB3}, {0xB9, 0xB5}, /* 0x90-0x93 */ + {0xB9, 0xB6}, {0xB9, 0xB7}, {0xB9, 0xB8}, {0xB9, 0xB9}, /* 0x94-0x97 */ + {0xB9, 0xBA}, {0xB9, 0xBB}, {0xB9, 0xBE}, {0xB9, 0xC0}, /* 0x98-0x9B */ + {0xB9, 0xC2}, {0xB9, 0xC3}, {0xB9, 0xC4}, {0xB9, 0xC5}, /* 0x9C-0x9F */ + {0xB9, 0xC6}, {0xB9, 0xC7}, {0xB9, 0xCA}, {0xB9, 0xCB}, /* 0xA0-0xA3 */ + {0xB9, 0xCD}, {0xB9, 0xD3}, {0xB9, 0xD4}, {0xB9, 0xD5}, /* 0xA4-0xA7 */ + {0xB9, 0xD6}, {0xB9, 0xD7}, {0xB9, 0xDA}, {0xB9, 0xDC}, /* 0xA8-0xAB */ + {0xB9, 0xDF}, {0xB9, 0xE0}, {0xB9, 0xE2}, {0xB9, 0xE6}, /* 0xAC-0xAF */ + {0xB9, 0xE7}, {0xB9, 0xE9}, {0xB9, 0xEA}, {0xB9, 0xEB}, /* 0xB0-0xB3 */ + {0xB9, 0xED}, {0xB9, 0xEE}, {0xB9, 0xEF}, {0xB9, 0xF0}, /* 0xB4-0xB7 */ + {0xB9, 0xF1}, {0xB9, 0xF2}, {0xB9, 0xF3}, {0xB9, 0xF6}, /* 0xB8-0xBB */ + {0xB9, 0xFB}, {0xB9, 0xFC}, {0xB9, 0xFD}, {0xB9, 0xFE}, /* 0xBC-0xBF */ + {0xB9, 0xFF}, {0xBA, 0x02}, {0xBA, 0x03}, {0xBA, 0x04}, /* 0xC0-0xC3 */ + {0xBA, 0x05}, {0xBA, 0x06}, {0xBA, 0x07}, {0xBA, 0x09}, /* 0xC4-0xC7 */ + {0xBA, 0x0A}, {0xBA, 0x0B}, {0xBA, 0x0C}, {0xBA, 0x0D}, /* 0xC8-0xCB */ + {0xBA, 0x0E}, {0xBA, 0x0F}, {0xBA, 0x10}, {0xBA, 0x11}, /* 0xCC-0xCF */ + {0xBA, 0x12}, {0xBA, 0x13}, {0xBA, 0x14}, {0xBA, 0x16}, /* 0xD0-0xD3 */ + {0xBA, 0x17}, {0xBA, 0x18}, {0xBA, 0x19}, {0xBA, 0x1A}, /* 0xD4-0xD7 */ + {0xBA, 0x1B}, {0xBA, 0x1C}, {0xBA, 0x1D}, {0xBA, 0x1E}, /* 0xD8-0xDB */ + {0xBA, 0x1F}, {0xBA, 0x20}, {0xBA, 0x21}, {0xBA, 0x22}, /* 0xDC-0xDF */ + {0xBA, 0x23}, {0xBA, 0x24}, {0xBA, 0x25}, {0xBA, 0x26}, /* 0xE0-0xE3 */ + {0xBA, 0x27}, {0xBA, 0x28}, {0xBA, 0x29}, {0xBA, 0x2A}, /* 0xE4-0xE7 */ + {0xBA, 0x2B}, {0xBA, 0x2C}, {0xBA, 0x2D}, {0xBA, 0x2E}, /* 0xE8-0xEB */ + {0xBA, 0x2F}, {0xBA, 0x30}, {0xBA, 0x31}, {0xBA, 0x32}, /* 0xEC-0xEF */ + {0xBA, 0x33}, {0xBA, 0x34}, {0xBA, 0x35}, {0xBA, 0x36}, /* 0xF0-0xF3 */ + {0xBA, 0x37}, {0xBA, 0x3A}, {0xBA, 0x3B}, {0xBA, 0x3D}, /* 0xF4-0xF7 */ + {0xBA, 0x3E}, {0xBA, 0x3F}, {0xBA, 0x41}, {0xBA, 0x43}, /* 0xF8-0xFB */ + {0xBA, 0x44}, {0xBA, 0x45}, {0xBA, 0x46}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_91[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBA, 0x47}, {0xBA, 0x4A}, {0xBA, 0x4C}, /* 0x40-0x43 */ + {0xBA, 0x4F}, {0xBA, 0x50}, {0xBA, 0x51}, {0xBA, 0x52}, /* 0x44-0x47 */ + {0xBA, 0x56}, {0xBA, 0x57}, {0xBA, 0x59}, {0xBA, 0x5A}, /* 0x48-0x4B */ + {0xBA, 0x5B}, {0xBA, 0x5D}, {0xBA, 0x5E}, {0xBA, 0x5F}, /* 0x4C-0x4F */ + {0xBA, 0x60}, {0xBA, 0x61}, {0xBA, 0x62}, {0xBA, 0x63}, /* 0x50-0x53 */ + {0xBA, 0x66}, {0xBA, 0x6A}, {0xBA, 0x6B}, {0xBA, 0x6C}, /* 0x54-0x57 */ + {0xBA, 0x6D}, {0xBA, 0x6E}, {0xBA, 0x6F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBA, 0x72}, {0xBA, 0x73}, {0xBA, 0x75}, /* 0x60-0x63 */ + {0xBA, 0x76}, {0xBA, 0x77}, {0xBA, 0x79}, {0xBA, 0x7A}, /* 0x64-0x67 */ + {0xBA, 0x7B}, {0xBA, 0x7C}, {0xBA, 0x7D}, {0xBA, 0x7E}, /* 0x68-0x6B */ + {0xBA, 0x7F}, {0xBA, 0x80}, {0xBA, 0x81}, {0xBA, 0x82}, /* 0x6C-0x6F */ + {0xBA, 0x86}, {0xBA, 0x88}, {0xBA, 0x89}, {0xBA, 0x8A}, /* 0x70-0x73 */ + {0xBA, 0x8B}, {0xBA, 0x8D}, {0xBA, 0x8E}, {0xBA, 0x8F}, /* 0x74-0x77 */ + {0xBA, 0x90}, {0xBA, 0x91}, {0xBA, 0x92}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBA, 0x93}, {0xBA, 0x94}, {0xBA, 0x95}, /* 0x80-0x83 */ + {0xBA, 0x96}, {0xBA, 0x97}, {0xBA, 0x98}, {0xBA, 0x99}, /* 0x84-0x87 */ + {0xBA, 0x9A}, {0xBA, 0x9B}, {0xBA, 0x9C}, {0xBA, 0x9D}, /* 0x88-0x8B */ + {0xBA, 0x9E}, {0xBA, 0x9F}, {0xBA, 0xA0}, {0xBA, 0xA1}, /* 0x8C-0x8F */ + {0xBA, 0xA2}, {0xBA, 0xA3}, {0xBA, 0xA4}, {0xBA, 0xA5}, /* 0x90-0x93 */ + {0xBA, 0xA6}, {0xBA, 0xA7}, {0xBA, 0xAA}, {0xBA, 0xAD}, /* 0x94-0x97 */ + {0xBA, 0xAE}, {0xBA, 0xAF}, {0xBA, 0xB1}, {0xBA, 0xB3}, /* 0x98-0x9B */ + {0xBA, 0xB4}, {0xBA, 0xB5}, {0xBA, 0xB6}, {0xBA, 0xB7}, /* 0x9C-0x9F */ + {0xBA, 0xBA}, {0xBA, 0xBC}, {0xBA, 0xBE}, {0xBA, 0xBF}, /* 0xA0-0xA3 */ + {0xBA, 0xC0}, {0xBA, 0xC1}, {0xBA, 0xC2}, {0xBA, 0xC3}, /* 0xA4-0xA7 */ + {0xBA, 0xC5}, {0xBA, 0xC6}, {0xBA, 0xC7}, {0xBA, 0xC9}, /* 0xA8-0xAB */ + {0xBA, 0xCA}, {0xBA, 0xCB}, {0xBA, 0xCC}, {0xBA, 0xCD}, /* 0xAC-0xAF */ + {0xBA, 0xCE}, {0xBA, 0xCF}, {0xBA, 0xD0}, {0xBA, 0xD1}, /* 0xB0-0xB3 */ + {0xBA, 0xD2}, {0xBA, 0xD3}, {0xBA, 0xD4}, {0xBA, 0xD5}, /* 0xB4-0xB7 */ + {0xBA, 0xD6}, {0xBA, 0xD7}, {0xBA, 0xDA}, {0xBA, 0xDB}, /* 0xB8-0xBB */ + {0xBA, 0xDC}, {0xBA, 0xDD}, {0xBA, 0xDE}, {0xBA, 0xDF}, /* 0xBC-0xBF */ + {0xBA, 0xE0}, {0xBA, 0xE1}, {0xBA, 0xE2}, {0xBA, 0xE3}, /* 0xC0-0xC3 */ + {0xBA, 0xE4}, {0xBA, 0xE5}, {0xBA, 0xE6}, {0xBA, 0xE7}, /* 0xC4-0xC7 */ + {0xBA, 0xE8}, {0xBA, 0xE9}, {0xBA, 0xEA}, {0xBA, 0xEB}, /* 0xC8-0xCB */ + {0xBA, 0xEC}, {0xBA, 0xED}, {0xBA, 0xEE}, {0xBA, 0xEF}, /* 0xCC-0xCF */ + {0xBA, 0xF0}, {0xBA, 0xF1}, {0xBA, 0xF2}, {0xBA, 0xF3}, /* 0xD0-0xD3 */ + {0xBA, 0xF4}, {0xBA, 0xF5}, {0xBA, 0xF6}, {0xBA, 0xF7}, /* 0xD4-0xD7 */ + {0xBA, 0xF8}, {0xBA, 0xF9}, {0xBA, 0xFA}, {0xBA, 0xFB}, /* 0xD8-0xDB */ + {0xBA, 0xFD}, {0xBA, 0xFE}, {0xBA, 0xFF}, {0xBB, 0x01}, /* 0xDC-0xDF */ + {0xBB, 0x02}, {0xBB, 0x03}, {0xBB, 0x05}, {0xBB, 0x06}, /* 0xE0-0xE3 */ + {0xBB, 0x07}, {0xBB, 0x08}, {0xBB, 0x09}, {0xBB, 0x0A}, /* 0xE4-0xE7 */ + {0xBB, 0x0B}, {0xBB, 0x0C}, {0xBB, 0x0E}, {0xBB, 0x10}, /* 0xE8-0xEB */ + {0xBB, 0x12}, {0xBB, 0x13}, {0xBB, 0x14}, {0xBB, 0x15}, /* 0xEC-0xEF */ + {0xBB, 0x16}, {0xBB, 0x17}, {0xBB, 0x19}, {0xBB, 0x1A}, /* 0xF0-0xF3 */ + {0xBB, 0x1B}, {0xBB, 0x1D}, {0xBB, 0x1E}, {0xBB, 0x1F}, /* 0xF4-0xF7 */ + {0xBB, 0x21}, {0xBB, 0x22}, {0xBB, 0x23}, {0xBB, 0x24}, /* 0xF8-0xFB */ + {0xBB, 0x25}, {0xBB, 0x26}, {0xBB, 0x27}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_92[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBB, 0x28}, {0xBB, 0x2A}, {0xBB, 0x2C}, /* 0x40-0x43 */ + {0xBB, 0x2D}, {0xBB, 0x2E}, {0xBB, 0x2F}, {0xBB, 0x30}, /* 0x44-0x47 */ + {0xBB, 0x31}, {0xBB, 0x32}, {0xBB, 0x33}, {0xBB, 0x37}, /* 0x48-0x4B */ + {0xBB, 0x39}, {0xBB, 0x3A}, {0xBB, 0x3F}, {0xBB, 0x40}, /* 0x4C-0x4F */ + {0xBB, 0x41}, {0xBB, 0x42}, {0xBB, 0x43}, {0xBB, 0x46}, /* 0x50-0x53 */ + {0xBB, 0x48}, {0xBB, 0x4A}, {0xBB, 0x4B}, {0xBB, 0x4C}, /* 0x54-0x57 */ + {0xBB, 0x4E}, {0xBB, 0x51}, {0xBB, 0x52}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBB, 0x53}, {0xBB, 0x55}, {0xBB, 0x56}, /* 0x60-0x63 */ + {0xBB, 0x57}, {0xBB, 0x59}, {0xBB, 0x5A}, {0xBB, 0x5B}, /* 0x64-0x67 */ + {0xBB, 0x5C}, {0xBB, 0x5D}, {0xBB, 0x5E}, {0xBB, 0x5F}, /* 0x68-0x6B */ + {0xBB, 0x60}, {0xBB, 0x62}, {0xBB, 0x64}, {0xBB, 0x65}, /* 0x6C-0x6F */ + {0xBB, 0x66}, {0xBB, 0x67}, {0xBB, 0x68}, {0xBB, 0x69}, /* 0x70-0x73 */ + {0xBB, 0x6A}, {0xBB, 0x6B}, {0xBB, 0x6D}, {0xBB, 0x6E}, /* 0x74-0x77 */ + {0xBB, 0x6F}, {0xBB, 0x70}, {0xBB, 0x71}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBB, 0x72}, {0xBB, 0x73}, {0xBB, 0x74}, /* 0x80-0x83 */ + {0xBB, 0x75}, {0xBB, 0x76}, {0xBB, 0x77}, {0xBB, 0x78}, /* 0x84-0x87 */ + {0xBB, 0x79}, {0xBB, 0x7A}, {0xBB, 0x7B}, {0xBB, 0x7C}, /* 0x88-0x8B */ + {0xBB, 0x7D}, {0xBB, 0x7E}, {0xBB, 0x7F}, {0xBB, 0x80}, /* 0x8C-0x8F */ + {0xBB, 0x81}, {0xBB, 0x82}, {0xBB, 0x83}, {0xBB, 0x84}, /* 0x90-0x93 */ + {0xBB, 0x85}, {0xBB, 0x86}, {0xBB, 0x87}, {0xBB, 0x89}, /* 0x94-0x97 */ + {0xBB, 0x8A}, {0xBB, 0x8B}, {0xBB, 0x8D}, {0xBB, 0x8E}, /* 0x98-0x9B */ + {0xBB, 0x8F}, {0xBB, 0x91}, {0xBB, 0x92}, {0xBB, 0x93}, /* 0x9C-0x9F */ + {0xBB, 0x94}, {0xBB, 0x95}, {0xBB, 0x96}, {0xBB, 0x97}, /* 0xA0-0xA3 */ + {0xBB, 0x98}, {0xBB, 0x99}, {0xBB, 0x9A}, {0xBB, 0x9B}, /* 0xA4-0xA7 */ + {0xBB, 0x9C}, {0xBB, 0x9D}, {0xBB, 0x9E}, {0xBB, 0x9F}, /* 0xA8-0xAB */ + {0xBB, 0xA0}, {0xBB, 0xA1}, {0xBB, 0xA2}, {0xBB, 0xA3}, /* 0xAC-0xAF */ + {0xBB, 0xA5}, {0xBB, 0xA6}, {0xBB, 0xA7}, {0xBB, 0xA9}, /* 0xB0-0xB3 */ + {0xBB, 0xAA}, {0xBB, 0xAB}, {0xBB, 0xAD}, {0xBB, 0xAE}, /* 0xB4-0xB7 */ + {0xBB, 0xAF}, {0xBB, 0xB0}, {0xBB, 0xB1}, {0xBB, 0xB2}, /* 0xB8-0xBB */ + {0xBB, 0xB3}, {0xBB, 0xB5}, {0xBB, 0xB6}, {0xBB, 0xB8}, /* 0xBC-0xBF */ + {0xBB, 0xB9}, {0xBB, 0xBA}, {0xBB, 0xBB}, {0xBB, 0xBC}, /* 0xC0-0xC3 */ + {0xBB, 0xBD}, {0xBB, 0xBE}, {0xBB, 0xBF}, {0xBB, 0xC1}, /* 0xC4-0xC7 */ + {0xBB, 0xC2}, {0xBB, 0xC3}, {0xBB, 0xC5}, {0xBB, 0xC6}, /* 0xC8-0xCB */ + {0xBB, 0xC7}, {0xBB, 0xC9}, {0xBB, 0xCA}, {0xBB, 0xCB}, /* 0xCC-0xCF */ + {0xBB, 0xCC}, {0xBB, 0xCD}, {0xBB, 0xCE}, {0xBB, 0xCF}, /* 0xD0-0xD3 */ + {0xBB, 0xD1}, {0xBB, 0xD2}, {0xBB, 0xD4}, {0xBB, 0xD5}, /* 0xD4-0xD7 */ + {0xBB, 0xD6}, {0xBB, 0xD7}, {0xBB, 0xD8}, {0xBB, 0xD9}, /* 0xD8-0xDB */ + {0xBB, 0xDA}, {0xBB, 0xDB}, {0xBB, 0xDC}, {0xBB, 0xDD}, /* 0xDC-0xDF */ + {0xBB, 0xDE}, {0xBB, 0xDF}, {0xBB, 0xE0}, {0xBB, 0xE1}, /* 0xE0-0xE3 */ + {0xBB, 0xE2}, {0xBB, 0xE3}, {0xBB, 0xE4}, {0xBB, 0xE5}, /* 0xE4-0xE7 */ + {0xBB, 0xE6}, {0xBB, 0xE7}, {0xBB, 0xE8}, {0xBB, 0xE9}, /* 0xE8-0xEB */ + {0xBB, 0xEA}, {0xBB, 0xEB}, {0xBB, 0xEC}, {0xBB, 0xED}, /* 0xEC-0xEF */ + {0xBB, 0xEE}, {0xBB, 0xEF}, {0xBB, 0xF0}, {0xBB, 0xF1}, /* 0xF0-0xF3 */ + {0xBB, 0xF2}, {0xBB, 0xF3}, {0xBB, 0xF4}, {0xBB, 0xF5}, /* 0xF4-0xF7 */ + {0xBB, 0xF6}, {0xBB, 0xF7}, {0xBB, 0xFA}, {0xBB, 0xFB}, /* 0xF8-0xFB */ + {0xBB, 0xFD}, {0xBB, 0xFE}, {0xBC, 0x01}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_93[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBC, 0x03}, {0xBC, 0x04}, {0xBC, 0x05}, /* 0x40-0x43 */ + {0xBC, 0x06}, {0xBC, 0x07}, {0xBC, 0x0A}, {0xBC, 0x0E}, /* 0x44-0x47 */ + {0xBC, 0x10}, {0xBC, 0x12}, {0xBC, 0x13}, {0xBC, 0x19}, /* 0x48-0x4B */ + {0xBC, 0x1A}, {0xBC, 0x20}, {0xBC, 0x21}, {0xBC, 0x22}, /* 0x4C-0x4F */ + {0xBC, 0x23}, {0xBC, 0x26}, {0xBC, 0x28}, {0xBC, 0x2A}, /* 0x50-0x53 */ + {0xBC, 0x2B}, {0xBC, 0x2C}, {0xBC, 0x2E}, {0xBC, 0x2F}, /* 0x54-0x57 */ + {0xBC, 0x32}, {0xBC, 0x33}, {0xBC, 0x35}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBC, 0x36}, {0xBC, 0x37}, {0xBC, 0x39}, /* 0x60-0x63 */ + {0xBC, 0x3A}, {0xBC, 0x3B}, {0xBC, 0x3C}, {0xBC, 0x3D}, /* 0x64-0x67 */ + {0xBC, 0x3E}, {0xBC, 0x3F}, {0xBC, 0x42}, {0xBC, 0x46}, /* 0x68-0x6B */ + {0xBC, 0x47}, {0xBC, 0x48}, {0xBC, 0x4A}, {0xBC, 0x4B}, /* 0x6C-0x6F */ + {0xBC, 0x4E}, {0xBC, 0x4F}, {0xBC, 0x51}, {0xBC, 0x52}, /* 0x70-0x73 */ + {0xBC, 0x53}, {0xBC, 0x54}, {0xBC, 0x55}, {0xBC, 0x56}, /* 0x74-0x77 */ + {0xBC, 0x57}, {0xBC, 0x58}, {0xBC, 0x59}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBC, 0x5A}, {0xBC, 0x5B}, {0xBC, 0x5C}, /* 0x80-0x83 */ + {0xBC, 0x5E}, {0xBC, 0x5F}, {0xBC, 0x60}, {0xBC, 0x61}, /* 0x84-0x87 */ + {0xBC, 0x62}, {0xBC, 0x63}, {0xBC, 0x64}, {0xBC, 0x65}, /* 0x88-0x8B */ + {0xBC, 0x66}, {0xBC, 0x67}, {0xBC, 0x68}, {0xBC, 0x69}, /* 0x8C-0x8F */ + {0xBC, 0x6A}, {0xBC, 0x6B}, {0xBC, 0x6C}, {0xBC, 0x6D}, /* 0x90-0x93 */ + {0xBC, 0x6E}, {0xBC, 0x6F}, {0xBC, 0x70}, {0xBC, 0x71}, /* 0x94-0x97 */ + {0xBC, 0x72}, {0xBC, 0x73}, {0xBC, 0x74}, {0xBC, 0x75}, /* 0x98-0x9B */ + {0xBC, 0x76}, {0xBC, 0x77}, {0xBC, 0x78}, {0xBC, 0x79}, /* 0x9C-0x9F */ + {0xBC, 0x7A}, {0xBC, 0x7B}, {0xBC, 0x7C}, {0xBC, 0x7D}, /* 0xA0-0xA3 */ + {0xBC, 0x7E}, {0xBC, 0x7F}, {0xBC, 0x80}, {0xBC, 0x81}, /* 0xA4-0xA7 */ + {0xBC, 0x82}, {0xBC, 0x83}, {0xBC, 0x86}, {0xBC, 0x87}, /* 0xA8-0xAB */ + {0xBC, 0x89}, {0xBC, 0x8A}, {0xBC, 0x8D}, {0xBC, 0x8F}, /* 0xAC-0xAF */ + {0xBC, 0x90}, {0xBC, 0x91}, {0xBC, 0x92}, {0xBC, 0x93}, /* 0xB0-0xB3 */ + {0xBC, 0x96}, {0xBC, 0x98}, {0xBC, 0x9B}, {0xBC, 0x9C}, /* 0xB4-0xB7 */ + {0xBC, 0x9D}, {0xBC, 0x9E}, {0xBC, 0x9F}, {0xBC, 0xA2}, /* 0xB8-0xBB */ + {0xBC, 0xA3}, {0xBC, 0xA5}, {0xBC, 0xA6}, {0xBC, 0xA9}, /* 0xBC-0xBF */ + {0xBC, 0xAA}, {0xBC, 0xAB}, {0xBC, 0xAC}, {0xBC, 0xAD}, /* 0xC0-0xC3 */ + {0xBC, 0xAE}, {0xBC, 0xAF}, {0xBC, 0xB2}, {0xBC, 0xB6}, /* 0xC4-0xC7 */ + {0xBC, 0xB7}, {0xBC, 0xB8}, {0xBC, 0xB9}, {0xBC, 0xBA}, /* 0xC8-0xCB */ + {0xBC, 0xBB}, {0xBC, 0xBE}, {0xBC, 0xBF}, {0xBC, 0xC1}, /* 0xCC-0xCF */ + {0xBC, 0xC2}, {0xBC, 0xC3}, {0xBC, 0xC5}, {0xBC, 0xC6}, /* 0xD0-0xD3 */ + {0xBC, 0xC7}, {0xBC, 0xC8}, {0xBC, 0xC9}, {0xBC, 0xCA}, /* 0xD4-0xD7 */ + {0xBC, 0xCB}, {0xBC, 0xCC}, {0xBC, 0xCE}, {0xBC, 0xD2}, /* 0xD8-0xDB */ + {0xBC, 0xD3}, {0xBC, 0xD4}, {0xBC, 0xD6}, {0xBC, 0xD7}, /* 0xDC-0xDF */ + {0xBC, 0xD9}, {0xBC, 0xDA}, {0xBC, 0xDB}, {0xBC, 0xDD}, /* 0xE0-0xE3 */ + {0xBC, 0xDE}, {0xBC, 0xDF}, {0xBC, 0xE0}, {0xBC, 0xE1}, /* 0xE4-0xE7 */ + {0xBC, 0xE2}, {0xBC, 0xE3}, {0xBC, 0xE4}, {0xBC, 0xE5}, /* 0xE8-0xEB */ + {0xBC, 0xE6}, {0xBC, 0xE7}, {0xBC, 0xE8}, {0xBC, 0xE9}, /* 0xEC-0xEF */ + {0xBC, 0xEA}, {0xBC, 0xEB}, {0xBC, 0xEC}, {0xBC, 0xED}, /* 0xF0-0xF3 */ + {0xBC, 0xEE}, {0xBC, 0xEF}, {0xBC, 0xF0}, {0xBC, 0xF1}, /* 0xF4-0xF7 */ + {0xBC, 0xF2}, {0xBC, 0xF3}, {0xBC, 0xF7}, {0xBC, 0xF9}, /* 0xF8-0xFB */ + {0xBC, 0xFA}, {0xBC, 0xFB}, {0xBC, 0xFD}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_94[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBC, 0xFE}, {0xBC, 0xFF}, {0xBD, 0x00}, /* 0x40-0x43 */ + {0xBD, 0x01}, {0xBD, 0x02}, {0xBD, 0x03}, {0xBD, 0x06}, /* 0x44-0x47 */ + {0xBD, 0x08}, {0xBD, 0x0A}, {0xBD, 0x0B}, {0xBD, 0x0C}, /* 0x48-0x4B */ + {0xBD, 0x0D}, {0xBD, 0x0E}, {0xBD, 0x0F}, {0xBD, 0x11}, /* 0x4C-0x4F */ + {0xBD, 0x12}, {0xBD, 0x13}, {0xBD, 0x15}, {0xBD, 0x16}, /* 0x50-0x53 */ + {0xBD, 0x17}, {0xBD, 0x18}, {0xBD, 0x19}, {0xBD, 0x1A}, /* 0x54-0x57 */ + {0xBD, 0x1B}, {0xBD, 0x1C}, {0xBD, 0x1D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBD, 0x1E}, {0xBD, 0x1F}, {0xBD, 0x20}, /* 0x60-0x63 */ + {0xBD, 0x21}, {0xBD, 0x22}, {0xBD, 0x23}, {0xBD, 0x25}, /* 0x64-0x67 */ + {0xBD, 0x26}, {0xBD, 0x27}, {0xBD, 0x28}, {0xBD, 0x29}, /* 0x68-0x6B */ + {0xBD, 0x2A}, {0xBD, 0x2B}, {0xBD, 0x2D}, {0xBD, 0x2E}, /* 0x6C-0x6F */ + {0xBD, 0x2F}, {0xBD, 0x30}, {0xBD, 0x31}, {0xBD, 0x32}, /* 0x70-0x73 */ + {0xBD, 0x33}, {0xBD, 0x34}, {0xBD, 0x35}, {0xBD, 0x36}, /* 0x74-0x77 */ + {0xBD, 0x37}, {0xBD, 0x38}, {0xBD, 0x39}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBD, 0x3A}, {0xBD, 0x3B}, {0xBD, 0x3C}, /* 0x80-0x83 */ + {0xBD, 0x3D}, {0xBD, 0x3E}, {0xBD, 0x3F}, {0xBD, 0x41}, /* 0x84-0x87 */ + {0xBD, 0x42}, {0xBD, 0x43}, {0xBD, 0x44}, {0xBD, 0x45}, /* 0x88-0x8B */ + {0xBD, 0x46}, {0xBD, 0x47}, {0xBD, 0x4A}, {0xBD, 0x4B}, /* 0x8C-0x8F */ + {0xBD, 0x4D}, {0xBD, 0x4E}, {0xBD, 0x4F}, {0xBD, 0x51}, /* 0x90-0x93 */ + {0xBD, 0x52}, {0xBD, 0x53}, {0xBD, 0x54}, {0xBD, 0x55}, /* 0x94-0x97 */ + {0xBD, 0x56}, {0xBD, 0x57}, {0xBD, 0x5A}, {0xBD, 0x5B}, /* 0x98-0x9B */ + {0xBD, 0x5C}, {0xBD, 0x5D}, {0xBD, 0x5E}, {0xBD, 0x5F}, /* 0x9C-0x9F */ + {0xBD, 0x60}, {0xBD, 0x61}, {0xBD, 0x62}, {0xBD, 0x63}, /* 0xA0-0xA3 */ + {0xBD, 0x65}, {0xBD, 0x66}, {0xBD, 0x67}, {0xBD, 0x69}, /* 0xA4-0xA7 */ + {0xBD, 0x6A}, {0xBD, 0x6B}, {0xBD, 0x6C}, {0xBD, 0x6D}, /* 0xA8-0xAB */ + {0xBD, 0x6E}, {0xBD, 0x6F}, {0xBD, 0x70}, {0xBD, 0x71}, /* 0xAC-0xAF */ + {0xBD, 0x72}, {0xBD, 0x73}, {0xBD, 0x74}, {0xBD, 0x75}, /* 0xB0-0xB3 */ + {0xBD, 0x76}, {0xBD, 0x77}, {0xBD, 0x78}, {0xBD, 0x79}, /* 0xB4-0xB7 */ + {0xBD, 0x7A}, {0xBD, 0x7B}, {0xBD, 0x7C}, {0xBD, 0x7D}, /* 0xB8-0xBB */ + {0xBD, 0x7E}, {0xBD, 0x7F}, {0xBD, 0x82}, {0xBD, 0x83}, /* 0xBC-0xBF */ + {0xBD, 0x85}, {0xBD, 0x86}, {0xBD, 0x8B}, {0xBD, 0x8C}, /* 0xC0-0xC3 */ + {0xBD, 0x8D}, {0xBD, 0x8E}, {0xBD, 0x8F}, {0xBD, 0x92}, /* 0xC4-0xC7 */ + {0xBD, 0x94}, {0xBD, 0x96}, {0xBD, 0x97}, {0xBD, 0x98}, /* 0xC8-0xCB */ + {0xBD, 0x9B}, {0xBD, 0x9D}, {0xBD, 0x9E}, {0xBD, 0x9F}, /* 0xCC-0xCF */ + {0xBD, 0xA0}, {0xBD, 0xA1}, {0xBD, 0xA2}, {0xBD, 0xA3}, /* 0xD0-0xD3 */ + {0xBD, 0xA5}, {0xBD, 0xA6}, {0xBD, 0xA7}, {0xBD, 0xA8}, /* 0xD4-0xD7 */ + {0xBD, 0xA9}, {0xBD, 0xAA}, {0xBD, 0xAB}, {0xBD, 0xAC}, /* 0xD8-0xDB */ + {0xBD, 0xAD}, {0xBD, 0xAE}, {0xBD, 0xAF}, {0xBD, 0xB1}, /* 0xDC-0xDF */ + {0xBD, 0xB2}, {0xBD, 0xB3}, {0xBD, 0xB4}, {0xBD, 0xB5}, /* 0xE0-0xE3 */ + {0xBD, 0xB6}, {0xBD, 0xB7}, {0xBD, 0xB9}, {0xBD, 0xBA}, /* 0xE4-0xE7 */ + {0xBD, 0xBB}, {0xBD, 0xBC}, {0xBD, 0xBD}, {0xBD, 0xBE}, /* 0xE8-0xEB */ + {0xBD, 0xBF}, {0xBD, 0xC0}, {0xBD, 0xC1}, {0xBD, 0xC2}, /* 0xEC-0xEF */ + {0xBD, 0xC3}, {0xBD, 0xC4}, {0xBD, 0xC5}, {0xBD, 0xC6}, /* 0xF0-0xF3 */ + {0xBD, 0xC7}, {0xBD, 0xC8}, {0xBD, 0xC9}, {0xBD, 0xCA}, /* 0xF4-0xF7 */ + {0xBD, 0xCB}, {0xBD, 0xCC}, {0xBD, 0xCD}, {0xBD, 0xCE}, /* 0xF8-0xFB */ + {0xBD, 0xCF}, {0xBD, 0xD0}, {0xBD, 0xD1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_95[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBD, 0xD2}, {0xBD, 0xD3}, {0xBD, 0xD6}, /* 0x40-0x43 */ + {0xBD, 0xD7}, {0xBD, 0xD9}, {0xBD, 0xDA}, {0xBD, 0xDB}, /* 0x44-0x47 */ + {0xBD, 0xDD}, {0xBD, 0xDE}, {0xBD, 0xDF}, {0xBD, 0xE0}, /* 0x48-0x4B */ + {0xBD, 0xE1}, {0xBD, 0xE2}, {0xBD, 0xE3}, {0xBD, 0xE4}, /* 0x4C-0x4F */ + {0xBD, 0xE5}, {0xBD, 0xE6}, {0xBD, 0xE7}, {0xBD, 0xE8}, /* 0x50-0x53 */ + {0xBD, 0xEA}, {0xBD, 0xEB}, {0xBD, 0xEC}, {0xBD, 0xED}, /* 0x54-0x57 */ + {0xBD, 0xEE}, {0xBD, 0xEF}, {0xBD, 0xF1}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBD, 0xF2}, {0xBD, 0xF3}, {0xBD, 0xF5}, /* 0x60-0x63 */ + {0xBD, 0xF6}, {0xBD, 0xF7}, {0xBD, 0xF9}, {0xBD, 0xFA}, /* 0x64-0x67 */ + {0xBD, 0xFB}, {0xBD, 0xFC}, {0xBD, 0xFD}, {0xBD, 0xFE}, /* 0x68-0x6B */ + {0xBD, 0xFF}, {0xBE, 0x01}, {0xBE, 0x02}, {0xBE, 0x04}, /* 0x6C-0x6F */ + {0xBE, 0x06}, {0xBE, 0x07}, {0xBE, 0x08}, {0xBE, 0x09}, /* 0x70-0x73 */ + {0xBE, 0x0A}, {0xBE, 0x0B}, {0xBE, 0x0E}, {0xBE, 0x0F}, /* 0x74-0x77 */ + {0xBE, 0x11}, {0xBE, 0x12}, {0xBE, 0x13}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBE, 0x15}, {0xBE, 0x16}, {0xBE, 0x17}, /* 0x80-0x83 */ + {0xBE, 0x18}, {0xBE, 0x19}, {0xBE, 0x1A}, {0xBE, 0x1B}, /* 0x84-0x87 */ + {0xBE, 0x1E}, {0xBE, 0x20}, {0xBE, 0x21}, {0xBE, 0x22}, /* 0x88-0x8B */ + {0xBE, 0x23}, {0xBE, 0x24}, {0xBE, 0x25}, {0xBE, 0x26}, /* 0x8C-0x8F */ + {0xBE, 0x27}, {0xBE, 0x28}, {0xBE, 0x29}, {0xBE, 0x2A}, /* 0x90-0x93 */ + {0xBE, 0x2B}, {0xBE, 0x2C}, {0xBE, 0x2D}, {0xBE, 0x2E}, /* 0x94-0x97 */ + {0xBE, 0x2F}, {0xBE, 0x30}, {0xBE, 0x31}, {0xBE, 0x32}, /* 0x98-0x9B */ + {0xBE, 0x33}, {0xBE, 0x34}, {0xBE, 0x35}, {0xBE, 0x36}, /* 0x9C-0x9F */ + {0xBE, 0x37}, {0xBE, 0x38}, {0xBE, 0x39}, {0xBE, 0x3A}, /* 0xA0-0xA3 */ + {0xBE, 0x3B}, {0xBE, 0x3C}, {0xBE, 0x3D}, {0xBE, 0x3E}, /* 0xA4-0xA7 */ + {0xBE, 0x3F}, {0xBE, 0x40}, {0xBE, 0x41}, {0xBE, 0x42}, /* 0xA8-0xAB */ + {0xBE, 0x43}, {0xBE, 0x46}, {0xBE, 0x47}, {0xBE, 0x49}, /* 0xAC-0xAF */ + {0xBE, 0x4A}, {0xBE, 0x4B}, {0xBE, 0x4D}, {0xBE, 0x4F}, /* 0xB0-0xB3 */ + {0xBE, 0x50}, {0xBE, 0x51}, {0xBE, 0x52}, {0xBE, 0x53}, /* 0xB4-0xB7 */ + {0xBE, 0x56}, {0xBE, 0x58}, {0xBE, 0x5C}, {0xBE, 0x5D}, /* 0xB8-0xBB */ + {0xBE, 0x5E}, {0xBE, 0x5F}, {0xBE, 0x62}, {0xBE, 0x63}, /* 0xBC-0xBF */ + {0xBE, 0x65}, {0xBE, 0x66}, {0xBE, 0x67}, {0xBE, 0x69}, /* 0xC0-0xC3 */ + {0xBE, 0x6B}, {0xBE, 0x6C}, {0xBE, 0x6D}, {0xBE, 0x6E}, /* 0xC4-0xC7 */ + {0xBE, 0x6F}, {0xBE, 0x72}, {0xBE, 0x76}, {0xBE, 0x77}, /* 0xC8-0xCB */ + {0xBE, 0x78}, {0xBE, 0x79}, {0xBE, 0x7A}, {0xBE, 0x7E}, /* 0xCC-0xCF */ + {0xBE, 0x7F}, {0xBE, 0x81}, {0xBE, 0x82}, {0xBE, 0x83}, /* 0xD0-0xD3 */ + {0xBE, 0x85}, {0xBE, 0x86}, {0xBE, 0x87}, {0xBE, 0x88}, /* 0xD4-0xD7 */ + {0xBE, 0x89}, {0xBE, 0x8A}, {0xBE, 0x8B}, {0xBE, 0x8E}, /* 0xD8-0xDB */ + {0xBE, 0x92}, {0xBE, 0x93}, {0xBE, 0x94}, {0xBE, 0x95}, /* 0xDC-0xDF */ + {0xBE, 0x96}, {0xBE, 0x97}, {0xBE, 0x9A}, {0xBE, 0x9B}, /* 0xE0-0xE3 */ + {0xBE, 0x9C}, {0xBE, 0x9D}, {0xBE, 0x9E}, {0xBE, 0x9F}, /* 0xE4-0xE7 */ + {0xBE, 0xA0}, {0xBE, 0xA1}, {0xBE, 0xA2}, {0xBE, 0xA3}, /* 0xE8-0xEB */ + {0xBE, 0xA4}, {0xBE, 0xA5}, {0xBE, 0xA6}, {0xBE, 0xA7}, /* 0xEC-0xEF */ + {0xBE, 0xA9}, {0xBE, 0xAA}, {0xBE, 0xAB}, {0xBE, 0xAC}, /* 0xF0-0xF3 */ + {0xBE, 0xAD}, {0xBE, 0xAE}, {0xBE, 0xAF}, {0xBE, 0xB0}, /* 0xF4-0xF7 */ + {0xBE, 0xB1}, {0xBE, 0xB2}, {0xBE, 0xB3}, {0xBE, 0xB4}, /* 0xF8-0xFB */ + {0xBE, 0xB5}, {0xBE, 0xB6}, {0xBE, 0xB7}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_96[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBE, 0xB8}, {0xBE, 0xB9}, {0xBE, 0xBA}, /* 0x40-0x43 */ + {0xBE, 0xBB}, {0xBE, 0xBC}, {0xBE, 0xBD}, {0xBE, 0xBE}, /* 0x44-0x47 */ + {0xBE, 0xBF}, {0xBE, 0xC0}, {0xBE, 0xC1}, {0xBE, 0xC2}, /* 0x48-0x4B */ + {0xBE, 0xC3}, {0xBE, 0xC4}, {0xBE, 0xC5}, {0xBE, 0xC6}, /* 0x4C-0x4F */ + {0xBE, 0xC7}, {0xBE, 0xC8}, {0xBE, 0xC9}, {0xBE, 0xCA}, /* 0x50-0x53 */ + {0xBE, 0xCB}, {0xBE, 0xCC}, {0xBE, 0xCD}, {0xBE, 0xCE}, /* 0x54-0x57 */ + {0xBE, 0xCF}, {0xBE, 0xD2}, {0xBE, 0xD3}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBE, 0xD5}, {0xBE, 0xD6}, {0xBE, 0xD9}, /* 0x60-0x63 */ + {0xBE, 0xDA}, {0xBE, 0xDB}, {0xBE, 0xDC}, {0xBE, 0xDD}, /* 0x64-0x67 */ + {0xBE, 0xDE}, {0xBE, 0xDF}, {0xBE, 0xE1}, {0xBE, 0xE2}, /* 0x68-0x6B */ + {0xBE, 0xE6}, {0xBE, 0xE7}, {0xBE, 0xE8}, {0xBE, 0xE9}, /* 0x6C-0x6F */ + {0xBE, 0xEA}, {0xBE, 0xEB}, {0xBE, 0xED}, {0xBE, 0xEE}, /* 0x70-0x73 */ + {0xBE, 0xEF}, {0xBE, 0xF0}, {0xBE, 0xF1}, {0xBE, 0xF2}, /* 0x74-0x77 */ + {0xBE, 0xF3}, {0xBE, 0xF4}, {0xBE, 0xF5}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBE, 0xF6}, {0xBE, 0xF7}, {0xBE, 0xF8}, /* 0x80-0x83 */ + {0xBE, 0xF9}, {0xBE, 0xFA}, {0xBE, 0xFB}, {0xBE, 0xFC}, /* 0x84-0x87 */ + {0xBE, 0xFD}, {0xBE, 0xFE}, {0xBE, 0xFF}, {0xBF, 0x00}, /* 0x88-0x8B */ + {0xBF, 0x02}, {0xBF, 0x03}, {0xBF, 0x04}, {0xBF, 0x05}, /* 0x8C-0x8F */ + {0xBF, 0x06}, {0xBF, 0x07}, {0xBF, 0x0A}, {0xBF, 0x0B}, /* 0x90-0x93 */ + {0xBF, 0x0C}, {0xBF, 0x0D}, {0xBF, 0x0E}, {0xBF, 0x0F}, /* 0x94-0x97 */ + {0xBF, 0x10}, {0xBF, 0x11}, {0xBF, 0x12}, {0xBF, 0x13}, /* 0x98-0x9B */ + {0xBF, 0x14}, {0xBF, 0x15}, {0xBF, 0x16}, {0xBF, 0x17}, /* 0x9C-0x9F */ + {0xBF, 0x1A}, {0xBF, 0x1E}, {0xBF, 0x1F}, {0xBF, 0x20}, /* 0xA0-0xA3 */ + {0xBF, 0x21}, {0xBF, 0x22}, {0xBF, 0x23}, {0xBF, 0x24}, /* 0xA4-0xA7 */ + {0xBF, 0x25}, {0xBF, 0x26}, {0xBF, 0x27}, {0xBF, 0x28}, /* 0xA8-0xAB */ + {0xBF, 0x29}, {0xBF, 0x2A}, {0xBF, 0x2B}, {0xBF, 0x2C}, /* 0xAC-0xAF */ + {0xBF, 0x2D}, {0xBF, 0x2E}, {0xBF, 0x2F}, {0xBF, 0x30}, /* 0xB0-0xB3 */ + {0xBF, 0x31}, {0xBF, 0x32}, {0xBF, 0x33}, {0xBF, 0x34}, /* 0xB4-0xB7 */ + {0xBF, 0x35}, {0xBF, 0x36}, {0xBF, 0x37}, {0xBF, 0x38}, /* 0xB8-0xBB */ + {0xBF, 0x39}, {0xBF, 0x3A}, {0xBF, 0x3B}, {0xBF, 0x3C}, /* 0xBC-0xBF */ + {0xBF, 0x3D}, {0xBF, 0x3E}, {0xBF, 0x3F}, {0xBF, 0x42}, /* 0xC0-0xC3 */ + {0xBF, 0x43}, {0xBF, 0x45}, {0xBF, 0x46}, {0xBF, 0x47}, /* 0xC4-0xC7 */ + {0xBF, 0x49}, {0xBF, 0x4A}, {0xBF, 0x4B}, {0xBF, 0x4C}, /* 0xC8-0xCB */ + {0xBF, 0x4D}, {0xBF, 0x4E}, {0xBF, 0x4F}, {0xBF, 0x52}, /* 0xCC-0xCF */ + {0xBF, 0x53}, {0xBF, 0x54}, {0xBF, 0x56}, {0xBF, 0x57}, /* 0xD0-0xD3 */ + {0xBF, 0x58}, {0xBF, 0x59}, {0xBF, 0x5A}, {0xBF, 0x5B}, /* 0xD4-0xD7 */ + {0xBF, 0x5C}, {0xBF, 0x5D}, {0xBF, 0x5E}, {0xBF, 0x5F}, /* 0xD8-0xDB */ + {0xBF, 0x60}, {0xBF, 0x61}, {0xBF, 0x62}, {0xBF, 0x63}, /* 0xDC-0xDF */ + {0xBF, 0x64}, {0xBF, 0x65}, {0xBF, 0x66}, {0xBF, 0x67}, /* 0xE0-0xE3 */ + {0xBF, 0x68}, {0xBF, 0x69}, {0xBF, 0x6A}, {0xBF, 0x6B}, /* 0xE4-0xE7 */ + {0xBF, 0x6C}, {0xBF, 0x6D}, {0xBF, 0x6E}, {0xBF, 0x6F}, /* 0xE8-0xEB */ + {0xBF, 0x70}, {0xBF, 0x71}, {0xBF, 0x72}, {0xBF, 0x73}, /* 0xEC-0xEF */ + {0xBF, 0x74}, {0xBF, 0x75}, {0xBF, 0x76}, {0xBF, 0x77}, /* 0xF0-0xF3 */ + {0xBF, 0x78}, {0xBF, 0x79}, {0xBF, 0x7A}, {0xBF, 0x7B}, /* 0xF4-0xF7 */ + {0xBF, 0x7C}, {0xBF, 0x7D}, {0xBF, 0x7E}, {0xBF, 0x7F}, /* 0xF8-0xFB */ + {0xBF, 0x80}, {0xBF, 0x81}, {0xBF, 0x82}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_97[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xBF, 0x83}, {0xBF, 0x84}, {0xBF, 0x85}, /* 0x40-0x43 */ + {0xBF, 0x86}, {0xBF, 0x87}, {0xBF, 0x88}, {0xBF, 0x89}, /* 0x44-0x47 */ + {0xBF, 0x8A}, {0xBF, 0x8B}, {0xBF, 0x8C}, {0xBF, 0x8D}, /* 0x48-0x4B */ + {0xBF, 0x8E}, {0xBF, 0x8F}, {0xBF, 0x90}, {0xBF, 0x91}, /* 0x4C-0x4F */ + {0xBF, 0x92}, {0xBF, 0x93}, {0xBF, 0x95}, {0xBF, 0x96}, /* 0x50-0x53 */ + {0xBF, 0x97}, {0xBF, 0x98}, {0xBF, 0x99}, {0xBF, 0x9A}, /* 0x54-0x57 */ + {0xBF, 0x9B}, {0xBF, 0x9C}, {0xBF, 0x9D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xBF, 0x9E}, {0xBF, 0x9F}, {0xBF, 0xA0}, /* 0x60-0x63 */ + {0xBF, 0xA1}, {0xBF, 0xA2}, {0xBF, 0xA3}, {0xBF, 0xA4}, /* 0x64-0x67 */ + {0xBF, 0xA5}, {0xBF, 0xA6}, {0xBF, 0xA7}, {0xBF, 0xA8}, /* 0x68-0x6B */ + {0xBF, 0xA9}, {0xBF, 0xAA}, {0xBF, 0xAB}, {0xBF, 0xAC}, /* 0x6C-0x6F */ + {0xBF, 0xAD}, {0xBF, 0xAE}, {0xBF, 0xAF}, {0xBF, 0xB1}, /* 0x70-0x73 */ + {0xBF, 0xB2}, {0xBF, 0xB3}, {0xBF, 0xB4}, {0xBF, 0xB5}, /* 0x74-0x77 */ + {0xBF, 0xB6}, {0xBF, 0xB7}, {0xBF, 0xB8}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xBF, 0xB9}, {0xBF, 0xBA}, {0xBF, 0xBB}, /* 0x80-0x83 */ + {0xBF, 0xBC}, {0xBF, 0xBD}, {0xBF, 0xBE}, {0xBF, 0xBF}, /* 0x84-0x87 */ + {0xBF, 0xC0}, {0xBF, 0xC1}, {0xBF, 0xC2}, {0xBF, 0xC3}, /* 0x88-0x8B */ + {0xBF, 0xC4}, {0xBF, 0xC6}, {0xBF, 0xC7}, {0xBF, 0xC8}, /* 0x8C-0x8F */ + {0xBF, 0xC9}, {0xBF, 0xCA}, {0xBF, 0xCB}, {0xBF, 0xCE}, /* 0x90-0x93 */ + {0xBF, 0xCF}, {0xBF, 0xD1}, {0xBF, 0xD2}, {0xBF, 0xD3}, /* 0x94-0x97 */ + {0xBF, 0xD5}, {0xBF, 0xD6}, {0xBF, 0xD7}, {0xBF, 0xD8}, /* 0x98-0x9B */ + {0xBF, 0xD9}, {0xBF, 0xDA}, {0xBF, 0xDB}, {0xBF, 0xDD}, /* 0x9C-0x9F */ + {0xBF, 0xDE}, {0xBF, 0xE0}, {0xBF, 0xE2}, {0xBF, 0xE3}, /* 0xA0-0xA3 */ + {0xBF, 0xE4}, {0xBF, 0xE5}, {0xBF, 0xE6}, {0xBF, 0xE7}, /* 0xA4-0xA7 */ + {0xBF, 0xE8}, {0xBF, 0xE9}, {0xBF, 0xEA}, {0xBF, 0xEB}, /* 0xA8-0xAB */ + {0xBF, 0xEC}, {0xBF, 0xED}, {0xBF, 0xEE}, {0xBF, 0xEF}, /* 0xAC-0xAF */ + {0xBF, 0xF0}, {0xBF, 0xF1}, {0xBF, 0xF2}, {0xBF, 0xF3}, /* 0xB0-0xB3 */ + {0xBF, 0xF4}, {0xBF, 0xF5}, {0xBF, 0xF6}, {0xBF, 0xF7}, /* 0xB4-0xB7 */ + {0xBF, 0xF8}, {0xBF, 0xF9}, {0xBF, 0xFA}, {0xBF, 0xFB}, /* 0xB8-0xBB */ + {0xBF, 0xFC}, {0xBF, 0xFD}, {0xBF, 0xFE}, {0xBF, 0xFF}, /* 0xBC-0xBF */ + {0xC0, 0x00}, {0xC0, 0x01}, {0xC0, 0x02}, {0xC0, 0x03}, /* 0xC0-0xC3 */ + {0xC0, 0x04}, {0xC0, 0x05}, {0xC0, 0x06}, {0xC0, 0x07}, /* 0xC4-0xC7 */ + {0xC0, 0x08}, {0xC0, 0x09}, {0xC0, 0x0A}, {0xC0, 0x0B}, /* 0xC8-0xCB */ + {0xC0, 0x0C}, {0xC0, 0x0D}, {0xC0, 0x0E}, {0xC0, 0x0F}, /* 0xCC-0xCF */ + {0xC0, 0x10}, {0xC0, 0x11}, {0xC0, 0x12}, {0xC0, 0x13}, /* 0xD0-0xD3 */ + {0xC0, 0x14}, {0xC0, 0x15}, {0xC0, 0x16}, {0xC0, 0x17}, /* 0xD4-0xD7 */ + {0xC0, 0x18}, {0xC0, 0x19}, {0xC0, 0x1A}, {0xC0, 0x1B}, /* 0xD8-0xDB */ + {0xC0, 0x1C}, {0xC0, 0x1D}, {0xC0, 0x1E}, {0xC0, 0x1F}, /* 0xDC-0xDF */ + {0xC0, 0x20}, {0xC0, 0x21}, {0xC0, 0x22}, {0xC0, 0x23}, /* 0xE0-0xE3 */ + {0xC0, 0x24}, {0xC0, 0x25}, {0xC0, 0x26}, {0xC0, 0x27}, /* 0xE4-0xE7 */ + {0xC0, 0x28}, {0xC0, 0x29}, {0xC0, 0x2A}, {0xC0, 0x2B}, /* 0xE8-0xEB */ + {0xC0, 0x2C}, {0xC0, 0x2D}, {0xC0, 0x2E}, {0xC0, 0x2F}, /* 0xEC-0xEF */ + {0xC0, 0x30}, {0xC0, 0x31}, {0xC0, 0x32}, {0xC0, 0x33}, /* 0xF0-0xF3 */ + {0xC0, 0x34}, {0xC0, 0x35}, {0xC0, 0x36}, {0xC0, 0x37}, /* 0xF4-0xF7 */ + {0xC0, 0x38}, {0xC0, 0x39}, {0xC0, 0x3A}, {0xC0, 0x3B}, /* 0xF8-0xFB */ + {0xC0, 0x3D}, {0xC0, 0x3E}, {0xC0, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_98[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC0, 0x40}, {0xC0, 0x41}, {0xC0, 0x42}, /* 0x40-0x43 */ + {0xC0, 0x43}, {0xC0, 0x44}, {0xC0, 0x45}, {0xC0, 0x46}, /* 0x44-0x47 */ + {0xC0, 0x47}, {0xC0, 0x48}, {0xC0, 0x49}, {0xC0, 0x4A}, /* 0x48-0x4B */ + {0xC0, 0x4B}, {0xC0, 0x4C}, {0xC0, 0x4D}, {0xC0, 0x4E}, /* 0x4C-0x4F */ + {0xC0, 0x4F}, {0xC0, 0x50}, {0xC0, 0x52}, {0xC0, 0x53}, /* 0x50-0x53 */ + {0xC0, 0x54}, {0xC0, 0x55}, {0xC0, 0x56}, {0xC0, 0x57}, /* 0x54-0x57 */ + {0xC0, 0x59}, {0xC0, 0x5A}, {0xC0, 0x5B}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC0, 0x5D}, {0xC0, 0x5E}, {0xC0, 0x5F}, /* 0x60-0x63 */ + {0xC0, 0x61}, {0xC0, 0x62}, {0xC0, 0x63}, {0xC0, 0x64}, /* 0x64-0x67 */ + {0xC0, 0x65}, {0xC0, 0x66}, {0xC0, 0x67}, {0xC0, 0x6A}, /* 0x68-0x6B */ + {0xC0, 0x6B}, {0xC0, 0x6C}, {0xC0, 0x6D}, {0xC0, 0x6E}, /* 0x6C-0x6F */ + {0xC0, 0x6F}, {0xC0, 0x70}, {0xC0, 0x71}, {0xC0, 0x72}, /* 0x70-0x73 */ + {0xC0, 0x73}, {0xC0, 0x74}, {0xC0, 0x75}, {0xC0, 0x76}, /* 0x74-0x77 */ + {0xC0, 0x77}, {0xC0, 0x78}, {0xC0, 0x79}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC0, 0x7A}, {0xC0, 0x7B}, {0xC0, 0x7C}, /* 0x80-0x83 */ + {0xC0, 0x7D}, {0xC0, 0x7E}, {0xC0, 0x7F}, {0xC0, 0x80}, /* 0x84-0x87 */ + {0xC0, 0x81}, {0xC0, 0x82}, {0xC0, 0x83}, {0xC0, 0x84}, /* 0x88-0x8B */ + {0xC0, 0x85}, {0xC0, 0x86}, {0xC0, 0x87}, {0xC0, 0x88}, /* 0x8C-0x8F */ + {0xC0, 0x89}, {0xC0, 0x8A}, {0xC0, 0x8B}, {0xC0, 0x8C}, /* 0x90-0x93 */ + {0xC0, 0x8D}, {0xC0, 0x8E}, {0xC0, 0x8F}, {0xC0, 0x92}, /* 0x94-0x97 */ + {0xC0, 0x93}, {0xC0, 0x95}, {0xC0, 0x96}, {0xC0, 0x97}, /* 0x98-0x9B */ + {0xC0, 0x99}, {0xC0, 0x9A}, {0xC0, 0x9B}, {0xC0, 0x9C}, /* 0x9C-0x9F */ + {0xC0, 0x9D}, {0xC0, 0x9E}, {0xC0, 0x9F}, {0xC0, 0xA2}, /* 0xA0-0xA3 */ + {0xC0, 0xA4}, {0xC0, 0xA6}, {0xC0, 0xA7}, {0xC0, 0xA8}, /* 0xA4-0xA7 */ + {0xC0, 0xA9}, {0xC0, 0xAA}, {0xC0, 0xAB}, {0xC0, 0xAE}, /* 0xA8-0xAB */ + {0xC0, 0xB1}, {0xC0, 0xB2}, {0xC0, 0xB7}, {0xC0, 0xB8}, /* 0xAC-0xAF */ + {0xC0, 0xB9}, {0xC0, 0xBA}, {0xC0, 0xBB}, {0xC0, 0xBE}, /* 0xB0-0xB3 */ + {0xC0, 0xC2}, {0xC0, 0xC3}, {0xC0, 0xC4}, {0xC0, 0xC6}, /* 0xB4-0xB7 */ + {0xC0, 0xC7}, {0xC0, 0xCA}, {0xC0, 0xCB}, {0xC0, 0xCD}, /* 0xB8-0xBB */ + {0xC0, 0xCE}, {0xC0, 0xCF}, {0xC0, 0xD1}, {0xC0, 0xD2}, /* 0xBC-0xBF */ + {0xC0, 0xD3}, {0xC0, 0xD4}, {0xC0, 0xD5}, {0xC0, 0xD6}, /* 0xC0-0xC3 */ + {0xC0, 0xD7}, {0xC0, 0xDA}, {0xC0, 0xDE}, {0xC0, 0xDF}, /* 0xC4-0xC7 */ + {0xC0, 0xE0}, {0xC0, 0xE1}, {0xC0, 0xE2}, {0xC0, 0xE3}, /* 0xC8-0xCB */ + {0xC0, 0xE6}, {0xC0, 0xE7}, {0xC0, 0xE9}, {0xC0, 0xEA}, /* 0xCC-0xCF */ + {0xC0, 0xEB}, {0xC0, 0xED}, {0xC0, 0xEE}, {0xC0, 0xEF}, /* 0xD0-0xD3 */ + {0xC0, 0xF0}, {0xC0, 0xF1}, {0xC0, 0xF2}, {0xC0, 0xF3}, /* 0xD4-0xD7 */ + {0xC0, 0xF6}, {0xC0, 0xF8}, {0xC0, 0xFA}, {0xC0, 0xFB}, /* 0xD8-0xDB */ + {0xC0, 0xFC}, {0xC0, 0xFD}, {0xC0, 0xFE}, {0xC0, 0xFF}, /* 0xDC-0xDF */ + {0xC1, 0x01}, {0xC1, 0x02}, {0xC1, 0x03}, {0xC1, 0x05}, /* 0xE0-0xE3 */ + {0xC1, 0x06}, {0xC1, 0x07}, {0xC1, 0x09}, {0xC1, 0x0A}, /* 0xE4-0xE7 */ + {0xC1, 0x0B}, {0xC1, 0x0C}, {0xC1, 0x0D}, {0xC1, 0x0E}, /* 0xE8-0xEB */ + {0xC1, 0x0F}, {0xC1, 0x11}, {0xC1, 0x12}, {0xC1, 0x13}, /* 0xEC-0xEF */ + {0xC1, 0x14}, {0xC1, 0x16}, {0xC1, 0x17}, {0xC1, 0x18}, /* 0xF0-0xF3 */ + {0xC1, 0x19}, {0xC1, 0x1A}, {0xC1, 0x1B}, {0xC1, 0x21}, /* 0xF4-0xF7 */ + {0xC1, 0x22}, {0xC1, 0x25}, {0xC1, 0x28}, {0xC1, 0x29}, /* 0xF8-0xFB */ + {0xC1, 0x2A}, {0xC1, 0x2B}, {0xC1, 0x2E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_99[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC1, 0x32}, {0xC1, 0x33}, {0xC1, 0x34}, /* 0x40-0x43 */ + {0xC1, 0x35}, {0xC1, 0x37}, {0xC1, 0x3A}, {0xC1, 0x3B}, /* 0x44-0x47 */ + {0xC1, 0x3D}, {0xC1, 0x3E}, {0xC1, 0x3F}, {0xC1, 0x41}, /* 0x48-0x4B */ + {0xC1, 0x42}, {0xC1, 0x43}, {0xC1, 0x44}, {0xC1, 0x45}, /* 0x4C-0x4F */ + {0xC1, 0x46}, {0xC1, 0x47}, {0xC1, 0x4A}, {0xC1, 0x4E}, /* 0x50-0x53 */ + {0xC1, 0x4F}, {0xC1, 0x50}, {0xC1, 0x51}, {0xC1, 0x52}, /* 0x54-0x57 */ + {0xC1, 0x53}, {0xC1, 0x56}, {0xC1, 0x57}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC1, 0x59}, {0xC1, 0x5A}, {0xC1, 0x5B}, /* 0x60-0x63 */ + {0xC1, 0x5D}, {0xC1, 0x5E}, {0xC1, 0x5F}, {0xC1, 0x60}, /* 0x64-0x67 */ + {0xC1, 0x61}, {0xC1, 0x62}, {0xC1, 0x63}, {0xC1, 0x66}, /* 0x68-0x6B */ + {0xC1, 0x6A}, {0xC1, 0x6B}, {0xC1, 0x6C}, {0xC1, 0x6D}, /* 0x6C-0x6F */ + {0xC1, 0x6E}, {0xC1, 0x6F}, {0xC1, 0x71}, {0xC1, 0x72}, /* 0x70-0x73 */ + {0xC1, 0x73}, {0xC1, 0x75}, {0xC1, 0x76}, {0xC1, 0x77}, /* 0x74-0x77 */ + {0xC1, 0x79}, {0xC1, 0x7A}, {0xC1, 0x7B}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC1, 0x7C}, {0xC1, 0x7D}, {0xC1, 0x7E}, /* 0x80-0x83 */ + {0xC1, 0x7F}, {0xC1, 0x80}, {0xC1, 0x81}, {0xC1, 0x82}, /* 0x84-0x87 */ + {0xC1, 0x83}, {0xC1, 0x84}, {0xC1, 0x86}, {0xC1, 0x87}, /* 0x88-0x8B */ + {0xC1, 0x88}, {0xC1, 0x89}, {0xC1, 0x8A}, {0xC1, 0x8B}, /* 0x8C-0x8F */ + {0xC1, 0x8F}, {0xC1, 0x91}, {0xC1, 0x92}, {0xC1, 0x93}, /* 0x90-0x93 */ + {0xC1, 0x95}, {0xC1, 0x97}, {0xC1, 0x98}, {0xC1, 0x99}, /* 0x94-0x97 */ + {0xC1, 0x9A}, {0xC1, 0x9B}, {0xC1, 0x9E}, {0xC1, 0xA0}, /* 0x98-0x9B */ + {0xC1, 0xA2}, {0xC1, 0xA3}, {0xC1, 0xA4}, {0xC1, 0xA6}, /* 0x9C-0x9F */ + {0xC1, 0xA7}, {0xC1, 0xAA}, {0xC1, 0xAB}, {0xC1, 0xAD}, /* 0xA0-0xA3 */ + {0xC1, 0xAE}, {0xC1, 0xAF}, {0xC1, 0xB1}, {0xC1, 0xB2}, /* 0xA4-0xA7 */ + {0xC1, 0xB3}, {0xC1, 0xB4}, {0xC1, 0xB5}, {0xC1, 0xB6}, /* 0xA8-0xAB */ + {0xC1, 0xB7}, {0xC1, 0xB8}, {0xC1, 0xB9}, {0xC1, 0xBA}, /* 0xAC-0xAF */ + {0xC1, 0xBB}, {0xC1, 0xBC}, {0xC1, 0xBE}, {0xC1, 0xBF}, /* 0xB0-0xB3 */ + {0xC1, 0xC0}, {0xC1, 0xC1}, {0xC1, 0xC2}, {0xC1, 0xC3}, /* 0xB4-0xB7 */ + {0xC1, 0xC5}, {0xC1, 0xC6}, {0xC1, 0xC7}, {0xC1, 0xC9}, /* 0xB8-0xBB */ + {0xC1, 0xCA}, {0xC1, 0xCB}, {0xC1, 0xCD}, {0xC1, 0xCE}, /* 0xBC-0xBF */ + {0xC1, 0xCF}, {0xC1, 0xD0}, {0xC1, 0xD1}, {0xC1, 0xD2}, /* 0xC0-0xC3 */ + {0xC1, 0xD3}, {0xC1, 0xD5}, {0xC1, 0xD6}, {0xC1, 0xD9}, /* 0xC4-0xC7 */ + {0xC1, 0xDA}, {0xC1, 0xDB}, {0xC1, 0xDC}, {0xC1, 0xDD}, /* 0xC8-0xCB */ + {0xC1, 0xDE}, {0xC1, 0xDF}, {0xC1, 0xE1}, {0xC1, 0xE2}, /* 0xCC-0xCF */ + {0xC1, 0xE3}, {0xC1, 0xE5}, {0xC1, 0xE6}, {0xC1, 0xE7}, /* 0xD0-0xD3 */ + {0xC1, 0xE9}, {0xC1, 0xEA}, {0xC1, 0xEB}, {0xC1, 0xEC}, /* 0xD4-0xD7 */ + {0xC1, 0xED}, {0xC1, 0xEE}, {0xC1, 0xEF}, {0xC1, 0xF2}, /* 0xD8-0xDB */ + {0xC1, 0xF4}, {0xC1, 0xF5}, {0xC1, 0xF6}, {0xC1, 0xF7}, /* 0xDC-0xDF */ + {0xC1, 0xF8}, {0xC1, 0xF9}, {0xC1, 0xFA}, {0xC1, 0xFB}, /* 0xE0-0xE3 */ + {0xC1, 0xFE}, {0xC1, 0xFF}, {0xC2, 0x01}, {0xC2, 0x02}, /* 0xE4-0xE7 */ + {0xC2, 0x03}, {0xC2, 0x05}, {0xC2, 0x06}, {0xC2, 0x07}, /* 0xE8-0xEB */ + {0xC2, 0x08}, {0xC2, 0x09}, {0xC2, 0x0A}, {0xC2, 0x0B}, /* 0xEC-0xEF */ + {0xC2, 0x0E}, {0xC2, 0x10}, {0xC2, 0x12}, {0xC2, 0x13}, /* 0xF0-0xF3 */ + {0xC2, 0x14}, {0xC2, 0x15}, {0xC2, 0x16}, {0xC2, 0x17}, /* 0xF4-0xF7 */ + {0xC2, 0x1A}, {0xC2, 0x1B}, {0xC2, 0x1D}, {0xC2, 0x1E}, /* 0xF8-0xFB */ + {0xC2, 0x21}, {0xC2, 0x22}, {0xC2, 0x23}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9A[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC2, 0x24}, {0xC2, 0x25}, {0xC2, 0x26}, /* 0x40-0x43 */ + {0xC2, 0x27}, {0xC2, 0x2A}, {0xC2, 0x2C}, {0xC2, 0x2E}, /* 0x44-0x47 */ + {0xC2, 0x30}, {0xC2, 0x33}, {0xC2, 0x35}, {0xC2, 0x36}, /* 0x48-0x4B */ + {0xC2, 0x37}, {0xC2, 0x38}, {0xC2, 0x39}, {0xC2, 0x3A}, /* 0x4C-0x4F */ + {0xC2, 0x3B}, {0xC2, 0x3C}, {0xC2, 0x3D}, {0xC2, 0x3E}, /* 0x50-0x53 */ + {0xC2, 0x3F}, {0xC2, 0x40}, {0xC2, 0x41}, {0xC2, 0x42}, /* 0x54-0x57 */ + {0xC2, 0x43}, {0xC2, 0x44}, {0xC2, 0x45}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC2, 0x46}, {0xC2, 0x47}, {0xC2, 0x49}, /* 0x60-0x63 */ + {0xC2, 0x4A}, {0xC2, 0x4B}, {0xC2, 0x4C}, {0xC2, 0x4D}, /* 0x64-0x67 */ + {0xC2, 0x4E}, {0xC2, 0x4F}, {0xC2, 0x52}, {0xC2, 0x53}, /* 0x68-0x6B */ + {0xC2, 0x55}, {0xC2, 0x56}, {0xC2, 0x57}, {0xC2, 0x59}, /* 0x6C-0x6F */ + {0xC2, 0x5A}, {0xC2, 0x5B}, {0xC2, 0x5C}, {0xC2, 0x5D}, /* 0x70-0x73 */ + {0xC2, 0x5E}, {0xC2, 0x5F}, {0xC2, 0x61}, {0xC2, 0x62}, /* 0x74-0x77 */ + {0xC2, 0x63}, {0xC2, 0x64}, {0xC2, 0x66}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC2, 0x67}, {0xC2, 0x68}, {0xC2, 0x69}, /* 0x80-0x83 */ + {0xC2, 0x6A}, {0xC2, 0x6B}, {0xC2, 0x6E}, {0xC2, 0x6F}, /* 0x84-0x87 */ + {0xC2, 0x71}, {0xC2, 0x72}, {0xC2, 0x73}, {0xC2, 0x75}, /* 0x88-0x8B */ + {0xC2, 0x76}, {0xC2, 0x77}, {0xC2, 0x78}, {0xC2, 0x79}, /* 0x8C-0x8F */ + {0xC2, 0x7A}, {0xC2, 0x7B}, {0xC2, 0x7E}, {0xC2, 0x80}, /* 0x90-0x93 */ + {0xC2, 0x82}, {0xC2, 0x83}, {0xC2, 0x84}, {0xC2, 0x85}, /* 0x94-0x97 */ + {0xC2, 0x86}, {0xC2, 0x87}, {0xC2, 0x8A}, {0xC2, 0x8B}, /* 0x98-0x9B */ + {0xC2, 0x8C}, {0xC2, 0x8D}, {0xC2, 0x8E}, {0xC2, 0x8F}, /* 0x9C-0x9F */ + {0xC2, 0x91}, {0xC2, 0x92}, {0xC2, 0x93}, {0xC2, 0x94}, /* 0xA0-0xA3 */ + {0xC2, 0x95}, {0xC2, 0x96}, {0xC2, 0x97}, {0xC2, 0x99}, /* 0xA4-0xA7 */ + {0xC2, 0x9A}, {0xC2, 0x9C}, {0xC2, 0x9E}, {0xC2, 0x9F}, /* 0xA8-0xAB */ + {0xC2, 0xA0}, {0xC2, 0xA1}, {0xC2, 0xA2}, {0xC2, 0xA3}, /* 0xAC-0xAF */ + {0xC2, 0xA6}, {0xC2, 0xA7}, {0xC2, 0xA9}, {0xC2, 0xAA}, /* 0xB0-0xB3 */ + {0xC2, 0xAB}, {0xC2, 0xAE}, {0xC2, 0xAF}, {0xC2, 0xB0}, /* 0xB4-0xB7 */ + {0xC2, 0xB1}, {0xC2, 0xB2}, {0xC2, 0xB3}, {0xC2, 0xB6}, /* 0xB8-0xBB */ + {0xC2, 0xB8}, {0xC2, 0xBA}, {0xC2, 0xBB}, {0xC2, 0xBC}, /* 0xBC-0xBF */ + {0xC2, 0xBD}, {0xC2, 0xBE}, {0xC2, 0xBF}, {0xC2, 0xC0}, /* 0xC0-0xC3 */ + {0xC2, 0xC1}, {0xC2, 0xC2}, {0xC2, 0xC3}, {0xC2, 0xC4}, /* 0xC4-0xC7 */ + {0xC2, 0xC5}, {0xC2, 0xC6}, {0xC2, 0xC7}, {0xC2, 0xC8}, /* 0xC8-0xCB */ + {0xC2, 0xC9}, {0xC2, 0xCA}, {0xC2, 0xCB}, {0xC2, 0xCC}, /* 0xCC-0xCF */ + {0xC2, 0xCD}, {0xC2, 0xCE}, {0xC2, 0xCF}, {0xC2, 0xD0}, /* 0xD0-0xD3 */ + {0xC2, 0xD1}, {0xC2, 0xD2}, {0xC2, 0xD3}, {0xC2, 0xD4}, /* 0xD4-0xD7 */ + {0xC2, 0xD5}, {0xC2, 0xD6}, {0xC2, 0xD7}, {0xC2, 0xD8}, /* 0xD8-0xDB */ + {0xC2, 0xD9}, {0xC2, 0xDA}, {0xC2, 0xDB}, {0xC2, 0xDE}, /* 0xDC-0xDF */ + {0xC2, 0xDF}, {0xC2, 0xE1}, {0xC2, 0xE2}, {0xC2, 0xE5}, /* 0xE0-0xE3 */ + {0xC2, 0xE6}, {0xC2, 0xE7}, {0xC2, 0xE8}, {0xC2, 0xE9}, /* 0xE4-0xE7 */ + {0xC2, 0xEA}, {0xC2, 0xEE}, {0xC2, 0xF0}, {0xC2, 0xF2}, /* 0xE8-0xEB */ + {0xC2, 0xF3}, {0xC2, 0xF4}, {0xC2, 0xF5}, {0xC2, 0xF7}, /* 0xEC-0xEF */ + {0xC2, 0xFA}, {0xC2, 0xFD}, {0xC2, 0xFE}, {0xC2, 0xFF}, /* 0xF0-0xF3 */ + {0xC3, 0x01}, {0xC3, 0x02}, {0xC3, 0x03}, {0xC3, 0x04}, /* 0xF4-0xF7 */ + {0xC3, 0x05}, {0xC3, 0x06}, {0xC3, 0x07}, {0xC3, 0x0A}, /* 0xF8-0xFB */ + {0xC3, 0x0B}, {0xC3, 0x0E}, {0xC3, 0x0F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9B[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC3, 0x10}, {0xC3, 0x11}, {0xC3, 0x12}, /* 0x40-0x43 */ + {0xC3, 0x16}, {0xC3, 0x17}, {0xC3, 0x19}, {0xC3, 0x1A}, /* 0x44-0x47 */ + {0xC3, 0x1B}, {0xC3, 0x1D}, {0xC3, 0x1E}, {0xC3, 0x1F}, /* 0x48-0x4B */ + {0xC3, 0x20}, {0xC3, 0x21}, {0xC3, 0x22}, {0xC3, 0x23}, /* 0x4C-0x4F */ + {0xC3, 0x26}, {0xC3, 0x27}, {0xC3, 0x2A}, {0xC3, 0x2B}, /* 0x50-0x53 */ + {0xC3, 0x2C}, {0xC3, 0x2D}, {0xC3, 0x2E}, {0xC3, 0x2F}, /* 0x54-0x57 */ + {0xC3, 0x30}, {0xC3, 0x31}, {0xC3, 0x32}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC3, 0x33}, {0xC3, 0x34}, {0xC3, 0x35}, /* 0x60-0x63 */ + {0xC3, 0x36}, {0xC3, 0x37}, {0xC3, 0x38}, {0xC3, 0x39}, /* 0x64-0x67 */ + {0xC3, 0x3A}, {0xC3, 0x3B}, {0xC3, 0x3C}, {0xC3, 0x3D}, /* 0x68-0x6B */ + {0xC3, 0x3E}, {0xC3, 0x3F}, {0xC3, 0x40}, {0xC3, 0x41}, /* 0x6C-0x6F */ + {0xC3, 0x42}, {0xC3, 0x43}, {0xC3, 0x44}, {0xC3, 0x46}, /* 0x70-0x73 */ + {0xC3, 0x47}, {0xC3, 0x48}, {0xC3, 0x49}, {0xC3, 0x4A}, /* 0x74-0x77 */ + {0xC3, 0x4B}, {0xC3, 0x4C}, {0xC3, 0x4D}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC3, 0x4E}, {0xC3, 0x4F}, {0xC3, 0x50}, /* 0x80-0x83 */ + {0xC3, 0x51}, {0xC3, 0x52}, {0xC3, 0x53}, {0xC3, 0x54}, /* 0x84-0x87 */ + {0xC3, 0x55}, {0xC3, 0x56}, {0xC3, 0x57}, {0xC3, 0x58}, /* 0x88-0x8B */ + {0xC3, 0x59}, {0xC3, 0x5A}, {0xC3, 0x5B}, {0xC3, 0x5C}, /* 0x8C-0x8F */ + {0xC3, 0x5D}, {0xC3, 0x5E}, {0xC3, 0x5F}, {0xC3, 0x60}, /* 0x90-0x93 */ + {0xC3, 0x61}, {0xC3, 0x62}, {0xC3, 0x63}, {0xC3, 0x64}, /* 0x94-0x97 */ + {0xC3, 0x65}, {0xC3, 0x66}, {0xC3, 0x67}, {0xC3, 0x6A}, /* 0x98-0x9B */ + {0xC3, 0x6B}, {0xC3, 0x6D}, {0xC3, 0x6E}, {0xC3, 0x6F}, /* 0x9C-0x9F */ + {0xC3, 0x71}, {0xC3, 0x73}, {0xC3, 0x74}, {0xC3, 0x75}, /* 0xA0-0xA3 */ + {0xC3, 0x76}, {0xC3, 0x77}, {0xC3, 0x7A}, {0xC3, 0x7B}, /* 0xA4-0xA7 */ + {0xC3, 0x7E}, {0xC3, 0x7F}, {0xC3, 0x80}, {0xC3, 0x81}, /* 0xA8-0xAB */ + {0xC3, 0x82}, {0xC3, 0x83}, {0xC3, 0x85}, {0xC3, 0x86}, /* 0xAC-0xAF */ + {0xC3, 0x87}, {0xC3, 0x89}, {0xC3, 0x8A}, {0xC3, 0x8B}, /* 0xB0-0xB3 */ + {0xC3, 0x8D}, {0xC3, 0x8E}, {0xC3, 0x8F}, {0xC3, 0x90}, /* 0xB4-0xB7 */ + {0xC3, 0x91}, {0xC3, 0x92}, {0xC3, 0x93}, {0xC3, 0x94}, /* 0xB8-0xBB */ + {0xC3, 0x95}, {0xC3, 0x96}, {0xC3, 0x97}, {0xC3, 0x98}, /* 0xBC-0xBF */ + {0xC3, 0x99}, {0xC3, 0x9A}, {0xC3, 0x9B}, {0xC3, 0x9C}, /* 0xC0-0xC3 */ + {0xC3, 0x9D}, {0xC3, 0x9E}, {0xC3, 0x9F}, {0xC3, 0xA0}, /* 0xC4-0xC7 */ + {0xC3, 0xA1}, {0xC3, 0xA2}, {0xC3, 0xA3}, {0xC3, 0xA4}, /* 0xC8-0xCB */ + {0xC3, 0xA5}, {0xC3, 0xA6}, {0xC3, 0xA7}, {0xC3, 0xA8}, /* 0xCC-0xCF */ + {0xC3, 0xA9}, {0xC3, 0xAA}, {0xC3, 0xAB}, {0xC3, 0xAC}, /* 0xD0-0xD3 */ + {0xC3, 0xAD}, {0xC3, 0xAE}, {0xC3, 0xAF}, {0xC3, 0xB0}, /* 0xD4-0xD7 */ + {0xC3, 0xB1}, {0xC3, 0xB2}, {0xC3, 0xB3}, {0xC3, 0xB4}, /* 0xD8-0xDB */ + {0xC3, 0xB5}, {0xC3, 0xB6}, {0xC3, 0xB7}, {0xC3, 0xB8}, /* 0xDC-0xDF */ + {0xC3, 0xB9}, {0xC3, 0xBA}, {0xC3, 0xBB}, {0xC3, 0xBC}, /* 0xE0-0xE3 */ + {0xC3, 0xBD}, {0xC3, 0xBE}, {0xC3, 0xBF}, {0xC3, 0xC1}, /* 0xE4-0xE7 */ + {0xC3, 0xC2}, {0xC3, 0xC3}, {0xC3, 0xC4}, {0xC3, 0xC5}, /* 0xE8-0xEB */ + {0xC3, 0xC6}, {0xC3, 0xC7}, {0xC3, 0xC8}, {0xC3, 0xC9}, /* 0xEC-0xEF */ + {0xC3, 0xCA}, {0xC3, 0xCB}, {0xC3, 0xCC}, {0xC3, 0xCD}, /* 0xF0-0xF3 */ + {0xC3, 0xCE}, {0xC3, 0xCF}, {0xC3, 0xD0}, {0xC3, 0xD1}, /* 0xF4-0xF7 */ + {0xC3, 0xD2}, {0xC3, 0xD3}, {0xC3, 0xD4}, {0xC3, 0xD5}, /* 0xF8-0xFB */ + {0xC3, 0xD6}, {0xC3, 0xD7}, {0xC3, 0xDA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9C[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC3, 0xDB}, {0xC3, 0xDD}, {0xC3, 0xDE}, /* 0x40-0x43 */ + {0xC3, 0xE1}, {0xC3, 0xE3}, {0xC3, 0xE4}, {0xC3, 0xE5}, /* 0x44-0x47 */ + {0xC3, 0xE6}, {0xC3, 0xE7}, {0xC3, 0xEA}, {0xC3, 0xEB}, /* 0x48-0x4B */ + {0xC3, 0xEC}, {0xC3, 0xEE}, {0xC3, 0xEF}, {0xC3, 0xF0}, /* 0x4C-0x4F */ + {0xC3, 0xF1}, {0xC3, 0xF2}, {0xC3, 0xF3}, {0xC3, 0xF6}, /* 0x50-0x53 */ + {0xC3, 0xF7}, {0xC3, 0xF9}, {0xC3, 0xFA}, {0xC3, 0xFB}, /* 0x54-0x57 */ + {0xC3, 0xFC}, {0xC3, 0xFD}, {0xC3, 0xFE}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC3, 0xFF}, {0xC4, 0x00}, {0xC4, 0x01}, /* 0x60-0x63 */ + {0xC4, 0x02}, {0xC4, 0x03}, {0xC4, 0x04}, {0xC4, 0x05}, /* 0x64-0x67 */ + {0xC4, 0x06}, {0xC4, 0x07}, {0xC4, 0x09}, {0xC4, 0x0A}, /* 0x68-0x6B */ + {0xC4, 0x0B}, {0xC4, 0x0C}, {0xC4, 0x0D}, {0xC4, 0x0E}, /* 0x6C-0x6F */ + {0xC4, 0x0F}, {0xC4, 0x11}, {0xC4, 0x12}, {0xC4, 0x13}, /* 0x70-0x73 */ + {0xC4, 0x14}, {0xC4, 0x15}, {0xC4, 0x16}, {0xC4, 0x17}, /* 0x74-0x77 */ + {0xC4, 0x18}, {0xC4, 0x19}, {0xC4, 0x1A}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC4, 0x1B}, {0xC4, 0x1C}, {0xC4, 0x1D}, /* 0x80-0x83 */ + {0xC4, 0x1E}, {0xC4, 0x1F}, {0xC4, 0x20}, {0xC4, 0x21}, /* 0x84-0x87 */ + {0xC4, 0x22}, {0xC4, 0x23}, {0xC4, 0x25}, {0xC4, 0x26}, /* 0x88-0x8B */ + {0xC4, 0x27}, {0xC4, 0x28}, {0xC4, 0x29}, {0xC4, 0x2A}, /* 0x8C-0x8F */ + {0xC4, 0x2B}, {0xC4, 0x2D}, {0xC4, 0x2E}, {0xC4, 0x2F}, /* 0x90-0x93 */ + {0xC4, 0x31}, {0xC4, 0x32}, {0xC4, 0x33}, {0xC4, 0x35}, /* 0x94-0x97 */ + {0xC4, 0x36}, {0xC4, 0x37}, {0xC4, 0x38}, {0xC4, 0x39}, /* 0x98-0x9B */ + {0xC4, 0x3A}, {0xC4, 0x3B}, {0xC4, 0x3E}, {0xC4, 0x3F}, /* 0x9C-0x9F */ + {0xC4, 0x40}, {0xC4, 0x41}, {0xC4, 0x42}, {0xC4, 0x43}, /* 0xA0-0xA3 */ + {0xC4, 0x44}, {0xC4, 0x45}, {0xC4, 0x46}, {0xC4, 0x47}, /* 0xA4-0xA7 */ + {0xC4, 0x49}, {0xC4, 0x4A}, {0xC4, 0x4B}, {0xC4, 0x4C}, /* 0xA8-0xAB */ + {0xC4, 0x4D}, {0xC4, 0x4E}, {0xC4, 0x4F}, {0xC4, 0x50}, /* 0xAC-0xAF */ + {0xC4, 0x51}, {0xC4, 0x52}, {0xC4, 0x53}, {0xC4, 0x54}, /* 0xB0-0xB3 */ + {0xC4, 0x55}, {0xC4, 0x56}, {0xC4, 0x57}, {0xC4, 0x58}, /* 0xB4-0xB7 */ + {0xC4, 0x59}, {0xC4, 0x5A}, {0xC4, 0x5B}, {0xC4, 0x5C}, /* 0xB8-0xBB */ + {0xC4, 0x5D}, {0xC4, 0x5E}, {0xC4, 0x5F}, {0xC4, 0x60}, /* 0xBC-0xBF */ + {0xC4, 0x61}, {0xC4, 0x62}, {0xC4, 0x63}, {0xC4, 0x66}, /* 0xC0-0xC3 */ + {0xC4, 0x67}, {0xC4, 0x69}, {0xC4, 0x6A}, {0xC4, 0x6B}, /* 0xC4-0xC7 */ + {0xC4, 0x6D}, {0xC4, 0x6E}, {0xC4, 0x6F}, {0xC4, 0x70}, /* 0xC8-0xCB */ + {0xC4, 0x71}, {0xC4, 0x72}, {0xC4, 0x73}, {0xC4, 0x76}, /* 0xCC-0xCF */ + {0xC4, 0x77}, {0xC4, 0x78}, {0xC4, 0x7A}, {0xC4, 0x7B}, /* 0xD0-0xD3 */ + {0xC4, 0x7C}, {0xC4, 0x7D}, {0xC4, 0x7E}, {0xC4, 0x7F}, /* 0xD4-0xD7 */ + {0xC4, 0x81}, {0xC4, 0x82}, {0xC4, 0x83}, {0xC4, 0x84}, /* 0xD8-0xDB */ + {0xC4, 0x85}, {0xC4, 0x86}, {0xC4, 0x87}, {0xC4, 0x88}, /* 0xDC-0xDF */ + {0xC4, 0x89}, {0xC4, 0x8A}, {0xC4, 0x8B}, {0xC4, 0x8C}, /* 0xE0-0xE3 */ + {0xC4, 0x8D}, {0xC4, 0x8E}, {0xC4, 0x8F}, {0xC4, 0x90}, /* 0xE4-0xE7 */ + {0xC4, 0x91}, {0xC4, 0x92}, {0xC4, 0x93}, {0xC4, 0x95}, /* 0xE8-0xEB */ + {0xC4, 0x96}, {0xC4, 0x97}, {0xC4, 0x98}, {0xC4, 0x99}, /* 0xEC-0xEF */ + {0xC4, 0x9A}, {0xC4, 0x9B}, {0xC4, 0x9D}, {0xC4, 0x9E}, /* 0xF0-0xF3 */ + {0xC4, 0x9F}, {0xC4, 0xA0}, {0xC4, 0xA1}, {0xC4, 0xA2}, /* 0xF4-0xF7 */ + {0xC4, 0xA3}, {0xC4, 0xA4}, {0xC4, 0xA5}, {0xC4, 0xA6}, /* 0xF8-0xFB */ + {0xC4, 0xA7}, {0xC4, 0xA8}, {0xC4, 0xA9}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9D[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC4, 0xAA}, {0xC4, 0xAB}, {0xC4, 0xAC}, /* 0x40-0x43 */ + {0xC4, 0xAD}, {0xC4, 0xAE}, {0xC4, 0xAF}, {0xC4, 0xB0}, /* 0x44-0x47 */ + {0xC4, 0xB1}, {0xC4, 0xB2}, {0xC4, 0xB3}, {0xC4, 0xB4}, /* 0x48-0x4B */ + {0xC4, 0xB5}, {0xC4, 0xB6}, {0xC4, 0xB7}, {0xC4, 0xB9}, /* 0x4C-0x4F */ + {0xC4, 0xBA}, {0xC4, 0xBB}, {0xC4, 0xBD}, {0xC4, 0xBE}, /* 0x50-0x53 */ + {0xC4, 0xBF}, {0xC4, 0xC0}, {0xC4, 0xC1}, {0xC4, 0xC2}, /* 0x54-0x57 */ + {0xC4, 0xC3}, {0xC4, 0xC4}, {0xC4, 0xC5}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC4, 0xC6}, {0xC4, 0xC7}, {0xC4, 0xC8}, /* 0x60-0x63 */ + {0xC4, 0xC9}, {0xC4, 0xCA}, {0xC4, 0xCB}, {0xC4, 0xCC}, /* 0x64-0x67 */ + {0xC4, 0xCD}, {0xC4, 0xCE}, {0xC4, 0xCF}, {0xC4, 0xD0}, /* 0x68-0x6B */ + {0xC4, 0xD1}, {0xC4, 0xD2}, {0xC4, 0xD3}, {0xC4, 0xD4}, /* 0x6C-0x6F */ + {0xC4, 0xD5}, {0xC4, 0xD6}, {0xC4, 0xD7}, {0xC4, 0xD8}, /* 0x70-0x73 */ + {0xC4, 0xD9}, {0xC4, 0xDA}, {0xC4, 0xDB}, {0xC4, 0xDC}, /* 0x74-0x77 */ + {0xC4, 0xDD}, {0xC4, 0xDE}, {0xC4, 0xDF}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC4, 0xE0}, {0xC4, 0xE1}, {0xC4, 0xE2}, /* 0x80-0x83 */ + {0xC4, 0xE3}, {0xC4, 0xE4}, {0xC4, 0xE5}, {0xC4, 0xE6}, /* 0x84-0x87 */ + {0xC4, 0xE7}, {0xC4, 0xE8}, {0xC4, 0xEA}, {0xC4, 0xEB}, /* 0x88-0x8B */ + {0xC4, 0xEC}, {0xC4, 0xED}, {0xC4, 0xEE}, {0xC4, 0xEF}, /* 0x8C-0x8F */ + {0xC4, 0xF2}, {0xC4, 0xF3}, {0xC4, 0xF5}, {0xC4, 0xF6}, /* 0x90-0x93 */ + {0xC4, 0xF7}, {0xC4, 0xF9}, {0xC4, 0xFB}, {0xC4, 0xFC}, /* 0x94-0x97 */ + {0xC4, 0xFD}, {0xC4, 0xFE}, {0xC5, 0x02}, {0xC5, 0x03}, /* 0x98-0x9B */ + {0xC5, 0x04}, {0xC5, 0x05}, {0xC5, 0x06}, {0xC5, 0x07}, /* 0x9C-0x9F */ + {0xC5, 0x08}, {0xC5, 0x09}, {0xC5, 0x0A}, {0xC5, 0x0B}, /* 0xA0-0xA3 */ + {0xC5, 0x0D}, {0xC5, 0x0E}, {0xC5, 0x0F}, {0xC5, 0x11}, /* 0xA4-0xA7 */ + {0xC5, 0x12}, {0xC5, 0x13}, {0xC5, 0x15}, {0xC5, 0x16}, /* 0xA8-0xAB */ + {0xC5, 0x17}, {0xC5, 0x18}, {0xC5, 0x19}, {0xC5, 0x1A}, /* 0xAC-0xAF */ + {0xC5, 0x1B}, {0xC5, 0x1D}, {0xC5, 0x1E}, {0xC5, 0x1F}, /* 0xB0-0xB3 */ + {0xC5, 0x20}, {0xC5, 0x21}, {0xC5, 0x22}, {0xC5, 0x23}, /* 0xB4-0xB7 */ + {0xC5, 0x24}, {0xC5, 0x25}, {0xC5, 0x26}, {0xC5, 0x27}, /* 0xB8-0xBB */ + {0xC5, 0x2A}, {0xC5, 0x2B}, {0xC5, 0x2D}, {0xC5, 0x2E}, /* 0xBC-0xBF */ + {0xC5, 0x2F}, {0xC5, 0x31}, {0xC5, 0x32}, {0xC5, 0x33}, /* 0xC0-0xC3 */ + {0xC5, 0x34}, {0xC5, 0x35}, {0xC5, 0x36}, {0xC5, 0x37}, /* 0xC4-0xC7 */ + {0xC5, 0x3A}, {0xC5, 0x3C}, {0xC5, 0x3E}, {0xC5, 0x3F}, /* 0xC8-0xCB */ + {0xC5, 0x40}, {0xC5, 0x41}, {0xC5, 0x42}, {0xC5, 0x43}, /* 0xCC-0xCF */ + {0xC5, 0x46}, {0xC5, 0x47}, {0xC5, 0x4B}, {0xC5, 0x4F}, /* 0xD0-0xD3 */ + {0xC5, 0x50}, {0xC5, 0x51}, {0xC5, 0x52}, {0xC5, 0x56}, /* 0xD4-0xD7 */ + {0xC5, 0x5A}, {0xC5, 0x5B}, {0xC5, 0x5C}, {0xC5, 0x5F}, /* 0xD8-0xDB */ + {0xC5, 0x62}, {0xC5, 0x63}, {0xC5, 0x65}, {0xC5, 0x66}, /* 0xDC-0xDF */ + {0xC5, 0x67}, {0xC5, 0x69}, {0xC5, 0x6A}, {0xC5, 0x6B}, /* 0xE0-0xE3 */ + {0xC5, 0x6C}, {0xC5, 0x6D}, {0xC5, 0x6E}, {0xC5, 0x6F}, /* 0xE4-0xE7 */ + {0xC5, 0x72}, {0xC5, 0x76}, {0xC5, 0x77}, {0xC5, 0x78}, /* 0xE8-0xEB */ + {0xC5, 0x79}, {0xC5, 0x7A}, {0xC5, 0x7B}, {0xC5, 0x7E}, /* 0xEC-0xEF */ + {0xC5, 0x7F}, {0xC5, 0x81}, {0xC5, 0x82}, {0xC5, 0x83}, /* 0xF0-0xF3 */ + {0xC5, 0x85}, {0xC5, 0x86}, {0xC5, 0x88}, {0xC5, 0x89}, /* 0xF4-0xF7 */ + {0xC5, 0x8A}, {0xC5, 0x8B}, {0xC5, 0x8E}, {0xC5, 0x90}, /* 0xF8-0xFB */ + {0xC5, 0x92}, {0xC5, 0x93}, {0xC5, 0x94}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9E[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC5, 0x96}, {0xC5, 0x99}, {0xC5, 0x9A}, /* 0x40-0x43 */ + {0xC5, 0x9B}, {0xC5, 0x9D}, {0xC5, 0x9E}, {0xC5, 0x9F}, /* 0x44-0x47 */ + {0xC5, 0xA1}, {0xC5, 0xA2}, {0xC5, 0xA3}, {0xC5, 0xA4}, /* 0x48-0x4B */ + {0xC5, 0xA5}, {0xC5, 0xA6}, {0xC5, 0xA7}, {0xC5, 0xA8}, /* 0x4C-0x4F */ + {0xC5, 0xAA}, {0xC5, 0xAB}, {0xC5, 0xAC}, {0xC5, 0xAD}, /* 0x50-0x53 */ + {0xC5, 0xAE}, {0xC5, 0xAF}, {0xC5, 0xB0}, {0xC5, 0xB1}, /* 0x54-0x57 */ + {0xC5, 0xB2}, {0xC5, 0xB3}, {0xC5, 0xB6}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC5, 0xB7}, {0xC5, 0xBA}, {0xC5, 0xBF}, /* 0x60-0x63 */ + {0xC5, 0xC0}, {0xC5, 0xC1}, {0xC5, 0xC2}, {0xC5, 0xC3}, /* 0x64-0x67 */ + {0xC5, 0xCB}, {0xC5, 0xCD}, {0xC5, 0xCF}, {0xC5, 0xD2}, /* 0x68-0x6B */ + {0xC5, 0xD3}, {0xC5, 0xD5}, {0xC5, 0xD6}, {0xC5, 0xD7}, /* 0x6C-0x6F */ + {0xC5, 0xD9}, {0xC5, 0xDA}, {0xC5, 0xDB}, {0xC5, 0xDC}, /* 0x70-0x73 */ + {0xC5, 0xDD}, {0xC5, 0xDE}, {0xC5, 0xDF}, {0xC5, 0xE2}, /* 0x74-0x77 */ + {0xC5, 0xE4}, {0xC5, 0xE6}, {0xC5, 0xE7}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC5, 0xE8}, {0xC5, 0xE9}, {0xC5, 0xEA}, /* 0x80-0x83 */ + {0xC5, 0xEB}, {0xC5, 0xEF}, {0xC5, 0xF1}, {0xC5, 0xF2}, /* 0x84-0x87 */ + {0xC5, 0xF3}, {0xC5, 0xF5}, {0xC5, 0xF8}, {0xC5, 0xF9}, /* 0x88-0x8B */ + {0xC5, 0xFA}, {0xC5, 0xFB}, {0xC6, 0x02}, {0xC6, 0x03}, /* 0x8C-0x8F */ + {0xC6, 0x04}, {0xC6, 0x09}, {0xC6, 0x0A}, {0xC6, 0x0B}, /* 0x90-0x93 */ + {0xC6, 0x0D}, {0xC6, 0x0E}, {0xC6, 0x0F}, {0xC6, 0x11}, /* 0x94-0x97 */ + {0xC6, 0x12}, {0xC6, 0x13}, {0xC6, 0x14}, {0xC6, 0x15}, /* 0x98-0x9B */ + {0xC6, 0x16}, {0xC6, 0x17}, {0xC6, 0x1A}, {0xC6, 0x1D}, /* 0x9C-0x9F */ + {0xC6, 0x1E}, {0xC6, 0x1F}, {0xC6, 0x20}, {0xC6, 0x21}, /* 0xA0-0xA3 */ + {0xC6, 0x22}, {0xC6, 0x23}, {0xC6, 0x26}, {0xC6, 0x27}, /* 0xA4-0xA7 */ + {0xC6, 0x29}, {0xC6, 0x2A}, {0xC6, 0x2B}, {0xC6, 0x2F}, /* 0xA8-0xAB */ + {0xC6, 0x31}, {0xC6, 0x32}, {0xC6, 0x36}, {0xC6, 0x38}, /* 0xAC-0xAF */ + {0xC6, 0x3A}, {0xC6, 0x3C}, {0xC6, 0x3D}, {0xC6, 0x3E}, /* 0xB0-0xB3 */ + {0xC6, 0x3F}, {0xC6, 0x42}, {0xC6, 0x43}, {0xC6, 0x45}, /* 0xB4-0xB7 */ + {0xC6, 0x46}, {0xC6, 0x47}, {0xC6, 0x49}, {0xC6, 0x4A}, /* 0xB8-0xBB */ + {0xC6, 0x4B}, {0xC6, 0x4C}, {0xC6, 0x4D}, {0xC6, 0x4E}, /* 0xBC-0xBF */ + {0xC6, 0x4F}, {0xC6, 0x52}, {0xC6, 0x56}, {0xC6, 0x57}, /* 0xC0-0xC3 */ + {0xC6, 0x58}, {0xC6, 0x59}, {0xC6, 0x5A}, {0xC6, 0x5B}, /* 0xC4-0xC7 */ + {0xC6, 0x5E}, {0xC6, 0x5F}, {0xC6, 0x61}, {0xC6, 0x62}, /* 0xC8-0xCB */ + {0xC6, 0x63}, {0xC6, 0x64}, {0xC6, 0x65}, {0xC6, 0x66}, /* 0xCC-0xCF */ + {0xC6, 0x67}, {0xC6, 0x68}, {0xC6, 0x69}, {0xC6, 0x6A}, /* 0xD0-0xD3 */ + {0xC6, 0x6B}, {0xC6, 0x6D}, {0xC6, 0x6E}, {0xC6, 0x70}, /* 0xD4-0xD7 */ + {0xC6, 0x72}, {0xC6, 0x73}, {0xC6, 0x74}, {0xC6, 0x75}, /* 0xD8-0xDB */ + {0xC6, 0x76}, {0xC6, 0x77}, {0xC6, 0x7A}, {0xC6, 0x7B}, /* 0xDC-0xDF */ + {0xC6, 0x7D}, {0xC6, 0x7E}, {0xC6, 0x7F}, {0xC6, 0x81}, /* 0xE0-0xE3 */ + {0xC6, 0x82}, {0xC6, 0x83}, {0xC6, 0x84}, {0xC6, 0x85}, /* 0xE4-0xE7 */ + {0xC6, 0x86}, {0xC6, 0x87}, {0xC6, 0x8A}, {0xC6, 0x8C}, /* 0xE8-0xEB */ + {0xC6, 0x8E}, {0xC6, 0x8F}, {0xC6, 0x90}, {0xC6, 0x91}, /* 0xEC-0xEF */ + {0xC6, 0x92}, {0xC6, 0x93}, {0xC6, 0x96}, {0xC6, 0x97}, /* 0xF0-0xF3 */ + {0xC6, 0x99}, {0xC6, 0x9A}, {0xC6, 0x9B}, {0xC6, 0x9D}, /* 0xF4-0xF7 */ + {0xC6, 0x9E}, {0xC6, 0x9F}, {0xC6, 0xA0}, {0xC6, 0xA1}, /* 0xF8-0xFB */ + {0xC6, 0xA2}, {0xC6, 0xA3}, {0xC6, 0xA6}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_9F[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC6, 0xA8}, {0xC6, 0xAA}, {0xC6, 0xAB}, /* 0x40-0x43 */ + {0xC6, 0xAC}, {0xC6, 0xAD}, {0xC6, 0xAE}, {0xC6, 0xAF}, /* 0x44-0x47 */ + {0xC6, 0xB2}, {0xC6, 0xB3}, {0xC6, 0xB5}, {0xC6, 0xB6}, /* 0x48-0x4B */ + {0xC6, 0xB7}, {0xC6, 0xBB}, {0xC6, 0xBC}, {0xC6, 0xBD}, /* 0x4C-0x4F */ + {0xC6, 0xBE}, {0xC6, 0xBF}, {0xC6, 0xC2}, {0xC6, 0xC4}, /* 0x50-0x53 */ + {0xC6, 0xC6}, {0xC6, 0xC7}, {0xC6, 0xC8}, {0xC6, 0xC9}, /* 0x54-0x57 */ + {0xC6, 0xCA}, {0xC6, 0xCB}, {0xC6, 0xCE}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC6, 0xCF}, {0xC6, 0xD1}, {0xC6, 0xD2}, /* 0x60-0x63 */ + {0xC6, 0xD3}, {0xC6, 0xD5}, {0xC6, 0xD6}, {0xC6, 0xD7}, /* 0x64-0x67 */ + {0xC6, 0xD8}, {0xC6, 0xD9}, {0xC6, 0xDA}, {0xC6, 0xDB}, /* 0x68-0x6B */ + {0xC6, 0xDE}, {0xC6, 0xDF}, {0xC6, 0xE2}, {0xC6, 0xE3}, /* 0x6C-0x6F */ + {0xC6, 0xE4}, {0xC6, 0xE5}, {0xC6, 0xE6}, {0xC6, 0xE7}, /* 0x70-0x73 */ + {0xC6, 0xEA}, {0xC6, 0xEB}, {0xC6, 0xED}, {0xC6, 0xEE}, /* 0x74-0x77 */ + {0xC6, 0xEF}, {0xC6, 0xF1}, {0xC6, 0xF2}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC6, 0xF3}, {0xC6, 0xF4}, {0xC6, 0xF5}, /* 0x80-0x83 */ + {0xC6, 0xF6}, {0xC6, 0xF7}, {0xC6, 0xFA}, {0xC6, 0xFB}, /* 0x84-0x87 */ + {0xC6, 0xFC}, {0xC6, 0xFE}, {0xC6, 0xFF}, {0xC7, 0x00}, /* 0x88-0x8B */ + {0xC7, 0x01}, {0xC7, 0x02}, {0xC7, 0x03}, {0xC7, 0x06}, /* 0x8C-0x8F */ + {0xC7, 0x07}, {0xC7, 0x09}, {0xC7, 0x0A}, {0xC7, 0x0B}, /* 0x90-0x93 */ + {0xC7, 0x0D}, {0xC7, 0x0E}, {0xC7, 0x0F}, {0xC7, 0x10}, /* 0x94-0x97 */ + {0xC7, 0x11}, {0xC7, 0x12}, {0xC7, 0x13}, {0xC7, 0x16}, /* 0x98-0x9B */ + {0xC7, 0x18}, {0xC7, 0x1A}, {0xC7, 0x1B}, {0xC7, 0x1C}, /* 0x9C-0x9F */ + {0xC7, 0x1D}, {0xC7, 0x1E}, {0xC7, 0x1F}, {0xC7, 0x22}, /* 0xA0-0xA3 */ + {0xC7, 0x23}, {0xC7, 0x25}, {0xC7, 0x26}, {0xC7, 0x27}, /* 0xA4-0xA7 */ + {0xC7, 0x29}, {0xC7, 0x2A}, {0xC7, 0x2B}, {0xC7, 0x2C}, /* 0xA8-0xAB */ + {0xC7, 0x2D}, {0xC7, 0x2E}, {0xC7, 0x2F}, {0xC7, 0x32}, /* 0xAC-0xAF */ + {0xC7, 0x34}, {0xC7, 0x36}, {0xC7, 0x38}, {0xC7, 0x39}, /* 0xB0-0xB3 */ + {0xC7, 0x3A}, {0xC7, 0x3B}, {0xC7, 0x3E}, {0xC7, 0x3F}, /* 0xB4-0xB7 */ + {0xC7, 0x41}, {0xC7, 0x42}, {0xC7, 0x43}, {0xC7, 0x45}, /* 0xB8-0xBB */ + {0xC7, 0x46}, {0xC7, 0x47}, {0xC7, 0x48}, {0xC7, 0x49}, /* 0xBC-0xBF */ + {0xC7, 0x4B}, {0xC7, 0x4E}, {0xC7, 0x50}, {0xC7, 0x59}, /* 0xC0-0xC3 */ + {0xC7, 0x5A}, {0xC7, 0x5B}, {0xC7, 0x5D}, {0xC7, 0x5E}, /* 0xC4-0xC7 */ + {0xC7, 0x5F}, {0xC7, 0x61}, {0xC7, 0x62}, {0xC7, 0x63}, /* 0xC8-0xCB */ + {0xC7, 0x64}, {0xC7, 0x65}, {0xC7, 0x66}, {0xC7, 0x67}, /* 0xCC-0xCF */ + {0xC7, 0x69}, {0xC7, 0x6A}, {0xC7, 0x6C}, {0xC7, 0x6D}, /* 0xD0-0xD3 */ + {0xC7, 0x6E}, {0xC7, 0x6F}, {0xC7, 0x70}, {0xC7, 0x71}, /* 0xD4-0xD7 */ + {0xC7, 0x72}, {0xC7, 0x73}, {0xC7, 0x76}, {0xC7, 0x77}, /* 0xD8-0xDB */ + {0xC7, 0x79}, {0xC7, 0x7A}, {0xC7, 0x7B}, {0xC7, 0x7F}, /* 0xDC-0xDF */ + {0xC7, 0x80}, {0xC7, 0x81}, {0xC7, 0x82}, {0xC7, 0x86}, /* 0xE0-0xE3 */ + {0xC7, 0x8B}, {0xC7, 0x8C}, {0xC7, 0x8D}, {0xC7, 0x8F}, /* 0xE4-0xE7 */ + {0xC7, 0x92}, {0xC7, 0x93}, {0xC7, 0x95}, {0xC7, 0x99}, /* 0xE8-0xEB */ + {0xC7, 0x9B}, {0xC7, 0x9C}, {0xC7, 0x9D}, {0xC7, 0x9E}, /* 0xEC-0xEF */ + {0xC7, 0x9F}, {0xC7, 0xA2}, {0xC7, 0xA7}, {0xC7, 0xA8}, /* 0xF0-0xF3 */ + {0xC7, 0xA9}, {0xC7, 0xAA}, {0xC7, 0xAB}, {0xC7, 0xAE}, /* 0xF4-0xF7 */ + {0xC7, 0xAF}, {0xC7, 0xB1}, {0xC7, 0xB2}, {0xC7, 0xB3}, /* 0xF8-0xFB */ + {0xC7, 0xB5}, {0xC7, 0xB6}, {0xC7, 0xB7}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC7, 0xB8}, {0xC7, 0xB9}, {0xC7, 0xBA}, /* 0x40-0x43 */ + {0xC7, 0xBB}, {0xC7, 0xBE}, {0xC7, 0xC2}, {0xC7, 0xC3}, /* 0x44-0x47 */ + {0xC7, 0xC4}, {0xC7, 0xC5}, {0xC7, 0xC6}, {0xC7, 0xC7}, /* 0x48-0x4B */ + {0xC7, 0xCA}, {0xC7, 0xCB}, {0xC7, 0xCD}, {0xC7, 0xCF}, /* 0x4C-0x4F */ + {0xC7, 0xD1}, {0xC7, 0xD2}, {0xC7, 0xD3}, {0xC7, 0xD4}, /* 0x50-0x53 */ + {0xC7, 0xD5}, {0xC7, 0xD6}, {0xC7, 0xD7}, {0xC7, 0xD9}, /* 0x54-0x57 */ + {0xC7, 0xDA}, {0xC7, 0xDB}, {0xC7, 0xDC}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC7, 0xDE}, {0xC7, 0xDF}, {0xC7, 0xE0}, /* 0x60-0x63 */ + {0xC7, 0xE1}, {0xC7, 0xE2}, {0xC7, 0xE3}, {0xC7, 0xE5}, /* 0x64-0x67 */ + {0xC7, 0xE6}, {0xC7, 0xE7}, {0xC7, 0xE9}, {0xC7, 0xEA}, /* 0x68-0x6B */ + {0xC7, 0xEB}, {0xC7, 0xED}, {0xC7, 0xEE}, {0xC7, 0xEF}, /* 0x6C-0x6F */ + {0xC7, 0xF0}, {0xC7, 0xF1}, {0xC7, 0xF2}, {0xC7, 0xF3}, /* 0x70-0x73 */ + {0xC7, 0xF4}, {0xC7, 0xF5}, {0xC7, 0xF6}, {0xC7, 0xF7}, /* 0x74-0x77 */ + {0xC7, 0xF8}, {0xC7, 0xF9}, {0xC7, 0xFA}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC7, 0xFB}, {0xC7, 0xFC}, {0xC7, 0xFD}, /* 0x80-0x83 */ + {0xC7, 0xFE}, {0xC7, 0xFF}, {0xC8, 0x02}, {0xC8, 0x03}, /* 0x84-0x87 */ + {0xC8, 0x05}, {0xC8, 0x06}, {0xC8, 0x07}, {0xC8, 0x09}, /* 0x88-0x8B */ + {0xC8, 0x0B}, {0xC8, 0x0C}, {0xC8, 0x0D}, {0xC8, 0x0E}, /* 0x8C-0x8F */ + {0xC8, 0x0F}, {0xC8, 0x12}, {0xC8, 0x14}, {0xC8, 0x17}, /* 0x90-0x93 */ + {0xC8, 0x18}, {0xC8, 0x19}, {0xC8, 0x1A}, {0xC8, 0x1B}, /* 0x94-0x97 */ + {0xC8, 0x1E}, {0xC8, 0x1F}, {0xC8, 0x21}, {0xC8, 0x22}, /* 0x98-0x9B */ + {0xC8, 0x23}, {0xC8, 0x25}, {0xC8, 0x26}, {0xC8, 0x27}, /* 0x9C-0x9F */ + {0xC8, 0x28}, {0xC8, 0x29}, {0xC8, 0x2A}, {0xC8, 0x2B}, /* 0xA0-0xA3 */ + {0xC8, 0x2E}, {0xC8, 0x30}, {0xC8, 0x32}, {0xC8, 0x33}, /* 0xA4-0xA7 */ + {0xC8, 0x34}, {0xC8, 0x35}, {0xC8, 0x36}, {0xC8, 0x37}, /* 0xA8-0xAB */ + {0xC8, 0x39}, {0xC8, 0x3A}, {0xC8, 0x3B}, {0xC8, 0x3D}, /* 0xAC-0xAF */ + {0xC8, 0x3E}, {0xC8, 0x3F}, {0xC8, 0x41}, {0xC8, 0x42}, /* 0xB0-0xB3 */ + {0xC8, 0x43}, {0xC8, 0x44}, {0xC8, 0x45}, {0xC8, 0x46}, /* 0xB4-0xB7 */ + {0xC8, 0x47}, {0xC8, 0x4A}, {0xC8, 0x4B}, {0xC8, 0x4E}, /* 0xB8-0xBB */ + {0xC8, 0x4F}, {0xC8, 0x50}, {0xC8, 0x51}, {0xC8, 0x52}, /* 0xBC-0xBF */ + {0xC8, 0x53}, {0xC8, 0x55}, {0xC8, 0x56}, {0xC8, 0x57}, /* 0xC0-0xC3 */ + {0xC8, 0x58}, {0xC8, 0x59}, {0xC8, 0x5A}, {0xC8, 0x5B}, /* 0xC4-0xC7 */ + {0xC8, 0x5C}, {0xC8, 0x5D}, {0xC8, 0x5E}, {0xC8, 0x5F}, /* 0xC8-0xCB */ + {0xC8, 0x60}, {0xC8, 0x61}, {0xC8, 0x62}, {0xC8, 0x63}, /* 0xCC-0xCF */ + {0xC8, 0x64}, {0xC8, 0x65}, {0xC8, 0x66}, {0xC8, 0x67}, /* 0xD0-0xD3 */ + {0xC8, 0x68}, {0xC8, 0x69}, {0xC8, 0x6A}, {0xC8, 0x6B}, /* 0xD4-0xD7 */ + {0xC8, 0x6C}, {0xC8, 0x6D}, {0xC8, 0x6E}, {0xC8, 0x6F}, /* 0xD8-0xDB */ + {0xC8, 0x72}, {0xC8, 0x73}, {0xC8, 0x75}, {0xC8, 0x76}, /* 0xDC-0xDF */ + {0xC8, 0x77}, {0xC8, 0x79}, {0xC8, 0x7B}, {0xC8, 0x7C}, /* 0xE0-0xE3 */ + {0xC8, 0x7D}, {0xC8, 0x7E}, {0xC8, 0x7F}, {0xC8, 0x82}, /* 0xE4-0xE7 */ + {0xC8, 0x84}, {0xC8, 0x88}, {0xC8, 0x89}, {0xC8, 0x8A}, /* 0xE8-0xEB */ + {0xC8, 0x8E}, {0xC8, 0x8F}, {0xC8, 0x90}, {0xC8, 0x91}, /* 0xEC-0xEF */ + {0xC8, 0x92}, {0xC8, 0x93}, {0xC8, 0x95}, {0xC8, 0x96}, /* 0xF0-0xF3 */ + {0xC8, 0x97}, {0xC8, 0x98}, {0xC8, 0x99}, {0xC8, 0x9A}, /* 0xF4-0xF7 */ + {0xC8, 0x9B}, {0xC8, 0x9C}, {0xC8, 0x9E}, {0xC8, 0xA0}, /* 0xF8-0xFB */ + {0xC8, 0xA2}, {0xC8, 0xA3}, {0xC8, 0xA4}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC8, 0xA5}, {0xC8, 0xA6}, {0xC8, 0xA7}, /* 0x40-0x43 */ + {0xC8, 0xA9}, {0xC8, 0xAA}, {0xC8, 0xAB}, {0xC8, 0xAC}, /* 0x44-0x47 */ + {0xC8, 0xAD}, {0xC8, 0xAE}, {0xC8, 0xAF}, {0xC8, 0xB0}, /* 0x48-0x4B */ + {0xC8, 0xB1}, {0xC8, 0xB2}, {0xC8, 0xB3}, {0xC8, 0xB4}, /* 0x4C-0x4F */ + {0xC8, 0xB5}, {0xC8, 0xB6}, {0xC8, 0xB7}, {0xC8, 0xB8}, /* 0x50-0x53 */ + {0xC8, 0xB9}, {0xC8, 0xBA}, {0xC8, 0xBB}, {0xC8, 0xBE}, /* 0x54-0x57 */ + {0xC8, 0xBF}, {0xC8, 0xC0}, {0xC8, 0xC1}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC8, 0xC2}, {0xC8, 0xC3}, {0xC8, 0xC5}, /* 0x60-0x63 */ + {0xC8, 0xC6}, {0xC8, 0xC7}, {0xC8, 0xC9}, {0xC8, 0xCA}, /* 0x64-0x67 */ + {0xC8, 0xCB}, {0xC8, 0xCD}, {0xC8, 0xCE}, {0xC8, 0xCF}, /* 0x68-0x6B */ + {0xC8, 0xD0}, {0xC8, 0xD1}, {0xC8, 0xD2}, {0xC8, 0xD3}, /* 0x6C-0x6F */ + {0xC8, 0xD6}, {0xC8, 0xD8}, {0xC8, 0xDA}, {0xC8, 0xDB}, /* 0x70-0x73 */ + {0xC8, 0xDC}, {0xC8, 0xDD}, {0xC8, 0xDE}, {0xC8, 0xDF}, /* 0x74-0x77 */ + {0xC8, 0xE2}, {0xC8, 0xE3}, {0xC8, 0xE5}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC8, 0xE6}, {0xC8, 0xE7}, {0xC8, 0xE8}, /* 0x80-0x83 */ + {0xC8, 0xE9}, {0xC8, 0xEA}, {0xC8, 0xEB}, {0xC8, 0xEC}, /* 0x84-0x87 */ + {0xC8, 0xED}, {0xC8, 0xEE}, {0xC8, 0xEF}, {0xC8, 0xF0}, /* 0x88-0x8B */ + {0xC8, 0xF1}, {0xC8, 0xF2}, {0xC8, 0xF3}, {0xC8, 0xF4}, /* 0x8C-0x8F */ + {0xC8, 0xF6}, {0xC8, 0xF7}, {0xC8, 0xF8}, {0xC8, 0xF9}, /* 0x90-0x93 */ + {0xC8, 0xFA}, {0xC8, 0xFB}, {0xC8, 0xFE}, {0xC8, 0xFF}, /* 0x94-0x97 */ + {0xC9, 0x01}, {0xC9, 0x02}, {0xC9, 0x03}, {0xC9, 0x07}, /* 0x98-0x9B */ + {0xC9, 0x08}, {0xC9, 0x09}, {0xC9, 0x0A}, {0xC9, 0x0B}, /* 0x9C-0x9F */ + {0xC9, 0x0E}, {0x30, 0x00}, {0x30, 0x01}, {0x30, 0x02}, /* 0xA0-0xA3 */ + {0x00, 0xB7}, {0x20, 0x25}, {0x20, 0x26}, {0x00, 0xA8}, /* 0xA4-0xA7 */ + {0x30, 0x03}, {0x00, 0xAD}, {0x20, 0x15}, {0x22, 0x25}, /* 0xA8-0xAB */ + {0xFF, 0x3C}, {0x22, 0x3C}, {0x20, 0x18}, {0x20, 0x19}, /* 0xAC-0xAF */ + {0x20, 0x1C}, {0x20, 0x1D}, {0x30, 0x14}, {0x30, 0x15}, /* 0xB0-0xB3 */ + {0x30, 0x08}, {0x30, 0x09}, {0x30, 0x0A}, {0x30, 0x0B}, /* 0xB4-0xB7 */ + {0x30, 0x0C}, {0x30, 0x0D}, {0x30, 0x0E}, {0x30, 0x0F}, /* 0xB8-0xBB */ + {0x30, 0x10}, {0x30, 0x11}, {0x00, 0xB1}, {0x00, 0xD7}, /* 0xBC-0xBF */ + {0x00, 0xF7}, {0x22, 0x60}, {0x22, 0x64}, {0x22, 0x65}, /* 0xC0-0xC3 */ + {0x22, 0x1E}, {0x22, 0x34}, {0x00, 0xB0}, {0x20, 0x32}, /* 0xC4-0xC7 */ + {0x20, 0x33}, {0x21, 0x03}, {0x21, 0x2B}, {0xFF, 0xE0}, /* 0xC8-0xCB */ + {0xFF, 0xE1}, {0xFF, 0xE5}, {0x26, 0x42}, {0x26, 0x40}, /* 0xCC-0xCF */ + {0x22, 0x20}, {0x22, 0xA5}, {0x23, 0x12}, {0x22, 0x02}, /* 0xD0-0xD3 */ + {0x22, 0x07}, {0x22, 0x61}, {0x22, 0x52}, {0x00, 0xA7}, /* 0xD4-0xD7 */ + {0x20, 0x3B}, {0x26, 0x06}, {0x26, 0x05}, {0x25, 0xCB}, /* 0xD8-0xDB */ + {0x25, 0xCF}, {0x25, 0xCE}, {0x25, 0xC7}, {0x25, 0xC6}, /* 0xDC-0xDF */ + {0x25, 0xA1}, {0x25, 0xA0}, {0x25, 0xB3}, {0x25, 0xB2}, /* 0xE0-0xE3 */ + {0x25, 0xBD}, {0x25, 0xBC}, {0x21, 0x92}, {0x21, 0x90}, /* 0xE4-0xE7 */ + {0x21, 0x91}, {0x21, 0x93}, {0x21, 0x94}, {0x30, 0x13}, /* 0xE8-0xEB */ + {0x22, 0x6A}, {0x22, 0x6B}, {0x22, 0x1A}, {0x22, 0x3D}, /* 0xEC-0xEF */ + {0x22, 0x1D}, {0x22, 0x35}, {0x22, 0x2B}, {0x22, 0x2C}, /* 0xF0-0xF3 */ + {0x22, 0x08}, {0x22, 0x0B}, {0x22, 0x86}, {0x22, 0x87}, /* 0xF4-0xF7 */ + {0x22, 0x82}, {0x22, 0x83}, {0x22, 0x2A}, {0x22, 0x29}, /* 0xF8-0xFB */ + {0x22, 0x27}, {0x22, 0x28}, {0xFF, 0xE2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC9, 0x10}, {0xC9, 0x12}, {0xC9, 0x13}, /* 0x40-0x43 */ + {0xC9, 0x14}, {0xC9, 0x15}, {0xC9, 0x16}, {0xC9, 0x17}, /* 0x44-0x47 */ + {0xC9, 0x19}, {0xC9, 0x1A}, {0xC9, 0x1B}, {0xC9, 0x1C}, /* 0x48-0x4B */ + {0xC9, 0x1D}, {0xC9, 0x1E}, {0xC9, 0x1F}, {0xC9, 0x20}, /* 0x4C-0x4F */ + {0xC9, 0x21}, {0xC9, 0x22}, {0xC9, 0x23}, {0xC9, 0x24}, /* 0x50-0x53 */ + {0xC9, 0x25}, {0xC9, 0x26}, {0xC9, 0x27}, {0xC9, 0x28}, /* 0x54-0x57 */ + {0xC9, 0x29}, {0xC9, 0x2A}, {0xC9, 0x2B}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC9, 0x2D}, {0xC9, 0x2E}, {0xC9, 0x2F}, /* 0x60-0x63 */ + {0xC9, 0x30}, {0xC9, 0x31}, {0xC9, 0x32}, {0xC9, 0x33}, /* 0x64-0x67 */ + {0xC9, 0x35}, {0xC9, 0x36}, {0xC9, 0x37}, {0xC9, 0x38}, /* 0x68-0x6B */ + {0xC9, 0x39}, {0xC9, 0x3A}, {0xC9, 0x3B}, {0xC9, 0x3C}, /* 0x6C-0x6F */ + {0xC9, 0x3D}, {0xC9, 0x3E}, {0xC9, 0x3F}, {0xC9, 0x40}, /* 0x70-0x73 */ + {0xC9, 0x41}, {0xC9, 0x42}, {0xC9, 0x43}, {0xC9, 0x44}, /* 0x74-0x77 */ + {0xC9, 0x45}, {0xC9, 0x46}, {0xC9, 0x47}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC9, 0x48}, {0xC9, 0x49}, {0xC9, 0x4A}, /* 0x80-0x83 */ + {0xC9, 0x4B}, {0xC9, 0x4C}, {0xC9, 0x4D}, {0xC9, 0x4E}, /* 0x84-0x87 */ + {0xC9, 0x4F}, {0xC9, 0x52}, {0xC9, 0x53}, {0xC9, 0x55}, /* 0x88-0x8B */ + {0xC9, 0x56}, {0xC9, 0x57}, {0xC9, 0x59}, {0xC9, 0x5A}, /* 0x8C-0x8F */ + {0xC9, 0x5B}, {0xC9, 0x5C}, {0xC9, 0x5D}, {0xC9, 0x5E}, /* 0x90-0x93 */ + {0xC9, 0x5F}, {0xC9, 0x62}, {0xC9, 0x64}, {0xC9, 0x65}, /* 0x94-0x97 */ + {0xC9, 0x66}, {0xC9, 0x67}, {0xC9, 0x68}, {0xC9, 0x69}, /* 0x98-0x9B */ + {0xC9, 0x6A}, {0xC9, 0x6B}, {0xC9, 0x6D}, {0xC9, 0x6E}, /* 0x9C-0x9F */ + {0xC9, 0x6F}, {0x21, 0xD2}, {0x21, 0xD4}, {0x22, 0x00}, /* 0xA0-0xA3 */ + {0x22, 0x03}, {0x00, 0xB4}, {0xFF, 0x5E}, {0x02, 0xC7}, /* 0xA4-0xA7 */ + {0x02, 0xD8}, {0x02, 0xDD}, {0x02, 0xDA}, {0x02, 0xD9}, /* 0xA8-0xAB */ + {0x00, 0xB8}, {0x02, 0xDB}, {0x00, 0xA1}, {0x00, 0xBF}, /* 0xAC-0xAF */ + {0x02, 0xD0}, {0x22, 0x2E}, {0x22, 0x11}, {0x22, 0x0F}, /* 0xB0-0xB3 */ + {0x00, 0xA4}, {0x21, 0x09}, {0x20, 0x30}, {0x25, 0xC1}, /* 0xB4-0xB7 */ + {0x25, 0xC0}, {0x25, 0xB7}, {0x25, 0xB6}, {0x26, 0x64}, /* 0xB8-0xBB */ + {0x26, 0x60}, {0x26, 0x61}, {0x26, 0x65}, {0x26, 0x67}, /* 0xBC-0xBF */ + {0x26, 0x63}, {0x22, 0x99}, {0x25, 0xC8}, {0x25, 0xA3}, /* 0xC0-0xC3 */ + {0x25, 0xD0}, {0x25, 0xD1}, {0x25, 0x92}, {0x25, 0xA4}, /* 0xC4-0xC7 */ + {0x25, 0xA5}, {0x25, 0xA8}, {0x25, 0xA7}, {0x25, 0xA6}, /* 0xC8-0xCB */ + {0x25, 0xA9}, {0x26, 0x68}, {0x26, 0x0F}, {0x26, 0x0E}, /* 0xCC-0xCF */ + {0x26, 0x1C}, {0x26, 0x1E}, {0x00, 0xB6}, {0x20, 0x20}, /* 0xD0-0xD3 */ + {0x20, 0x21}, {0x21, 0x95}, {0x21, 0x97}, {0x21, 0x99}, /* 0xD4-0xD7 */ + {0x21, 0x96}, {0x21, 0x98}, {0x26, 0x6D}, {0x26, 0x69}, /* 0xD8-0xDB */ + {0x26, 0x6A}, {0x26, 0x6C}, {0x32, 0x7F}, {0x32, 0x1C}, /* 0xDC-0xDF */ + {0x21, 0x16}, {0x33, 0xC7}, {0x21, 0x22}, {0x33, 0xC2}, /* 0xE0-0xE3 */ + {0x33, 0xD8}, {0x21, 0x21}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC9, 0x71}, {0xC9, 0x72}, {0xC9, 0x73}, /* 0x40-0x43 */ + {0xC9, 0x75}, {0xC9, 0x76}, {0xC9, 0x77}, {0xC9, 0x78}, /* 0x44-0x47 */ + {0xC9, 0x79}, {0xC9, 0x7A}, {0xC9, 0x7B}, {0xC9, 0x7D}, /* 0x48-0x4B */ + {0xC9, 0x7E}, {0xC9, 0x7F}, {0xC9, 0x80}, {0xC9, 0x81}, /* 0x4C-0x4F */ + {0xC9, 0x82}, {0xC9, 0x83}, {0xC9, 0x84}, {0xC9, 0x85}, /* 0x50-0x53 */ + {0xC9, 0x86}, {0xC9, 0x87}, {0xC9, 0x8A}, {0xC9, 0x8B}, /* 0x54-0x57 */ + {0xC9, 0x8D}, {0xC9, 0x8E}, {0xC9, 0x8F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xC9, 0x91}, {0xC9, 0x92}, {0xC9, 0x93}, /* 0x60-0x63 */ + {0xC9, 0x94}, {0xC9, 0x95}, {0xC9, 0x96}, {0xC9, 0x97}, /* 0x64-0x67 */ + {0xC9, 0x9A}, {0xC9, 0x9C}, {0xC9, 0x9E}, {0xC9, 0x9F}, /* 0x68-0x6B */ + {0xC9, 0xA0}, {0xC9, 0xA1}, {0xC9, 0xA2}, {0xC9, 0xA3}, /* 0x6C-0x6F */ + {0xC9, 0xA4}, {0xC9, 0xA5}, {0xC9, 0xA6}, {0xC9, 0xA7}, /* 0x70-0x73 */ + {0xC9, 0xA8}, {0xC9, 0xA9}, {0xC9, 0xAA}, {0xC9, 0xAB}, /* 0x74-0x77 */ + {0xC9, 0xAC}, {0xC9, 0xAD}, {0xC9, 0xAE}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xC9, 0xAF}, {0xC9, 0xB0}, {0xC9, 0xB1}, /* 0x80-0x83 */ + {0xC9, 0xB2}, {0xC9, 0xB3}, {0xC9, 0xB4}, {0xC9, 0xB5}, /* 0x84-0x87 */ + {0xC9, 0xB6}, {0xC9, 0xB7}, {0xC9, 0xB8}, {0xC9, 0xB9}, /* 0x88-0x8B */ + {0xC9, 0xBA}, {0xC9, 0xBB}, {0xC9, 0xBC}, {0xC9, 0xBD}, /* 0x8C-0x8F */ + {0xC9, 0xBE}, {0xC9, 0xBF}, {0xC9, 0xC2}, {0xC9, 0xC3}, /* 0x90-0x93 */ + {0xC9, 0xC5}, {0xC9, 0xC6}, {0xC9, 0xC9}, {0xC9, 0xCB}, /* 0x94-0x97 */ + {0xC9, 0xCC}, {0xC9, 0xCD}, {0xC9, 0xCE}, {0xC9, 0xCF}, /* 0x98-0x9B */ + {0xC9, 0xD2}, {0xC9, 0xD4}, {0xC9, 0xD7}, {0xC9, 0xD8}, /* 0x9C-0x9F */ + {0xC9, 0xDB}, {0xFF, 0x01}, {0xFF, 0x02}, {0xFF, 0x03}, /* 0xA0-0xA3 */ + {0xFF, 0x04}, {0xFF, 0x05}, {0xFF, 0x06}, {0xFF, 0x07}, /* 0xA4-0xA7 */ + {0xFF, 0x08}, {0xFF, 0x09}, {0xFF, 0x0A}, {0xFF, 0x0B}, /* 0xA8-0xAB */ + {0xFF, 0x0C}, {0xFF, 0x0D}, {0xFF, 0x0E}, {0xFF, 0x0F}, /* 0xAC-0xAF */ + {0xFF, 0x10}, {0xFF, 0x11}, {0xFF, 0x12}, {0xFF, 0x13}, /* 0xB0-0xB3 */ + {0xFF, 0x14}, {0xFF, 0x15}, {0xFF, 0x16}, {0xFF, 0x17}, /* 0xB4-0xB7 */ + {0xFF, 0x18}, {0xFF, 0x19}, {0xFF, 0x1A}, {0xFF, 0x1B}, /* 0xB8-0xBB */ + {0xFF, 0x1C}, {0xFF, 0x1D}, {0xFF, 0x1E}, {0xFF, 0x1F}, /* 0xBC-0xBF */ + {0xFF, 0x20}, {0xFF, 0x21}, {0xFF, 0x22}, {0xFF, 0x23}, /* 0xC0-0xC3 */ + {0xFF, 0x24}, {0xFF, 0x25}, {0xFF, 0x26}, {0xFF, 0x27}, /* 0xC4-0xC7 */ + {0xFF, 0x28}, {0xFF, 0x29}, {0xFF, 0x2A}, {0xFF, 0x2B}, /* 0xC8-0xCB */ + {0xFF, 0x2C}, {0xFF, 0x2D}, {0xFF, 0x2E}, {0xFF, 0x2F}, /* 0xCC-0xCF */ + {0xFF, 0x30}, {0xFF, 0x31}, {0xFF, 0x32}, {0xFF, 0x33}, /* 0xD0-0xD3 */ + {0xFF, 0x34}, {0xFF, 0x35}, {0xFF, 0x36}, {0xFF, 0x37}, /* 0xD4-0xD7 */ + {0xFF, 0x38}, {0xFF, 0x39}, {0xFF, 0x3A}, {0xFF, 0x3B}, /* 0xD8-0xDB */ + {0xFF, 0xE6}, {0xFF, 0x3D}, {0xFF, 0x3E}, {0xFF, 0x3F}, /* 0xDC-0xDF */ + {0xFF, 0x40}, {0xFF, 0x41}, {0xFF, 0x42}, {0xFF, 0x43}, /* 0xE0-0xE3 */ + {0xFF, 0x44}, {0xFF, 0x45}, {0xFF, 0x46}, {0xFF, 0x47}, /* 0xE4-0xE7 */ + {0xFF, 0x48}, {0xFF, 0x49}, {0xFF, 0x4A}, {0xFF, 0x4B}, /* 0xE8-0xEB */ + {0xFF, 0x4C}, {0xFF, 0x4D}, {0xFF, 0x4E}, {0xFF, 0x4F}, /* 0xEC-0xEF */ + {0xFF, 0x50}, {0xFF, 0x51}, {0xFF, 0x52}, {0xFF, 0x53}, /* 0xF0-0xF3 */ + {0xFF, 0x54}, {0xFF, 0x55}, {0xFF, 0x56}, {0xFF, 0x57}, /* 0xF4-0xF7 */ + {0xFF, 0x58}, {0xFF, 0x59}, {0xFF, 0x5A}, {0xFF, 0x5B}, /* 0xF8-0xFB */ + {0xFF, 0x5C}, {0xFF, 0x5D}, {0xFF, 0xE3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xC9, 0xDE}, {0xC9, 0xDF}, {0xC9, 0xE1}, /* 0x40-0x43 */ + {0xC9, 0xE3}, {0xC9, 0xE5}, {0xC9, 0xE6}, {0xC9, 0xE8}, /* 0x44-0x47 */ + {0xC9, 0xE9}, {0xC9, 0xEA}, {0xC9, 0xEB}, {0xC9, 0xEE}, /* 0x48-0x4B */ + {0xC9, 0xF2}, {0xC9, 0xF3}, {0xC9, 0xF4}, {0xC9, 0xF5}, /* 0x4C-0x4F */ + {0xC9, 0xF6}, {0xC9, 0xF7}, {0xC9, 0xFA}, {0xC9, 0xFB}, /* 0x50-0x53 */ + {0xC9, 0xFD}, {0xC9, 0xFE}, {0xC9, 0xFF}, {0xCA, 0x01}, /* 0x54-0x57 */ + {0xCA, 0x02}, {0xCA, 0x03}, {0xCA, 0x04}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCA, 0x05}, {0xCA, 0x06}, {0xCA, 0x07}, /* 0x60-0x63 */ + {0xCA, 0x0A}, {0xCA, 0x0E}, {0xCA, 0x0F}, {0xCA, 0x10}, /* 0x64-0x67 */ + {0xCA, 0x11}, {0xCA, 0x12}, {0xCA, 0x13}, {0xCA, 0x15}, /* 0x68-0x6B */ + {0xCA, 0x16}, {0xCA, 0x17}, {0xCA, 0x19}, {0xCA, 0x1A}, /* 0x6C-0x6F */ + {0xCA, 0x1B}, {0xCA, 0x1C}, {0xCA, 0x1D}, {0xCA, 0x1E}, /* 0x70-0x73 */ + {0xCA, 0x1F}, {0xCA, 0x20}, {0xCA, 0x21}, {0xCA, 0x22}, /* 0x74-0x77 */ + {0xCA, 0x23}, {0xCA, 0x24}, {0xCA, 0x25}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCA, 0x26}, {0xCA, 0x27}, {0xCA, 0x28}, /* 0x80-0x83 */ + {0xCA, 0x2A}, {0xCA, 0x2B}, {0xCA, 0x2C}, {0xCA, 0x2D}, /* 0x84-0x87 */ + {0xCA, 0x2E}, {0xCA, 0x2F}, {0xCA, 0x30}, {0xCA, 0x31}, /* 0x88-0x8B */ + {0xCA, 0x32}, {0xCA, 0x33}, {0xCA, 0x34}, {0xCA, 0x35}, /* 0x8C-0x8F */ + {0xCA, 0x36}, {0xCA, 0x37}, {0xCA, 0x38}, {0xCA, 0x39}, /* 0x90-0x93 */ + {0xCA, 0x3A}, {0xCA, 0x3B}, {0xCA, 0x3C}, {0xCA, 0x3D}, /* 0x94-0x97 */ + {0xCA, 0x3E}, {0xCA, 0x3F}, {0xCA, 0x40}, {0xCA, 0x41}, /* 0x98-0x9B */ + {0xCA, 0x42}, {0xCA, 0x43}, {0xCA, 0x44}, {0xCA, 0x45}, /* 0x9C-0x9F */ + {0xCA, 0x46}, {0x31, 0x31}, {0x31, 0x32}, {0x31, 0x33}, /* 0xA0-0xA3 */ + {0x31, 0x34}, {0x31, 0x35}, {0x31, 0x36}, {0x31, 0x37}, /* 0xA4-0xA7 */ + {0x31, 0x38}, {0x31, 0x39}, {0x31, 0x3A}, {0x31, 0x3B}, /* 0xA8-0xAB */ + {0x31, 0x3C}, {0x31, 0x3D}, {0x31, 0x3E}, {0x31, 0x3F}, /* 0xAC-0xAF */ + {0x31, 0x40}, {0x31, 0x41}, {0x31, 0x42}, {0x31, 0x43}, /* 0xB0-0xB3 */ + {0x31, 0x44}, {0x31, 0x45}, {0x31, 0x46}, {0x31, 0x47}, /* 0xB4-0xB7 */ + {0x31, 0x48}, {0x31, 0x49}, {0x31, 0x4A}, {0x31, 0x4B}, /* 0xB8-0xBB */ + {0x31, 0x4C}, {0x31, 0x4D}, {0x31, 0x4E}, {0x31, 0x4F}, /* 0xBC-0xBF */ + {0x31, 0x50}, {0x31, 0x51}, {0x31, 0x52}, {0x31, 0x53}, /* 0xC0-0xC3 */ + {0x31, 0x54}, {0x31, 0x55}, {0x31, 0x56}, {0x31, 0x57}, /* 0xC4-0xC7 */ + {0x31, 0x58}, {0x31, 0x59}, {0x31, 0x5A}, {0x31, 0x5B}, /* 0xC8-0xCB */ + {0x31, 0x5C}, {0x31, 0x5D}, {0x31, 0x5E}, {0x31, 0x5F}, /* 0xCC-0xCF */ + {0x31, 0x60}, {0x31, 0x61}, {0x31, 0x62}, {0x31, 0x63}, /* 0xD0-0xD3 */ + {0x31, 0x64}, {0x31, 0x65}, {0x31, 0x66}, {0x31, 0x67}, /* 0xD4-0xD7 */ + {0x31, 0x68}, {0x31, 0x69}, {0x31, 0x6A}, {0x31, 0x6B}, /* 0xD8-0xDB */ + {0x31, 0x6C}, {0x31, 0x6D}, {0x31, 0x6E}, {0x31, 0x6F}, /* 0xDC-0xDF */ + {0x31, 0x70}, {0x31, 0x71}, {0x31, 0x72}, {0x31, 0x73}, /* 0xE0-0xE3 */ + {0x31, 0x74}, {0x31, 0x75}, {0x31, 0x76}, {0x31, 0x77}, /* 0xE4-0xE7 */ + {0x31, 0x78}, {0x31, 0x79}, {0x31, 0x7A}, {0x31, 0x7B}, /* 0xE8-0xEB */ + {0x31, 0x7C}, {0x31, 0x7D}, {0x31, 0x7E}, {0x31, 0x7F}, /* 0xEC-0xEF */ + {0x31, 0x80}, {0x31, 0x81}, {0x31, 0x82}, {0x31, 0x83}, /* 0xF0-0xF3 */ + {0x31, 0x84}, {0x31, 0x85}, {0x31, 0x86}, {0x31, 0x87}, /* 0xF4-0xF7 */ + {0x31, 0x88}, {0x31, 0x89}, {0x31, 0x8A}, {0x31, 0x8B}, /* 0xF8-0xFB */ + {0x31, 0x8C}, {0x31, 0x8D}, {0x31, 0x8E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCA, 0x47}, {0xCA, 0x48}, {0xCA, 0x49}, /* 0x40-0x43 */ + {0xCA, 0x4A}, {0xCA, 0x4B}, {0xCA, 0x4E}, {0xCA, 0x4F}, /* 0x44-0x47 */ + {0xCA, 0x51}, {0xCA, 0x52}, {0xCA, 0x53}, {0xCA, 0x55}, /* 0x48-0x4B */ + {0xCA, 0x56}, {0xCA, 0x57}, {0xCA, 0x58}, {0xCA, 0x59}, /* 0x4C-0x4F */ + {0xCA, 0x5A}, {0xCA, 0x5B}, {0xCA, 0x5E}, {0xCA, 0x62}, /* 0x50-0x53 */ + {0xCA, 0x63}, {0xCA, 0x64}, {0xCA, 0x65}, {0xCA, 0x66}, /* 0x54-0x57 */ + {0xCA, 0x67}, {0xCA, 0x69}, {0xCA, 0x6A}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCA, 0x6B}, {0xCA, 0x6C}, {0xCA, 0x6D}, /* 0x60-0x63 */ + {0xCA, 0x6E}, {0xCA, 0x6F}, {0xCA, 0x70}, {0xCA, 0x71}, /* 0x64-0x67 */ + {0xCA, 0x72}, {0xCA, 0x73}, {0xCA, 0x74}, {0xCA, 0x75}, /* 0x68-0x6B */ + {0xCA, 0x76}, {0xCA, 0x77}, {0xCA, 0x78}, {0xCA, 0x79}, /* 0x6C-0x6F */ + {0xCA, 0x7A}, {0xCA, 0x7B}, {0xCA, 0x7C}, {0xCA, 0x7E}, /* 0x70-0x73 */ + {0xCA, 0x7F}, {0xCA, 0x80}, {0xCA, 0x81}, {0xCA, 0x82}, /* 0x74-0x77 */ + {0xCA, 0x83}, {0xCA, 0x85}, {0xCA, 0x86}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCA, 0x87}, {0xCA, 0x88}, {0xCA, 0x89}, /* 0x80-0x83 */ + {0xCA, 0x8A}, {0xCA, 0x8B}, {0xCA, 0x8C}, {0xCA, 0x8D}, /* 0x84-0x87 */ + {0xCA, 0x8E}, {0xCA, 0x8F}, {0xCA, 0x90}, {0xCA, 0x91}, /* 0x88-0x8B */ + {0xCA, 0x92}, {0xCA, 0x93}, {0xCA, 0x94}, {0xCA, 0x95}, /* 0x8C-0x8F */ + {0xCA, 0x96}, {0xCA, 0x97}, {0xCA, 0x99}, {0xCA, 0x9A}, /* 0x90-0x93 */ + {0xCA, 0x9B}, {0xCA, 0x9C}, {0xCA, 0x9D}, {0xCA, 0x9E}, /* 0x94-0x97 */ + {0xCA, 0x9F}, {0xCA, 0xA0}, {0xCA, 0xA1}, {0xCA, 0xA2}, /* 0x98-0x9B */ + {0xCA, 0xA3}, {0xCA, 0xA4}, {0xCA, 0xA5}, {0xCA, 0xA6}, /* 0x9C-0x9F */ + {0xCA, 0xA7}, {0x21, 0x70}, {0x21, 0x71}, {0x21, 0x72}, /* 0xA0-0xA3 */ + {0x21, 0x73}, {0x21, 0x74}, {0x21, 0x75}, {0x21, 0x76}, /* 0xA4-0xA7 */ + {0x21, 0x77}, {0x21, 0x78}, {0x21, 0x79}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x21, 0x60}, {0x21, 0x61}, {0x21, 0x62}, {0x21, 0x63}, /* 0xB0-0xB3 */ + {0x21, 0x64}, {0x21, 0x65}, {0x21, 0x66}, {0x21, 0x67}, /* 0xB4-0xB7 */ + {0x21, 0x68}, {0x21, 0x69}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x03, 0x91}, {0x03, 0x92}, {0x03, 0x93}, /* 0xC0-0xC3 */ + {0x03, 0x94}, {0x03, 0x95}, {0x03, 0x96}, {0x03, 0x97}, /* 0xC4-0xC7 */ + {0x03, 0x98}, {0x03, 0x99}, {0x03, 0x9A}, {0x03, 0x9B}, /* 0xC8-0xCB */ + {0x03, 0x9C}, {0x03, 0x9D}, {0x03, 0x9E}, {0x03, 0x9F}, /* 0xCC-0xCF */ + {0x03, 0xA0}, {0x03, 0xA1}, {0x03, 0xA3}, {0x03, 0xA4}, /* 0xD0-0xD3 */ + {0x03, 0xA5}, {0x03, 0xA6}, {0x03, 0xA7}, {0x03, 0xA8}, /* 0xD4-0xD7 */ + {0x03, 0xA9}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x03, 0xB1}, {0x03, 0xB2}, {0x03, 0xB3}, /* 0xE0-0xE3 */ + {0x03, 0xB4}, {0x03, 0xB5}, {0x03, 0xB6}, {0x03, 0xB7}, /* 0xE4-0xE7 */ + {0x03, 0xB8}, {0x03, 0xB9}, {0x03, 0xBA}, {0x03, 0xBB}, /* 0xE8-0xEB */ + {0x03, 0xBC}, {0x03, 0xBD}, {0x03, 0xBE}, {0x03, 0xBF}, /* 0xEC-0xEF */ + {0x03, 0xC0}, {0x03, 0xC1}, {0x03, 0xC3}, {0x03, 0xC4}, /* 0xF0-0xF3 */ + {0x03, 0xC5}, {0x03, 0xC6}, {0x03, 0xC7}, {0x03, 0xC8}, /* 0xF4-0xF7 */ + {0x03, 0xC9}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCA, 0xA8}, {0xCA, 0xA9}, {0xCA, 0xAA}, /* 0x40-0x43 */ + {0xCA, 0xAB}, {0xCA, 0xAC}, {0xCA, 0xAD}, {0xCA, 0xAE}, /* 0x44-0x47 */ + {0xCA, 0xAF}, {0xCA, 0xB0}, {0xCA, 0xB1}, {0xCA, 0xB2}, /* 0x48-0x4B */ + {0xCA, 0xB3}, {0xCA, 0xB4}, {0xCA, 0xB5}, {0xCA, 0xB6}, /* 0x4C-0x4F */ + {0xCA, 0xB7}, {0xCA, 0xB8}, {0xCA, 0xB9}, {0xCA, 0xBA}, /* 0x50-0x53 */ + {0xCA, 0xBB}, {0xCA, 0xBE}, {0xCA, 0xBF}, {0xCA, 0xC1}, /* 0x54-0x57 */ + {0xCA, 0xC2}, {0xCA, 0xC3}, {0xCA, 0xC5}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCA, 0xC6}, {0xCA, 0xC7}, {0xCA, 0xC8}, /* 0x60-0x63 */ + {0xCA, 0xC9}, {0xCA, 0xCA}, {0xCA, 0xCB}, {0xCA, 0xCE}, /* 0x64-0x67 */ + {0xCA, 0xD0}, {0xCA, 0xD2}, {0xCA, 0xD4}, {0xCA, 0xD5}, /* 0x68-0x6B */ + {0xCA, 0xD6}, {0xCA, 0xD7}, {0xCA, 0xDA}, {0xCA, 0xDB}, /* 0x6C-0x6F */ + {0xCA, 0xDC}, {0xCA, 0xDD}, {0xCA, 0xDE}, {0xCA, 0xDF}, /* 0x70-0x73 */ + {0xCA, 0xE1}, {0xCA, 0xE2}, {0xCA, 0xE3}, {0xCA, 0xE4}, /* 0x74-0x77 */ + {0xCA, 0xE5}, {0xCA, 0xE6}, {0xCA, 0xE7}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCA, 0xE8}, {0xCA, 0xE9}, {0xCA, 0xEA}, /* 0x80-0x83 */ + {0xCA, 0xEB}, {0xCA, 0xED}, {0xCA, 0xEE}, {0xCA, 0xEF}, /* 0x84-0x87 */ + {0xCA, 0xF0}, {0xCA, 0xF1}, {0xCA, 0xF2}, {0xCA, 0xF3}, /* 0x88-0x8B */ + {0xCA, 0xF5}, {0xCA, 0xF6}, {0xCA, 0xF7}, {0xCA, 0xF8}, /* 0x8C-0x8F */ + {0xCA, 0xF9}, {0xCA, 0xFA}, {0xCA, 0xFB}, {0xCA, 0xFC}, /* 0x90-0x93 */ + {0xCA, 0xFD}, {0xCA, 0xFE}, {0xCA, 0xFF}, {0xCB, 0x00}, /* 0x94-0x97 */ + {0xCB, 0x01}, {0xCB, 0x02}, {0xCB, 0x03}, {0xCB, 0x04}, /* 0x98-0x9B */ + {0xCB, 0x05}, {0xCB, 0x06}, {0xCB, 0x07}, {0xCB, 0x09}, /* 0x9C-0x9F */ + {0xCB, 0x0A}, {0x25, 0x00}, {0x25, 0x02}, {0x25, 0x0C}, /* 0xA0-0xA3 */ + {0x25, 0x10}, {0x25, 0x18}, {0x25, 0x14}, {0x25, 0x1C}, /* 0xA4-0xA7 */ + {0x25, 0x2C}, {0x25, 0x24}, {0x25, 0x34}, {0x25, 0x3C}, /* 0xA8-0xAB */ + {0x25, 0x01}, {0x25, 0x03}, {0x25, 0x0F}, {0x25, 0x13}, /* 0xAC-0xAF */ + {0x25, 0x1B}, {0x25, 0x17}, {0x25, 0x23}, {0x25, 0x33}, /* 0xB0-0xB3 */ + {0x25, 0x2B}, {0x25, 0x3B}, {0x25, 0x4B}, {0x25, 0x20}, /* 0xB4-0xB7 */ + {0x25, 0x2F}, {0x25, 0x28}, {0x25, 0x37}, {0x25, 0x3F}, /* 0xB8-0xBB */ + {0x25, 0x1D}, {0x25, 0x30}, {0x25, 0x25}, {0x25, 0x38}, /* 0xBC-0xBF */ + {0x25, 0x42}, {0x25, 0x12}, {0x25, 0x11}, {0x25, 0x1A}, /* 0xC0-0xC3 */ + {0x25, 0x19}, {0x25, 0x16}, {0x25, 0x15}, {0x25, 0x0E}, /* 0xC4-0xC7 */ + {0x25, 0x0D}, {0x25, 0x1E}, {0x25, 0x1F}, {0x25, 0x21}, /* 0xC8-0xCB */ + {0x25, 0x22}, {0x25, 0x26}, {0x25, 0x27}, {0x25, 0x29}, /* 0xCC-0xCF */ + {0x25, 0x2A}, {0x25, 0x2D}, {0x25, 0x2E}, {0x25, 0x31}, /* 0xD0-0xD3 */ + {0x25, 0x32}, {0x25, 0x35}, {0x25, 0x36}, {0x25, 0x39}, /* 0xD4-0xD7 */ + {0x25, 0x3A}, {0x25, 0x3D}, {0x25, 0x3E}, {0x25, 0x40}, /* 0xD8-0xDB */ + {0x25, 0x41}, {0x25, 0x43}, {0x25, 0x44}, {0x25, 0x45}, /* 0xDC-0xDF */ + {0x25, 0x46}, {0x25, 0x47}, {0x25, 0x48}, {0x25, 0x49}, /* 0xE0-0xE3 */ + {0x25, 0x4A}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCB, 0x0B}, {0xCB, 0x0C}, {0xCB, 0x0D}, /* 0x40-0x43 */ + {0xCB, 0x0E}, {0xCB, 0x0F}, {0xCB, 0x11}, {0xCB, 0x12}, /* 0x44-0x47 */ + {0xCB, 0x13}, {0xCB, 0x15}, {0xCB, 0x16}, {0xCB, 0x17}, /* 0x48-0x4B */ + {0xCB, 0x19}, {0xCB, 0x1A}, {0xCB, 0x1B}, {0xCB, 0x1C}, /* 0x4C-0x4F */ + {0xCB, 0x1D}, {0xCB, 0x1E}, {0xCB, 0x1F}, {0xCB, 0x22}, /* 0x50-0x53 */ + {0xCB, 0x23}, {0xCB, 0x24}, {0xCB, 0x25}, {0xCB, 0x26}, /* 0x54-0x57 */ + {0xCB, 0x27}, {0xCB, 0x28}, {0xCB, 0x29}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCB, 0x2A}, {0xCB, 0x2B}, {0xCB, 0x2C}, /* 0x60-0x63 */ + {0xCB, 0x2D}, {0xCB, 0x2E}, {0xCB, 0x2F}, {0xCB, 0x30}, /* 0x64-0x67 */ + {0xCB, 0x31}, {0xCB, 0x32}, {0xCB, 0x33}, {0xCB, 0x34}, /* 0x68-0x6B */ + {0xCB, 0x35}, {0xCB, 0x36}, {0xCB, 0x37}, {0xCB, 0x38}, /* 0x6C-0x6F */ + {0xCB, 0x39}, {0xCB, 0x3A}, {0xCB, 0x3B}, {0xCB, 0x3C}, /* 0x70-0x73 */ + {0xCB, 0x3D}, {0xCB, 0x3E}, {0xCB, 0x3F}, {0xCB, 0x40}, /* 0x74-0x77 */ + {0xCB, 0x42}, {0xCB, 0x43}, {0xCB, 0x44}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCB, 0x45}, {0xCB, 0x46}, {0xCB, 0x47}, /* 0x80-0x83 */ + {0xCB, 0x4A}, {0xCB, 0x4B}, {0xCB, 0x4D}, {0xCB, 0x4E}, /* 0x84-0x87 */ + {0xCB, 0x4F}, {0xCB, 0x51}, {0xCB, 0x52}, {0xCB, 0x53}, /* 0x88-0x8B */ + {0xCB, 0x54}, {0xCB, 0x55}, {0xCB, 0x56}, {0xCB, 0x57}, /* 0x8C-0x8F */ + {0xCB, 0x5A}, {0xCB, 0x5B}, {0xCB, 0x5C}, {0xCB, 0x5E}, /* 0x90-0x93 */ + {0xCB, 0x5F}, {0xCB, 0x60}, {0xCB, 0x61}, {0xCB, 0x62}, /* 0x94-0x97 */ + {0xCB, 0x63}, {0xCB, 0x65}, {0xCB, 0x66}, {0xCB, 0x67}, /* 0x98-0x9B */ + {0xCB, 0x68}, {0xCB, 0x69}, {0xCB, 0x6A}, {0xCB, 0x6B}, /* 0x9C-0x9F */ + {0xCB, 0x6C}, {0x33, 0x95}, {0x33, 0x96}, {0x33, 0x97}, /* 0xA0-0xA3 */ + {0x21, 0x13}, {0x33, 0x98}, {0x33, 0xC4}, {0x33, 0xA3}, /* 0xA4-0xA7 */ + {0x33, 0xA4}, {0x33, 0xA5}, {0x33, 0xA6}, {0x33, 0x99}, /* 0xA8-0xAB */ + {0x33, 0x9A}, {0x33, 0x9B}, {0x33, 0x9C}, {0x33, 0x9D}, /* 0xAC-0xAF */ + {0x33, 0x9E}, {0x33, 0x9F}, {0x33, 0xA0}, {0x33, 0xA1}, /* 0xB0-0xB3 */ + {0x33, 0xA2}, {0x33, 0xCA}, {0x33, 0x8D}, {0x33, 0x8E}, /* 0xB4-0xB7 */ + {0x33, 0x8F}, {0x33, 0xCF}, {0x33, 0x88}, {0x33, 0x89}, /* 0xB8-0xBB */ + {0x33, 0xC8}, {0x33, 0xA7}, {0x33, 0xA8}, {0x33, 0xB0}, /* 0xBC-0xBF */ + {0x33, 0xB1}, {0x33, 0xB2}, {0x33, 0xB3}, {0x33, 0xB4}, /* 0xC0-0xC3 */ + {0x33, 0xB5}, {0x33, 0xB6}, {0x33, 0xB7}, {0x33, 0xB8}, /* 0xC4-0xC7 */ + {0x33, 0xB9}, {0x33, 0x80}, {0x33, 0x81}, {0x33, 0x82}, /* 0xC8-0xCB */ + {0x33, 0x83}, {0x33, 0x84}, {0x33, 0xBA}, {0x33, 0xBB}, /* 0xCC-0xCF */ + {0x33, 0xBC}, {0x33, 0xBD}, {0x33, 0xBE}, {0x33, 0xBF}, /* 0xD0-0xD3 */ + {0x33, 0x90}, {0x33, 0x91}, {0x33, 0x92}, {0x33, 0x93}, /* 0xD4-0xD7 */ + {0x33, 0x94}, {0x21, 0x26}, {0x33, 0xC0}, {0x33, 0xC1}, /* 0xD8-0xDB */ + {0x33, 0x8A}, {0x33, 0x8B}, {0x33, 0x8C}, {0x33, 0xD6}, /* 0xDC-0xDF */ + {0x33, 0xC5}, {0x33, 0xAD}, {0x33, 0xAE}, {0x33, 0xAF}, /* 0xE0-0xE3 */ + {0x33, 0xDB}, {0x33, 0xA9}, {0x33, 0xAA}, {0x33, 0xAB}, /* 0xE4-0xE7 */ + {0x33, 0xAC}, {0x33, 0xDD}, {0x33, 0xD0}, {0x33, 0xD3}, /* 0xE8-0xEB */ + {0x33, 0xC3}, {0x33, 0xC9}, {0x33, 0xDC}, {0x33, 0xC6}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCB, 0x6D}, {0xCB, 0x6E}, {0xCB, 0x6F}, /* 0x40-0x43 */ + {0xCB, 0x70}, {0xCB, 0x71}, {0xCB, 0x72}, {0xCB, 0x73}, /* 0x44-0x47 */ + {0xCB, 0x74}, {0xCB, 0x75}, {0xCB, 0x76}, {0xCB, 0x77}, /* 0x48-0x4B */ + {0xCB, 0x7A}, {0xCB, 0x7B}, {0xCB, 0x7C}, {0xCB, 0x7D}, /* 0x4C-0x4F */ + {0xCB, 0x7E}, {0xCB, 0x7F}, {0xCB, 0x80}, {0xCB, 0x81}, /* 0x50-0x53 */ + {0xCB, 0x82}, {0xCB, 0x83}, {0xCB, 0x84}, {0xCB, 0x85}, /* 0x54-0x57 */ + {0xCB, 0x86}, {0xCB, 0x87}, {0xCB, 0x88}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCB, 0x89}, {0xCB, 0x8A}, {0xCB, 0x8B}, /* 0x60-0x63 */ + {0xCB, 0x8C}, {0xCB, 0x8D}, {0xCB, 0x8E}, {0xCB, 0x8F}, /* 0x64-0x67 */ + {0xCB, 0x90}, {0xCB, 0x91}, {0xCB, 0x92}, {0xCB, 0x93}, /* 0x68-0x6B */ + {0xCB, 0x94}, {0xCB, 0x95}, {0xCB, 0x96}, {0xCB, 0x97}, /* 0x6C-0x6F */ + {0xCB, 0x98}, {0xCB, 0x99}, {0xCB, 0x9A}, {0xCB, 0x9B}, /* 0x70-0x73 */ + {0xCB, 0x9D}, {0xCB, 0x9E}, {0xCB, 0x9F}, {0xCB, 0xA0}, /* 0x74-0x77 */ + {0xCB, 0xA1}, {0xCB, 0xA2}, {0xCB, 0xA3}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCB, 0xA4}, {0xCB, 0xA5}, {0xCB, 0xA6}, /* 0x80-0x83 */ + {0xCB, 0xA7}, {0xCB, 0xA8}, {0xCB, 0xA9}, {0xCB, 0xAA}, /* 0x84-0x87 */ + {0xCB, 0xAB}, {0xCB, 0xAC}, {0xCB, 0xAD}, {0xCB, 0xAE}, /* 0x88-0x8B */ + {0xCB, 0xAF}, {0xCB, 0xB0}, {0xCB, 0xB1}, {0xCB, 0xB2}, /* 0x8C-0x8F */ + {0xCB, 0xB3}, {0xCB, 0xB4}, {0xCB, 0xB5}, {0xCB, 0xB6}, /* 0x90-0x93 */ + {0xCB, 0xB7}, {0xCB, 0xB9}, {0xCB, 0xBA}, {0xCB, 0xBB}, /* 0x94-0x97 */ + {0xCB, 0xBC}, {0xCB, 0xBD}, {0xCB, 0xBE}, {0xCB, 0xBF}, /* 0x98-0x9B */ + {0xCB, 0xC0}, {0xCB, 0xC1}, {0xCB, 0xC2}, {0xCB, 0xC3}, /* 0x9C-0x9F */ + {0xCB, 0xC4}, {0x00, 0xC6}, {0x00, 0xD0}, {0x00, 0xAA}, /* 0xA0-0xA3 */ + {0x01, 0x26}, {0x00, 0x3F}, {0x01, 0x32}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x01, 0x3F}, {0x01, 0x41}, {0x00, 0xD8}, {0x01, 0x52}, /* 0xA8-0xAB */ + {0x00, 0xBA}, {0x00, 0xDE}, {0x01, 0x66}, {0x01, 0x4A}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x32, 0x60}, {0x32, 0x61}, {0x32, 0x62}, /* 0xB0-0xB3 */ + {0x32, 0x63}, {0x32, 0x64}, {0x32, 0x65}, {0x32, 0x66}, /* 0xB4-0xB7 */ + {0x32, 0x67}, {0x32, 0x68}, {0x32, 0x69}, {0x32, 0x6A}, /* 0xB8-0xBB */ + {0x32, 0x6B}, {0x32, 0x6C}, {0x32, 0x6D}, {0x32, 0x6E}, /* 0xBC-0xBF */ + {0x32, 0x6F}, {0x32, 0x70}, {0x32, 0x71}, {0x32, 0x72}, /* 0xC0-0xC3 */ + {0x32, 0x73}, {0x32, 0x74}, {0x32, 0x75}, {0x32, 0x76}, /* 0xC4-0xC7 */ + {0x32, 0x77}, {0x32, 0x78}, {0x32, 0x79}, {0x32, 0x7A}, /* 0xC8-0xCB */ + {0x32, 0x7B}, {0x24, 0xD0}, {0x24, 0xD1}, {0x24, 0xD2}, /* 0xCC-0xCF */ + {0x24, 0xD3}, {0x24, 0xD4}, {0x24, 0xD5}, {0x24, 0xD6}, /* 0xD0-0xD3 */ + {0x24, 0xD7}, {0x24, 0xD8}, {0x24, 0xD9}, {0x24, 0xDA}, /* 0xD4-0xD7 */ + {0x24, 0xDB}, {0x24, 0xDC}, {0x24, 0xDD}, {0x24, 0xDE}, /* 0xD8-0xDB */ + {0x24, 0xDF}, {0x24, 0xE0}, {0x24, 0xE1}, {0x24, 0xE2}, /* 0xDC-0xDF */ + {0x24, 0xE3}, {0x24, 0xE4}, {0x24, 0xE5}, {0x24, 0xE6}, /* 0xE0-0xE3 */ + {0x24, 0xE7}, {0x24, 0xE8}, {0x24, 0xE9}, {0x24, 0x60}, /* 0xE4-0xE7 */ + {0x24, 0x61}, {0x24, 0x62}, {0x24, 0x63}, {0x24, 0x64}, /* 0xE8-0xEB */ + {0x24, 0x65}, {0x24, 0x66}, {0x24, 0x67}, {0x24, 0x68}, /* 0xEC-0xEF */ + {0x24, 0x69}, {0x24, 0x6A}, {0x24, 0x6B}, {0x24, 0x6C}, /* 0xF0-0xF3 */ + {0x24, 0x6D}, {0x24, 0x6E}, {0x00, 0xBD}, {0x21, 0x53}, /* 0xF4-0xF7 */ + {0x21, 0x54}, {0x00, 0xBC}, {0x00, 0xBE}, {0x21, 0x5B}, /* 0xF8-0xFB */ + {0x21, 0x5C}, {0x21, 0x5D}, {0x21, 0x5E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCB, 0xC5}, {0xCB, 0xC6}, {0xCB, 0xC7}, /* 0x40-0x43 */ + {0xCB, 0xC8}, {0xCB, 0xC9}, {0xCB, 0xCA}, {0xCB, 0xCB}, /* 0x44-0x47 */ + {0xCB, 0xCC}, {0xCB, 0xCD}, {0xCB, 0xCE}, {0xCB, 0xCF}, /* 0x48-0x4B */ + {0xCB, 0xD0}, {0xCB, 0xD1}, {0xCB, 0xD2}, {0xCB, 0xD3}, /* 0x4C-0x4F */ + {0xCB, 0xD5}, {0xCB, 0xD6}, {0xCB, 0xD7}, {0xCB, 0xD8}, /* 0x50-0x53 */ + {0xCB, 0xD9}, {0xCB, 0xDA}, {0xCB, 0xDB}, {0xCB, 0xDC}, /* 0x54-0x57 */ + {0xCB, 0xDD}, {0xCB, 0xDE}, {0xCB, 0xDF}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCB, 0xE0}, {0xCB, 0xE1}, {0xCB, 0xE2}, /* 0x60-0x63 */ + {0xCB, 0xE3}, {0xCB, 0xE5}, {0xCB, 0xE6}, {0xCB, 0xE8}, /* 0x64-0x67 */ + {0xCB, 0xEA}, {0xCB, 0xEB}, {0xCB, 0xEC}, {0xCB, 0xED}, /* 0x68-0x6B */ + {0xCB, 0xEE}, {0xCB, 0xEF}, {0xCB, 0xF0}, {0xCB, 0xF1}, /* 0x6C-0x6F */ + {0xCB, 0xF2}, {0xCB, 0xF3}, {0xCB, 0xF4}, {0xCB, 0xF5}, /* 0x70-0x73 */ + {0xCB, 0xF6}, {0xCB, 0xF7}, {0xCB, 0xF8}, {0xCB, 0xF9}, /* 0x74-0x77 */ + {0xCB, 0xFA}, {0xCB, 0xFB}, {0xCB, 0xFC}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCB, 0xFD}, {0xCB, 0xFE}, {0xCB, 0xFF}, /* 0x80-0x83 */ + {0xCC, 0x00}, {0xCC, 0x01}, {0xCC, 0x02}, {0xCC, 0x03}, /* 0x84-0x87 */ + {0xCC, 0x04}, {0xCC, 0x05}, {0xCC, 0x06}, {0xCC, 0x07}, /* 0x88-0x8B */ + {0xCC, 0x08}, {0xCC, 0x09}, {0xCC, 0x0A}, {0xCC, 0x0B}, /* 0x8C-0x8F */ + {0xCC, 0x0E}, {0xCC, 0x0F}, {0xCC, 0x11}, {0xCC, 0x12}, /* 0x90-0x93 */ + {0xCC, 0x13}, {0xCC, 0x15}, {0xCC, 0x16}, {0xCC, 0x17}, /* 0x94-0x97 */ + {0xCC, 0x18}, {0xCC, 0x19}, {0xCC, 0x1A}, {0xCC, 0x1B}, /* 0x98-0x9B */ + {0xCC, 0x1E}, {0xCC, 0x1F}, {0xCC, 0x20}, {0xCC, 0x23}, /* 0x9C-0x9F */ + {0xCC, 0x24}, {0x00, 0xE6}, {0x01, 0x11}, {0x00, 0xF0}, /* 0xA0-0xA3 */ + {0x01, 0x27}, {0x01, 0x31}, {0x01, 0x33}, {0x01, 0x38}, /* 0xA4-0xA7 */ + {0x01, 0x40}, {0x01, 0x42}, {0x00, 0xF8}, {0x01, 0x53}, /* 0xA8-0xAB */ + {0x00, 0xDF}, {0x00, 0xFE}, {0x01, 0x67}, {0x01, 0x4B}, /* 0xAC-0xAF */ + {0x01, 0x49}, {0x32, 0x00}, {0x32, 0x01}, {0x32, 0x02}, /* 0xB0-0xB3 */ + {0x32, 0x03}, {0x32, 0x04}, {0x32, 0x05}, {0x32, 0x06}, /* 0xB4-0xB7 */ + {0x32, 0x07}, {0x32, 0x08}, {0x32, 0x09}, {0x32, 0x0A}, /* 0xB8-0xBB */ + {0x32, 0x0B}, {0x32, 0x0C}, {0x32, 0x0D}, {0x32, 0x0E}, /* 0xBC-0xBF */ + {0x32, 0x0F}, {0x32, 0x10}, {0x32, 0x11}, {0x32, 0x12}, /* 0xC0-0xC3 */ + {0x32, 0x13}, {0x32, 0x14}, {0x32, 0x15}, {0x32, 0x16}, /* 0xC4-0xC7 */ + {0x32, 0x17}, {0x32, 0x18}, {0x32, 0x19}, {0x32, 0x1A}, /* 0xC8-0xCB */ + {0x32, 0x1B}, {0x24, 0x9C}, {0x24, 0x9D}, {0x24, 0x9E}, /* 0xCC-0xCF */ + {0x24, 0x9F}, {0x24, 0xA0}, {0x24, 0xA1}, {0x24, 0xA2}, /* 0xD0-0xD3 */ + {0x24, 0xA3}, {0x24, 0xA4}, {0x24, 0xA5}, {0x24, 0xA6}, /* 0xD4-0xD7 */ + {0x24, 0xA7}, {0x24, 0xA8}, {0x24, 0xA9}, {0x24, 0xAA}, /* 0xD8-0xDB */ + {0x24, 0xAB}, {0x24, 0xAC}, {0x24, 0xAD}, {0x24, 0xAE}, /* 0xDC-0xDF */ + {0x24, 0xAF}, {0x24, 0xB0}, {0x24, 0xB1}, {0x24, 0xB2}, /* 0xE0-0xE3 */ + {0x24, 0xB3}, {0x24, 0xB4}, {0x24, 0xB5}, {0x24, 0x74}, /* 0xE4-0xE7 */ + {0x24, 0x75}, {0x24, 0x76}, {0x24, 0x77}, {0x24, 0x78}, /* 0xE8-0xEB */ + {0x24, 0x79}, {0x24, 0x7A}, {0x24, 0x7B}, {0x24, 0x7C}, /* 0xEC-0xEF */ + {0x24, 0x7D}, {0x24, 0x7E}, {0x24, 0x7F}, {0x24, 0x80}, /* 0xF0-0xF3 */ + {0x24, 0x81}, {0x24, 0x82}, {0x00, 0xB9}, {0x00, 0xB2}, /* 0xF4-0xF7 */ + {0x00, 0xB3}, {0x20, 0x74}, {0x20, 0x7F}, {0x20, 0x81}, /* 0xF8-0xFB */ + {0x20, 0x82}, {0x20, 0x83}, {0x20, 0x84}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCC, 0x25}, {0xCC, 0x26}, {0xCC, 0x2A}, /* 0x40-0x43 */ + {0xCC, 0x2B}, {0xCC, 0x2D}, {0xCC, 0x2F}, {0xCC, 0x31}, /* 0x44-0x47 */ + {0xCC, 0x32}, {0xCC, 0x33}, {0xCC, 0x34}, {0xCC, 0x35}, /* 0x48-0x4B */ + {0xCC, 0x36}, {0xCC, 0x37}, {0xCC, 0x3A}, {0xCC, 0x3F}, /* 0x4C-0x4F */ + {0xCC, 0x40}, {0xCC, 0x41}, {0xCC, 0x42}, {0xCC, 0x43}, /* 0x50-0x53 */ + {0xCC, 0x46}, {0xCC, 0x47}, {0xCC, 0x49}, {0xCC, 0x4A}, /* 0x54-0x57 */ + {0xCC, 0x4B}, {0xCC, 0x4D}, {0xCC, 0x4E}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCC, 0x4F}, {0xCC, 0x50}, {0xCC, 0x51}, /* 0x60-0x63 */ + {0xCC, 0x52}, {0xCC, 0x53}, {0xCC, 0x56}, {0xCC, 0x5A}, /* 0x64-0x67 */ + {0xCC, 0x5B}, {0xCC, 0x5C}, {0xCC, 0x5D}, {0xCC, 0x5E}, /* 0x68-0x6B */ + {0xCC, 0x5F}, {0xCC, 0x61}, {0xCC, 0x62}, {0xCC, 0x63}, /* 0x6C-0x6F */ + {0xCC, 0x65}, {0xCC, 0x67}, {0xCC, 0x69}, {0xCC, 0x6A}, /* 0x70-0x73 */ + {0xCC, 0x6B}, {0xCC, 0x6C}, {0xCC, 0x6D}, {0xCC, 0x6E}, /* 0x74-0x77 */ + {0xCC, 0x6F}, {0xCC, 0x71}, {0xCC, 0x72}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCC, 0x73}, {0xCC, 0x74}, {0xCC, 0x76}, /* 0x80-0x83 */ + {0xCC, 0x77}, {0xCC, 0x78}, {0xCC, 0x79}, {0xCC, 0x7A}, /* 0x84-0x87 */ + {0xCC, 0x7B}, {0xCC, 0x7C}, {0xCC, 0x7D}, {0xCC, 0x7E}, /* 0x88-0x8B */ + {0xCC, 0x7F}, {0xCC, 0x80}, {0xCC, 0x81}, {0xCC, 0x82}, /* 0x8C-0x8F */ + {0xCC, 0x83}, {0xCC, 0x84}, {0xCC, 0x85}, {0xCC, 0x86}, /* 0x90-0x93 */ + {0xCC, 0x87}, {0xCC, 0x88}, {0xCC, 0x89}, {0xCC, 0x8A}, /* 0x94-0x97 */ + {0xCC, 0x8B}, {0xCC, 0x8C}, {0xCC, 0x8D}, {0xCC, 0x8E}, /* 0x98-0x9B */ + {0xCC, 0x8F}, {0xCC, 0x90}, {0xCC, 0x91}, {0xCC, 0x92}, /* 0x9C-0x9F */ + {0xCC, 0x93}, {0x30, 0x41}, {0x30, 0x42}, {0x30, 0x43}, /* 0xA0-0xA3 */ + {0x30, 0x44}, {0x30, 0x45}, {0x30, 0x46}, {0x30, 0x47}, /* 0xA4-0xA7 */ + {0x30, 0x48}, {0x30, 0x49}, {0x30, 0x4A}, {0x30, 0x4B}, /* 0xA8-0xAB */ + {0x30, 0x4C}, {0x30, 0x4D}, {0x30, 0x4E}, {0x30, 0x4F}, /* 0xAC-0xAF */ + {0x30, 0x50}, {0x30, 0x51}, {0x30, 0x52}, {0x30, 0x53}, /* 0xB0-0xB3 */ + {0x30, 0x54}, {0x30, 0x55}, {0x30, 0x56}, {0x30, 0x57}, /* 0xB4-0xB7 */ + {0x30, 0x58}, {0x30, 0x59}, {0x30, 0x5A}, {0x30, 0x5B}, /* 0xB8-0xBB */ + {0x30, 0x5C}, {0x30, 0x5D}, {0x30, 0x5E}, {0x30, 0x5F}, /* 0xBC-0xBF */ + {0x30, 0x60}, {0x30, 0x61}, {0x30, 0x62}, {0x30, 0x63}, /* 0xC0-0xC3 */ + {0x30, 0x64}, {0x30, 0x65}, {0x30, 0x66}, {0x30, 0x67}, /* 0xC4-0xC7 */ + {0x30, 0x68}, {0x30, 0x69}, {0x30, 0x6A}, {0x30, 0x6B}, /* 0xC8-0xCB */ + {0x30, 0x6C}, {0x30, 0x6D}, {0x30, 0x6E}, {0x30, 0x6F}, /* 0xCC-0xCF */ + {0x30, 0x70}, {0x30, 0x71}, {0x30, 0x72}, {0x30, 0x73}, /* 0xD0-0xD3 */ + {0x30, 0x74}, {0x30, 0x75}, {0x30, 0x76}, {0x30, 0x77}, /* 0xD4-0xD7 */ + {0x30, 0x78}, {0x30, 0x79}, {0x30, 0x7A}, {0x30, 0x7B}, /* 0xD8-0xDB */ + {0x30, 0x7C}, {0x30, 0x7D}, {0x30, 0x7E}, {0x30, 0x7F}, /* 0xDC-0xDF */ + {0x30, 0x80}, {0x30, 0x81}, {0x30, 0x82}, {0x30, 0x83}, /* 0xE0-0xE3 */ + {0x30, 0x84}, {0x30, 0x85}, {0x30, 0x86}, {0x30, 0x87}, /* 0xE4-0xE7 */ + {0x30, 0x88}, {0x30, 0x89}, {0x30, 0x8A}, {0x30, 0x8B}, /* 0xE8-0xEB */ + {0x30, 0x8C}, {0x30, 0x8D}, {0x30, 0x8E}, {0x30, 0x8F}, /* 0xEC-0xEF */ + {0x30, 0x90}, {0x30, 0x91}, {0x30, 0x92}, {0x30, 0x93}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCC, 0x94}, {0xCC, 0x95}, {0xCC, 0x96}, /* 0x40-0x43 */ + {0xCC, 0x97}, {0xCC, 0x9A}, {0xCC, 0x9B}, {0xCC, 0x9D}, /* 0x44-0x47 */ + {0xCC, 0x9E}, {0xCC, 0x9F}, {0xCC, 0xA1}, {0xCC, 0xA2}, /* 0x48-0x4B */ + {0xCC, 0xA3}, {0xCC, 0xA4}, {0xCC, 0xA5}, {0xCC, 0xA6}, /* 0x4C-0x4F */ + {0xCC, 0xA7}, {0xCC, 0xAA}, {0xCC, 0xAE}, {0xCC, 0xAF}, /* 0x50-0x53 */ + {0xCC, 0xB0}, {0xCC, 0xB1}, {0xCC, 0xB2}, {0xCC, 0xB3}, /* 0x54-0x57 */ + {0xCC, 0xB6}, {0xCC, 0xB7}, {0xCC, 0xB9}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCC, 0xBA}, {0xCC, 0xBB}, {0xCC, 0xBD}, /* 0x60-0x63 */ + {0xCC, 0xBE}, {0xCC, 0xBF}, {0xCC, 0xC0}, {0xCC, 0xC1}, /* 0x64-0x67 */ + {0xCC, 0xC2}, {0xCC, 0xC3}, {0xCC, 0xC6}, {0xCC, 0xC8}, /* 0x68-0x6B */ + {0xCC, 0xCA}, {0xCC, 0xCB}, {0xCC, 0xCC}, {0xCC, 0xCD}, /* 0x6C-0x6F */ + {0xCC, 0xCE}, {0xCC, 0xCF}, {0xCC, 0xD1}, {0xCC, 0xD2}, /* 0x70-0x73 */ + {0xCC, 0xD3}, {0xCC, 0xD5}, {0xCC, 0xD6}, {0xCC, 0xD7}, /* 0x74-0x77 */ + {0xCC, 0xD8}, {0xCC, 0xD9}, {0xCC, 0xDA}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCC, 0xDB}, {0xCC, 0xDC}, {0xCC, 0xDD}, /* 0x80-0x83 */ + {0xCC, 0xDE}, {0xCC, 0xDF}, {0xCC, 0xE0}, {0xCC, 0xE1}, /* 0x84-0x87 */ + {0xCC, 0xE2}, {0xCC, 0xE3}, {0xCC, 0xE5}, {0xCC, 0xE6}, /* 0x88-0x8B */ + {0xCC, 0xE7}, {0xCC, 0xE8}, {0xCC, 0xE9}, {0xCC, 0xEA}, /* 0x8C-0x8F */ + {0xCC, 0xEB}, {0xCC, 0xED}, {0xCC, 0xEE}, {0xCC, 0xEF}, /* 0x90-0x93 */ + {0xCC, 0xF1}, {0xCC, 0xF2}, {0xCC, 0xF3}, {0xCC, 0xF4}, /* 0x94-0x97 */ + {0xCC, 0xF5}, {0xCC, 0xF6}, {0xCC, 0xF7}, {0xCC, 0xF8}, /* 0x98-0x9B */ + {0xCC, 0xF9}, {0xCC, 0xFA}, {0xCC, 0xFB}, {0xCC, 0xFC}, /* 0x9C-0x9F */ + {0xCC, 0xFD}, {0x30, 0xA1}, {0x30, 0xA2}, {0x30, 0xA3}, /* 0xA0-0xA3 */ + {0x30, 0xA4}, {0x30, 0xA5}, {0x30, 0xA6}, {0x30, 0xA7}, /* 0xA4-0xA7 */ + {0x30, 0xA8}, {0x30, 0xA9}, {0x30, 0xAA}, {0x30, 0xAB}, /* 0xA8-0xAB */ + {0x30, 0xAC}, {0x30, 0xAD}, {0x30, 0xAE}, {0x30, 0xAF}, /* 0xAC-0xAF */ + {0x30, 0xB0}, {0x30, 0xB1}, {0x30, 0xB2}, {0x30, 0xB3}, /* 0xB0-0xB3 */ + {0x30, 0xB4}, {0x30, 0xB5}, {0x30, 0xB6}, {0x30, 0xB7}, /* 0xB4-0xB7 */ + {0x30, 0xB8}, {0x30, 0xB9}, {0x30, 0xBA}, {0x30, 0xBB}, /* 0xB8-0xBB */ + {0x30, 0xBC}, {0x30, 0xBD}, {0x30, 0xBE}, {0x30, 0xBF}, /* 0xBC-0xBF */ + {0x30, 0xC0}, {0x30, 0xC1}, {0x30, 0xC2}, {0x30, 0xC3}, /* 0xC0-0xC3 */ + {0x30, 0xC4}, {0x30, 0xC5}, {0x30, 0xC6}, {0x30, 0xC7}, /* 0xC4-0xC7 */ + {0x30, 0xC8}, {0x30, 0xC9}, {0x30, 0xCA}, {0x30, 0xCB}, /* 0xC8-0xCB */ + {0x30, 0xCC}, {0x30, 0xCD}, {0x30, 0xCE}, {0x30, 0xCF}, /* 0xCC-0xCF */ + {0x30, 0xD0}, {0x30, 0xD1}, {0x30, 0xD2}, {0x30, 0xD3}, /* 0xD0-0xD3 */ + {0x30, 0xD4}, {0x30, 0xD5}, {0x30, 0xD6}, {0x30, 0xD7}, /* 0xD4-0xD7 */ + {0x30, 0xD8}, {0x30, 0xD9}, {0x30, 0xDA}, {0x30, 0xDB}, /* 0xD8-0xDB */ + {0x30, 0xDC}, {0x30, 0xDD}, {0x30, 0xDE}, {0x30, 0xDF}, /* 0xDC-0xDF */ + {0x30, 0xE0}, {0x30, 0xE1}, {0x30, 0xE2}, {0x30, 0xE3}, /* 0xE0-0xE3 */ + {0x30, 0xE4}, {0x30, 0xE5}, {0x30, 0xE6}, {0x30, 0xE7}, /* 0xE4-0xE7 */ + {0x30, 0xE8}, {0x30, 0xE9}, {0x30, 0xEA}, {0x30, 0xEB}, /* 0xE8-0xEB */ + {0x30, 0xEC}, {0x30, 0xED}, {0x30, 0xEE}, {0x30, 0xEF}, /* 0xEC-0xEF */ + {0x30, 0xF0}, {0x30, 0xF1}, {0x30, 0xF2}, {0x30, 0xF3}, /* 0xF0-0xF3 */ + {0x30, 0xF4}, {0x30, 0xF5}, {0x30, 0xF6}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCC, 0xFE}, {0xCC, 0xFF}, {0xCD, 0x00}, /* 0x40-0x43 */ + {0xCD, 0x02}, {0xCD, 0x03}, {0xCD, 0x04}, {0xCD, 0x05}, /* 0x44-0x47 */ + {0xCD, 0x06}, {0xCD, 0x07}, {0xCD, 0x0A}, {0xCD, 0x0B}, /* 0x48-0x4B */ + {0xCD, 0x0D}, {0xCD, 0x0E}, {0xCD, 0x0F}, {0xCD, 0x11}, /* 0x4C-0x4F */ + {0xCD, 0x12}, {0xCD, 0x13}, {0xCD, 0x14}, {0xCD, 0x15}, /* 0x50-0x53 */ + {0xCD, 0x16}, {0xCD, 0x17}, {0xCD, 0x1A}, {0xCD, 0x1C}, /* 0x54-0x57 */ + {0xCD, 0x1E}, {0xCD, 0x1F}, {0xCD, 0x20}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCD, 0x21}, {0xCD, 0x22}, {0xCD, 0x23}, /* 0x60-0x63 */ + {0xCD, 0x25}, {0xCD, 0x26}, {0xCD, 0x27}, {0xCD, 0x29}, /* 0x64-0x67 */ + {0xCD, 0x2A}, {0xCD, 0x2B}, {0xCD, 0x2D}, {0xCD, 0x2E}, /* 0x68-0x6B */ + {0xCD, 0x2F}, {0xCD, 0x30}, {0xCD, 0x31}, {0xCD, 0x32}, /* 0x6C-0x6F */ + {0xCD, 0x33}, {0xCD, 0x34}, {0xCD, 0x35}, {0xCD, 0x36}, /* 0x70-0x73 */ + {0xCD, 0x37}, {0xCD, 0x38}, {0xCD, 0x3A}, {0xCD, 0x3B}, /* 0x74-0x77 */ + {0xCD, 0x3C}, {0xCD, 0x3D}, {0xCD, 0x3E}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCD, 0x3F}, {0xCD, 0x40}, {0xCD, 0x41}, /* 0x80-0x83 */ + {0xCD, 0x42}, {0xCD, 0x43}, {0xCD, 0x44}, {0xCD, 0x45}, /* 0x84-0x87 */ + {0xCD, 0x46}, {0xCD, 0x47}, {0xCD, 0x48}, {0xCD, 0x49}, /* 0x88-0x8B */ + {0xCD, 0x4A}, {0xCD, 0x4B}, {0xCD, 0x4C}, {0xCD, 0x4D}, /* 0x8C-0x8F */ + {0xCD, 0x4E}, {0xCD, 0x4F}, {0xCD, 0x50}, {0xCD, 0x51}, /* 0x90-0x93 */ + {0xCD, 0x52}, {0xCD, 0x53}, {0xCD, 0x54}, {0xCD, 0x55}, /* 0x94-0x97 */ + {0xCD, 0x56}, {0xCD, 0x57}, {0xCD, 0x58}, {0xCD, 0x59}, /* 0x98-0x9B */ + {0xCD, 0x5A}, {0xCD, 0x5B}, {0xCD, 0x5D}, {0xCD, 0x5E}, /* 0x9C-0x9F */ + {0xCD, 0x5F}, {0x04, 0x10}, {0x04, 0x11}, {0x04, 0x12}, /* 0xA0-0xA3 */ + {0x04, 0x13}, {0x04, 0x14}, {0x04, 0x15}, {0x04, 0x01}, /* 0xA4-0xA7 */ + {0x04, 0x16}, {0x04, 0x17}, {0x04, 0x18}, {0x04, 0x19}, /* 0xA8-0xAB */ + {0x04, 0x1A}, {0x04, 0x1B}, {0x04, 0x1C}, {0x04, 0x1D}, /* 0xAC-0xAF */ + {0x04, 0x1E}, {0x04, 0x1F}, {0x04, 0x20}, {0x04, 0x21}, /* 0xB0-0xB3 */ + {0x04, 0x22}, {0x04, 0x23}, {0x04, 0x24}, {0x04, 0x25}, /* 0xB4-0xB7 */ + {0x04, 0x26}, {0x04, 0x27}, {0x04, 0x28}, {0x04, 0x29}, /* 0xB8-0xBB */ + {0x04, 0x2A}, {0x04, 0x2B}, {0x04, 0x2C}, {0x04, 0x2D}, /* 0xBC-0xBF */ + {0x04, 0x2E}, {0x04, 0x2F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x04, 0x30}, {0x04, 0x31}, {0x04, 0x32}, /* 0xD0-0xD3 */ + {0x04, 0x33}, {0x04, 0x34}, {0x04, 0x35}, {0x04, 0x51}, /* 0xD4-0xD7 */ + {0x04, 0x36}, {0x04, 0x37}, {0x04, 0x38}, {0x04, 0x39}, /* 0xD8-0xDB */ + {0x04, 0x3A}, {0x04, 0x3B}, {0x04, 0x3C}, {0x04, 0x3D}, /* 0xDC-0xDF */ + {0x04, 0x3E}, {0x04, 0x3F}, {0x04, 0x40}, {0x04, 0x41}, /* 0xE0-0xE3 */ + {0x04, 0x42}, {0x04, 0x43}, {0x04, 0x44}, {0x04, 0x45}, /* 0xE4-0xE7 */ + {0x04, 0x46}, {0x04, 0x47}, {0x04, 0x48}, {0x04, 0x49}, /* 0xE8-0xEB */ + {0x04, 0x4A}, {0x04, 0x4B}, {0x04, 0x4C}, {0x04, 0x4D}, /* 0xEC-0xEF */ + {0x04, 0x4E}, {0x04, 0x4F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCD, 0x61}, {0xCD, 0x62}, {0xCD, 0x63}, /* 0x40-0x43 */ + {0xCD, 0x65}, {0xCD, 0x66}, {0xCD, 0x67}, {0xCD, 0x68}, /* 0x44-0x47 */ + {0xCD, 0x69}, {0xCD, 0x6A}, {0xCD, 0x6B}, {0xCD, 0x6E}, /* 0x48-0x4B */ + {0xCD, 0x70}, {0xCD, 0x72}, {0xCD, 0x73}, {0xCD, 0x74}, /* 0x4C-0x4F */ + {0xCD, 0x75}, {0xCD, 0x76}, {0xCD, 0x77}, {0xCD, 0x79}, /* 0x50-0x53 */ + {0xCD, 0x7A}, {0xCD, 0x7B}, {0xCD, 0x7C}, {0xCD, 0x7D}, /* 0x54-0x57 */ + {0xCD, 0x7E}, {0xCD, 0x7F}, {0xCD, 0x80}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCD, 0x81}, {0xCD, 0x82}, {0xCD, 0x83}, /* 0x60-0x63 */ + {0xCD, 0x84}, {0xCD, 0x85}, {0xCD, 0x86}, {0xCD, 0x87}, /* 0x64-0x67 */ + {0xCD, 0x89}, {0xCD, 0x8A}, {0xCD, 0x8B}, {0xCD, 0x8C}, /* 0x68-0x6B */ + {0xCD, 0x8D}, {0xCD, 0x8E}, {0xCD, 0x8F}, {0xCD, 0x90}, /* 0x6C-0x6F */ + {0xCD, 0x91}, {0xCD, 0x92}, {0xCD, 0x93}, {0xCD, 0x96}, /* 0x70-0x73 */ + {0xCD, 0x97}, {0xCD, 0x99}, {0xCD, 0x9A}, {0xCD, 0x9B}, /* 0x74-0x77 */ + {0xCD, 0x9D}, {0xCD, 0x9E}, {0xCD, 0x9F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCD, 0xA0}, {0xCD, 0xA1}, {0xCD, 0xA2}, /* 0x80-0x83 */ + {0xCD, 0xA3}, {0xCD, 0xA6}, {0xCD, 0xA8}, {0xCD, 0xAA}, /* 0x84-0x87 */ + {0xCD, 0xAB}, {0xCD, 0xAC}, {0xCD, 0xAD}, {0xCD, 0xAE}, /* 0x88-0x8B */ + {0xCD, 0xAF}, {0xCD, 0xB1}, {0xCD, 0xB2}, {0xCD, 0xB3}, /* 0x8C-0x8F */ + {0xCD, 0xB4}, {0xCD, 0xB5}, {0xCD, 0xB6}, {0xCD, 0xB7}, /* 0x90-0x93 */ + {0xCD, 0xB8}, {0xCD, 0xB9}, {0xCD, 0xBA}, {0xCD, 0xBB}, /* 0x94-0x97 */ + {0xCD, 0xBC}, {0xCD, 0xBD}, {0xCD, 0xBE}, {0xCD, 0xBF}, /* 0x98-0x9B */ + {0xCD, 0xC0}, {0xCD, 0xC1}, {0xCD, 0xC2}, {0xCD, 0xC3}, /* 0x9C-0x9F */ + {0xCD, 0xC5}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCD, 0xC6}, {0xCD, 0xC7}, {0xCD, 0xC8}, /* 0x40-0x43 */ + {0xCD, 0xC9}, {0xCD, 0xCA}, {0xCD, 0xCB}, {0xCD, 0xCD}, /* 0x44-0x47 */ + {0xCD, 0xCE}, {0xCD, 0xCF}, {0xCD, 0xD1}, {0xCD, 0xD2}, /* 0x48-0x4B */ + {0xCD, 0xD3}, {0xCD, 0xD4}, {0xCD, 0xD5}, {0xCD, 0xD6}, /* 0x4C-0x4F */ + {0xCD, 0xD7}, {0xCD, 0xD8}, {0xCD, 0xD9}, {0xCD, 0xDA}, /* 0x50-0x53 */ + {0xCD, 0xDB}, {0xCD, 0xDC}, {0xCD, 0xDD}, {0xCD, 0xDE}, /* 0x54-0x57 */ + {0xCD, 0xDF}, {0xCD, 0xE0}, {0xCD, 0xE1}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCD, 0xE2}, {0xCD, 0xE3}, {0xCD, 0xE4}, /* 0x60-0x63 */ + {0xCD, 0xE5}, {0xCD, 0xE6}, {0xCD, 0xE7}, {0xCD, 0xE9}, /* 0x64-0x67 */ + {0xCD, 0xEA}, {0xCD, 0xEB}, {0xCD, 0xED}, {0xCD, 0xEE}, /* 0x68-0x6B */ + {0xCD, 0xEF}, {0xCD, 0xF1}, {0xCD, 0xF2}, {0xCD, 0xF3}, /* 0x6C-0x6F */ + {0xCD, 0xF4}, {0xCD, 0xF5}, {0xCD, 0xF6}, {0xCD, 0xF7}, /* 0x70-0x73 */ + {0xCD, 0xFA}, {0xCD, 0xFC}, {0xCD, 0xFE}, {0xCD, 0xFF}, /* 0x74-0x77 */ + {0xCE, 0x00}, {0xCE, 0x01}, {0xCE, 0x02}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCE, 0x03}, {0xCE, 0x05}, {0xCE, 0x06}, /* 0x80-0x83 */ + {0xCE, 0x07}, {0xCE, 0x09}, {0xCE, 0x0A}, {0xCE, 0x0B}, /* 0x84-0x87 */ + {0xCE, 0x0D}, {0xCE, 0x0E}, {0xCE, 0x0F}, {0xCE, 0x10}, /* 0x88-0x8B */ + {0xCE, 0x11}, {0xCE, 0x12}, {0xCE, 0x13}, {0xCE, 0x15}, /* 0x8C-0x8F */ + {0xCE, 0x16}, {0xCE, 0x17}, {0xCE, 0x18}, {0xCE, 0x1A}, /* 0x90-0x93 */ + {0xCE, 0x1B}, {0xCE, 0x1C}, {0xCE, 0x1D}, {0xCE, 0x1E}, /* 0x94-0x97 */ + {0xCE, 0x1F}, {0xCE, 0x22}, {0xCE, 0x23}, {0xCE, 0x25}, /* 0x98-0x9B */ + {0xCE, 0x26}, {0xCE, 0x27}, {0xCE, 0x29}, {0xCE, 0x2A}, /* 0x9C-0x9F */ + {0xCE, 0x2B}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCE, 0x2C}, {0xCE, 0x2D}, {0xCE, 0x2E}, /* 0x40-0x43 */ + {0xCE, 0x2F}, {0xCE, 0x32}, {0xCE, 0x34}, {0xCE, 0x36}, /* 0x44-0x47 */ + {0xCE, 0x37}, {0xCE, 0x38}, {0xCE, 0x39}, {0xCE, 0x3A}, /* 0x48-0x4B */ + {0xCE, 0x3B}, {0xCE, 0x3C}, {0xCE, 0x3D}, {0xCE, 0x3E}, /* 0x4C-0x4F */ + {0xCE, 0x3F}, {0xCE, 0x40}, {0xCE, 0x41}, {0xCE, 0x42}, /* 0x50-0x53 */ + {0xCE, 0x43}, {0xCE, 0x44}, {0xCE, 0x45}, {0xCE, 0x46}, /* 0x54-0x57 */ + {0xCE, 0x47}, {0xCE, 0x48}, {0xCE, 0x49}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCE, 0x4A}, {0xCE, 0x4B}, {0xCE, 0x4C}, /* 0x60-0x63 */ + {0xCE, 0x4D}, {0xCE, 0x4E}, {0xCE, 0x4F}, {0xCE, 0x50}, /* 0x64-0x67 */ + {0xCE, 0x51}, {0xCE, 0x52}, {0xCE, 0x53}, {0xCE, 0x54}, /* 0x68-0x6B */ + {0xCE, 0x55}, {0xCE, 0x56}, {0xCE, 0x57}, {0xCE, 0x5A}, /* 0x6C-0x6F */ + {0xCE, 0x5B}, {0xCE, 0x5D}, {0xCE, 0x5E}, {0xCE, 0x62}, /* 0x70-0x73 */ + {0xCE, 0x63}, {0xCE, 0x64}, {0xCE, 0x65}, {0xCE, 0x66}, /* 0x74-0x77 */ + {0xCE, 0x67}, {0xCE, 0x6A}, {0xCE, 0x6C}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCE, 0x6E}, {0xCE, 0x6F}, {0xCE, 0x70}, /* 0x80-0x83 */ + {0xCE, 0x71}, {0xCE, 0x72}, {0xCE, 0x73}, {0xCE, 0x76}, /* 0x84-0x87 */ + {0xCE, 0x77}, {0xCE, 0x79}, {0xCE, 0x7A}, {0xCE, 0x7B}, /* 0x88-0x8B */ + {0xCE, 0x7D}, {0xCE, 0x7E}, {0xCE, 0x7F}, {0xCE, 0x80}, /* 0x8C-0x8F */ + {0xCE, 0x81}, {0xCE, 0x82}, {0xCE, 0x83}, {0xCE, 0x86}, /* 0x90-0x93 */ + {0xCE, 0x88}, {0xCE, 0x8A}, {0xCE, 0x8B}, {0xCE, 0x8C}, /* 0x94-0x97 */ + {0xCE, 0x8D}, {0xCE, 0x8E}, {0xCE, 0x8F}, {0xCE, 0x92}, /* 0x98-0x9B */ + {0xCE, 0x93}, {0xCE, 0x95}, {0xCE, 0x96}, {0xCE, 0x97}, /* 0x9C-0x9F */ + {0xCE, 0x99}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCE, 0x9A}, {0xCE, 0x9B}, {0xCE, 0x9C}, /* 0x40-0x43 */ + {0xCE, 0x9D}, {0xCE, 0x9E}, {0xCE, 0x9F}, {0xCE, 0xA2}, /* 0x44-0x47 */ + {0xCE, 0xA6}, {0xCE, 0xA7}, {0xCE, 0xA8}, {0xCE, 0xA9}, /* 0x48-0x4B */ + {0xCE, 0xAA}, {0xCE, 0xAB}, {0xCE, 0xAE}, {0xCE, 0xAF}, /* 0x4C-0x4F */ + {0xCE, 0xB0}, {0xCE, 0xB1}, {0xCE, 0xB2}, {0xCE, 0xB3}, /* 0x50-0x53 */ + {0xCE, 0xB4}, {0xCE, 0xB5}, {0xCE, 0xB6}, {0xCE, 0xB7}, /* 0x54-0x57 */ + {0xCE, 0xB8}, {0xCE, 0xB9}, {0xCE, 0xBA}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCE, 0xBB}, {0xCE, 0xBC}, {0xCE, 0xBD}, /* 0x60-0x63 */ + {0xCE, 0xBE}, {0xCE, 0xBF}, {0xCE, 0xC0}, {0xCE, 0xC2}, /* 0x64-0x67 */ + {0xCE, 0xC3}, {0xCE, 0xC4}, {0xCE, 0xC5}, {0xCE, 0xC6}, /* 0x68-0x6B */ + {0xCE, 0xC7}, {0xCE, 0xC8}, {0xCE, 0xC9}, {0xCE, 0xCA}, /* 0x6C-0x6F */ + {0xCE, 0xCB}, {0xCE, 0xCC}, {0xCE, 0xCD}, {0xCE, 0xCE}, /* 0x70-0x73 */ + {0xCE, 0xCF}, {0xCE, 0xD0}, {0xCE, 0xD1}, {0xCE, 0xD2}, /* 0x74-0x77 */ + {0xCE, 0xD3}, {0xCE, 0xD4}, {0xCE, 0xD5}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCE, 0xD6}, {0xCE, 0xD7}, {0xCE, 0xD8}, /* 0x80-0x83 */ + {0xCE, 0xD9}, {0xCE, 0xDA}, {0xCE, 0xDB}, {0xCE, 0xDC}, /* 0x84-0x87 */ + {0xCE, 0xDD}, {0xCE, 0xDE}, {0xCE, 0xDF}, {0xCE, 0xE0}, /* 0x88-0x8B */ + {0xCE, 0xE1}, {0xCE, 0xE2}, {0xCE, 0xE3}, {0xCE, 0xE6}, /* 0x8C-0x8F */ + {0xCE, 0xE7}, {0xCE, 0xE9}, {0xCE, 0xEA}, {0xCE, 0xED}, /* 0x90-0x93 */ + {0xCE, 0xEE}, {0xCE, 0xEF}, {0xCE, 0xF0}, {0xCE, 0xF1}, /* 0x94-0x97 */ + {0xCE, 0xF2}, {0xCE, 0xF3}, {0xCE, 0xF6}, {0xCE, 0xFA}, /* 0x98-0x9B */ + {0xCE, 0xFB}, {0xCE, 0xFC}, {0xCE, 0xFD}, {0xCE, 0xFE}, /* 0x9C-0x9F */ + {0xCE, 0xFF}, {0xAC, 0x00}, {0xAC, 0x01}, {0xAC, 0x04}, /* 0xA0-0xA3 */ + {0xAC, 0x07}, {0xAC, 0x08}, {0xAC, 0x09}, {0xAC, 0x0A}, /* 0xA4-0xA7 */ + {0xAC, 0x10}, {0xAC, 0x11}, {0xAC, 0x12}, {0xAC, 0x13}, /* 0xA8-0xAB */ + {0xAC, 0x14}, {0xAC, 0x15}, {0xAC, 0x16}, {0xAC, 0x17}, /* 0xAC-0xAF */ + {0xAC, 0x19}, {0xAC, 0x1A}, {0xAC, 0x1B}, {0xAC, 0x1C}, /* 0xB0-0xB3 */ + {0xAC, 0x1D}, {0xAC, 0x20}, {0xAC, 0x24}, {0xAC, 0x2C}, /* 0xB4-0xB7 */ + {0xAC, 0x2D}, {0xAC, 0x2F}, {0xAC, 0x30}, {0xAC, 0x31}, /* 0xB8-0xBB */ + {0xAC, 0x38}, {0xAC, 0x39}, {0xAC, 0x3C}, {0xAC, 0x40}, /* 0xBC-0xBF */ + {0xAC, 0x4B}, {0xAC, 0x4D}, {0xAC, 0x54}, {0xAC, 0x58}, /* 0xC0-0xC3 */ + {0xAC, 0x5C}, {0xAC, 0x70}, {0xAC, 0x71}, {0xAC, 0x74}, /* 0xC4-0xC7 */ + {0xAC, 0x77}, {0xAC, 0x78}, {0xAC, 0x7A}, {0xAC, 0x80}, /* 0xC8-0xCB */ + {0xAC, 0x81}, {0xAC, 0x83}, {0xAC, 0x84}, {0xAC, 0x85}, /* 0xCC-0xCF */ + {0xAC, 0x86}, {0xAC, 0x89}, {0xAC, 0x8A}, {0xAC, 0x8B}, /* 0xD0-0xD3 */ + {0xAC, 0x8C}, {0xAC, 0x90}, {0xAC, 0x94}, {0xAC, 0x9C}, /* 0xD4-0xD7 */ + {0xAC, 0x9D}, {0xAC, 0x9F}, {0xAC, 0xA0}, {0xAC, 0xA1}, /* 0xD8-0xDB */ + {0xAC, 0xA8}, {0xAC, 0xA9}, {0xAC, 0xAA}, {0xAC, 0xAC}, /* 0xDC-0xDF */ + {0xAC, 0xAF}, {0xAC, 0xB0}, {0xAC, 0xB8}, {0xAC, 0xB9}, /* 0xE0-0xE3 */ + {0xAC, 0xBB}, {0xAC, 0xBC}, {0xAC, 0xBD}, {0xAC, 0xC1}, /* 0xE4-0xE7 */ + {0xAC, 0xC4}, {0xAC, 0xC8}, {0xAC, 0xCC}, {0xAC, 0xD5}, /* 0xE8-0xEB */ + {0xAC, 0xD7}, {0xAC, 0xE0}, {0xAC, 0xE1}, {0xAC, 0xE4}, /* 0xEC-0xEF */ + {0xAC, 0xE7}, {0xAC, 0xE8}, {0xAC, 0xEA}, {0xAC, 0xEC}, /* 0xF0-0xF3 */ + {0xAC, 0xEF}, {0xAC, 0xF0}, {0xAC, 0xF1}, {0xAC, 0xF3}, /* 0xF4-0xF7 */ + {0xAC, 0xF5}, {0xAC, 0xF6}, {0xAC, 0xFC}, {0xAC, 0xFD}, /* 0xF8-0xFB */ + {0xAD, 0x00}, {0xAD, 0x04}, {0xAD, 0x06}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCF, 0x02}, {0xCF, 0x03}, {0xCF, 0x05}, /* 0x40-0x43 */ + {0xCF, 0x06}, {0xCF, 0x07}, {0xCF, 0x09}, {0xCF, 0x0A}, /* 0x44-0x47 */ + {0xCF, 0x0B}, {0xCF, 0x0C}, {0xCF, 0x0D}, {0xCF, 0x0E}, /* 0x48-0x4B */ + {0xCF, 0x0F}, {0xCF, 0x12}, {0xCF, 0x14}, {0xCF, 0x16}, /* 0x4C-0x4F */ + {0xCF, 0x17}, {0xCF, 0x18}, {0xCF, 0x19}, {0xCF, 0x1A}, /* 0x50-0x53 */ + {0xCF, 0x1B}, {0xCF, 0x1D}, {0xCF, 0x1E}, {0xCF, 0x1F}, /* 0x54-0x57 */ + {0xCF, 0x21}, {0xCF, 0x22}, {0xCF, 0x23}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCF, 0x25}, {0xCF, 0x26}, {0xCF, 0x27}, /* 0x60-0x63 */ + {0xCF, 0x28}, {0xCF, 0x29}, {0xCF, 0x2A}, {0xCF, 0x2B}, /* 0x64-0x67 */ + {0xCF, 0x2E}, {0xCF, 0x32}, {0xCF, 0x33}, {0xCF, 0x34}, /* 0x68-0x6B */ + {0xCF, 0x35}, {0xCF, 0x36}, {0xCF, 0x37}, {0xCF, 0x39}, /* 0x6C-0x6F */ + {0xCF, 0x3A}, {0xCF, 0x3B}, {0xCF, 0x3C}, {0xCF, 0x3D}, /* 0x70-0x73 */ + {0xCF, 0x3E}, {0xCF, 0x3F}, {0xCF, 0x40}, {0xCF, 0x41}, /* 0x74-0x77 */ + {0xCF, 0x42}, {0xCF, 0x43}, {0xCF, 0x44}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCF, 0x45}, {0xCF, 0x46}, {0xCF, 0x47}, /* 0x80-0x83 */ + {0xCF, 0x48}, {0xCF, 0x49}, {0xCF, 0x4A}, {0xCF, 0x4B}, /* 0x84-0x87 */ + {0xCF, 0x4C}, {0xCF, 0x4D}, {0xCF, 0x4E}, {0xCF, 0x4F}, /* 0x88-0x8B */ + {0xCF, 0x50}, {0xCF, 0x51}, {0xCF, 0x52}, {0xCF, 0x53}, /* 0x8C-0x8F */ + {0xCF, 0x56}, {0xCF, 0x57}, {0xCF, 0x59}, {0xCF, 0x5A}, /* 0x90-0x93 */ + {0xCF, 0x5B}, {0xCF, 0x5D}, {0xCF, 0x5E}, {0xCF, 0x5F}, /* 0x94-0x97 */ + {0xCF, 0x60}, {0xCF, 0x61}, {0xCF, 0x62}, {0xCF, 0x63}, /* 0x98-0x9B */ + {0xCF, 0x66}, {0xCF, 0x68}, {0xCF, 0x6A}, {0xCF, 0x6B}, /* 0x9C-0x9F */ + {0xCF, 0x6C}, {0xAD, 0x0C}, {0xAD, 0x0D}, {0xAD, 0x0F}, /* 0xA0-0xA3 */ + {0xAD, 0x11}, {0xAD, 0x18}, {0xAD, 0x1C}, {0xAD, 0x20}, /* 0xA4-0xA7 */ + {0xAD, 0x29}, {0xAD, 0x2C}, {0xAD, 0x2D}, {0xAD, 0x34}, /* 0xA8-0xAB */ + {0xAD, 0x35}, {0xAD, 0x38}, {0xAD, 0x3C}, {0xAD, 0x44}, /* 0xAC-0xAF */ + {0xAD, 0x45}, {0xAD, 0x47}, {0xAD, 0x49}, {0xAD, 0x50}, /* 0xB0-0xB3 */ + {0xAD, 0x54}, {0xAD, 0x58}, {0xAD, 0x61}, {0xAD, 0x63}, /* 0xB4-0xB7 */ + {0xAD, 0x6C}, {0xAD, 0x6D}, {0xAD, 0x70}, {0xAD, 0x73}, /* 0xB8-0xBB */ + {0xAD, 0x74}, {0xAD, 0x75}, {0xAD, 0x76}, {0xAD, 0x7B}, /* 0xBC-0xBF */ + {0xAD, 0x7C}, {0xAD, 0x7D}, {0xAD, 0x7F}, {0xAD, 0x81}, /* 0xC0-0xC3 */ + {0xAD, 0x82}, {0xAD, 0x88}, {0xAD, 0x89}, {0xAD, 0x8C}, /* 0xC4-0xC7 */ + {0xAD, 0x90}, {0xAD, 0x9C}, {0xAD, 0x9D}, {0xAD, 0xA4}, /* 0xC8-0xCB */ + {0xAD, 0xB7}, {0xAD, 0xC0}, {0xAD, 0xC1}, {0xAD, 0xC4}, /* 0xCC-0xCF */ + {0xAD, 0xC8}, {0xAD, 0xD0}, {0xAD, 0xD1}, {0xAD, 0xD3}, /* 0xD0-0xD3 */ + {0xAD, 0xDC}, {0xAD, 0xE0}, {0xAD, 0xE4}, {0xAD, 0xF8}, /* 0xD4-0xD7 */ + {0xAD, 0xF9}, {0xAD, 0xFC}, {0xAD, 0xFF}, {0xAE, 0x00}, /* 0xD8-0xDB */ + {0xAE, 0x01}, {0xAE, 0x08}, {0xAE, 0x09}, {0xAE, 0x0B}, /* 0xDC-0xDF */ + {0xAE, 0x0D}, {0xAE, 0x14}, {0xAE, 0x30}, {0xAE, 0x31}, /* 0xE0-0xE3 */ + {0xAE, 0x34}, {0xAE, 0x37}, {0xAE, 0x38}, {0xAE, 0x3A}, /* 0xE4-0xE7 */ + {0xAE, 0x40}, {0xAE, 0x41}, {0xAE, 0x43}, {0xAE, 0x45}, /* 0xE8-0xEB */ + {0xAE, 0x46}, {0xAE, 0x4A}, {0xAE, 0x4C}, {0xAE, 0x4D}, /* 0xEC-0xEF */ + {0xAE, 0x4E}, {0xAE, 0x50}, {0xAE, 0x54}, {0xAE, 0x56}, /* 0xF0-0xF3 */ + {0xAE, 0x5C}, {0xAE, 0x5D}, {0xAE, 0x5F}, {0xAE, 0x60}, /* 0xF4-0xF7 */ + {0xAE, 0x61}, {0xAE, 0x65}, {0xAE, 0x68}, {0xAE, 0x69}, /* 0xF8-0xFB */ + {0xAE, 0x6C}, {0xAE, 0x70}, {0xAE, 0x78}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCF, 0x6D}, {0xCF, 0x6E}, {0xCF, 0x6F}, /* 0x40-0x43 */ + {0xCF, 0x72}, {0xCF, 0x73}, {0xCF, 0x75}, {0xCF, 0x76}, /* 0x44-0x47 */ + {0xCF, 0x77}, {0xCF, 0x79}, {0xCF, 0x7A}, {0xCF, 0x7B}, /* 0x48-0x4B */ + {0xCF, 0x7C}, {0xCF, 0x7D}, {0xCF, 0x7E}, {0xCF, 0x7F}, /* 0x4C-0x4F */ + {0xCF, 0x81}, {0xCF, 0x82}, {0xCF, 0x83}, {0xCF, 0x84}, /* 0x50-0x53 */ + {0xCF, 0x86}, {0xCF, 0x87}, {0xCF, 0x88}, {0xCF, 0x89}, /* 0x54-0x57 */ + {0xCF, 0x8A}, {0xCF, 0x8B}, {0xCF, 0x8D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCF, 0x8E}, {0xCF, 0x8F}, {0xCF, 0x90}, /* 0x60-0x63 */ + {0xCF, 0x91}, {0xCF, 0x92}, {0xCF, 0x93}, {0xCF, 0x94}, /* 0x64-0x67 */ + {0xCF, 0x95}, {0xCF, 0x96}, {0xCF, 0x97}, {0xCF, 0x98}, /* 0x68-0x6B */ + {0xCF, 0x99}, {0xCF, 0x9A}, {0xCF, 0x9B}, {0xCF, 0x9C}, /* 0x6C-0x6F */ + {0xCF, 0x9D}, {0xCF, 0x9E}, {0xCF, 0x9F}, {0xCF, 0xA0}, /* 0x70-0x73 */ + {0xCF, 0xA2}, {0xCF, 0xA3}, {0xCF, 0xA4}, {0xCF, 0xA5}, /* 0x74-0x77 */ + {0xCF, 0xA6}, {0xCF, 0xA7}, {0xCF, 0xA9}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xCF, 0xAA}, {0xCF, 0xAB}, {0xCF, 0xAC}, /* 0x80-0x83 */ + {0xCF, 0xAD}, {0xCF, 0xAE}, {0xCF, 0xAF}, {0xCF, 0xB1}, /* 0x84-0x87 */ + {0xCF, 0xB2}, {0xCF, 0xB3}, {0xCF, 0xB4}, {0xCF, 0xB5}, /* 0x88-0x8B */ + {0xCF, 0xB6}, {0xCF, 0xB7}, {0xCF, 0xB8}, {0xCF, 0xB9}, /* 0x8C-0x8F */ + {0xCF, 0xBA}, {0xCF, 0xBB}, {0xCF, 0xBC}, {0xCF, 0xBD}, /* 0x90-0x93 */ + {0xCF, 0xBE}, {0xCF, 0xBF}, {0xCF, 0xC0}, {0xCF, 0xC1}, /* 0x94-0x97 */ + {0xCF, 0xC2}, {0xCF, 0xC3}, {0xCF, 0xC5}, {0xCF, 0xC6}, /* 0x98-0x9B */ + {0xCF, 0xC7}, {0xCF, 0xC8}, {0xCF, 0xC9}, {0xCF, 0xCA}, /* 0x9C-0x9F */ + {0xCF, 0xCB}, {0xAE, 0x79}, {0xAE, 0x7B}, {0xAE, 0x7C}, /* 0xA0-0xA3 */ + {0xAE, 0x7D}, {0xAE, 0x84}, {0xAE, 0x85}, {0xAE, 0x8C}, /* 0xA4-0xA7 */ + {0xAE, 0xBC}, {0xAE, 0xBD}, {0xAE, 0xBE}, {0xAE, 0xC0}, /* 0xA8-0xAB */ + {0xAE, 0xC4}, {0xAE, 0xCC}, {0xAE, 0xCD}, {0xAE, 0xCF}, /* 0xAC-0xAF */ + {0xAE, 0xD0}, {0xAE, 0xD1}, {0xAE, 0xD8}, {0xAE, 0xD9}, /* 0xB0-0xB3 */ + {0xAE, 0xDC}, {0xAE, 0xE8}, {0xAE, 0xEB}, {0xAE, 0xED}, /* 0xB4-0xB7 */ + {0xAE, 0xF4}, {0xAE, 0xF8}, {0xAE, 0xFC}, {0xAF, 0x07}, /* 0xB8-0xBB */ + {0xAF, 0x08}, {0xAF, 0x0D}, {0xAF, 0x10}, {0xAF, 0x2C}, /* 0xBC-0xBF */ + {0xAF, 0x2D}, {0xAF, 0x30}, {0xAF, 0x32}, {0xAF, 0x34}, /* 0xC0-0xC3 */ + {0xAF, 0x3C}, {0xAF, 0x3D}, {0xAF, 0x3F}, {0xAF, 0x41}, /* 0xC4-0xC7 */ + {0xAF, 0x42}, {0xAF, 0x43}, {0xAF, 0x48}, {0xAF, 0x49}, /* 0xC8-0xCB */ + {0xAF, 0x50}, {0xAF, 0x5C}, {0xAF, 0x5D}, {0xAF, 0x64}, /* 0xCC-0xCF */ + {0xAF, 0x65}, {0xAF, 0x79}, {0xAF, 0x80}, {0xAF, 0x84}, /* 0xD0-0xD3 */ + {0xAF, 0x88}, {0xAF, 0x90}, {0xAF, 0x91}, {0xAF, 0x95}, /* 0xD4-0xD7 */ + {0xAF, 0x9C}, {0xAF, 0xB8}, {0xAF, 0xB9}, {0xAF, 0xBC}, /* 0xD8-0xDB */ + {0xAF, 0xC0}, {0xAF, 0xC7}, {0xAF, 0xC8}, {0xAF, 0xC9}, /* 0xDC-0xDF */ + {0xAF, 0xCB}, {0xAF, 0xCD}, {0xAF, 0xCE}, {0xAF, 0xD4}, /* 0xE0-0xE3 */ + {0xAF, 0xDC}, {0xAF, 0xE8}, {0xAF, 0xE9}, {0xAF, 0xF0}, /* 0xE4-0xE7 */ + {0xAF, 0xF1}, {0xAF, 0xF4}, {0xAF, 0xF8}, {0xB0, 0x00}, /* 0xE8-0xEB */ + {0xB0, 0x01}, {0xB0, 0x04}, {0xB0, 0x0C}, {0xB0, 0x10}, /* 0xEC-0xEF */ + {0xB0, 0x14}, {0xB0, 0x1C}, {0xB0, 0x1D}, {0xB0, 0x28}, /* 0xF0-0xF3 */ + {0xB0, 0x44}, {0xB0, 0x45}, {0xB0, 0x48}, {0xB0, 0x4A}, /* 0xF4-0xF7 */ + {0xB0, 0x4C}, {0xB0, 0x4E}, {0xB0, 0x53}, {0xB0, 0x54}, /* 0xF8-0xFB */ + {0xB0, 0x55}, {0xB0, 0x57}, {0xB0, 0x59}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xCF, 0xCC}, {0xCF, 0xCD}, {0xCF, 0xCE}, /* 0x40-0x43 */ + {0xCF, 0xCF}, {0xCF, 0xD0}, {0xCF, 0xD1}, {0xCF, 0xD2}, /* 0x44-0x47 */ + {0xCF, 0xD3}, {0xCF, 0xD4}, {0xCF, 0xD5}, {0xCF, 0xD6}, /* 0x48-0x4B */ + {0xCF, 0xD7}, {0xCF, 0xD8}, {0xCF, 0xD9}, {0xCF, 0xDA}, /* 0x4C-0x4F */ + {0xCF, 0xDB}, {0xCF, 0xDC}, {0xCF, 0xDD}, {0xCF, 0xDE}, /* 0x50-0x53 */ + {0xCF, 0xDF}, {0xCF, 0xE2}, {0xCF, 0xE3}, {0xCF, 0xE5}, /* 0x54-0x57 */ + {0xCF, 0xE6}, {0xCF, 0xE7}, {0xCF, 0xE9}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xCF, 0xEA}, {0xCF, 0xEB}, {0xCF, 0xEC}, /* 0x60-0x63 */ + {0xCF, 0xED}, {0xCF, 0xEE}, {0xCF, 0xEF}, {0xCF, 0xF2}, /* 0x64-0x67 */ + {0xCF, 0xF4}, {0xCF, 0xF6}, {0xCF, 0xF7}, {0xCF, 0xF8}, /* 0x68-0x6B */ + {0xCF, 0xF9}, {0xCF, 0xFA}, {0xCF, 0xFB}, {0xCF, 0xFD}, /* 0x6C-0x6F */ + {0xCF, 0xFE}, {0xCF, 0xFF}, {0xD0, 0x01}, {0xD0, 0x02}, /* 0x70-0x73 */ + {0xD0, 0x03}, {0xD0, 0x05}, {0xD0, 0x06}, {0xD0, 0x07}, /* 0x74-0x77 */ + {0xD0, 0x08}, {0xD0, 0x09}, {0xD0, 0x0A}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD0, 0x0B}, {0xD0, 0x0C}, {0xD0, 0x0D}, /* 0x80-0x83 */ + {0xD0, 0x0E}, {0xD0, 0x0F}, {0xD0, 0x10}, {0xD0, 0x12}, /* 0x84-0x87 */ + {0xD0, 0x13}, {0xD0, 0x14}, {0xD0, 0x15}, {0xD0, 0x16}, /* 0x88-0x8B */ + {0xD0, 0x17}, {0xD0, 0x19}, {0xD0, 0x1A}, {0xD0, 0x1B}, /* 0x8C-0x8F */ + {0xD0, 0x1C}, {0xD0, 0x1D}, {0xD0, 0x1E}, {0xD0, 0x1F}, /* 0x90-0x93 */ + {0xD0, 0x20}, {0xD0, 0x21}, {0xD0, 0x22}, {0xD0, 0x23}, /* 0x94-0x97 */ + {0xD0, 0x24}, {0xD0, 0x25}, {0xD0, 0x26}, {0xD0, 0x27}, /* 0x98-0x9B */ + {0xD0, 0x28}, {0xD0, 0x29}, {0xD0, 0x2A}, {0xD0, 0x2B}, /* 0x9C-0x9F */ + {0xD0, 0x2C}, {0xB0, 0x5D}, {0xB0, 0x7C}, {0xB0, 0x7D}, /* 0xA0-0xA3 */ + {0xB0, 0x80}, {0xB0, 0x84}, {0xB0, 0x8C}, {0xB0, 0x8D}, /* 0xA4-0xA7 */ + {0xB0, 0x8F}, {0xB0, 0x91}, {0xB0, 0x98}, {0xB0, 0x99}, /* 0xA8-0xAB */ + {0xB0, 0x9A}, {0xB0, 0x9C}, {0xB0, 0x9F}, {0xB0, 0xA0}, /* 0xAC-0xAF */ + {0xB0, 0xA1}, {0xB0, 0xA2}, {0xB0, 0xA8}, {0xB0, 0xA9}, /* 0xB0-0xB3 */ + {0xB0, 0xAB}, {0xB0, 0xAC}, {0xB0, 0xAD}, {0xB0, 0xAE}, /* 0xB4-0xB7 */ + {0xB0, 0xAF}, {0xB0, 0xB1}, {0xB0, 0xB3}, {0xB0, 0xB4}, /* 0xB8-0xBB */ + {0xB0, 0xB5}, {0xB0, 0xB8}, {0xB0, 0xBC}, {0xB0, 0xC4}, /* 0xBC-0xBF */ + {0xB0, 0xC5}, {0xB0, 0xC7}, {0xB0, 0xC8}, {0xB0, 0xC9}, /* 0xC0-0xC3 */ + {0xB0, 0xD0}, {0xB0, 0xD1}, {0xB0, 0xD4}, {0xB0, 0xD8}, /* 0xC4-0xC7 */ + {0xB0, 0xE0}, {0xB0, 0xE5}, {0xB1, 0x08}, {0xB1, 0x09}, /* 0xC8-0xCB */ + {0xB1, 0x0B}, {0xB1, 0x0C}, {0xB1, 0x10}, {0xB1, 0x12}, /* 0xCC-0xCF */ + {0xB1, 0x13}, {0xB1, 0x18}, {0xB1, 0x19}, {0xB1, 0x1B}, /* 0xD0-0xD3 */ + {0xB1, 0x1C}, {0xB1, 0x1D}, {0xB1, 0x23}, {0xB1, 0x24}, /* 0xD4-0xD7 */ + {0xB1, 0x25}, {0xB1, 0x28}, {0xB1, 0x2C}, {0xB1, 0x34}, /* 0xD8-0xDB */ + {0xB1, 0x35}, {0xB1, 0x37}, {0xB1, 0x38}, {0xB1, 0x39}, /* 0xDC-0xDF */ + {0xB1, 0x40}, {0xB1, 0x41}, {0xB1, 0x44}, {0xB1, 0x48}, /* 0xE0-0xE3 */ + {0xB1, 0x50}, {0xB1, 0x51}, {0xB1, 0x54}, {0xB1, 0x55}, /* 0xE4-0xE7 */ + {0xB1, 0x58}, {0xB1, 0x5C}, {0xB1, 0x60}, {0xB1, 0x78}, /* 0xE8-0xEB */ + {0xB1, 0x79}, {0xB1, 0x7C}, {0xB1, 0x80}, {0xB1, 0x82}, /* 0xEC-0xEF */ + {0xB1, 0x88}, {0xB1, 0x89}, {0xB1, 0x8B}, {0xB1, 0x8D}, /* 0xF0-0xF3 */ + {0xB1, 0x92}, {0xB1, 0x93}, {0xB1, 0x94}, {0xB1, 0x98}, /* 0xF4-0xF7 */ + {0xB1, 0x9C}, {0xB1, 0xA8}, {0xB1, 0xCC}, {0xB1, 0xD0}, /* 0xF8-0xFB */ + {0xB1, 0xD4}, {0xB1, 0xDC}, {0xB1, 0xDD}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD0, 0x2E}, {0xD0, 0x2F}, {0xD0, 0x30}, /* 0x40-0x43 */ + {0xD0, 0x31}, {0xD0, 0x32}, {0xD0, 0x33}, {0xD0, 0x36}, /* 0x44-0x47 */ + {0xD0, 0x37}, {0xD0, 0x39}, {0xD0, 0x3A}, {0xD0, 0x3B}, /* 0x48-0x4B */ + {0xD0, 0x3D}, {0xD0, 0x3E}, {0xD0, 0x3F}, {0xD0, 0x40}, /* 0x4C-0x4F */ + {0xD0, 0x41}, {0xD0, 0x42}, {0xD0, 0x43}, {0xD0, 0x46}, /* 0x50-0x53 */ + {0xD0, 0x48}, {0xD0, 0x4A}, {0xD0, 0x4B}, {0xD0, 0x4C}, /* 0x54-0x57 */ + {0xD0, 0x4D}, {0xD0, 0x4E}, {0xD0, 0x4F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD0, 0x51}, {0xD0, 0x52}, {0xD0, 0x53}, /* 0x60-0x63 */ + {0xD0, 0x55}, {0xD0, 0x56}, {0xD0, 0x57}, {0xD0, 0x59}, /* 0x64-0x67 */ + {0xD0, 0x5A}, {0xD0, 0x5B}, {0xD0, 0x5C}, {0xD0, 0x5D}, /* 0x68-0x6B */ + {0xD0, 0x5E}, {0xD0, 0x5F}, {0xD0, 0x61}, {0xD0, 0x62}, /* 0x6C-0x6F */ + {0xD0, 0x63}, {0xD0, 0x64}, {0xD0, 0x65}, {0xD0, 0x66}, /* 0x70-0x73 */ + {0xD0, 0x67}, {0xD0, 0x68}, {0xD0, 0x69}, {0xD0, 0x6A}, /* 0x74-0x77 */ + {0xD0, 0x6B}, {0xD0, 0x6E}, {0xD0, 0x6F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD0, 0x71}, {0xD0, 0x72}, {0xD0, 0x73}, /* 0x80-0x83 */ + {0xD0, 0x75}, {0xD0, 0x76}, {0xD0, 0x77}, {0xD0, 0x78}, /* 0x84-0x87 */ + {0xD0, 0x79}, {0xD0, 0x7A}, {0xD0, 0x7B}, {0xD0, 0x7E}, /* 0x88-0x8B */ + {0xD0, 0x7F}, {0xD0, 0x80}, {0xD0, 0x82}, {0xD0, 0x83}, /* 0x8C-0x8F */ + {0xD0, 0x84}, {0xD0, 0x85}, {0xD0, 0x86}, {0xD0, 0x87}, /* 0x90-0x93 */ + {0xD0, 0x88}, {0xD0, 0x89}, {0xD0, 0x8A}, {0xD0, 0x8B}, /* 0x94-0x97 */ + {0xD0, 0x8C}, {0xD0, 0x8D}, {0xD0, 0x8E}, {0xD0, 0x8F}, /* 0x98-0x9B */ + {0xD0, 0x90}, {0xD0, 0x91}, {0xD0, 0x92}, {0xD0, 0x93}, /* 0x9C-0x9F */ + {0xD0, 0x94}, {0xB1, 0xDF}, {0xB1, 0xE8}, {0xB1, 0xE9}, /* 0xA0-0xA3 */ + {0xB1, 0xEC}, {0xB1, 0xF0}, {0xB1, 0xF9}, {0xB1, 0xFB}, /* 0xA4-0xA7 */ + {0xB1, 0xFD}, {0xB2, 0x04}, {0xB2, 0x05}, {0xB2, 0x08}, /* 0xA8-0xAB */ + {0xB2, 0x0B}, {0xB2, 0x0C}, {0xB2, 0x14}, {0xB2, 0x15}, /* 0xAC-0xAF */ + {0xB2, 0x17}, {0xB2, 0x19}, {0xB2, 0x20}, {0xB2, 0x34}, /* 0xB0-0xB3 */ + {0xB2, 0x3C}, {0xB2, 0x58}, {0xB2, 0x5C}, {0xB2, 0x60}, /* 0xB4-0xB7 */ + {0xB2, 0x68}, {0xB2, 0x69}, {0xB2, 0x74}, {0xB2, 0x75}, /* 0xB8-0xBB */ + {0xB2, 0x7C}, {0xB2, 0x84}, {0xB2, 0x85}, {0xB2, 0x89}, /* 0xBC-0xBF */ + {0xB2, 0x90}, {0xB2, 0x91}, {0xB2, 0x94}, {0xB2, 0x98}, /* 0xC0-0xC3 */ + {0xB2, 0x99}, {0xB2, 0x9A}, {0xB2, 0xA0}, {0xB2, 0xA1}, /* 0xC4-0xC7 */ + {0xB2, 0xA3}, {0xB2, 0xA5}, {0xB2, 0xA6}, {0xB2, 0xAA}, /* 0xC8-0xCB */ + {0xB2, 0xAC}, {0xB2, 0xB0}, {0xB2, 0xB4}, {0xB2, 0xC8}, /* 0xCC-0xCF */ + {0xB2, 0xC9}, {0xB2, 0xCC}, {0xB2, 0xD0}, {0xB2, 0xD2}, /* 0xD0-0xD3 */ + {0xB2, 0xD8}, {0xB2, 0xD9}, {0xB2, 0xDB}, {0xB2, 0xDD}, /* 0xD4-0xD7 */ + {0xB2, 0xE2}, {0xB2, 0xE4}, {0xB2, 0xE5}, {0xB2, 0xE6}, /* 0xD8-0xDB */ + {0xB2, 0xE8}, {0xB2, 0xEB}, {0xB2, 0xEC}, {0xB2, 0xED}, /* 0xDC-0xDF */ + {0xB2, 0xEE}, {0xB2, 0xEF}, {0xB2, 0xF3}, {0xB2, 0xF4}, /* 0xE0-0xE3 */ + {0xB2, 0xF5}, {0xB2, 0xF7}, {0xB2, 0xF8}, {0xB2, 0xF9}, /* 0xE4-0xE7 */ + {0xB2, 0xFA}, {0xB2, 0xFB}, {0xB2, 0xFF}, {0xB3, 0x00}, /* 0xE8-0xEB */ + {0xB3, 0x01}, {0xB3, 0x04}, {0xB3, 0x08}, {0xB3, 0x10}, /* 0xEC-0xEF */ + {0xB3, 0x11}, {0xB3, 0x13}, {0xB3, 0x14}, {0xB3, 0x15}, /* 0xF0-0xF3 */ + {0xB3, 0x1C}, {0xB3, 0x54}, {0xB3, 0x55}, {0xB3, 0x56}, /* 0xF4-0xF7 */ + {0xB3, 0x58}, {0xB3, 0x5B}, {0xB3, 0x5C}, {0xB3, 0x5E}, /* 0xF8-0xFB */ + {0xB3, 0x5F}, {0xB3, 0x64}, {0xB3, 0x65}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD0, 0x95}, {0xD0, 0x96}, {0xD0, 0x97}, /* 0x40-0x43 */ + {0xD0, 0x98}, {0xD0, 0x99}, {0xD0, 0x9A}, {0xD0, 0x9B}, /* 0x44-0x47 */ + {0xD0, 0x9C}, {0xD0, 0x9D}, {0xD0, 0x9E}, {0xD0, 0x9F}, /* 0x48-0x4B */ + {0xD0, 0xA0}, {0xD0, 0xA1}, {0xD0, 0xA2}, {0xD0, 0xA3}, /* 0x4C-0x4F */ + {0xD0, 0xA6}, {0xD0, 0xA7}, {0xD0, 0xA9}, {0xD0, 0xAA}, /* 0x50-0x53 */ + {0xD0, 0xAB}, {0xD0, 0xAD}, {0xD0, 0xAE}, {0xD0, 0xAF}, /* 0x54-0x57 */ + {0xD0, 0xB0}, {0xD0, 0xB1}, {0xD0, 0xB2}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD0, 0xB3}, {0xD0, 0xB6}, {0xD0, 0xB8}, /* 0x60-0x63 */ + {0xD0, 0xBA}, {0xD0, 0xBB}, {0xD0, 0xBC}, {0xD0, 0xBD}, /* 0x64-0x67 */ + {0xD0, 0xBE}, {0xD0, 0xBF}, {0xD0, 0xC2}, {0xD0, 0xC3}, /* 0x68-0x6B */ + {0xD0, 0xC5}, {0xD0, 0xC6}, {0xD0, 0xC7}, {0xD0, 0xCA}, /* 0x6C-0x6F */ + {0xD0, 0xCB}, {0xD0, 0xCC}, {0xD0, 0xCD}, {0xD0, 0xCE}, /* 0x70-0x73 */ + {0xD0, 0xCF}, {0xD0, 0xD2}, {0xD0, 0xD6}, {0xD0, 0xD7}, /* 0x74-0x77 */ + {0xD0, 0xD8}, {0xD0, 0xD9}, {0xD0, 0xDA}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD0, 0xDB}, {0xD0, 0xDE}, {0xD0, 0xDF}, /* 0x80-0x83 */ + {0xD0, 0xE1}, {0xD0, 0xE2}, {0xD0, 0xE3}, {0xD0, 0xE5}, /* 0x84-0x87 */ + {0xD0, 0xE6}, {0xD0, 0xE7}, {0xD0, 0xE8}, {0xD0, 0xE9}, /* 0x88-0x8B */ + {0xD0, 0xEA}, {0xD0, 0xEB}, {0xD0, 0xEE}, {0xD0, 0xF2}, /* 0x8C-0x8F */ + {0xD0, 0xF3}, {0xD0, 0xF4}, {0xD0, 0xF5}, {0xD0, 0xF6}, /* 0x90-0x93 */ + {0xD0, 0xF7}, {0xD0, 0xF9}, {0xD0, 0xFA}, {0xD0, 0xFB}, /* 0x94-0x97 */ + {0xD0, 0xFC}, {0xD0, 0xFD}, {0xD0, 0xFE}, {0xD0, 0xFF}, /* 0x98-0x9B */ + {0xD1, 0x00}, {0xD1, 0x01}, {0xD1, 0x02}, {0xD1, 0x03}, /* 0x9C-0x9F */ + {0xD1, 0x04}, {0xB3, 0x67}, {0xB3, 0x69}, {0xB3, 0x6B}, /* 0xA0-0xA3 */ + {0xB3, 0x6E}, {0xB3, 0x70}, {0xB3, 0x71}, {0xB3, 0x74}, /* 0xA4-0xA7 */ + {0xB3, 0x78}, {0xB3, 0x80}, {0xB3, 0x81}, {0xB3, 0x83}, /* 0xA8-0xAB */ + {0xB3, 0x84}, {0xB3, 0x85}, {0xB3, 0x8C}, {0xB3, 0x90}, /* 0xAC-0xAF */ + {0xB3, 0x94}, {0xB3, 0xA0}, {0xB3, 0xA1}, {0xB3, 0xA8}, /* 0xB0-0xB3 */ + {0xB3, 0xAC}, {0xB3, 0xC4}, {0xB3, 0xC5}, {0xB3, 0xC8}, /* 0xB4-0xB7 */ + {0xB3, 0xCB}, {0xB3, 0xCC}, {0xB3, 0xCE}, {0xB3, 0xD0}, /* 0xB8-0xBB */ + {0xB3, 0xD4}, {0xB3, 0xD5}, {0xB3, 0xD7}, {0xB3, 0xD9}, /* 0xBC-0xBF */ + {0xB3, 0xDB}, {0xB3, 0xDD}, {0xB3, 0xE0}, {0xB3, 0xE4}, /* 0xC0-0xC3 */ + {0xB3, 0xE8}, {0xB3, 0xFC}, {0xB4, 0x10}, {0xB4, 0x18}, /* 0xC4-0xC7 */ + {0xB4, 0x1C}, {0xB4, 0x20}, {0xB4, 0x28}, {0xB4, 0x29}, /* 0xC8-0xCB */ + {0xB4, 0x2B}, {0xB4, 0x34}, {0xB4, 0x50}, {0xB4, 0x51}, /* 0xCC-0xCF */ + {0xB4, 0x54}, {0xB4, 0x58}, {0xB4, 0x60}, {0xB4, 0x61}, /* 0xD0-0xD3 */ + {0xB4, 0x63}, {0xB4, 0x65}, {0xB4, 0x6C}, {0xB4, 0x80}, /* 0xD4-0xD7 */ + {0xB4, 0x88}, {0xB4, 0x9D}, {0xB4, 0xA4}, {0xB4, 0xA8}, /* 0xD8-0xDB */ + {0xB4, 0xAC}, {0xB4, 0xB5}, {0xB4, 0xB7}, {0xB4, 0xB9}, /* 0xDC-0xDF */ + {0xB4, 0xC0}, {0xB4, 0xC4}, {0xB4, 0xC8}, {0xB4, 0xD0}, /* 0xE0-0xE3 */ + {0xB4, 0xD5}, {0xB4, 0xDC}, {0xB4, 0xDD}, {0xB4, 0xE0}, /* 0xE4-0xE7 */ + {0xB4, 0xE3}, {0xB4, 0xE4}, {0xB4, 0xE6}, {0xB4, 0xEC}, /* 0xE8-0xEB */ + {0xB4, 0xED}, {0xB4, 0xEF}, {0xB4, 0xF1}, {0xB4, 0xF8}, /* 0xEC-0xEF */ + {0xB5, 0x14}, {0xB5, 0x15}, {0xB5, 0x18}, {0xB5, 0x1B}, /* 0xF0-0xF3 */ + {0xB5, 0x1C}, {0xB5, 0x24}, {0xB5, 0x25}, {0xB5, 0x27}, /* 0xF4-0xF7 */ + {0xB5, 0x28}, {0xB5, 0x29}, {0xB5, 0x2A}, {0xB5, 0x30}, /* 0xF8-0xFB */ + {0xB5, 0x31}, {0xB5, 0x34}, {0xB5, 0x38}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD1, 0x05}, {0xD1, 0x06}, {0xD1, 0x07}, /* 0x40-0x43 */ + {0xD1, 0x08}, {0xD1, 0x09}, {0xD1, 0x0A}, {0xD1, 0x0B}, /* 0x44-0x47 */ + {0xD1, 0x0C}, {0xD1, 0x0E}, {0xD1, 0x0F}, {0xD1, 0x10}, /* 0x48-0x4B */ + {0xD1, 0x11}, {0xD1, 0x12}, {0xD1, 0x13}, {0xD1, 0x14}, /* 0x4C-0x4F */ + {0xD1, 0x15}, {0xD1, 0x16}, {0xD1, 0x17}, {0xD1, 0x18}, /* 0x50-0x53 */ + {0xD1, 0x19}, {0xD1, 0x1A}, {0xD1, 0x1B}, {0xD1, 0x1C}, /* 0x54-0x57 */ + {0xD1, 0x1D}, {0xD1, 0x1E}, {0xD1, 0x1F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD1, 0x20}, {0xD1, 0x21}, {0xD1, 0x22}, /* 0x60-0x63 */ + {0xD1, 0x23}, {0xD1, 0x24}, {0xD1, 0x25}, {0xD1, 0x26}, /* 0x64-0x67 */ + {0xD1, 0x27}, {0xD1, 0x28}, {0xD1, 0x29}, {0xD1, 0x2A}, /* 0x68-0x6B */ + {0xD1, 0x2B}, {0xD1, 0x2C}, {0xD1, 0x2D}, {0xD1, 0x2E}, /* 0x6C-0x6F */ + {0xD1, 0x2F}, {0xD1, 0x32}, {0xD1, 0x33}, {0xD1, 0x35}, /* 0x70-0x73 */ + {0xD1, 0x36}, {0xD1, 0x37}, {0xD1, 0x39}, {0xD1, 0x3B}, /* 0x74-0x77 */ + {0xD1, 0x3C}, {0xD1, 0x3D}, {0xD1, 0x3E}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD1, 0x3F}, {0xD1, 0x42}, {0xD1, 0x46}, /* 0x80-0x83 */ + {0xD1, 0x47}, {0xD1, 0x48}, {0xD1, 0x49}, {0xD1, 0x4A}, /* 0x84-0x87 */ + {0xD1, 0x4B}, {0xD1, 0x4E}, {0xD1, 0x4F}, {0xD1, 0x51}, /* 0x88-0x8B */ + {0xD1, 0x52}, {0xD1, 0x53}, {0xD1, 0x55}, {0xD1, 0x56}, /* 0x8C-0x8F */ + {0xD1, 0x57}, {0xD1, 0x58}, {0xD1, 0x59}, {0xD1, 0x5A}, /* 0x90-0x93 */ + {0xD1, 0x5B}, {0xD1, 0x5E}, {0xD1, 0x60}, {0xD1, 0x62}, /* 0x94-0x97 */ + {0xD1, 0x63}, {0xD1, 0x64}, {0xD1, 0x65}, {0xD1, 0x66}, /* 0x98-0x9B */ + {0xD1, 0x67}, {0xD1, 0x69}, {0xD1, 0x6A}, {0xD1, 0x6B}, /* 0x9C-0x9F */ + {0xD1, 0x6D}, {0xB5, 0x40}, {0xB5, 0x41}, {0xB5, 0x43}, /* 0xA0-0xA3 */ + {0xB5, 0x44}, {0xB5, 0x45}, {0xB5, 0x4B}, {0xB5, 0x4C}, /* 0xA4-0xA7 */ + {0xB5, 0x4D}, {0xB5, 0x50}, {0xB5, 0x54}, {0xB5, 0x5C}, /* 0xA8-0xAB */ + {0xB5, 0x5D}, {0xB5, 0x5F}, {0xB5, 0x60}, {0xB5, 0x61}, /* 0xAC-0xAF */ + {0xB5, 0xA0}, {0xB5, 0xA1}, {0xB5, 0xA4}, {0xB5, 0xA8}, /* 0xB0-0xB3 */ + {0xB5, 0xAA}, {0xB5, 0xAB}, {0xB5, 0xB0}, {0xB5, 0xB1}, /* 0xB4-0xB7 */ + {0xB5, 0xB3}, {0xB5, 0xB4}, {0xB5, 0xB5}, {0xB5, 0xBB}, /* 0xB8-0xBB */ + {0xB5, 0xBC}, {0xB5, 0xBD}, {0xB5, 0xC0}, {0xB5, 0xC4}, /* 0xBC-0xBF */ + {0xB5, 0xCC}, {0xB5, 0xCD}, {0xB5, 0xCF}, {0xB5, 0xD0}, /* 0xC0-0xC3 */ + {0xB5, 0xD1}, {0xB5, 0xD8}, {0xB5, 0xEC}, {0xB6, 0x10}, /* 0xC4-0xC7 */ + {0xB6, 0x11}, {0xB6, 0x14}, {0xB6, 0x18}, {0xB6, 0x25}, /* 0xC8-0xCB */ + {0xB6, 0x2C}, {0xB6, 0x34}, {0xB6, 0x48}, {0xB6, 0x64}, /* 0xCC-0xCF */ + {0xB6, 0x68}, {0xB6, 0x9C}, {0xB6, 0x9D}, {0xB6, 0xA0}, /* 0xD0-0xD3 */ + {0xB6, 0xA4}, {0xB6, 0xAB}, {0xB6, 0xAC}, {0xB6, 0xB1}, /* 0xD4-0xD7 */ + {0xB6, 0xD4}, {0xB6, 0xF0}, {0xB6, 0xF4}, {0xB6, 0xF8}, /* 0xD8-0xDB */ + {0xB7, 0x00}, {0xB7, 0x01}, {0xB7, 0x05}, {0xB7, 0x28}, /* 0xDC-0xDF */ + {0xB7, 0x29}, {0xB7, 0x2C}, {0xB7, 0x2F}, {0xB7, 0x30}, /* 0xE0-0xE3 */ + {0xB7, 0x38}, {0xB7, 0x39}, {0xB7, 0x3B}, {0xB7, 0x44}, /* 0xE4-0xE7 */ + {0xB7, 0x48}, {0xB7, 0x4C}, {0xB7, 0x54}, {0xB7, 0x55}, /* 0xE8-0xEB */ + {0xB7, 0x60}, {0xB7, 0x64}, {0xB7, 0x68}, {0xB7, 0x70}, /* 0xEC-0xEF */ + {0xB7, 0x71}, {0xB7, 0x73}, {0xB7, 0x75}, {0xB7, 0x7C}, /* 0xF0-0xF3 */ + {0xB7, 0x7D}, {0xB7, 0x80}, {0xB7, 0x84}, {0xB7, 0x8C}, /* 0xF4-0xF7 */ + {0xB7, 0x8D}, {0xB7, 0x8F}, {0xB7, 0x90}, {0xB7, 0x91}, /* 0xF8-0xFB */ + {0xB7, 0x92}, {0xB7, 0x96}, {0xB7, 0x97}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD1, 0x6E}, {0xD1, 0x6F}, {0xD1, 0x70}, /* 0x40-0x43 */ + {0xD1, 0x71}, {0xD1, 0x72}, {0xD1, 0x73}, {0xD1, 0x74}, /* 0x44-0x47 */ + {0xD1, 0x75}, {0xD1, 0x76}, {0xD1, 0x77}, {0xD1, 0x78}, /* 0x48-0x4B */ + {0xD1, 0x79}, {0xD1, 0x7A}, {0xD1, 0x7B}, {0xD1, 0x7D}, /* 0x4C-0x4F */ + {0xD1, 0x7E}, {0xD1, 0x7F}, {0xD1, 0x80}, {0xD1, 0x81}, /* 0x50-0x53 */ + {0xD1, 0x82}, {0xD1, 0x83}, {0xD1, 0x85}, {0xD1, 0x86}, /* 0x54-0x57 */ + {0xD1, 0x87}, {0xD1, 0x89}, {0xD1, 0x8A}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD1, 0x8B}, {0xD1, 0x8C}, {0xD1, 0x8D}, /* 0x60-0x63 */ + {0xD1, 0x8E}, {0xD1, 0x8F}, {0xD1, 0x90}, {0xD1, 0x91}, /* 0x64-0x67 */ + {0xD1, 0x92}, {0xD1, 0x93}, {0xD1, 0x94}, {0xD1, 0x95}, /* 0x68-0x6B */ + {0xD1, 0x96}, {0xD1, 0x97}, {0xD1, 0x98}, {0xD1, 0x99}, /* 0x6C-0x6F */ + {0xD1, 0x9A}, {0xD1, 0x9B}, {0xD1, 0x9C}, {0xD1, 0x9D}, /* 0x70-0x73 */ + {0xD1, 0x9E}, {0xD1, 0x9F}, {0xD1, 0xA2}, {0xD1, 0xA3}, /* 0x74-0x77 */ + {0xD1, 0xA5}, {0xD1, 0xA6}, {0xD1, 0xA7}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD1, 0xA9}, {0xD1, 0xAA}, {0xD1, 0xAB}, /* 0x80-0x83 */ + {0xD1, 0xAC}, {0xD1, 0xAD}, {0xD1, 0xAE}, {0xD1, 0xAF}, /* 0x84-0x87 */ + {0xD1, 0xB2}, {0xD1, 0xB4}, {0xD1, 0xB6}, {0xD1, 0xB7}, /* 0x88-0x8B */ + {0xD1, 0xB8}, {0xD1, 0xB9}, {0xD1, 0xBB}, {0xD1, 0xBD}, /* 0x8C-0x8F */ + {0xD1, 0xBE}, {0xD1, 0xBF}, {0xD1, 0xC1}, {0xD1, 0xC2}, /* 0x90-0x93 */ + {0xD1, 0xC3}, {0xD1, 0xC4}, {0xD1, 0xC5}, {0xD1, 0xC6}, /* 0x94-0x97 */ + {0xD1, 0xC7}, {0xD1, 0xC8}, {0xD1, 0xC9}, {0xD1, 0xCA}, /* 0x98-0x9B */ + {0xD1, 0xCB}, {0xD1, 0xCC}, {0xD1, 0xCD}, {0xD1, 0xCE}, /* 0x9C-0x9F */ + {0xD1, 0xCF}, {0xB7, 0x98}, {0xB7, 0x99}, {0xB7, 0x9C}, /* 0xA0-0xA3 */ + {0xB7, 0xA0}, {0xB7, 0xA8}, {0xB7, 0xA9}, {0xB7, 0xAB}, /* 0xA4-0xA7 */ + {0xB7, 0xAC}, {0xB7, 0xAD}, {0xB7, 0xB4}, {0xB7, 0xB5}, /* 0xA8-0xAB */ + {0xB7, 0xB8}, {0xB7, 0xC7}, {0xB7, 0xC9}, {0xB7, 0xEC}, /* 0xAC-0xAF */ + {0xB7, 0xED}, {0xB7, 0xF0}, {0xB7, 0xF4}, {0xB7, 0xFC}, /* 0xB0-0xB3 */ + {0xB7, 0xFD}, {0xB7, 0xFF}, {0xB8, 0x00}, {0xB8, 0x01}, /* 0xB4-0xB7 */ + {0xB8, 0x07}, {0xB8, 0x08}, {0xB8, 0x09}, {0xB8, 0x0C}, /* 0xB8-0xBB */ + {0xB8, 0x10}, {0xB8, 0x18}, {0xB8, 0x19}, {0xB8, 0x1B}, /* 0xBC-0xBF */ + {0xB8, 0x1D}, {0xB8, 0x24}, {0xB8, 0x25}, {0xB8, 0x28}, /* 0xC0-0xC3 */ + {0xB8, 0x2C}, {0xB8, 0x34}, {0xB8, 0x35}, {0xB8, 0x37}, /* 0xC4-0xC7 */ + {0xB8, 0x38}, {0xB8, 0x39}, {0xB8, 0x40}, {0xB8, 0x44}, /* 0xC8-0xCB */ + {0xB8, 0x51}, {0xB8, 0x53}, {0xB8, 0x5C}, {0xB8, 0x5D}, /* 0xCC-0xCF */ + {0xB8, 0x60}, {0xB8, 0x64}, {0xB8, 0x6C}, {0xB8, 0x6D}, /* 0xD0-0xD3 */ + {0xB8, 0x6F}, {0xB8, 0x71}, {0xB8, 0x78}, {0xB8, 0x7C}, /* 0xD4-0xD7 */ + {0xB8, 0x8D}, {0xB8, 0xA8}, {0xB8, 0xB0}, {0xB8, 0xB4}, /* 0xD8-0xDB */ + {0xB8, 0xB8}, {0xB8, 0xC0}, {0xB8, 0xC1}, {0xB8, 0xC3}, /* 0xDC-0xDF */ + {0xB8, 0xC5}, {0xB8, 0xCC}, {0xB8, 0xD0}, {0xB8, 0xD4}, /* 0xE0-0xE3 */ + {0xB8, 0xDD}, {0xB8, 0xDF}, {0xB8, 0xE1}, {0xB8, 0xE8}, /* 0xE4-0xE7 */ + {0xB8, 0xE9}, {0xB8, 0xEC}, {0xB8, 0xF0}, {0xB8, 0xF8}, /* 0xE8-0xEB */ + {0xB8, 0xF9}, {0xB8, 0xFB}, {0xB8, 0xFD}, {0xB9, 0x04}, /* 0xEC-0xEF */ + {0xB9, 0x18}, {0xB9, 0x20}, {0xB9, 0x3C}, {0xB9, 0x3D}, /* 0xF0-0xF3 */ + {0xB9, 0x40}, {0xB9, 0x44}, {0xB9, 0x4C}, {0xB9, 0x4F}, /* 0xF4-0xF7 */ + {0xB9, 0x51}, {0xB9, 0x58}, {0xB9, 0x59}, {0xB9, 0x5C}, /* 0xF8-0xFB */ + {0xB9, 0x60}, {0xB9, 0x68}, {0xB9, 0x69}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD1, 0xD0}, {0xD1, 0xD1}, {0xD1, 0xD2}, /* 0x40-0x43 */ + {0xD1, 0xD3}, {0xD1, 0xD4}, {0xD1, 0xD5}, {0xD1, 0xD6}, /* 0x44-0x47 */ + {0xD1, 0xD7}, {0xD1, 0xD9}, {0xD1, 0xDA}, {0xD1, 0xDB}, /* 0x48-0x4B */ + {0xD1, 0xDC}, {0xD1, 0xDD}, {0xD1, 0xDE}, {0xD1, 0xDF}, /* 0x4C-0x4F */ + {0xD1, 0xE0}, {0xD1, 0xE1}, {0xD1, 0xE2}, {0xD1, 0xE3}, /* 0x50-0x53 */ + {0xD1, 0xE4}, {0xD1, 0xE5}, {0xD1, 0xE6}, {0xD1, 0xE7}, /* 0x54-0x57 */ + {0xD1, 0xE8}, {0xD1, 0xE9}, {0xD1, 0xEA}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD1, 0xEB}, {0xD1, 0xEC}, {0xD1, 0xED}, /* 0x60-0x63 */ + {0xD1, 0xEE}, {0xD1, 0xEF}, {0xD1, 0xF0}, {0xD1, 0xF1}, /* 0x64-0x67 */ + {0xD1, 0xF2}, {0xD1, 0xF3}, {0xD1, 0xF5}, {0xD1, 0xF6}, /* 0x68-0x6B */ + {0xD1, 0xF7}, {0xD1, 0xF9}, {0xD1, 0xFA}, {0xD1, 0xFB}, /* 0x6C-0x6F */ + {0xD1, 0xFC}, {0xD1, 0xFD}, {0xD1, 0xFE}, {0xD1, 0xFF}, /* 0x70-0x73 */ + {0xD2, 0x00}, {0xD2, 0x01}, {0xD2, 0x02}, {0xD2, 0x03}, /* 0x74-0x77 */ + {0xD2, 0x04}, {0xD2, 0x05}, {0xD2, 0x06}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD2, 0x08}, {0xD2, 0x0A}, {0xD2, 0x0B}, /* 0x80-0x83 */ + {0xD2, 0x0C}, {0xD2, 0x0D}, {0xD2, 0x0E}, {0xD2, 0x0F}, /* 0x84-0x87 */ + {0xD2, 0x11}, {0xD2, 0x12}, {0xD2, 0x13}, {0xD2, 0x14}, /* 0x88-0x8B */ + {0xD2, 0x15}, {0xD2, 0x16}, {0xD2, 0x17}, {0xD2, 0x18}, /* 0x8C-0x8F */ + {0xD2, 0x19}, {0xD2, 0x1A}, {0xD2, 0x1B}, {0xD2, 0x1C}, /* 0x90-0x93 */ + {0xD2, 0x1D}, {0xD2, 0x1E}, {0xD2, 0x1F}, {0xD2, 0x20}, /* 0x94-0x97 */ + {0xD2, 0x21}, {0xD2, 0x22}, {0xD2, 0x23}, {0xD2, 0x24}, /* 0x98-0x9B */ + {0xD2, 0x25}, {0xD2, 0x26}, {0xD2, 0x27}, {0xD2, 0x28}, /* 0x9C-0x9F */ + {0xD2, 0x29}, {0xB9, 0x6B}, {0xB9, 0x6D}, {0xB9, 0x74}, /* 0xA0-0xA3 */ + {0xB9, 0x75}, {0xB9, 0x78}, {0xB9, 0x7C}, {0xB9, 0x84}, /* 0xA4-0xA7 */ + {0xB9, 0x85}, {0xB9, 0x87}, {0xB9, 0x89}, {0xB9, 0x8A}, /* 0xA8-0xAB */ + {0xB9, 0x8D}, {0xB9, 0x8E}, {0xB9, 0xAC}, {0xB9, 0xAD}, /* 0xAC-0xAF */ + {0xB9, 0xB0}, {0xB9, 0xB4}, {0xB9, 0xBC}, {0xB9, 0xBD}, /* 0xB0-0xB3 */ + {0xB9, 0xBF}, {0xB9, 0xC1}, {0xB9, 0xC8}, {0xB9, 0xC9}, /* 0xB4-0xB7 */ + {0xB9, 0xCC}, {0xB9, 0xCE}, {0xB9, 0xCF}, {0xB9, 0xD0}, /* 0xB8-0xBB */ + {0xB9, 0xD1}, {0xB9, 0xD2}, {0xB9, 0xD8}, {0xB9, 0xD9}, /* 0xBC-0xBF */ + {0xB9, 0xDB}, {0xB9, 0xDD}, {0xB9, 0xDE}, {0xB9, 0xE1}, /* 0xC0-0xC3 */ + {0xB9, 0xE3}, {0xB9, 0xE4}, {0xB9, 0xE5}, {0xB9, 0xE8}, /* 0xC4-0xC7 */ + {0xB9, 0xEC}, {0xB9, 0xF4}, {0xB9, 0xF5}, {0xB9, 0xF7}, /* 0xC8-0xCB */ + {0xB9, 0xF8}, {0xB9, 0xF9}, {0xB9, 0xFA}, {0xBA, 0x00}, /* 0xCC-0xCF */ + {0xBA, 0x01}, {0xBA, 0x08}, {0xBA, 0x15}, {0xBA, 0x38}, /* 0xD0-0xD3 */ + {0xBA, 0x39}, {0xBA, 0x3C}, {0xBA, 0x40}, {0xBA, 0x42}, /* 0xD4-0xD7 */ + {0xBA, 0x48}, {0xBA, 0x49}, {0xBA, 0x4B}, {0xBA, 0x4D}, /* 0xD8-0xDB */ + {0xBA, 0x4E}, {0xBA, 0x53}, {0xBA, 0x54}, {0xBA, 0x55}, /* 0xDC-0xDF */ + {0xBA, 0x58}, {0xBA, 0x5C}, {0xBA, 0x64}, {0xBA, 0x65}, /* 0xE0-0xE3 */ + {0xBA, 0x67}, {0xBA, 0x68}, {0xBA, 0x69}, {0xBA, 0x70}, /* 0xE4-0xE7 */ + {0xBA, 0x71}, {0xBA, 0x74}, {0xBA, 0x78}, {0xBA, 0x83}, /* 0xE8-0xEB */ + {0xBA, 0x84}, {0xBA, 0x85}, {0xBA, 0x87}, {0xBA, 0x8C}, /* 0xEC-0xEF */ + {0xBA, 0xA8}, {0xBA, 0xA9}, {0xBA, 0xAB}, {0xBA, 0xAC}, /* 0xF0-0xF3 */ + {0xBA, 0xB0}, {0xBA, 0xB2}, {0xBA, 0xB8}, {0xBA, 0xB9}, /* 0xF4-0xF7 */ + {0xBA, 0xBB}, {0xBA, 0xBD}, {0xBA, 0xC4}, {0xBA, 0xC8}, /* 0xF8-0xFB */ + {0xBA, 0xD8}, {0xBA, 0xD9}, {0xBA, 0xFC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD2, 0x2A}, {0xD2, 0x2B}, {0xD2, 0x2E}, /* 0x40-0x43 */ + {0xD2, 0x2F}, {0xD2, 0x31}, {0xD2, 0x32}, {0xD2, 0x33}, /* 0x44-0x47 */ + {0xD2, 0x35}, {0xD2, 0x36}, {0xD2, 0x37}, {0xD2, 0x38}, /* 0x48-0x4B */ + {0xD2, 0x39}, {0xD2, 0x3A}, {0xD2, 0x3B}, {0xD2, 0x3E}, /* 0x4C-0x4F */ + {0xD2, 0x40}, {0xD2, 0x42}, {0xD2, 0x43}, {0xD2, 0x44}, /* 0x50-0x53 */ + {0xD2, 0x45}, {0xD2, 0x46}, {0xD2, 0x47}, {0xD2, 0x49}, /* 0x54-0x57 */ + {0xD2, 0x4A}, {0xD2, 0x4B}, {0xD2, 0x4C}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD2, 0x4D}, {0xD2, 0x4E}, {0xD2, 0x4F}, /* 0x60-0x63 */ + {0xD2, 0x50}, {0xD2, 0x51}, {0xD2, 0x52}, {0xD2, 0x53}, /* 0x64-0x67 */ + {0xD2, 0x54}, {0xD2, 0x55}, {0xD2, 0x56}, {0xD2, 0x57}, /* 0x68-0x6B */ + {0xD2, 0x58}, {0xD2, 0x59}, {0xD2, 0x5A}, {0xD2, 0x5B}, /* 0x6C-0x6F */ + {0xD2, 0x5D}, {0xD2, 0x5E}, {0xD2, 0x5F}, {0xD2, 0x60}, /* 0x70-0x73 */ + {0xD2, 0x61}, {0xD2, 0x62}, {0xD2, 0x63}, {0xD2, 0x65}, /* 0x74-0x77 */ + {0xD2, 0x66}, {0xD2, 0x67}, {0xD2, 0x68}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD2, 0x69}, {0xD2, 0x6A}, {0xD2, 0x6B}, /* 0x80-0x83 */ + {0xD2, 0x6C}, {0xD2, 0x6D}, {0xD2, 0x6E}, {0xD2, 0x6F}, /* 0x84-0x87 */ + {0xD2, 0x70}, {0xD2, 0x71}, {0xD2, 0x72}, {0xD2, 0x73}, /* 0x88-0x8B */ + {0xD2, 0x74}, {0xD2, 0x75}, {0xD2, 0x76}, {0xD2, 0x77}, /* 0x8C-0x8F */ + {0xD2, 0x78}, {0xD2, 0x79}, {0xD2, 0x7A}, {0xD2, 0x7B}, /* 0x90-0x93 */ + {0xD2, 0x7C}, {0xD2, 0x7D}, {0xD2, 0x7E}, {0xD2, 0x7F}, /* 0x94-0x97 */ + {0xD2, 0x82}, {0xD2, 0x83}, {0xD2, 0x85}, {0xD2, 0x86}, /* 0x98-0x9B */ + {0xD2, 0x87}, {0xD2, 0x89}, {0xD2, 0x8A}, {0xD2, 0x8B}, /* 0x9C-0x9F */ + {0xD2, 0x8C}, {0xBB, 0x00}, {0xBB, 0x04}, {0xBB, 0x0D}, /* 0xA0-0xA3 */ + {0xBB, 0x0F}, {0xBB, 0x11}, {0xBB, 0x18}, {0xBB, 0x1C}, /* 0xA4-0xA7 */ + {0xBB, 0x20}, {0xBB, 0x29}, {0xBB, 0x2B}, {0xBB, 0x34}, /* 0xA8-0xAB */ + {0xBB, 0x35}, {0xBB, 0x36}, {0xBB, 0x38}, {0xBB, 0x3B}, /* 0xAC-0xAF */ + {0xBB, 0x3C}, {0xBB, 0x3D}, {0xBB, 0x3E}, {0xBB, 0x44}, /* 0xB0-0xB3 */ + {0xBB, 0x45}, {0xBB, 0x47}, {0xBB, 0x49}, {0xBB, 0x4D}, /* 0xB4-0xB7 */ + {0xBB, 0x4F}, {0xBB, 0x50}, {0xBB, 0x54}, {0xBB, 0x58}, /* 0xB8-0xBB */ + {0xBB, 0x61}, {0xBB, 0x63}, {0xBB, 0x6C}, {0xBB, 0x88}, /* 0xBC-0xBF */ + {0xBB, 0x8C}, {0xBB, 0x90}, {0xBB, 0xA4}, {0xBB, 0xA8}, /* 0xC0-0xC3 */ + {0xBB, 0xAC}, {0xBB, 0xB4}, {0xBB, 0xB7}, {0xBB, 0xC0}, /* 0xC4-0xC7 */ + {0xBB, 0xC4}, {0xBB, 0xC8}, {0xBB, 0xD0}, {0xBB, 0xD3}, /* 0xC8-0xCB */ + {0xBB, 0xF8}, {0xBB, 0xF9}, {0xBB, 0xFC}, {0xBB, 0xFF}, /* 0xCC-0xCF */ + {0xBC, 0x00}, {0xBC, 0x02}, {0xBC, 0x08}, {0xBC, 0x09}, /* 0xD0-0xD3 */ + {0xBC, 0x0B}, {0xBC, 0x0C}, {0xBC, 0x0D}, {0xBC, 0x0F}, /* 0xD4-0xD7 */ + {0xBC, 0x11}, {0xBC, 0x14}, {0xBC, 0x15}, {0xBC, 0x16}, /* 0xD8-0xDB */ + {0xBC, 0x17}, {0xBC, 0x18}, {0xBC, 0x1B}, {0xBC, 0x1C}, /* 0xDC-0xDF */ + {0xBC, 0x1D}, {0xBC, 0x1E}, {0xBC, 0x1F}, {0xBC, 0x24}, /* 0xE0-0xE3 */ + {0xBC, 0x25}, {0xBC, 0x27}, {0xBC, 0x29}, {0xBC, 0x2D}, /* 0xE4-0xE7 */ + {0xBC, 0x30}, {0xBC, 0x31}, {0xBC, 0x34}, {0xBC, 0x38}, /* 0xE8-0xEB */ + {0xBC, 0x40}, {0xBC, 0x41}, {0xBC, 0x43}, {0xBC, 0x44}, /* 0xEC-0xEF */ + {0xBC, 0x45}, {0xBC, 0x49}, {0xBC, 0x4C}, {0xBC, 0x4D}, /* 0xF0-0xF3 */ + {0xBC, 0x50}, {0xBC, 0x5D}, {0xBC, 0x84}, {0xBC, 0x85}, /* 0xF4-0xF7 */ + {0xBC, 0x88}, {0xBC, 0x8B}, {0xBC, 0x8C}, {0xBC, 0x8E}, /* 0xF8-0xFB */ + {0xBC, 0x94}, {0xBC, 0x95}, {0xBC, 0x97}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD2, 0x8D}, {0xD2, 0x8E}, {0xD2, 0x8F}, /* 0x40-0x43 */ + {0xD2, 0x92}, {0xD2, 0x93}, {0xD2, 0x94}, {0xD2, 0x96}, /* 0x44-0x47 */ + {0xD2, 0x97}, {0xD2, 0x98}, {0xD2, 0x99}, {0xD2, 0x9A}, /* 0x48-0x4B */ + {0xD2, 0x9B}, {0xD2, 0x9D}, {0xD2, 0x9E}, {0xD2, 0x9F}, /* 0x4C-0x4F */ + {0xD2, 0xA1}, {0xD2, 0xA2}, {0xD2, 0xA3}, {0xD2, 0xA5}, /* 0x50-0x53 */ + {0xD2, 0xA6}, {0xD2, 0xA7}, {0xD2, 0xA8}, {0xD2, 0xA9}, /* 0x54-0x57 */ + {0xD2, 0xAA}, {0xD2, 0xAB}, {0xD2, 0xAD}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD2, 0xAE}, {0xD2, 0xAF}, {0xD2, 0xB0}, /* 0x60-0x63 */ + {0xD2, 0xB2}, {0xD2, 0xB3}, {0xD2, 0xB4}, {0xD2, 0xB5}, /* 0x64-0x67 */ + {0xD2, 0xB6}, {0xD2, 0xB7}, {0xD2, 0xBA}, {0xD2, 0xBB}, /* 0x68-0x6B */ + {0xD2, 0xBD}, {0xD2, 0xBE}, {0xD2, 0xC1}, {0xD2, 0xC3}, /* 0x6C-0x6F */ + {0xD2, 0xC4}, {0xD2, 0xC5}, {0xD2, 0xC6}, {0xD2, 0xC7}, /* 0x70-0x73 */ + {0xD2, 0xCA}, {0xD2, 0xCC}, {0xD2, 0xCD}, {0xD2, 0xCE}, /* 0x74-0x77 */ + {0xD2, 0xCF}, {0xD2, 0xD0}, {0xD2, 0xD1}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD2, 0xD2}, {0xD2, 0xD3}, {0xD2, 0xD5}, /* 0x80-0x83 */ + {0xD2, 0xD6}, {0xD2, 0xD7}, {0xD2, 0xD9}, {0xD2, 0xDA}, /* 0x84-0x87 */ + {0xD2, 0xDB}, {0xD2, 0xDD}, {0xD2, 0xDE}, {0xD2, 0xDF}, /* 0x88-0x8B */ + {0xD2, 0xE0}, {0xD2, 0xE1}, {0xD2, 0xE2}, {0xD2, 0xE3}, /* 0x8C-0x8F */ + {0xD2, 0xE6}, {0xD2, 0xE7}, {0xD2, 0xE8}, {0xD2, 0xE9}, /* 0x90-0x93 */ + {0xD2, 0xEA}, {0xD2, 0xEB}, {0xD2, 0xEC}, {0xD2, 0xED}, /* 0x94-0x97 */ + {0xD2, 0xEE}, {0xD2, 0xEF}, {0xD2, 0xF2}, {0xD2, 0xF3}, /* 0x98-0x9B */ + {0xD2, 0xF5}, {0xD2, 0xF6}, {0xD2, 0xF7}, {0xD2, 0xF9}, /* 0x9C-0x9F */ + {0xD2, 0xFA}, {0xBC, 0x99}, {0xBC, 0x9A}, {0xBC, 0xA0}, /* 0xA0-0xA3 */ + {0xBC, 0xA1}, {0xBC, 0xA4}, {0xBC, 0xA7}, {0xBC, 0xA8}, /* 0xA4-0xA7 */ + {0xBC, 0xB0}, {0xBC, 0xB1}, {0xBC, 0xB3}, {0xBC, 0xB4}, /* 0xA8-0xAB */ + {0xBC, 0xB5}, {0xBC, 0xBC}, {0xBC, 0xBD}, {0xBC, 0xC0}, /* 0xAC-0xAF */ + {0xBC, 0xC4}, {0xBC, 0xCD}, {0xBC, 0xCF}, {0xBC, 0xD0}, /* 0xB0-0xB3 */ + {0xBC, 0xD1}, {0xBC, 0xD5}, {0xBC, 0xD8}, {0xBC, 0xDC}, /* 0xB4-0xB7 */ + {0xBC, 0xF4}, {0xBC, 0xF5}, {0xBC, 0xF6}, {0xBC, 0xF8}, /* 0xB8-0xBB */ + {0xBC, 0xFC}, {0xBD, 0x04}, {0xBD, 0x05}, {0xBD, 0x07}, /* 0xBC-0xBF */ + {0xBD, 0x09}, {0xBD, 0x10}, {0xBD, 0x14}, {0xBD, 0x24}, /* 0xC0-0xC3 */ + {0xBD, 0x2C}, {0xBD, 0x40}, {0xBD, 0x48}, {0xBD, 0x49}, /* 0xC4-0xC7 */ + {0xBD, 0x4C}, {0xBD, 0x50}, {0xBD, 0x58}, {0xBD, 0x59}, /* 0xC8-0xCB */ + {0xBD, 0x64}, {0xBD, 0x68}, {0xBD, 0x80}, {0xBD, 0x81}, /* 0xCC-0xCF */ + {0xBD, 0x84}, {0xBD, 0x87}, {0xBD, 0x88}, {0xBD, 0x89}, /* 0xD0-0xD3 */ + {0xBD, 0x8A}, {0xBD, 0x90}, {0xBD, 0x91}, {0xBD, 0x93}, /* 0xD4-0xD7 */ + {0xBD, 0x95}, {0xBD, 0x99}, {0xBD, 0x9A}, {0xBD, 0x9C}, /* 0xD8-0xDB */ + {0xBD, 0xA4}, {0xBD, 0xB0}, {0xBD, 0xB8}, {0xBD, 0xD4}, /* 0xDC-0xDF */ + {0xBD, 0xD5}, {0xBD, 0xD8}, {0xBD, 0xDC}, {0xBD, 0xE9}, /* 0xE0-0xE3 */ + {0xBD, 0xF0}, {0xBD, 0xF4}, {0xBD, 0xF8}, {0xBE, 0x00}, /* 0xE4-0xE7 */ + {0xBE, 0x03}, {0xBE, 0x05}, {0xBE, 0x0C}, {0xBE, 0x0D}, /* 0xE8-0xEB */ + {0xBE, 0x10}, {0xBE, 0x14}, {0xBE, 0x1C}, {0xBE, 0x1D}, /* 0xEC-0xEF */ + {0xBE, 0x1F}, {0xBE, 0x44}, {0xBE, 0x45}, {0xBE, 0x48}, /* 0xF0-0xF3 */ + {0xBE, 0x4C}, {0xBE, 0x4E}, {0xBE, 0x54}, {0xBE, 0x55}, /* 0xF4-0xF7 */ + {0xBE, 0x57}, {0xBE, 0x59}, {0xBE, 0x5A}, {0xBE, 0x5B}, /* 0xF8-0xFB */ + {0xBE, 0x60}, {0xBE, 0x61}, {0xBE, 0x64}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD2, 0xFB}, {0xD2, 0xFC}, {0xD2, 0xFD}, /* 0x40-0x43 */ + {0xD2, 0xFE}, {0xD2, 0xFF}, {0xD3, 0x02}, {0xD3, 0x04}, /* 0x44-0x47 */ + {0xD3, 0x06}, {0xD3, 0x07}, {0xD3, 0x08}, {0xD3, 0x09}, /* 0x48-0x4B */ + {0xD3, 0x0A}, {0xD3, 0x0B}, {0xD3, 0x0F}, {0xD3, 0x11}, /* 0x4C-0x4F */ + {0xD3, 0x12}, {0xD3, 0x13}, {0xD3, 0x15}, {0xD3, 0x17}, /* 0x50-0x53 */ + {0xD3, 0x18}, {0xD3, 0x19}, {0xD3, 0x1A}, {0xD3, 0x1B}, /* 0x54-0x57 */ + {0xD3, 0x1E}, {0xD3, 0x22}, {0xD3, 0x23}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD3, 0x24}, {0xD3, 0x26}, {0xD3, 0x27}, /* 0x60-0x63 */ + {0xD3, 0x2A}, {0xD3, 0x2B}, {0xD3, 0x2D}, {0xD3, 0x2E}, /* 0x64-0x67 */ + {0xD3, 0x2F}, {0xD3, 0x31}, {0xD3, 0x32}, {0xD3, 0x33}, /* 0x68-0x6B */ + {0xD3, 0x34}, {0xD3, 0x35}, {0xD3, 0x36}, {0xD3, 0x37}, /* 0x6C-0x6F */ + {0xD3, 0x3A}, {0xD3, 0x3E}, {0xD3, 0x3F}, {0xD3, 0x40}, /* 0x70-0x73 */ + {0xD3, 0x41}, {0xD3, 0x42}, {0xD3, 0x43}, {0xD3, 0x46}, /* 0x74-0x77 */ + {0xD3, 0x47}, {0xD3, 0x48}, {0xD3, 0x49}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD3, 0x4A}, {0xD3, 0x4B}, {0xD3, 0x4C}, /* 0x80-0x83 */ + {0xD3, 0x4D}, {0xD3, 0x4E}, {0xD3, 0x4F}, {0xD3, 0x50}, /* 0x84-0x87 */ + {0xD3, 0x51}, {0xD3, 0x52}, {0xD3, 0x53}, {0xD3, 0x54}, /* 0x88-0x8B */ + {0xD3, 0x55}, {0xD3, 0x56}, {0xD3, 0x57}, {0xD3, 0x58}, /* 0x8C-0x8F */ + {0xD3, 0x59}, {0xD3, 0x5A}, {0xD3, 0x5B}, {0xD3, 0x5C}, /* 0x90-0x93 */ + {0xD3, 0x5D}, {0xD3, 0x5E}, {0xD3, 0x5F}, {0xD3, 0x60}, /* 0x94-0x97 */ + {0xD3, 0x61}, {0xD3, 0x62}, {0xD3, 0x63}, {0xD3, 0x64}, /* 0x98-0x9B */ + {0xD3, 0x65}, {0xD3, 0x66}, {0xD3, 0x67}, {0xD3, 0x68}, /* 0x9C-0x9F */ + {0xD3, 0x69}, {0xBE, 0x68}, {0xBE, 0x6A}, {0xBE, 0x70}, /* 0xA0-0xA3 */ + {0xBE, 0x71}, {0xBE, 0x73}, {0xBE, 0x74}, {0xBE, 0x75}, /* 0xA4-0xA7 */ + {0xBE, 0x7B}, {0xBE, 0x7C}, {0xBE, 0x7D}, {0xBE, 0x80}, /* 0xA8-0xAB */ + {0xBE, 0x84}, {0xBE, 0x8C}, {0xBE, 0x8D}, {0xBE, 0x8F}, /* 0xAC-0xAF */ + {0xBE, 0x90}, {0xBE, 0x91}, {0xBE, 0x98}, {0xBE, 0x99}, /* 0xB0-0xB3 */ + {0xBE, 0xA8}, {0xBE, 0xD0}, {0xBE, 0xD1}, {0xBE, 0xD4}, /* 0xB4-0xB7 */ + {0xBE, 0xD7}, {0xBE, 0xD8}, {0xBE, 0xE0}, {0xBE, 0xE3}, /* 0xB8-0xBB */ + {0xBE, 0xE4}, {0xBE, 0xE5}, {0xBE, 0xEC}, {0xBF, 0x01}, /* 0xBC-0xBF */ + {0xBF, 0x08}, {0xBF, 0x09}, {0xBF, 0x18}, {0xBF, 0x19}, /* 0xC0-0xC3 */ + {0xBF, 0x1B}, {0xBF, 0x1C}, {0xBF, 0x1D}, {0xBF, 0x40}, /* 0xC4-0xC7 */ + {0xBF, 0x41}, {0xBF, 0x44}, {0xBF, 0x48}, {0xBF, 0x50}, /* 0xC8-0xCB */ + {0xBF, 0x51}, {0xBF, 0x55}, {0xBF, 0x94}, {0xBF, 0xB0}, /* 0xCC-0xCF */ + {0xBF, 0xC5}, {0xBF, 0xCC}, {0xBF, 0xCD}, {0xBF, 0xD0}, /* 0xD0-0xD3 */ + {0xBF, 0xD4}, {0xBF, 0xDC}, {0xBF, 0xDF}, {0xBF, 0xE1}, /* 0xD4-0xD7 */ + {0xC0, 0x3C}, {0xC0, 0x51}, {0xC0, 0x58}, {0xC0, 0x5C}, /* 0xD8-0xDB */ + {0xC0, 0x60}, {0xC0, 0x68}, {0xC0, 0x69}, {0xC0, 0x90}, /* 0xDC-0xDF */ + {0xC0, 0x91}, {0xC0, 0x94}, {0xC0, 0x98}, {0xC0, 0xA0}, /* 0xE0-0xE3 */ + {0xC0, 0xA1}, {0xC0, 0xA3}, {0xC0, 0xA5}, {0xC0, 0xAC}, /* 0xE4-0xE7 */ + {0xC0, 0xAD}, {0xC0, 0xAF}, {0xC0, 0xB0}, {0xC0, 0xB3}, /* 0xE8-0xEB */ + {0xC0, 0xB4}, {0xC0, 0xB5}, {0xC0, 0xB6}, {0xC0, 0xBC}, /* 0xEC-0xEF */ + {0xC0, 0xBD}, {0xC0, 0xBF}, {0xC0, 0xC0}, {0xC0, 0xC1}, /* 0xF0-0xF3 */ + {0xC0, 0xC5}, {0xC0, 0xC8}, {0xC0, 0xC9}, {0xC0, 0xCC}, /* 0xF4-0xF7 */ + {0xC0, 0xD0}, {0xC0, 0xD8}, {0xC0, 0xD9}, {0xC0, 0xDB}, /* 0xF8-0xFB */ + {0xC0, 0xDC}, {0xC0, 0xDD}, {0xC0, 0xE4}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD3, 0x6A}, {0xD3, 0x6B}, {0xD3, 0x6C}, /* 0x40-0x43 */ + {0xD3, 0x6D}, {0xD3, 0x6E}, {0xD3, 0x6F}, {0xD3, 0x70}, /* 0x44-0x47 */ + {0xD3, 0x71}, {0xD3, 0x72}, {0xD3, 0x73}, {0xD3, 0x74}, /* 0x48-0x4B */ + {0xD3, 0x75}, {0xD3, 0x76}, {0xD3, 0x77}, {0xD3, 0x78}, /* 0x4C-0x4F */ + {0xD3, 0x79}, {0xD3, 0x7A}, {0xD3, 0x7B}, {0xD3, 0x7E}, /* 0x50-0x53 */ + {0xD3, 0x7F}, {0xD3, 0x81}, {0xD3, 0x82}, {0xD3, 0x83}, /* 0x54-0x57 */ + {0xD3, 0x85}, {0xD3, 0x86}, {0xD3, 0x87}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD3, 0x88}, {0xD3, 0x89}, {0xD3, 0x8A}, /* 0x60-0x63 */ + {0xD3, 0x8B}, {0xD3, 0x8E}, {0xD3, 0x92}, {0xD3, 0x93}, /* 0x64-0x67 */ + {0xD3, 0x94}, {0xD3, 0x95}, {0xD3, 0x96}, {0xD3, 0x97}, /* 0x68-0x6B */ + {0xD3, 0x9A}, {0xD3, 0x9B}, {0xD3, 0x9D}, {0xD3, 0x9E}, /* 0x6C-0x6F */ + {0xD3, 0x9F}, {0xD3, 0xA1}, {0xD3, 0xA2}, {0xD3, 0xA3}, /* 0x70-0x73 */ + {0xD3, 0xA4}, {0xD3, 0xA5}, {0xD3, 0xA6}, {0xD3, 0xA7}, /* 0x74-0x77 */ + {0xD3, 0xAA}, {0xD3, 0xAC}, {0xD3, 0xAE}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD3, 0xAF}, {0xD3, 0xB0}, {0xD3, 0xB1}, /* 0x80-0x83 */ + {0xD3, 0xB2}, {0xD3, 0xB3}, {0xD3, 0xB5}, {0xD3, 0xB6}, /* 0x84-0x87 */ + {0xD3, 0xB7}, {0xD3, 0xB9}, {0xD3, 0xBA}, {0xD3, 0xBB}, /* 0x88-0x8B */ + {0xD3, 0xBD}, {0xD3, 0xBE}, {0xD3, 0xBF}, {0xD3, 0xC0}, /* 0x8C-0x8F */ + {0xD3, 0xC1}, {0xD3, 0xC2}, {0xD3, 0xC3}, {0xD3, 0xC6}, /* 0x90-0x93 */ + {0xD3, 0xC7}, {0xD3, 0xCA}, {0xD3, 0xCB}, {0xD3, 0xCC}, /* 0x94-0x97 */ + {0xD3, 0xCD}, {0xD3, 0xCE}, {0xD3, 0xCF}, {0xD3, 0xD1}, /* 0x98-0x9B */ + {0xD3, 0xD2}, {0xD3, 0xD3}, {0xD3, 0xD4}, {0xD3, 0xD5}, /* 0x9C-0x9F */ + {0xD3, 0xD6}, {0xC0, 0xE5}, {0xC0, 0xE8}, {0xC0, 0xEC}, /* 0xA0-0xA3 */ + {0xC0, 0xF4}, {0xC0, 0xF5}, {0xC0, 0xF7}, {0xC0, 0xF9}, /* 0xA4-0xA7 */ + {0xC1, 0x00}, {0xC1, 0x04}, {0xC1, 0x08}, {0xC1, 0x10}, /* 0xA8-0xAB */ + {0xC1, 0x15}, {0xC1, 0x1C}, {0xC1, 0x1D}, {0xC1, 0x1E}, /* 0xAC-0xAF */ + {0xC1, 0x1F}, {0xC1, 0x20}, {0xC1, 0x23}, {0xC1, 0x24}, /* 0xB0-0xB3 */ + {0xC1, 0x26}, {0xC1, 0x27}, {0xC1, 0x2C}, {0xC1, 0x2D}, /* 0xB4-0xB7 */ + {0xC1, 0x2F}, {0xC1, 0x30}, {0xC1, 0x31}, {0xC1, 0x36}, /* 0xB8-0xBB */ + {0xC1, 0x38}, {0xC1, 0x39}, {0xC1, 0x3C}, {0xC1, 0x40}, /* 0xBC-0xBF */ + {0xC1, 0x48}, {0xC1, 0x49}, {0xC1, 0x4B}, {0xC1, 0x4C}, /* 0xC0-0xC3 */ + {0xC1, 0x4D}, {0xC1, 0x54}, {0xC1, 0x55}, {0xC1, 0x58}, /* 0xC4-0xC7 */ + {0xC1, 0x5C}, {0xC1, 0x64}, {0xC1, 0x65}, {0xC1, 0x67}, /* 0xC8-0xCB */ + {0xC1, 0x68}, {0xC1, 0x69}, {0xC1, 0x70}, {0xC1, 0x74}, /* 0xCC-0xCF */ + {0xC1, 0x78}, {0xC1, 0x85}, {0xC1, 0x8C}, {0xC1, 0x8D}, /* 0xD0-0xD3 */ + {0xC1, 0x8E}, {0xC1, 0x90}, {0xC1, 0x94}, {0xC1, 0x96}, /* 0xD4-0xD7 */ + {0xC1, 0x9C}, {0xC1, 0x9D}, {0xC1, 0x9F}, {0xC1, 0xA1}, /* 0xD8-0xDB */ + {0xC1, 0xA5}, {0xC1, 0xA8}, {0xC1, 0xA9}, {0xC1, 0xAC}, /* 0xDC-0xDF */ + {0xC1, 0xB0}, {0xC1, 0xBD}, {0xC1, 0xC4}, {0xC1, 0xC8}, /* 0xE0-0xE3 */ + {0xC1, 0xCC}, {0xC1, 0xD4}, {0xC1, 0xD7}, {0xC1, 0xD8}, /* 0xE4-0xE7 */ + {0xC1, 0xE0}, {0xC1, 0xE4}, {0xC1, 0xE8}, {0xC1, 0xF0}, /* 0xE8-0xEB */ + {0xC1, 0xF1}, {0xC1, 0xF3}, {0xC1, 0xFC}, {0xC1, 0xFD}, /* 0xEC-0xEF */ + {0xC2, 0x00}, {0xC2, 0x04}, {0xC2, 0x0C}, {0xC2, 0x0D}, /* 0xF0-0xF3 */ + {0xC2, 0x0F}, {0xC2, 0x11}, {0xC2, 0x18}, {0xC2, 0x19}, /* 0xF4-0xF7 */ + {0xC2, 0x1C}, {0xC2, 0x1F}, {0xC2, 0x20}, {0xC2, 0x28}, /* 0xF8-0xFB */ + {0xC2, 0x29}, {0xC2, 0x2B}, {0xC2, 0x2D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD3, 0xD7}, {0xD3, 0xD9}, {0xD3, 0xDA}, /* 0x40-0x43 */ + {0xD3, 0xDB}, {0xD3, 0xDC}, {0xD3, 0xDD}, {0xD3, 0xDE}, /* 0x44-0x47 */ + {0xD3, 0xDF}, {0xD3, 0xE0}, {0xD3, 0xE2}, {0xD3, 0xE4}, /* 0x48-0x4B */ + {0xD3, 0xE5}, {0xD3, 0xE6}, {0xD3, 0xE7}, {0xD3, 0xE8}, /* 0x4C-0x4F */ + {0xD3, 0xE9}, {0xD3, 0xEA}, {0xD3, 0xEB}, {0xD3, 0xEE}, /* 0x50-0x53 */ + {0xD3, 0xEF}, {0xD3, 0xF1}, {0xD3, 0xF2}, {0xD3, 0xF3}, /* 0x54-0x57 */ + {0xD3, 0xF5}, {0xD3, 0xF6}, {0xD3, 0xF7}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD3, 0xF8}, {0xD3, 0xF9}, {0xD3, 0xFA}, /* 0x60-0x63 */ + {0xD3, 0xFB}, {0xD3, 0xFE}, {0xD4, 0x00}, {0xD4, 0x02}, /* 0x64-0x67 */ + {0xD4, 0x03}, {0xD4, 0x04}, {0xD4, 0x05}, {0xD4, 0x06}, /* 0x68-0x6B */ + {0xD4, 0x07}, {0xD4, 0x09}, {0xD4, 0x0A}, {0xD4, 0x0B}, /* 0x6C-0x6F */ + {0xD4, 0x0C}, {0xD4, 0x0D}, {0xD4, 0x0E}, {0xD4, 0x0F}, /* 0x70-0x73 */ + {0xD4, 0x10}, {0xD4, 0x11}, {0xD4, 0x12}, {0xD4, 0x13}, /* 0x74-0x77 */ + {0xD4, 0x14}, {0xD4, 0x15}, {0xD4, 0x16}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD4, 0x17}, {0xD4, 0x18}, {0xD4, 0x19}, /* 0x80-0x83 */ + {0xD4, 0x1A}, {0xD4, 0x1B}, {0xD4, 0x1C}, {0xD4, 0x1E}, /* 0x84-0x87 */ + {0xD4, 0x1F}, {0xD4, 0x20}, {0xD4, 0x21}, {0xD4, 0x22}, /* 0x88-0x8B */ + {0xD4, 0x23}, {0xD4, 0x24}, {0xD4, 0x25}, {0xD4, 0x26}, /* 0x8C-0x8F */ + {0xD4, 0x27}, {0xD4, 0x28}, {0xD4, 0x29}, {0xD4, 0x2A}, /* 0x90-0x93 */ + {0xD4, 0x2B}, {0xD4, 0x2C}, {0xD4, 0x2D}, {0xD4, 0x2E}, /* 0x94-0x97 */ + {0xD4, 0x2F}, {0xD4, 0x30}, {0xD4, 0x31}, {0xD4, 0x32}, /* 0x98-0x9B */ + {0xD4, 0x33}, {0xD4, 0x34}, {0xD4, 0x35}, {0xD4, 0x36}, /* 0x9C-0x9F */ + {0xD4, 0x37}, {0xC2, 0x2F}, {0xC2, 0x31}, {0xC2, 0x32}, /* 0xA0-0xA3 */ + {0xC2, 0x34}, {0xC2, 0x48}, {0xC2, 0x50}, {0xC2, 0x51}, /* 0xA4-0xA7 */ + {0xC2, 0x54}, {0xC2, 0x58}, {0xC2, 0x60}, {0xC2, 0x65}, /* 0xA8-0xAB */ + {0xC2, 0x6C}, {0xC2, 0x6D}, {0xC2, 0x70}, {0xC2, 0x74}, /* 0xAC-0xAF */ + {0xC2, 0x7C}, {0xC2, 0x7D}, {0xC2, 0x7F}, {0xC2, 0x81}, /* 0xB0-0xB3 */ + {0xC2, 0x88}, {0xC2, 0x89}, {0xC2, 0x90}, {0xC2, 0x98}, /* 0xB4-0xB7 */ + {0xC2, 0x9B}, {0xC2, 0x9D}, {0xC2, 0xA4}, {0xC2, 0xA5}, /* 0xB8-0xBB */ + {0xC2, 0xA8}, {0xC2, 0xAC}, {0xC2, 0xAD}, {0xC2, 0xB4}, /* 0xBC-0xBF */ + {0xC2, 0xB5}, {0xC2, 0xB7}, {0xC2, 0xB9}, {0xC2, 0xDC}, /* 0xC0-0xC3 */ + {0xC2, 0xDD}, {0xC2, 0xE0}, {0xC2, 0xE3}, {0xC2, 0xE4}, /* 0xC4-0xC7 */ + {0xC2, 0xEB}, {0xC2, 0xEC}, {0xC2, 0xED}, {0xC2, 0xEF}, /* 0xC8-0xCB */ + {0xC2, 0xF1}, {0xC2, 0xF6}, {0xC2, 0xF8}, {0xC2, 0xF9}, /* 0xCC-0xCF */ + {0xC2, 0xFB}, {0xC2, 0xFC}, {0xC3, 0x00}, {0xC3, 0x08}, /* 0xD0-0xD3 */ + {0xC3, 0x09}, {0xC3, 0x0C}, {0xC3, 0x0D}, {0xC3, 0x13}, /* 0xD4-0xD7 */ + {0xC3, 0x14}, {0xC3, 0x15}, {0xC3, 0x18}, {0xC3, 0x1C}, /* 0xD8-0xDB */ + {0xC3, 0x24}, {0xC3, 0x25}, {0xC3, 0x28}, {0xC3, 0x29}, /* 0xDC-0xDF */ + {0xC3, 0x45}, {0xC3, 0x68}, {0xC3, 0x69}, {0xC3, 0x6C}, /* 0xE0-0xE3 */ + {0xC3, 0x70}, {0xC3, 0x72}, {0xC3, 0x78}, {0xC3, 0x79}, /* 0xE4-0xE7 */ + {0xC3, 0x7C}, {0xC3, 0x7D}, {0xC3, 0x84}, {0xC3, 0x88}, /* 0xE8-0xEB */ + {0xC3, 0x8C}, {0xC3, 0xC0}, {0xC3, 0xD8}, {0xC3, 0xD9}, /* 0xEC-0xEF */ + {0xC3, 0xDC}, {0xC3, 0xDF}, {0xC3, 0xE0}, {0xC3, 0xE2}, /* 0xF0-0xF3 */ + {0xC3, 0xE8}, {0xC3, 0xE9}, {0xC3, 0xED}, {0xC3, 0xF4}, /* 0xF4-0xF7 */ + {0xC3, 0xF5}, {0xC3, 0xF8}, {0xC4, 0x08}, {0xC4, 0x10}, /* 0xF8-0xFB */ + {0xC4, 0x24}, {0xC4, 0x2C}, {0xC4, 0x30}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD4, 0x38}, {0xD4, 0x39}, {0xD4, 0x3A}, /* 0x40-0x43 */ + {0xD4, 0x3B}, {0xD4, 0x3C}, {0xD4, 0x3D}, {0xD4, 0x3E}, /* 0x44-0x47 */ + {0xD4, 0x3F}, {0xD4, 0x41}, {0xD4, 0x42}, {0xD4, 0x43}, /* 0x48-0x4B */ + {0xD4, 0x45}, {0xD4, 0x46}, {0xD4, 0x47}, {0xD4, 0x48}, /* 0x4C-0x4F */ + {0xD4, 0x49}, {0xD4, 0x4A}, {0xD4, 0x4B}, {0xD4, 0x4C}, /* 0x50-0x53 */ + {0xD4, 0x4D}, {0xD4, 0x4E}, {0xD4, 0x4F}, {0xD4, 0x50}, /* 0x54-0x57 */ + {0xD4, 0x51}, {0xD4, 0x52}, {0xD4, 0x53}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD4, 0x54}, {0xD4, 0x55}, {0xD4, 0x56}, /* 0x60-0x63 */ + {0xD4, 0x57}, {0xD4, 0x58}, {0xD4, 0x59}, {0xD4, 0x5A}, /* 0x64-0x67 */ + {0xD4, 0x5B}, {0xD4, 0x5D}, {0xD4, 0x5E}, {0xD4, 0x5F}, /* 0x68-0x6B */ + {0xD4, 0x61}, {0xD4, 0x62}, {0xD4, 0x63}, {0xD4, 0x65}, /* 0x6C-0x6F */ + {0xD4, 0x66}, {0xD4, 0x67}, {0xD4, 0x68}, {0xD4, 0x69}, /* 0x70-0x73 */ + {0xD4, 0x6A}, {0xD4, 0x6B}, {0xD4, 0x6C}, {0xD4, 0x6E}, /* 0x74-0x77 */ + {0xD4, 0x70}, {0xD4, 0x71}, {0xD4, 0x72}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD4, 0x73}, {0xD4, 0x74}, {0xD4, 0x75}, /* 0x80-0x83 */ + {0xD4, 0x76}, {0xD4, 0x77}, {0xD4, 0x7A}, {0xD4, 0x7B}, /* 0x84-0x87 */ + {0xD4, 0x7D}, {0xD4, 0x7E}, {0xD4, 0x81}, {0xD4, 0x83}, /* 0x88-0x8B */ + {0xD4, 0x84}, {0xD4, 0x85}, {0xD4, 0x86}, {0xD4, 0x87}, /* 0x8C-0x8F */ + {0xD4, 0x8A}, {0xD4, 0x8C}, {0xD4, 0x8E}, {0xD4, 0x8F}, /* 0x90-0x93 */ + {0xD4, 0x90}, {0xD4, 0x91}, {0xD4, 0x92}, {0xD4, 0x93}, /* 0x94-0x97 */ + {0xD4, 0x95}, {0xD4, 0x96}, {0xD4, 0x97}, {0xD4, 0x98}, /* 0x98-0x9B */ + {0xD4, 0x99}, {0xD4, 0x9A}, {0xD4, 0x9B}, {0xD4, 0x9C}, /* 0x9C-0x9F */ + {0xD4, 0x9D}, {0xC4, 0x34}, {0xC4, 0x3C}, {0xC4, 0x3D}, /* 0xA0-0xA3 */ + {0xC4, 0x48}, {0xC4, 0x64}, {0xC4, 0x65}, {0xC4, 0x68}, /* 0xA4-0xA7 */ + {0xC4, 0x6C}, {0xC4, 0x74}, {0xC4, 0x75}, {0xC4, 0x79}, /* 0xA8-0xAB */ + {0xC4, 0x80}, {0xC4, 0x94}, {0xC4, 0x9C}, {0xC4, 0xB8}, /* 0xAC-0xAF */ + {0xC4, 0xBC}, {0xC4, 0xE9}, {0xC4, 0xF0}, {0xC4, 0xF1}, /* 0xB0-0xB3 */ + {0xC4, 0xF4}, {0xC4, 0xF8}, {0xC4, 0xFA}, {0xC4, 0xFF}, /* 0xB4-0xB7 */ + {0xC5, 0x00}, {0xC5, 0x01}, {0xC5, 0x0C}, {0xC5, 0x10}, /* 0xB8-0xBB */ + {0xC5, 0x14}, {0xC5, 0x1C}, {0xC5, 0x28}, {0xC5, 0x29}, /* 0xBC-0xBF */ + {0xC5, 0x2C}, {0xC5, 0x30}, {0xC5, 0x38}, {0xC5, 0x39}, /* 0xC0-0xC3 */ + {0xC5, 0x3B}, {0xC5, 0x3D}, {0xC5, 0x44}, {0xC5, 0x45}, /* 0xC4-0xC7 */ + {0xC5, 0x48}, {0xC5, 0x49}, {0xC5, 0x4A}, {0xC5, 0x4C}, /* 0xC8-0xCB */ + {0xC5, 0x4D}, {0xC5, 0x4E}, {0xC5, 0x53}, {0xC5, 0x54}, /* 0xCC-0xCF */ + {0xC5, 0x55}, {0xC5, 0x57}, {0xC5, 0x58}, {0xC5, 0x59}, /* 0xD0-0xD3 */ + {0xC5, 0x5D}, {0xC5, 0x5E}, {0xC5, 0x60}, {0xC5, 0x61}, /* 0xD4-0xD7 */ + {0xC5, 0x64}, {0xC5, 0x68}, {0xC5, 0x70}, {0xC5, 0x71}, /* 0xD8-0xDB */ + {0xC5, 0x73}, {0xC5, 0x74}, {0xC5, 0x75}, {0xC5, 0x7C}, /* 0xDC-0xDF */ + {0xC5, 0x7D}, {0xC5, 0x80}, {0xC5, 0x84}, {0xC5, 0x87}, /* 0xE0-0xE3 */ + {0xC5, 0x8C}, {0xC5, 0x8D}, {0xC5, 0x8F}, {0xC5, 0x91}, /* 0xE4-0xE7 */ + {0xC5, 0x95}, {0xC5, 0x97}, {0xC5, 0x98}, {0xC5, 0x9C}, /* 0xE8-0xEB */ + {0xC5, 0xA0}, {0xC5, 0xA9}, {0xC5, 0xB4}, {0xC5, 0xB5}, /* 0xEC-0xEF */ + {0xC5, 0xB8}, {0xC5, 0xB9}, {0xC5, 0xBB}, {0xC5, 0xBC}, /* 0xF0-0xF3 */ + {0xC5, 0xBD}, {0xC5, 0xBE}, {0xC5, 0xC4}, {0xC5, 0xC5}, /* 0xF4-0xF7 */ + {0xC5, 0xC6}, {0xC5, 0xC7}, {0xC5, 0xC8}, {0xC5, 0xC9}, /* 0xF8-0xFB */ + {0xC5, 0xCA}, {0xC5, 0xCC}, {0xC5, 0xCE}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD4, 0x9E}, {0xD4, 0x9F}, {0xD4, 0xA0}, /* 0x40-0x43 */ + {0xD4, 0xA1}, {0xD4, 0xA2}, {0xD4, 0xA3}, {0xD4, 0xA4}, /* 0x44-0x47 */ + {0xD4, 0xA5}, {0xD4, 0xA6}, {0xD4, 0xA7}, {0xD4, 0xA8}, /* 0x48-0x4B */ + {0xD4, 0xAA}, {0xD4, 0xAB}, {0xD4, 0xAC}, {0xD4, 0xAD}, /* 0x4C-0x4F */ + {0xD4, 0xAE}, {0xD4, 0xAF}, {0xD4, 0xB0}, {0xD4, 0xB1}, /* 0x50-0x53 */ + {0xD4, 0xB2}, {0xD4, 0xB3}, {0xD4, 0xB4}, {0xD4, 0xB5}, /* 0x54-0x57 */ + {0xD4, 0xB6}, {0xD4, 0xB7}, {0xD4, 0xB8}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD4, 0xB9}, {0xD4, 0xBA}, {0xD4, 0xBB}, /* 0x60-0x63 */ + {0xD4, 0xBC}, {0xD4, 0xBD}, {0xD4, 0xBE}, {0xD4, 0xBF}, /* 0x64-0x67 */ + {0xD4, 0xC0}, {0xD4, 0xC1}, {0xD4, 0xC2}, {0xD4, 0xC3}, /* 0x68-0x6B */ + {0xD4, 0xC4}, {0xD4, 0xC5}, {0xD4, 0xC6}, {0xD4, 0xC7}, /* 0x6C-0x6F */ + {0xD4, 0xC8}, {0xD4, 0xC9}, {0xD4, 0xCA}, {0xD4, 0xCB}, /* 0x70-0x73 */ + {0xD4, 0xCD}, {0xD4, 0xCE}, {0xD4, 0xCF}, {0xD4, 0xD1}, /* 0x74-0x77 */ + {0xD4, 0xD2}, {0xD4, 0xD3}, {0xD4, 0xD5}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD4, 0xD6}, {0xD4, 0xD7}, {0xD4, 0xD8}, /* 0x80-0x83 */ + {0xD4, 0xD9}, {0xD4, 0xDA}, {0xD4, 0xDB}, {0xD4, 0xDD}, /* 0x84-0x87 */ + {0xD4, 0xDE}, {0xD4, 0xE0}, {0xD4, 0xE1}, {0xD4, 0xE2}, /* 0x88-0x8B */ + {0xD4, 0xE3}, {0xD4, 0xE4}, {0xD4, 0xE5}, {0xD4, 0xE6}, /* 0x8C-0x8F */ + {0xD4, 0xE7}, {0xD4, 0xE9}, {0xD4, 0xEA}, {0xD4, 0xEB}, /* 0x90-0x93 */ + {0xD4, 0xED}, {0xD4, 0xEE}, {0xD4, 0xEF}, {0xD4, 0xF1}, /* 0x94-0x97 */ + {0xD4, 0xF2}, {0xD4, 0xF3}, {0xD4, 0xF4}, {0xD4, 0xF5}, /* 0x98-0x9B */ + {0xD4, 0xF6}, {0xD4, 0xF7}, {0xD4, 0xF9}, {0xD4, 0xFA}, /* 0x9C-0x9F */ + {0xD4, 0xFC}, {0xC5, 0xD0}, {0xC5, 0xD1}, {0xC5, 0xD4}, /* 0xA0-0xA3 */ + {0xC5, 0xD8}, {0xC5, 0xE0}, {0xC5, 0xE1}, {0xC5, 0xE3}, /* 0xA4-0xA7 */ + {0xC5, 0xE5}, {0xC5, 0xEC}, {0xC5, 0xED}, {0xC5, 0xEE}, /* 0xA8-0xAB */ + {0xC5, 0xF0}, {0xC5, 0xF4}, {0xC5, 0xF6}, {0xC5, 0xF7}, /* 0xAC-0xAF */ + {0xC5, 0xFC}, {0xC5, 0xFD}, {0xC5, 0xFE}, {0xC5, 0xFF}, /* 0xB0-0xB3 */ + {0xC6, 0x00}, {0xC6, 0x01}, {0xC6, 0x05}, {0xC6, 0x06}, /* 0xB4-0xB7 */ + {0xC6, 0x07}, {0xC6, 0x08}, {0xC6, 0x0C}, {0xC6, 0x10}, /* 0xB8-0xBB */ + {0xC6, 0x18}, {0xC6, 0x19}, {0xC6, 0x1B}, {0xC6, 0x1C}, /* 0xBC-0xBF */ + {0xC6, 0x24}, {0xC6, 0x25}, {0xC6, 0x28}, {0xC6, 0x2C}, /* 0xC0-0xC3 */ + {0xC6, 0x2D}, {0xC6, 0x2E}, {0xC6, 0x30}, {0xC6, 0x33}, /* 0xC4-0xC7 */ + {0xC6, 0x34}, {0xC6, 0x35}, {0xC6, 0x37}, {0xC6, 0x39}, /* 0xC8-0xCB */ + {0xC6, 0x3B}, {0xC6, 0x40}, {0xC6, 0x41}, {0xC6, 0x44}, /* 0xCC-0xCF */ + {0xC6, 0x48}, {0xC6, 0x50}, {0xC6, 0x51}, {0xC6, 0x53}, /* 0xD0-0xD3 */ + {0xC6, 0x54}, {0xC6, 0x55}, {0xC6, 0x5C}, {0xC6, 0x5D}, /* 0xD4-0xD7 */ + {0xC6, 0x60}, {0xC6, 0x6C}, {0xC6, 0x6F}, {0xC6, 0x71}, /* 0xD8-0xDB */ + {0xC6, 0x78}, {0xC6, 0x79}, {0xC6, 0x7C}, {0xC6, 0x80}, /* 0xDC-0xDF */ + {0xC6, 0x88}, {0xC6, 0x89}, {0xC6, 0x8B}, {0xC6, 0x8D}, /* 0xE0-0xE3 */ + {0xC6, 0x94}, {0xC6, 0x95}, {0xC6, 0x98}, {0xC6, 0x9C}, /* 0xE4-0xE7 */ + {0xC6, 0xA4}, {0xC6, 0xA5}, {0xC6, 0xA7}, {0xC6, 0xA9}, /* 0xE8-0xEB */ + {0xC6, 0xB0}, {0xC6, 0xB1}, {0xC6, 0xB4}, {0xC6, 0xB8}, /* 0xEC-0xEF */ + {0xC6, 0xB9}, {0xC6, 0xBA}, {0xC6, 0xC0}, {0xC6, 0xC1}, /* 0xF0-0xF3 */ + {0xC6, 0xC3}, {0xC6, 0xC5}, {0xC6, 0xCC}, {0xC6, 0xCD}, /* 0xF4-0xF7 */ + {0xC6, 0xD0}, {0xC6, 0xD4}, {0xC6, 0xDC}, {0xC6, 0xDD}, /* 0xF8-0xFB */ + {0xC6, 0xE0}, {0xC6, 0xE1}, {0xC6, 0xE8}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD4, 0xFE}, {0xD4, 0xFF}, {0xD5, 0x00}, /* 0x40-0x43 */ + {0xD5, 0x01}, {0xD5, 0x02}, {0xD5, 0x03}, {0xD5, 0x05}, /* 0x44-0x47 */ + {0xD5, 0x06}, {0xD5, 0x07}, {0xD5, 0x09}, {0xD5, 0x0A}, /* 0x48-0x4B */ + {0xD5, 0x0B}, {0xD5, 0x0D}, {0xD5, 0x0E}, {0xD5, 0x0F}, /* 0x4C-0x4F */ + {0xD5, 0x10}, {0xD5, 0x11}, {0xD5, 0x12}, {0xD5, 0x13}, /* 0x50-0x53 */ + {0xD5, 0x16}, {0xD5, 0x18}, {0xD5, 0x19}, {0xD5, 0x1A}, /* 0x54-0x57 */ + {0xD5, 0x1B}, {0xD5, 0x1C}, {0xD5, 0x1D}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD5, 0x1E}, {0xD5, 0x1F}, {0xD5, 0x20}, /* 0x60-0x63 */ + {0xD5, 0x21}, {0xD5, 0x22}, {0xD5, 0x23}, {0xD5, 0x24}, /* 0x64-0x67 */ + {0xD5, 0x25}, {0xD5, 0x26}, {0xD5, 0x27}, {0xD5, 0x28}, /* 0x68-0x6B */ + {0xD5, 0x29}, {0xD5, 0x2A}, {0xD5, 0x2B}, {0xD5, 0x2C}, /* 0x6C-0x6F */ + {0xD5, 0x2D}, {0xD5, 0x2E}, {0xD5, 0x2F}, {0xD5, 0x30}, /* 0x70-0x73 */ + {0xD5, 0x31}, {0xD5, 0x32}, {0xD5, 0x33}, {0xD5, 0x34}, /* 0x74-0x77 */ + {0xD5, 0x35}, {0xD5, 0x36}, {0xD5, 0x37}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD5, 0x38}, {0xD5, 0x39}, {0xD5, 0x3A}, /* 0x80-0x83 */ + {0xD5, 0x3B}, {0xD5, 0x3E}, {0xD5, 0x3F}, {0xD5, 0x41}, /* 0x84-0x87 */ + {0xD5, 0x42}, {0xD5, 0x43}, {0xD5, 0x45}, {0xD5, 0x46}, /* 0x88-0x8B */ + {0xD5, 0x47}, {0xD5, 0x48}, {0xD5, 0x49}, {0xD5, 0x4A}, /* 0x8C-0x8F */ + {0xD5, 0x4B}, {0xD5, 0x4E}, {0xD5, 0x50}, {0xD5, 0x52}, /* 0x90-0x93 */ + {0xD5, 0x53}, {0xD5, 0x54}, {0xD5, 0x55}, {0xD5, 0x56}, /* 0x94-0x97 */ + {0xD5, 0x57}, {0xD5, 0x5A}, {0xD5, 0x5B}, {0xD5, 0x5D}, /* 0x98-0x9B */ + {0xD5, 0x5E}, {0xD5, 0x5F}, {0xD5, 0x61}, {0xD5, 0x62}, /* 0x9C-0x9F */ + {0xD5, 0x63}, {0xC6, 0xE9}, {0xC6, 0xEC}, {0xC6, 0xF0}, /* 0xA0-0xA3 */ + {0xC6, 0xF8}, {0xC6, 0xF9}, {0xC6, 0xFD}, {0xC7, 0x04}, /* 0xA4-0xA7 */ + {0xC7, 0x05}, {0xC7, 0x08}, {0xC7, 0x0C}, {0xC7, 0x14}, /* 0xA8-0xAB */ + {0xC7, 0x15}, {0xC7, 0x17}, {0xC7, 0x19}, {0xC7, 0x20}, /* 0xAC-0xAF */ + {0xC7, 0x21}, {0xC7, 0x24}, {0xC7, 0x28}, {0xC7, 0x30}, /* 0xB0-0xB3 */ + {0xC7, 0x31}, {0xC7, 0x33}, {0xC7, 0x35}, {0xC7, 0x37}, /* 0xB4-0xB7 */ + {0xC7, 0x3C}, {0xC7, 0x3D}, {0xC7, 0x40}, {0xC7, 0x44}, /* 0xB8-0xBB */ + {0xC7, 0x4A}, {0xC7, 0x4C}, {0xC7, 0x4D}, {0xC7, 0x4F}, /* 0xBC-0xBF */ + {0xC7, 0x51}, {0xC7, 0x52}, {0xC7, 0x53}, {0xC7, 0x54}, /* 0xC0-0xC3 */ + {0xC7, 0x55}, {0xC7, 0x56}, {0xC7, 0x57}, {0xC7, 0x58}, /* 0xC4-0xC7 */ + {0xC7, 0x5C}, {0xC7, 0x60}, {0xC7, 0x68}, {0xC7, 0x6B}, /* 0xC8-0xCB */ + {0xC7, 0x74}, {0xC7, 0x75}, {0xC7, 0x78}, {0xC7, 0x7C}, /* 0xCC-0xCF */ + {0xC7, 0x7D}, {0xC7, 0x7E}, {0xC7, 0x83}, {0xC7, 0x84}, /* 0xD0-0xD3 */ + {0xC7, 0x85}, {0xC7, 0x87}, {0xC7, 0x88}, {0xC7, 0x89}, /* 0xD4-0xD7 */ + {0xC7, 0x8A}, {0xC7, 0x8E}, {0xC7, 0x90}, {0xC7, 0x91}, /* 0xD8-0xDB */ + {0xC7, 0x94}, {0xC7, 0x96}, {0xC7, 0x97}, {0xC7, 0x98}, /* 0xDC-0xDF */ + {0xC7, 0x9A}, {0xC7, 0xA0}, {0xC7, 0xA1}, {0xC7, 0xA3}, /* 0xE0-0xE3 */ + {0xC7, 0xA4}, {0xC7, 0xA5}, {0xC7, 0xA6}, {0xC7, 0xAC}, /* 0xE4-0xE7 */ + {0xC7, 0xAD}, {0xC7, 0xB0}, {0xC7, 0xB4}, {0xC7, 0xBC}, /* 0xE8-0xEB */ + {0xC7, 0xBD}, {0xC7, 0xBF}, {0xC7, 0xC0}, {0xC7, 0xC1}, /* 0xEC-0xEF */ + {0xC7, 0xC8}, {0xC7, 0xC9}, {0xC7, 0xCC}, {0xC7, 0xCE}, /* 0xF0-0xF3 */ + {0xC7, 0xD0}, {0xC7, 0xD8}, {0xC7, 0xDD}, {0xC7, 0xE4}, /* 0xF4-0xF7 */ + {0xC7, 0xE8}, {0xC7, 0xEC}, {0xC8, 0x00}, {0xC8, 0x01}, /* 0xF8-0xFB */ + {0xC8, 0x04}, {0xC8, 0x08}, {0xC8, 0x0A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD5, 0x64}, {0xD5, 0x66}, {0xD5, 0x67}, /* 0x40-0x43 */ + {0xD5, 0x6A}, {0xD5, 0x6C}, {0xD5, 0x6E}, {0xD5, 0x6F}, /* 0x44-0x47 */ + {0xD5, 0x70}, {0xD5, 0x71}, {0xD5, 0x72}, {0xD5, 0x73}, /* 0x48-0x4B */ + {0xD5, 0x76}, {0xD5, 0x77}, {0xD5, 0x79}, {0xD5, 0x7A}, /* 0x4C-0x4F */ + {0xD5, 0x7B}, {0xD5, 0x7D}, {0xD5, 0x7E}, {0xD5, 0x7F}, /* 0x50-0x53 */ + {0xD5, 0x80}, {0xD5, 0x81}, {0xD5, 0x82}, {0xD5, 0x83}, /* 0x54-0x57 */ + {0xD5, 0x86}, {0xD5, 0x8A}, {0xD5, 0x8B}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD5, 0x8C}, {0xD5, 0x8D}, {0xD5, 0x8E}, /* 0x60-0x63 */ + {0xD5, 0x8F}, {0xD5, 0x91}, {0xD5, 0x92}, {0xD5, 0x93}, /* 0x64-0x67 */ + {0xD5, 0x94}, {0xD5, 0x95}, {0xD5, 0x96}, {0xD5, 0x97}, /* 0x68-0x6B */ + {0xD5, 0x98}, {0xD5, 0x99}, {0xD5, 0x9A}, {0xD5, 0x9B}, /* 0x6C-0x6F */ + {0xD5, 0x9C}, {0xD5, 0x9D}, {0xD5, 0x9E}, {0xD5, 0x9F}, /* 0x70-0x73 */ + {0xD5, 0xA0}, {0xD5, 0xA1}, {0xD5, 0xA2}, {0xD5, 0xA3}, /* 0x74-0x77 */ + {0xD5, 0xA4}, {0xD5, 0xA6}, {0xD5, 0xA7}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD5, 0xA8}, {0xD5, 0xA9}, {0xD5, 0xAA}, /* 0x80-0x83 */ + {0xD5, 0xAB}, {0xD5, 0xAC}, {0xD5, 0xAD}, {0xD5, 0xAE}, /* 0x84-0x87 */ + {0xD5, 0xAF}, {0xD5, 0xB0}, {0xD5, 0xB1}, {0xD5, 0xB2}, /* 0x88-0x8B */ + {0xD5, 0xB3}, {0xD5, 0xB4}, {0xD5, 0xB5}, {0xD5, 0xB6}, /* 0x8C-0x8F */ + {0xD5, 0xB7}, {0xD5, 0xB8}, {0xD5, 0xB9}, {0xD5, 0xBA}, /* 0x90-0x93 */ + {0xD5, 0xBB}, {0xD5, 0xBC}, {0xD5, 0xBD}, {0xD5, 0xBE}, /* 0x94-0x97 */ + {0xD5, 0xBF}, {0xD5, 0xC0}, {0xD5, 0xC1}, {0xD5, 0xC2}, /* 0x98-0x9B */ + {0xD5, 0xC3}, {0xD5, 0xC4}, {0xD5, 0xC5}, {0xD5, 0xC6}, /* 0x9C-0x9F */ + {0xD5, 0xC7}, {0xC8, 0x10}, {0xC8, 0x11}, {0xC8, 0x13}, /* 0xA0-0xA3 */ + {0xC8, 0x15}, {0xC8, 0x16}, {0xC8, 0x1C}, {0xC8, 0x1D}, /* 0xA4-0xA7 */ + {0xC8, 0x20}, {0xC8, 0x24}, {0xC8, 0x2C}, {0xC8, 0x2D}, /* 0xA8-0xAB */ + {0xC8, 0x2F}, {0xC8, 0x31}, {0xC8, 0x38}, {0xC8, 0x3C}, /* 0xAC-0xAF */ + {0xC8, 0x40}, {0xC8, 0x48}, {0xC8, 0x49}, {0xC8, 0x4C}, /* 0xB0-0xB3 */ + {0xC8, 0x4D}, {0xC8, 0x54}, {0xC8, 0x70}, {0xC8, 0x71}, /* 0xB4-0xB7 */ + {0xC8, 0x74}, {0xC8, 0x78}, {0xC8, 0x7A}, {0xC8, 0x80}, /* 0xB8-0xBB */ + {0xC8, 0x81}, {0xC8, 0x83}, {0xC8, 0x85}, {0xC8, 0x86}, /* 0xBC-0xBF */ + {0xC8, 0x87}, {0xC8, 0x8B}, {0xC8, 0x8C}, {0xC8, 0x8D}, /* 0xC0-0xC3 */ + {0xC8, 0x94}, {0xC8, 0x9D}, {0xC8, 0x9F}, {0xC8, 0xA1}, /* 0xC4-0xC7 */ + {0xC8, 0xA8}, {0xC8, 0xBC}, {0xC8, 0xBD}, {0xC8, 0xC4}, /* 0xC8-0xCB */ + {0xC8, 0xC8}, {0xC8, 0xCC}, {0xC8, 0xD4}, {0xC8, 0xD5}, /* 0xCC-0xCF */ + {0xC8, 0xD7}, {0xC8, 0xD9}, {0xC8, 0xE0}, {0xC8, 0xE1}, /* 0xD0-0xD3 */ + {0xC8, 0xE4}, {0xC8, 0xF5}, {0xC8, 0xFC}, {0xC8, 0xFD}, /* 0xD4-0xD7 */ + {0xC9, 0x00}, {0xC9, 0x04}, {0xC9, 0x05}, {0xC9, 0x06}, /* 0xD8-0xDB */ + {0xC9, 0x0C}, {0xC9, 0x0D}, {0xC9, 0x0F}, {0xC9, 0x11}, /* 0xDC-0xDF */ + {0xC9, 0x18}, {0xC9, 0x2C}, {0xC9, 0x34}, {0xC9, 0x50}, /* 0xE0-0xE3 */ + {0xC9, 0x51}, {0xC9, 0x54}, {0xC9, 0x58}, {0xC9, 0x60}, /* 0xE4-0xE7 */ + {0xC9, 0x61}, {0xC9, 0x63}, {0xC9, 0x6C}, {0xC9, 0x70}, /* 0xE8-0xEB */ + {0xC9, 0x74}, {0xC9, 0x7C}, {0xC9, 0x88}, {0xC9, 0x89}, /* 0xEC-0xEF */ + {0xC9, 0x8C}, {0xC9, 0x90}, {0xC9, 0x98}, {0xC9, 0x99}, /* 0xF0-0xF3 */ + {0xC9, 0x9B}, {0xC9, 0x9D}, {0xC9, 0xC0}, {0xC9, 0xC1}, /* 0xF4-0xF7 */ + {0xC9, 0xC4}, {0xC9, 0xC7}, {0xC9, 0xC8}, {0xC9, 0xCA}, /* 0xF8-0xFB */ + {0xC9, 0xD0}, {0xC9, 0xD1}, {0xC9, 0xD3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD5, 0xCA}, {0xD5, 0xCB}, {0xD5, 0xCD}, /* 0x40-0x43 */ + {0xD5, 0xCE}, {0xD5, 0xCF}, {0xD5, 0xD1}, {0xD5, 0xD3}, /* 0x44-0x47 */ + {0xD5, 0xD4}, {0xD5, 0xD5}, {0xD5, 0xD6}, {0xD5, 0xD7}, /* 0x48-0x4B */ + {0xD5, 0xDA}, {0xD5, 0xDC}, {0xD5, 0xDE}, {0xD5, 0xDF}, /* 0x4C-0x4F */ + {0xD5, 0xE0}, {0xD5, 0xE1}, {0xD5, 0xE2}, {0xD5, 0xE3}, /* 0x50-0x53 */ + {0xD5, 0xE6}, {0xD5, 0xE7}, {0xD5, 0xE9}, {0xD5, 0xEA}, /* 0x54-0x57 */ + {0xD5, 0xEB}, {0xD5, 0xED}, {0xD5, 0xEE}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD5, 0xEF}, {0xD5, 0xF0}, {0xD5, 0xF1}, /* 0x60-0x63 */ + {0xD5, 0xF2}, {0xD5, 0xF3}, {0xD5, 0xF6}, {0xD5, 0xF8}, /* 0x64-0x67 */ + {0xD5, 0xFA}, {0xD5, 0xFB}, {0xD5, 0xFC}, {0xD5, 0xFD}, /* 0x68-0x6B */ + {0xD5, 0xFE}, {0xD5, 0xFF}, {0xD6, 0x02}, {0xD6, 0x03}, /* 0x6C-0x6F */ + {0xD6, 0x05}, {0xD6, 0x06}, {0xD6, 0x07}, {0xD6, 0x09}, /* 0x70-0x73 */ + {0xD6, 0x0A}, {0xD6, 0x0B}, {0xD6, 0x0C}, {0xD6, 0x0D}, /* 0x74-0x77 */ + {0xD6, 0x0E}, {0xD6, 0x0F}, {0xD6, 0x12}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD6, 0x16}, {0xD6, 0x17}, {0xD6, 0x18}, /* 0x80-0x83 */ + {0xD6, 0x19}, {0xD6, 0x1A}, {0xD6, 0x1B}, {0xD6, 0x1D}, /* 0x84-0x87 */ + {0xD6, 0x1E}, {0xD6, 0x1F}, {0xD6, 0x21}, {0xD6, 0x22}, /* 0x88-0x8B */ + {0xD6, 0x23}, {0xD6, 0x25}, {0xD6, 0x26}, {0xD6, 0x27}, /* 0x8C-0x8F */ + {0xD6, 0x28}, {0xD6, 0x29}, {0xD6, 0x2A}, {0xD6, 0x2B}, /* 0x90-0x93 */ + {0xD6, 0x2C}, {0xD6, 0x2E}, {0xD6, 0x2F}, {0xD6, 0x30}, /* 0x94-0x97 */ + {0xD6, 0x31}, {0xD6, 0x32}, {0xD6, 0x33}, {0xD6, 0x34}, /* 0x98-0x9B */ + {0xD6, 0x35}, {0xD6, 0x36}, {0xD6, 0x37}, {0xD6, 0x3A}, /* 0x9C-0x9F */ + {0xD6, 0x3B}, {0xC9, 0xD5}, {0xC9, 0xD6}, {0xC9, 0xD9}, /* 0xA0-0xA3 */ + {0xC9, 0xDA}, {0xC9, 0xDC}, {0xC9, 0xDD}, {0xC9, 0xE0}, /* 0xA4-0xA7 */ + {0xC9, 0xE2}, {0xC9, 0xE4}, {0xC9, 0xE7}, {0xC9, 0xEC}, /* 0xA8-0xAB */ + {0xC9, 0xED}, {0xC9, 0xEF}, {0xC9, 0xF0}, {0xC9, 0xF1}, /* 0xAC-0xAF */ + {0xC9, 0xF8}, {0xC9, 0xF9}, {0xC9, 0xFC}, {0xCA, 0x00}, /* 0xB0-0xB3 */ + {0xCA, 0x08}, {0xCA, 0x09}, {0xCA, 0x0B}, {0xCA, 0x0C}, /* 0xB4-0xB7 */ + {0xCA, 0x0D}, {0xCA, 0x14}, {0xCA, 0x18}, {0xCA, 0x29}, /* 0xB8-0xBB */ + {0xCA, 0x4C}, {0xCA, 0x4D}, {0xCA, 0x50}, {0xCA, 0x54}, /* 0xBC-0xBF */ + {0xCA, 0x5C}, {0xCA, 0x5D}, {0xCA, 0x5F}, {0xCA, 0x60}, /* 0xC0-0xC3 */ + {0xCA, 0x61}, {0xCA, 0x68}, {0xCA, 0x7D}, {0xCA, 0x84}, /* 0xC4-0xC7 */ + {0xCA, 0x98}, {0xCA, 0xBC}, {0xCA, 0xBD}, {0xCA, 0xC0}, /* 0xC8-0xCB */ + {0xCA, 0xC4}, {0xCA, 0xCC}, {0xCA, 0xCD}, {0xCA, 0xCF}, /* 0xCC-0xCF */ + {0xCA, 0xD1}, {0xCA, 0xD3}, {0xCA, 0xD8}, {0xCA, 0xD9}, /* 0xD0-0xD3 */ + {0xCA, 0xE0}, {0xCA, 0xEC}, {0xCA, 0xF4}, {0xCB, 0x08}, /* 0xD4-0xD7 */ + {0xCB, 0x10}, {0xCB, 0x14}, {0xCB, 0x18}, {0xCB, 0x20}, /* 0xD8-0xDB */ + {0xCB, 0x21}, {0xCB, 0x41}, {0xCB, 0x48}, {0xCB, 0x49}, /* 0xDC-0xDF */ + {0xCB, 0x4C}, {0xCB, 0x50}, {0xCB, 0x58}, {0xCB, 0x59}, /* 0xE0-0xE3 */ + {0xCB, 0x5D}, {0xCB, 0x64}, {0xCB, 0x78}, {0xCB, 0x79}, /* 0xE4-0xE7 */ + {0xCB, 0x9C}, {0xCB, 0xB8}, {0xCB, 0xD4}, {0xCB, 0xE4}, /* 0xE8-0xEB */ + {0xCB, 0xE7}, {0xCB, 0xE9}, {0xCC, 0x0C}, {0xCC, 0x0D}, /* 0xEC-0xEF */ + {0xCC, 0x10}, {0xCC, 0x14}, {0xCC, 0x1C}, {0xCC, 0x1D}, /* 0xF0-0xF3 */ + {0xCC, 0x21}, {0xCC, 0x22}, {0xCC, 0x27}, {0xCC, 0x28}, /* 0xF4-0xF7 */ + {0xCC, 0x29}, {0xCC, 0x2C}, {0xCC, 0x2E}, {0xCC, 0x30}, /* 0xF8-0xFB */ + {0xCC, 0x38}, {0xCC, 0x39}, {0xCC, 0x3B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD6, 0x3D}, {0xD6, 0x3E}, {0xD6, 0x3F}, /* 0x40-0x43 */ + {0xD6, 0x41}, {0xD6, 0x42}, {0xD6, 0x43}, {0xD6, 0x44}, /* 0x44-0x47 */ + {0xD6, 0x46}, {0xD6, 0x47}, {0xD6, 0x4A}, {0xD6, 0x4C}, /* 0x48-0x4B */ + {0xD6, 0x4E}, {0xD6, 0x4F}, {0xD6, 0x50}, {0xD6, 0x52}, /* 0x4C-0x4F */ + {0xD6, 0x53}, {0xD6, 0x56}, {0xD6, 0x57}, {0xD6, 0x59}, /* 0x50-0x53 */ + {0xD6, 0x5A}, {0xD6, 0x5B}, {0xD6, 0x5D}, {0xD6, 0x5E}, /* 0x54-0x57 */ + {0xD6, 0x5F}, {0xD6, 0x60}, {0xD6, 0x61}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD6, 0x62}, {0xD6, 0x63}, {0xD6, 0x64}, /* 0x60-0x63 */ + {0xD6, 0x65}, {0xD6, 0x66}, {0xD6, 0x68}, {0xD6, 0x6A}, /* 0x64-0x67 */ + {0xD6, 0x6B}, {0xD6, 0x6C}, {0xD6, 0x6D}, {0xD6, 0x6E}, /* 0x68-0x6B */ + {0xD6, 0x6F}, {0xD6, 0x72}, {0xD6, 0x73}, {0xD6, 0x75}, /* 0x6C-0x6F */ + {0xD6, 0x76}, {0xD6, 0x77}, {0xD6, 0x78}, {0xD6, 0x79}, /* 0x70-0x73 */ + {0xD6, 0x7A}, {0xD6, 0x7B}, {0xD6, 0x7C}, {0xD6, 0x7D}, /* 0x74-0x77 */ + {0xD6, 0x7E}, {0xD6, 0x7F}, {0xD6, 0x80}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD6, 0x81}, {0xD6, 0x82}, {0xD6, 0x84}, /* 0x80-0x83 */ + {0xD6, 0x86}, {0xD6, 0x87}, {0xD6, 0x88}, {0xD6, 0x89}, /* 0x84-0x87 */ + {0xD6, 0x8A}, {0xD6, 0x8B}, {0xD6, 0x8E}, {0xD6, 0x8F}, /* 0x88-0x8B */ + {0xD6, 0x91}, {0xD6, 0x92}, {0xD6, 0x93}, {0xD6, 0x95}, /* 0x8C-0x8F */ + {0xD6, 0x96}, {0xD6, 0x97}, {0xD6, 0x98}, {0xD6, 0x99}, /* 0x90-0x93 */ + {0xD6, 0x9A}, {0xD6, 0x9B}, {0xD6, 0x9C}, {0xD6, 0x9E}, /* 0x94-0x97 */ + {0xD6, 0xA0}, {0xD6, 0xA2}, {0xD6, 0xA3}, {0xD6, 0xA4}, /* 0x98-0x9B */ + {0xD6, 0xA5}, {0xD6, 0xA6}, {0xD6, 0xA7}, {0xD6, 0xA9}, /* 0x9C-0x9F */ + {0xD6, 0xAA}, {0xCC, 0x3C}, {0xCC, 0x3D}, {0xCC, 0x3E}, /* 0xA0-0xA3 */ + {0xCC, 0x44}, {0xCC, 0x45}, {0xCC, 0x48}, {0xCC, 0x4C}, /* 0xA4-0xA7 */ + {0xCC, 0x54}, {0xCC, 0x55}, {0xCC, 0x57}, {0xCC, 0x58}, /* 0xA8-0xAB */ + {0xCC, 0x59}, {0xCC, 0x60}, {0xCC, 0x64}, {0xCC, 0x66}, /* 0xAC-0xAF */ + {0xCC, 0x68}, {0xCC, 0x70}, {0xCC, 0x75}, {0xCC, 0x98}, /* 0xB0-0xB3 */ + {0xCC, 0x99}, {0xCC, 0x9C}, {0xCC, 0xA0}, {0xCC, 0xA8}, /* 0xB4-0xB7 */ + {0xCC, 0xA9}, {0xCC, 0xAB}, {0xCC, 0xAC}, {0xCC, 0xAD}, /* 0xB8-0xBB */ + {0xCC, 0xB4}, {0xCC, 0xB5}, {0xCC, 0xB8}, {0xCC, 0xBC}, /* 0xBC-0xBF */ + {0xCC, 0xC4}, {0xCC, 0xC5}, {0xCC, 0xC7}, {0xCC, 0xC9}, /* 0xC0-0xC3 */ + {0xCC, 0xD0}, {0xCC, 0xD4}, {0xCC, 0xE4}, {0xCC, 0xEC}, /* 0xC4-0xC7 */ + {0xCC, 0xF0}, {0xCD, 0x01}, {0xCD, 0x08}, {0xCD, 0x09}, /* 0xC8-0xCB */ + {0xCD, 0x0C}, {0xCD, 0x10}, {0xCD, 0x18}, {0xCD, 0x19}, /* 0xCC-0xCF */ + {0xCD, 0x1B}, {0xCD, 0x1D}, {0xCD, 0x24}, {0xCD, 0x28}, /* 0xD0-0xD3 */ + {0xCD, 0x2C}, {0xCD, 0x39}, {0xCD, 0x5C}, {0xCD, 0x60}, /* 0xD4-0xD7 */ + {0xCD, 0x64}, {0xCD, 0x6C}, {0xCD, 0x6D}, {0xCD, 0x6F}, /* 0xD8-0xDB */ + {0xCD, 0x71}, {0xCD, 0x78}, {0xCD, 0x88}, {0xCD, 0x94}, /* 0xDC-0xDF */ + {0xCD, 0x95}, {0xCD, 0x98}, {0xCD, 0x9C}, {0xCD, 0xA4}, /* 0xE0-0xE3 */ + {0xCD, 0xA5}, {0xCD, 0xA7}, {0xCD, 0xA9}, {0xCD, 0xB0}, /* 0xE4-0xE7 */ + {0xCD, 0xC4}, {0xCD, 0xCC}, {0xCD, 0xD0}, {0xCD, 0xE8}, /* 0xE8-0xEB */ + {0xCD, 0xEC}, {0xCD, 0xF0}, {0xCD, 0xF8}, {0xCD, 0xF9}, /* 0xEC-0xEF */ + {0xCD, 0xFB}, {0xCD, 0xFD}, {0xCE, 0x04}, {0xCE, 0x08}, /* 0xF0-0xF3 */ + {0xCE, 0x0C}, {0xCE, 0x14}, {0xCE, 0x19}, {0xCE, 0x20}, /* 0xF4-0xF7 */ + {0xCE, 0x21}, {0xCE, 0x24}, {0xCE, 0x28}, {0xCE, 0x30}, /* 0xF8-0xFB */ + {0xCE, 0x31}, {0xCE, 0x33}, {0xCE, 0x35}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD6, 0xAB}, {0xD6, 0xAD}, {0xD6, 0xAE}, /* 0x40-0x43 */ + {0xD6, 0xAF}, {0xD6, 0xB1}, {0xD6, 0xB2}, {0xD6, 0xB3}, /* 0x44-0x47 */ + {0xD6, 0xB4}, {0xD6, 0xB5}, {0xD6, 0xB6}, {0xD6, 0xB7}, /* 0x48-0x4B */ + {0xD6, 0xB8}, {0xD6, 0xBA}, {0xD6, 0xBC}, {0xD6, 0xBD}, /* 0x4C-0x4F */ + {0xD6, 0xBE}, {0xD6, 0xBF}, {0xD6, 0xC0}, {0xD6, 0xC1}, /* 0x50-0x53 */ + {0xD6, 0xC2}, {0xD6, 0xC3}, {0xD6, 0xC6}, {0xD6, 0xC7}, /* 0x54-0x57 */ + {0xD6, 0xC9}, {0xD6, 0xCA}, {0xD6, 0xCB}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD6, 0xCD}, {0xD6, 0xCE}, {0xD6, 0xCF}, /* 0x60-0x63 */ + {0xD6, 0xD0}, {0xD6, 0xD2}, {0xD6, 0xD3}, {0xD6, 0xD5}, /* 0x64-0x67 */ + {0xD6, 0xD6}, {0xD6, 0xD8}, {0xD6, 0xDA}, {0xD6, 0xDB}, /* 0x68-0x6B */ + {0xD6, 0xDC}, {0xD6, 0xDD}, {0xD6, 0xDE}, {0xD6, 0xDF}, /* 0x6C-0x6F */ + {0xD6, 0xE1}, {0xD6, 0xE2}, {0xD6, 0xE3}, {0xD6, 0xE5}, /* 0x70-0x73 */ + {0xD6, 0xE6}, {0xD6, 0xE7}, {0xD6, 0xE9}, {0xD6, 0xEA}, /* 0x74-0x77 */ + {0xD6, 0xEB}, {0xD6, 0xEC}, {0xD6, 0xED}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD6, 0xEE}, {0xD6, 0xEF}, {0xD6, 0xF1}, /* 0x80-0x83 */ + {0xD6, 0xF2}, {0xD6, 0xF3}, {0xD6, 0xF4}, {0xD6, 0xF6}, /* 0x84-0x87 */ + {0xD6, 0xF7}, {0xD6, 0xF8}, {0xD6, 0xF9}, {0xD6, 0xFA}, /* 0x88-0x8B */ + {0xD6, 0xFB}, {0xD6, 0xFE}, {0xD6, 0xFF}, {0xD7, 0x01}, /* 0x8C-0x8F */ + {0xD7, 0x02}, {0xD7, 0x03}, {0xD7, 0x05}, {0xD7, 0x06}, /* 0x90-0x93 */ + {0xD7, 0x07}, {0xD7, 0x08}, {0xD7, 0x09}, {0xD7, 0x0A}, /* 0x94-0x97 */ + {0xD7, 0x0B}, {0xD7, 0x0C}, {0xD7, 0x0D}, {0xD7, 0x0E}, /* 0x98-0x9B */ + {0xD7, 0x0F}, {0xD7, 0x10}, {0xD7, 0x12}, {0xD7, 0x13}, /* 0x9C-0x9F */ + {0xD7, 0x14}, {0xCE, 0x58}, {0xCE, 0x59}, {0xCE, 0x5C}, /* 0xA0-0xA3 */ + {0xCE, 0x5F}, {0xCE, 0x60}, {0xCE, 0x61}, {0xCE, 0x68}, /* 0xA4-0xA7 */ + {0xCE, 0x69}, {0xCE, 0x6B}, {0xCE, 0x6D}, {0xCE, 0x74}, /* 0xA8-0xAB */ + {0xCE, 0x75}, {0xCE, 0x78}, {0xCE, 0x7C}, {0xCE, 0x84}, /* 0xAC-0xAF */ + {0xCE, 0x85}, {0xCE, 0x87}, {0xCE, 0x89}, {0xCE, 0x90}, /* 0xB0-0xB3 */ + {0xCE, 0x91}, {0xCE, 0x94}, {0xCE, 0x98}, {0xCE, 0xA0}, /* 0xB4-0xB7 */ + {0xCE, 0xA1}, {0xCE, 0xA3}, {0xCE, 0xA4}, {0xCE, 0xA5}, /* 0xB8-0xBB */ + {0xCE, 0xAC}, {0xCE, 0xAD}, {0xCE, 0xC1}, {0xCE, 0xE4}, /* 0xBC-0xBF */ + {0xCE, 0xE5}, {0xCE, 0xE8}, {0xCE, 0xEB}, {0xCE, 0xEC}, /* 0xC0-0xC3 */ + {0xCE, 0xF4}, {0xCE, 0xF5}, {0xCE, 0xF7}, {0xCE, 0xF8}, /* 0xC4-0xC7 */ + {0xCE, 0xF9}, {0xCF, 0x00}, {0xCF, 0x01}, {0xCF, 0x04}, /* 0xC8-0xCB */ + {0xCF, 0x08}, {0xCF, 0x10}, {0xCF, 0x11}, {0xCF, 0x13}, /* 0xCC-0xCF */ + {0xCF, 0x15}, {0xCF, 0x1C}, {0xCF, 0x20}, {0xCF, 0x24}, /* 0xD0-0xD3 */ + {0xCF, 0x2C}, {0xCF, 0x2D}, {0xCF, 0x2F}, {0xCF, 0x30}, /* 0xD4-0xD7 */ + {0xCF, 0x31}, {0xCF, 0x38}, {0xCF, 0x54}, {0xCF, 0x55}, /* 0xD8-0xDB */ + {0xCF, 0x58}, {0xCF, 0x5C}, {0xCF, 0x64}, {0xCF, 0x65}, /* 0xDC-0xDF */ + {0xCF, 0x67}, {0xCF, 0x69}, {0xCF, 0x70}, {0xCF, 0x71}, /* 0xE0-0xE3 */ + {0xCF, 0x74}, {0xCF, 0x78}, {0xCF, 0x80}, {0xCF, 0x85}, /* 0xE4-0xE7 */ + {0xCF, 0x8C}, {0xCF, 0xA1}, {0xCF, 0xA8}, {0xCF, 0xB0}, /* 0xE8-0xEB */ + {0xCF, 0xC4}, {0xCF, 0xE0}, {0xCF, 0xE1}, {0xCF, 0xE4}, /* 0xEC-0xEF */ + {0xCF, 0xE8}, {0xCF, 0xF0}, {0xCF, 0xF1}, {0xCF, 0xF3}, /* 0xF0-0xF3 */ + {0xCF, 0xF5}, {0xCF, 0xFC}, {0xD0, 0x00}, {0xD0, 0x04}, /* 0xF4-0xF7 */ + {0xD0, 0x11}, {0xD0, 0x18}, {0xD0, 0x2D}, {0xD0, 0x34}, /* 0xF8-0xFB */ + {0xD0, 0x35}, {0xD0, 0x38}, {0xD0, 0x3C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD7, 0x15}, {0xD7, 0x16}, {0xD7, 0x17}, /* 0x40-0x43 */ + {0xD7, 0x1A}, {0xD7, 0x1B}, {0xD7, 0x1D}, {0xD7, 0x1E}, /* 0x44-0x47 */ + {0xD7, 0x1F}, {0xD7, 0x21}, {0xD7, 0x22}, {0xD7, 0x23}, /* 0x48-0x4B */ + {0xD7, 0x24}, {0xD7, 0x25}, {0xD7, 0x26}, {0xD7, 0x27}, /* 0x4C-0x4F */ + {0xD7, 0x2A}, {0xD7, 0x2C}, {0xD7, 0x2E}, {0xD7, 0x2F}, /* 0x50-0x53 */ + {0xD7, 0x30}, {0xD7, 0x31}, {0xD7, 0x32}, {0xD7, 0x33}, /* 0x54-0x57 */ + {0xD7, 0x36}, {0xD7, 0x37}, {0xD7, 0x39}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0xD7, 0x3A}, {0xD7, 0x3B}, {0xD7, 0x3D}, /* 0x60-0x63 */ + {0xD7, 0x3E}, {0xD7, 0x3F}, {0xD7, 0x40}, {0xD7, 0x41}, /* 0x64-0x67 */ + {0xD7, 0x42}, {0xD7, 0x43}, {0xD7, 0x45}, {0xD7, 0x46}, /* 0x68-0x6B */ + {0xD7, 0x48}, {0xD7, 0x4A}, {0xD7, 0x4B}, {0xD7, 0x4C}, /* 0x6C-0x6F */ + {0xD7, 0x4D}, {0xD7, 0x4E}, {0xD7, 0x4F}, {0xD7, 0x52}, /* 0x70-0x73 */ + {0xD7, 0x53}, {0xD7, 0x55}, {0xD7, 0x5A}, {0xD7, 0x5B}, /* 0x74-0x77 */ + {0xD7, 0x5C}, {0xD7, 0x5D}, {0xD7, 0x5E}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0xD7, 0x5F}, {0xD7, 0x62}, {0xD7, 0x64}, /* 0x80-0x83 */ + {0xD7, 0x66}, {0xD7, 0x67}, {0xD7, 0x68}, {0xD7, 0x6A}, /* 0x84-0x87 */ + {0xD7, 0x6B}, {0xD7, 0x6D}, {0xD7, 0x6E}, {0xD7, 0x6F}, /* 0x88-0x8B */ + {0xD7, 0x71}, {0xD7, 0x72}, {0xD7, 0x73}, {0xD7, 0x75}, /* 0x8C-0x8F */ + {0xD7, 0x76}, {0xD7, 0x77}, {0xD7, 0x78}, {0xD7, 0x79}, /* 0x90-0x93 */ + {0xD7, 0x7A}, {0xD7, 0x7B}, {0xD7, 0x7E}, {0xD7, 0x7F}, /* 0x94-0x97 */ + {0xD7, 0x80}, {0xD7, 0x82}, {0xD7, 0x83}, {0xD7, 0x84}, /* 0x98-0x9B */ + {0xD7, 0x85}, {0xD7, 0x86}, {0xD7, 0x87}, {0xD7, 0x8A}, /* 0x9C-0x9F */ + {0xD7, 0x8B}, {0xD0, 0x44}, {0xD0, 0x45}, {0xD0, 0x47}, /* 0xA0-0xA3 */ + {0xD0, 0x49}, {0xD0, 0x50}, {0xD0, 0x54}, {0xD0, 0x58}, /* 0xA4-0xA7 */ + {0xD0, 0x60}, {0xD0, 0x6C}, {0xD0, 0x6D}, {0xD0, 0x70}, /* 0xA8-0xAB */ + {0xD0, 0x74}, {0xD0, 0x7C}, {0xD0, 0x7D}, {0xD0, 0x81}, /* 0xAC-0xAF */ + {0xD0, 0xA4}, {0xD0, 0xA5}, {0xD0, 0xA8}, {0xD0, 0xAC}, /* 0xB0-0xB3 */ + {0xD0, 0xB4}, {0xD0, 0xB5}, {0xD0, 0xB7}, {0xD0, 0xB9}, /* 0xB4-0xB7 */ + {0xD0, 0xC0}, {0xD0, 0xC1}, {0xD0, 0xC4}, {0xD0, 0xC8}, /* 0xB8-0xBB */ + {0xD0, 0xC9}, {0xD0, 0xD0}, {0xD0, 0xD1}, {0xD0, 0xD3}, /* 0xBC-0xBF */ + {0xD0, 0xD4}, {0xD0, 0xD5}, {0xD0, 0xDC}, {0xD0, 0xDD}, /* 0xC0-0xC3 */ + {0xD0, 0xE0}, {0xD0, 0xE4}, {0xD0, 0xEC}, {0xD0, 0xED}, /* 0xC4-0xC7 */ + {0xD0, 0xEF}, {0xD0, 0xF0}, {0xD0, 0xF1}, {0xD0, 0xF8}, /* 0xC8-0xCB */ + {0xD1, 0x0D}, {0xD1, 0x30}, {0xD1, 0x31}, {0xD1, 0x34}, /* 0xCC-0xCF */ + {0xD1, 0x38}, {0xD1, 0x3A}, {0xD1, 0x40}, {0xD1, 0x41}, /* 0xD0-0xD3 */ + {0xD1, 0x43}, {0xD1, 0x44}, {0xD1, 0x45}, {0xD1, 0x4C}, /* 0xD4-0xD7 */ + {0xD1, 0x4D}, {0xD1, 0x50}, {0xD1, 0x54}, {0xD1, 0x5C}, /* 0xD8-0xDB */ + {0xD1, 0x5D}, {0xD1, 0x5F}, {0xD1, 0x61}, {0xD1, 0x68}, /* 0xDC-0xDF */ + {0xD1, 0x6C}, {0xD1, 0x7C}, {0xD1, 0x84}, {0xD1, 0x88}, /* 0xE0-0xE3 */ + {0xD1, 0xA0}, {0xD1, 0xA1}, {0xD1, 0xA4}, {0xD1, 0xA8}, /* 0xE4-0xE7 */ + {0xD1, 0xB0}, {0xD1, 0xB1}, {0xD1, 0xB3}, {0xD1, 0xB5}, /* 0xE8-0xEB */ + {0xD1, 0xBA}, {0xD1, 0xBC}, {0xD1, 0xC0}, {0xD1, 0xD8}, /* 0xEC-0xEF */ + {0xD1, 0xF4}, {0xD1, 0xF8}, {0xD2, 0x07}, {0xD2, 0x09}, /* 0xF0-0xF3 */ + {0xD2, 0x10}, {0xD2, 0x2C}, {0xD2, 0x2D}, {0xD2, 0x30}, /* 0xF4-0xF7 */ + {0xD2, 0x34}, {0xD2, 0x3C}, {0xD2, 0x3D}, {0xD2, 0x3F}, /* 0xF8-0xFB */ + {0xD2, 0x41}, {0xD2, 0x48}, {0xD2, 0x5C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0xD7, 0x8D}, {0xD7, 0x8E}, {0xD7, 0x8F}, /* 0x40-0x43 */ + {0xD7, 0x91}, {0xD7, 0x92}, {0xD7, 0x93}, {0xD7, 0x94}, /* 0x44-0x47 */ + {0xD7, 0x95}, {0xD7, 0x96}, {0xD7, 0x97}, {0xD7, 0x9A}, /* 0x48-0x4B */ + {0xD7, 0x9C}, {0xD7, 0x9E}, {0xD7, 0x9F}, {0xD7, 0xA0}, /* 0x4C-0x4F */ + {0xD7, 0xA1}, {0xD7, 0xA2}, {0xD7, 0xA3}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xD2, 0x64}, {0xD2, 0x80}, {0xD2, 0x81}, /* 0xA0-0xA3 */ + {0xD2, 0x84}, {0xD2, 0x88}, {0xD2, 0x90}, {0xD2, 0x91}, /* 0xA4-0xA7 */ + {0xD2, 0x95}, {0xD2, 0x9C}, {0xD2, 0xA0}, {0xD2, 0xA4}, /* 0xA8-0xAB */ + {0xD2, 0xAC}, {0xD2, 0xB1}, {0xD2, 0xB8}, {0xD2, 0xB9}, /* 0xAC-0xAF */ + {0xD2, 0xBC}, {0xD2, 0xBF}, {0xD2, 0xC0}, {0xD2, 0xC2}, /* 0xB0-0xB3 */ + {0xD2, 0xC8}, {0xD2, 0xC9}, {0xD2, 0xCB}, {0xD2, 0xD4}, /* 0xB4-0xB7 */ + {0xD2, 0xD8}, {0xD2, 0xDC}, {0xD2, 0xE4}, {0xD2, 0xE5}, /* 0xB8-0xBB */ + {0xD2, 0xF0}, {0xD2, 0xF1}, {0xD2, 0xF4}, {0xD2, 0xF8}, /* 0xBC-0xBF */ + {0xD3, 0x00}, {0xD3, 0x01}, {0xD3, 0x03}, {0xD3, 0x05}, /* 0xC0-0xC3 */ + {0xD3, 0x0C}, {0xD3, 0x0D}, {0xD3, 0x0E}, {0xD3, 0x10}, /* 0xC4-0xC7 */ + {0xD3, 0x14}, {0xD3, 0x16}, {0xD3, 0x1C}, {0xD3, 0x1D}, /* 0xC8-0xCB */ + {0xD3, 0x1F}, {0xD3, 0x20}, {0xD3, 0x21}, {0xD3, 0x25}, /* 0xCC-0xCF */ + {0xD3, 0x28}, {0xD3, 0x29}, {0xD3, 0x2C}, {0xD3, 0x30}, /* 0xD0-0xD3 */ + {0xD3, 0x38}, {0xD3, 0x39}, {0xD3, 0x3B}, {0xD3, 0x3C}, /* 0xD4-0xD7 */ + {0xD3, 0x3D}, {0xD3, 0x44}, {0xD3, 0x45}, {0xD3, 0x7C}, /* 0xD8-0xDB */ + {0xD3, 0x7D}, {0xD3, 0x80}, {0xD3, 0x84}, {0xD3, 0x8C}, /* 0xDC-0xDF */ + {0xD3, 0x8D}, {0xD3, 0x8F}, {0xD3, 0x90}, {0xD3, 0x91}, /* 0xE0-0xE3 */ + {0xD3, 0x98}, {0xD3, 0x99}, {0xD3, 0x9C}, {0xD3, 0xA0}, /* 0xE4-0xE7 */ + {0xD3, 0xA8}, {0xD3, 0xA9}, {0xD3, 0xAB}, {0xD3, 0xAD}, /* 0xE8-0xEB */ + {0xD3, 0xB4}, {0xD3, 0xB8}, {0xD3, 0xBC}, {0xD3, 0xC4}, /* 0xEC-0xEF */ + {0xD3, 0xC5}, {0xD3, 0xC8}, {0xD3, 0xC9}, {0xD3, 0xD0}, /* 0xF0-0xF3 */ + {0xD3, 0xD8}, {0xD3, 0xE1}, {0xD3, 0xE3}, {0xD3, 0xEC}, /* 0xF4-0xF7 */ + {0xD3, 0xED}, {0xD3, 0xF0}, {0xD3, 0xF4}, {0xD3, 0xFC}, /* 0xF8-0xFB */ + {0xD3, 0xFD}, {0xD3, 0xFF}, {0xD4, 0x01}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xD4, 0x08}, {0xD4, 0x1D}, {0xD4, 0x40}, /* 0xA0-0xA3 */ + {0xD4, 0x44}, {0xD4, 0x5C}, {0xD4, 0x60}, {0xD4, 0x64}, /* 0xA4-0xA7 */ + {0xD4, 0x6D}, {0xD4, 0x6F}, {0xD4, 0x78}, {0xD4, 0x79}, /* 0xA8-0xAB */ + {0xD4, 0x7C}, {0xD4, 0x7F}, {0xD4, 0x80}, {0xD4, 0x82}, /* 0xAC-0xAF */ + {0xD4, 0x88}, {0xD4, 0x89}, {0xD4, 0x8B}, {0xD4, 0x8D}, /* 0xB0-0xB3 */ + {0xD4, 0x94}, {0xD4, 0xA9}, {0xD4, 0xCC}, {0xD4, 0xD0}, /* 0xB4-0xB7 */ + {0xD4, 0xD4}, {0xD4, 0xDC}, {0xD4, 0xDF}, {0xD4, 0xE8}, /* 0xB8-0xBB */ + {0xD4, 0xEC}, {0xD4, 0xF0}, {0xD4, 0xF8}, {0xD4, 0xFB}, /* 0xBC-0xBF */ + {0xD4, 0xFD}, {0xD5, 0x04}, {0xD5, 0x08}, {0xD5, 0x0C}, /* 0xC0-0xC3 */ + {0xD5, 0x14}, {0xD5, 0x15}, {0xD5, 0x17}, {0xD5, 0x3C}, /* 0xC4-0xC7 */ + {0xD5, 0x3D}, {0xD5, 0x40}, {0xD5, 0x44}, {0xD5, 0x4C}, /* 0xC8-0xCB */ + {0xD5, 0x4D}, {0xD5, 0x4F}, {0xD5, 0x51}, {0xD5, 0x58}, /* 0xCC-0xCF */ + {0xD5, 0x59}, {0xD5, 0x5C}, {0xD5, 0x60}, {0xD5, 0x65}, /* 0xD0-0xD3 */ + {0xD5, 0x68}, {0xD5, 0x69}, {0xD5, 0x6B}, {0xD5, 0x6D}, /* 0xD4-0xD7 */ + {0xD5, 0x74}, {0xD5, 0x75}, {0xD5, 0x78}, {0xD5, 0x7C}, /* 0xD8-0xDB */ + {0xD5, 0x84}, {0xD5, 0x85}, {0xD5, 0x87}, {0xD5, 0x88}, /* 0xDC-0xDF */ + {0xD5, 0x89}, {0xD5, 0x90}, {0xD5, 0xA5}, {0xD5, 0xC8}, /* 0xE0-0xE3 */ + {0xD5, 0xC9}, {0xD5, 0xCC}, {0xD5, 0xD0}, {0xD5, 0xD2}, /* 0xE4-0xE7 */ + {0xD5, 0xD8}, {0xD5, 0xD9}, {0xD5, 0xDB}, {0xD5, 0xDD}, /* 0xE8-0xEB */ + {0xD5, 0xE4}, {0xD5, 0xE5}, {0xD5, 0xE8}, {0xD5, 0xEC}, /* 0xEC-0xEF */ + {0xD5, 0xF4}, {0xD5, 0xF5}, {0xD5, 0xF7}, {0xD5, 0xF9}, /* 0xF0-0xF3 */ + {0xD6, 0x00}, {0xD6, 0x01}, {0xD6, 0x04}, {0xD6, 0x08}, /* 0xF4-0xF7 */ + {0xD6, 0x10}, {0xD6, 0x11}, {0xD6, 0x13}, {0xD6, 0x14}, /* 0xF8-0xFB */ + {0xD6, 0x15}, {0xD6, 0x1C}, {0xD6, 0x20}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xD6, 0x24}, {0xD6, 0x2D}, {0xD6, 0x38}, /* 0xA0-0xA3 */ + {0xD6, 0x39}, {0xD6, 0x3C}, {0xD6, 0x40}, {0xD6, 0x45}, /* 0xA4-0xA7 */ + {0xD6, 0x48}, {0xD6, 0x49}, {0xD6, 0x4B}, {0xD6, 0x4D}, /* 0xA8-0xAB */ + {0xD6, 0x51}, {0xD6, 0x54}, {0xD6, 0x55}, {0xD6, 0x58}, /* 0xAC-0xAF */ + {0xD6, 0x5C}, {0xD6, 0x67}, {0xD6, 0x69}, {0xD6, 0x70}, /* 0xB0-0xB3 */ + {0xD6, 0x71}, {0xD6, 0x74}, {0xD6, 0x83}, {0xD6, 0x85}, /* 0xB4-0xB7 */ + {0xD6, 0x8C}, {0xD6, 0x8D}, {0xD6, 0x90}, {0xD6, 0x94}, /* 0xB8-0xBB */ + {0xD6, 0x9D}, {0xD6, 0x9F}, {0xD6, 0xA1}, {0xD6, 0xA8}, /* 0xBC-0xBF */ + {0xD6, 0xAC}, {0xD6, 0xB0}, {0xD6, 0xB9}, {0xD6, 0xBB}, /* 0xC0-0xC3 */ + {0xD6, 0xC4}, {0xD6, 0xC5}, {0xD6, 0xC8}, {0xD6, 0xCC}, /* 0xC4-0xC7 */ + {0xD6, 0xD1}, {0xD6, 0xD4}, {0xD6, 0xD7}, {0xD6, 0xD9}, /* 0xC8-0xCB */ + {0xD6, 0xE0}, {0xD6, 0xE4}, {0xD6, 0xE8}, {0xD6, 0xF0}, /* 0xCC-0xCF */ + {0xD6, 0xF5}, {0xD6, 0xFC}, {0xD6, 0xFD}, {0xD7, 0x00}, /* 0xD0-0xD3 */ + {0xD7, 0x04}, {0xD7, 0x11}, {0xD7, 0x18}, {0xD7, 0x19}, /* 0xD4-0xD7 */ + {0xD7, 0x1C}, {0xD7, 0x20}, {0xD7, 0x28}, {0xD7, 0x29}, /* 0xD8-0xDB */ + {0xD7, 0x2B}, {0xD7, 0x2D}, {0xD7, 0x34}, {0xD7, 0x35}, /* 0xDC-0xDF */ + {0xD7, 0x38}, {0xD7, 0x3C}, {0xD7, 0x44}, {0xD7, 0x47}, /* 0xE0-0xE3 */ + {0xD7, 0x49}, {0xD7, 0x50}, {0xD7, 0x51}, {0xD7, 0x54}, /* 0xE4-0xE7 */ + {0xD7, 0x56}, {0xD7, 0x57}, {0xD7, 0x58}, {0xD7, 0x59}, /* 0xE8-0xEB */ + {0xD7, 0x60}, {0xD7, 0x61}, {0xD7, 0x63}, {0xD7, 0x65}, /* 0xEC-0xEF */ + {0xD7, 0x69}, {0xD7, 0x6C}, {0xD7, 0x70}, {0xD7, 0x74}, /* 0xF0-0xF3 */ + {0xD7, 0x7C}, {0xD7, 0x7D}, {0xD7, 0x81}, {0xD7, 0x88}, /* 0xF4-0xF7 */ + {0xD7, 0x89}, {0xD7, 0x8C}, {0xD7, 0x90}, {0xD7, 0x98}, /* 0xF8-0xFB */ + {0xD7, 0x99}, {0xD7, 0x9B}, {0xD7, 0x9D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x4F, 0x3D}, {0x4F, 0x73}, {0x50, 0x47}, /* 0xA0-0xA3 */ + {0x50, 0xF9}, {0x52, 0xA0}, {0x53, 0xEF}, {0x54, 0x75}, /* 0xA4-0xA7 */ + {0x54, 0xE5}, {0x56, 0x09}, {0x5A, 0xC1}, {0x5B, 0xB6}, /* 0xA8-0xAB */ + {0x66, 0x87}, {0x67, 0xB6}, {0x67, 0xB7}, {0x67, 0xEF}, /* 0xAC-0xAF */ + {0x6B, 0x4C}, {0x73, 0xC2}, {0x75, 0xC2}, {0x7A, 0x3C}, /* 0xB0-0xB3 */ + {0x82, 0xDB}, {0x83, 0x04}, {0x88, 0x57}, {0x88, 0x88}, /* 0xB4-0xB7 */ + {0x8A, 0x36}, {0x8C, 0xC8}, {0x8D, 0xCF}, {0x8E, 0xFB}, /* 0xB8-0xBB */ + {0x8F, 0xE6}, {0x99, 0xD5}, {0x52, 0x3B}, {0x53, 0x74}, /* 0xBC-0xBF */ + {0x54, 0x04}, {0x60, 0x6A}, {0x61, 0x64}, {0x6B, 0xBC}, /* 0xC0-0xC3 */ + {0x73, 0xCF}, {0x81, 0x1A}, {0x89, 0xBA}, {0x89, 0xD2}, /* 0xC4-0xC7 */ + {0x95, 0xA3}, {0x4F, 0x83}, {0x52, 0x0A}, {0x58, 0xBE}, /* 0xC8-0xCB */ + {0x59, 0x78}, {0x59, 0xE6}, {0x5E, 0x72}, {0x5E, 0x79}, /* 0xCC-0xCF */ + {0x61, 0xC7}, {0x63, 0xC0}, {0x67, 0x46}, {0x67, 0xEC}, /* 0xD0-0xD3 */ + {0x68, 0x7F}, {0x6F, 0x97}, {0x76, 0x4E}, {0x77, 0x0B}, /* 0xD4-0xD7 */ + {0x78, 0xF5}, {0x7A, 0x08}, {0x7A, 0xFF}, {0x7C, 0x21}, /* 0xD8-0xDB */ + {0x80, 0x9D}, {0x82, 0x6E}, {0x82, 0x71}, {0x8A, 0xEB}, /* 0xDC-0xDF */ + {0x95, 0x93}, {0x4E, 0x6B}, {0x55, 0x9D}, {0x66, 0xF7}, /* 0xE0-0xE3 */ + {0x6E, 0x34}, {0x78, 0xA3}, {0x7A, 0xED}, {0x84, 0x5B}, /* 0xE4-0xE7 */ + {0x89, 0x10}, {0x87, 0x4E}, {0x97, 0xA8}, {0x52, 0xD8}, /* 0xE8-0xEB */ + {0x57, 0x4E}, {0x58, 0x2A}, {0x5D, 0x4C}, {0x61, 0x1F}, /* 0xEC-0xEF */ + {0x61, 0xBE}, {0x62, 0x21}, {0x65, 0x62}, {0x67, 0xD1}, /* 0xF0-0xF3 */ + {0x6A, 0x44}, {0x6E, 0x1B}, {0x75, 0x18}, {0x75, 0xB3}, /* 0xF4-0xF7 */ + {0x76, 0xE3}, {0x77, 0xB0}, {0x7D, 0x3A}, {0x90, 0xAF}, /* 0xF8-0xFB */ + {0x94, 0x51}, {0x94, 0x52}, {0x9F, 0x95}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x53, 0x23}, {0x5C, 0xAC}, {0x75, 0x32}, /* 0xA0-0xA3 */ + {0x80, 0xDB}, {0x92, 0x40}, {0x95, 0x98}, {0x52, 0x5B}, /* 0xA4-0xA7 */ + {0x58, 0x08}, {0x59, 0xDC}, {0x5C, 0xA1}, {0x5D, 0x17}, /* 0xA8-0xAB */ + {0x5E, 0xB7}, {0x5F, 0x3A}, {0x5F, 0x4A}, {0x61, 0x77}, /* 0xAC-0xAF */ + {0x6C, 0x5F}, {0x75, 0x7A}, {0x75, 0x86}, {0x7C, 0xE0}, /* 0xB0-0xB3 */ + {0x7D, 0x73}, {0x7D, 0xB1}, {0x7F, 0x8C}, {0x81, 0x54}, /* 0xB4-0xB7 */ + {0x82, 0x21}, {0x85, 0x91}, {0x89, 0x41}, {0x8B, 0x1B}, /* 0xB8-0xBB */ + {0x92, 0xFC}, {0x96, 0x4D}, {0x9C, 0x47}, {0x4E, 0xCB}, /* 0xBC-0xBF */ + {0x4E, 0xF7}, {0x50, 0x0B}, {0x51, 0xF1}, {0x58, 0x4F}, /* 0xC0-0xC3 */ + {0x61, 0x37}, {0x61, 0x3E}, {0x61, 0x68}, {0x65, 0x39}, /* 0xC4-0xC7 */ + {0x69, 0xEA}, {0x6F, 0x11}, {0x75, 0xA5}, {0x76, 0x86}, /* 0xC8-0xCB */ + {0x76, 0xD6}, {0x7B, 0x87}, {0x82, 0xA5}, {0x84, 0xCB}, /* 0xCC-0xCF */ + {0xF9, 0x00}, {0x93, 0xA7}, {0x95, 0x8B}, {0x55, 0x80}, /* 0xD0-0xD3 */ + {0x5B, 0xA2}, {0x57, 0x51}, {0xF9, 0x01}, {0x7C, 0xB3}, /* 0xD4-0xD7 */ + {0x7F, 0xB9}, {0x91, 0xB5}, {0x50, 0x28}, {0x53, 0xBB}, /* 0xD8-0xDB */ + {0x5C, 0x45}, {0x5D, 0xE8}, {0x62, 0xD2}, {0x63, 0x6E}, /* 0xDC-0xDF */ + {0x64, 0xDA}, {0x64, 0xE7}, {0x6E, 0x20}, {0x70, 0xAC}, /* 0xE0-0xE3 */ + {0x79, 0x5B}, {0x8D, 0xDD}, {0x8E, 0x1E}, {0xF9, 0x02}, /* 0xE4-0xE7 */ + {0x90, 0x7D}, {0x92, 0x45}, {0x92, 0xF8}, {0x4E, 0x7E}, /* 0xE8-0xEB */ + {0x4E, 0xF6}, {0x50, 0x65}, {0x5D, 0xFE}, {0x5E, 0xFA}, /* 0xEC-0xEF */ + {0x61, 0x06}, {0x69, 0x57}, {0x81, 0x71}, {0x86, 0x54}, /* 0xF0-0xF3 */ + {0x8E, 0x47}, {0x93, 0x75}, {0x9A, 0x2B}, {0x4E, 0x5E}, /* 0xF4-0xF7 */ + {0x50, 0x91}, {0x67, 0x70}, {0x68, 0x40}, {0x51, 0x09}, /* 0xF8-0xFB */ + {0x52, 0x8D}, {0x52, 0x92}, {0x6A, 0xA2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x77, 0xBC}, {0x92, 0x10}, {0x9E, 0xD4}, /* 0xA0-0xA3 */ + {0x52, 0xAB}, {0x60, 0x2F}, {0x8F, 0xF2}, {0x50, 0x48}, /* 0xA4-0xA7 */ + {0x61, 0xA9}, {0x63, 0xED}, {0x64, 0xCA}, {0x68, 0x3C}, /* 0xA8-0xAB */ + {0x6A, 0x84}, {0x6F, 0xC0}, {0x81, 0x88}, {0x89, 0xA1}, /* 0xAC-0xAF */ + {0x96, 0x94}, {0x58, 0x05}, {0x72, 0x7D}, {0x72, 0xAC}, /* 0xB0-0xB3 */ + {0x75, 0x04}, {0x7D, 0x79}, {0x7E, 0x6D}, {0x80, 0xA9}, /* 0xB4-0xB7 */ + {0x89, 0x8B}, {0x8B, 0x74}, {0x90, 0x63}, {0x9D, 0x51}, /* 0xB8-0xBB */ + {0x62, 0x89}, {0x6C, 0x7A}, {0x6F, 0x54}, {0x7D, 0x50}, /* 0xBC-0xBF */ + {0x7F, 0x3A}, {0x8A, 0x23}, {0x51, 0x7C}, {0x61, 0x4A}, /* 0xC0-0xC3 */ + {0x7B, 0x9D}, {0x8B, 0x19}, {0x92, 0x57}, {0x93, 0x8C}, /* 0xC4-0xC7 */ + {0x4E, 0xAC}, {0x4F, 0xD3}, {0x50, 0x1E}, {0x50, 0xBE}, /* 0xC8-0xCB */ + {0x51, 0x06}, {0x52, 0xC1}, {0x52, 0xCD}, {0x53, 0x7F}, /* 0xCC-0xCF */ + {0x57, 0x70}, {0x58, 0x83}, {0x5E, 0x9A}, {0x5F, 0x91}, /* 0xD0-0xD3 */ + {0x61, 0x76}, {0x61, 0xAC}, {0x64, 0xCE}, {0x65, 0x6C}, /* 0xD4-0xD7 */ + {0x66, 0x6F}, {0x66, 0xBB}, {0x66, 0xF4}, {0x68, 0x97}, /* 0xD8-0xDB */ + {0x6D, 0x87}, {0x70, 0x85}, {0x70, 0xF1}, {0x74, 0x9F}, /* 0xDC-0xDF */ + {0x74, 0xA5}, {0x74, 0xCA}, {0x75, 0xD9}, {0x78, 0x6C}, /* 0xE0-0xE3 */ + {0x78, 0xEC}, {0x7A, 0xDF}, {0x7A, 0xF6}, {0x7D, 0x45}, /* 0xE4-0xE7 */ + {0x7D, 0x93}, {0x80, 0x15}, {0x80, 0x3F}, {0x81, 0x1B}, /* 0xE8-0xEB */ + {0x83, 0x96}, {0x8B, 0x66}, {0x8F, 0x15}, {0x90, 0x15}, /* 0xEC-0xEF */ + {0x93, 0xE1}, {0x98, 0x03}, {0x98, 0x38}, {0x9A, 0x5A}, /* 0xF0-0xF3 */ + {0x9B, 0xE8}, {0x4F, 0xC2}, {0x55, 0x53}, {0x58, 0x3A}, /* 0xF4-0xF7 */ + {0x59, 0x51}, {0x5B, 0x63}, {0x5C, 0x46}, {0x60, 0xB8}, /* 0xF8-0xFB */ + {0x62, 0x12}, {0x68, 0x42}, {0x68, 0xB0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x68, 0xE8}, {0x6E, 0xAA}, {0x75, 0x4C}, /* 0xA0-0xA3 */ + {0x76, 0x78}, {0x78, 0xCE}, {0x7A, 0x3D}, {0x7C, 0xFB}, /* 0xA4-0xA7 */ + {0x7E, 0x6B}, {0x7E, 0x7C}, {0x8A, 0x08}, {0x8A, 0xA1}, /* 0xA8-0xAB */ + {0x8C, 0x3F}, {0x96, 0x8E}, {0x9D, 0xC4}, {0x53, 0xE4}, /* 0xAC-0xAF */ + {0x53, 0xE9}, {0x54, 0x4A}, {0x54, 0x71}, {0x56, 0xFA}, /* 0xB0-0xB3 */ + {0x59, 0xD1}, {0x5B, 0x64}, {0x5C, 0x3B}, {0x5E, 0xAB}, /* 0xB4-0xB7 */ + {0x62, 0xF7}, {0x65, 0x37}, {0x65, 0x45}, {0x65, 0x72}, /* 0xB8-0xBB */ + {0x66, 0xA0}, {0x67, 0xAF}, {0x69, 0xC1}, {0x6C, 0xBD}, /* 0xBC-0xBF */ + {0x75, 0xFC}, {0x76, 0x90}, {0x77, 0x7E}, {0x7A, 0x3F}, /* 0xC0-0xC3 */ + {0x7F, 0x94}, {0x80, 0x03}, {0x80, 0xA1}, {0x81, 0x8F}, /* 0xC4-0xC7 */ + {0x82, 0xE6}, {0x82, 0xFD}, {0x83, 0xF0}, {0x85, 0xC1}, /* 0xC8-0xCB */ + {0x88, 0x31}, {0x88, 0xB4}, {0x8A, 0xA5}, {0xF9, 0x03}, /* 0xCC-0xCF */ + {0x8F, 0x9C}, {0x93, 0x2E}, {0x96, 0xC7}, {0x98, 0x67}, /* 0xD0-0xD3 */ + {0x9A, 0xD8}, {0x9F, 0x13}, {0x54, 0xED}, {0x65, 0x9B}, /* 0xD4-0xD7 */ + {0x66, 0xF2}, {0x68, 0x8F}, {0x7A, 0x40}, {0x8C, 0x37}, /* 0xD8-0xDB */ + {0x9D, 0x60}, {0x56, 0xF0}, {0x57, 0x64}, {0x5D, 0x11}, /* 0xDC-0xDF */ + {0x66, 0x06}, {0x68, 0xB1}, {0x68, 0xCD}, {0x6E, 0xFE}, /* 0xE0-0xE3 */ + {0x74, 0x28}, {0x88, 0x9E}, {0x9B, 0xE4}, {0x6C, 0x68}, /* 0xE4-0xE7 */ + {0xF9, 0x04}, {0x9A, 0xA8}, {0x4F, 0x9B}, {0x51, 0x6C}, /* 0xE8-0xEB */ + {0x51, 0x71}, {0x52, 0x9F}, {0x5B, 0x54}, {0x5D, 0xE5}, /* 0xEC-0xEF */ + {0x60, 0x50}, {0x60, 0x6D}, {0x62, 0xF1}, {0x63, 0xA7}, /* 0xF0-0xF3 */ + {0x65, 0x3B}, {0x73, 0xD9}, {0x7A, 0x7A}, {0x86, 0xA3}, /* 0xF4-0xF7 */ + {0x8C, 0xA2}, {0x97, 0x8F}, {0x4E, 0x32}, {0x5B, 0xE1}, /* 0xF8-0xFB */ + {0x62, 0x08}, {0x67, 0x9C}, {0x74, 0xDC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x79, 0xD1}, {0x83, 0xD3}, {0x8A, 0x87}, /* 0xA0-0xA3 */ + {0x8A, 0xB2}, {0x8D, 0xE8}, {0x90, 0x4E}, {0x93, 0x4B}, /* 0xA4-0xA7 */ + {0x98, 0x46}, {0x5E, 0xD3}, {0x69, 0xE8}, {0x85, 0xFF}, /* 0xA8-0xAB */ + {0x90, 0xED}, {0xF9, 0x05}, {0x51, 0xA0}, {0x5B, 0x98}, /* 0xAC-0xAF */ + {0x5B, 0xEC}, {0x61, 0x63}, {0x68, 0xFA}, {0x6B, 0x3E}, /* 0xB0-0xB3 */ + {0x70, 0x4C}, {0x74, 0x2F}, {0x74, 0xD8}, {0x7B, 0xA1}, /* 0xB4-0xB7 */ + {0x7F, 0x50}, {0x83, 0xC5}, {0x89, 0xC0}, {0x8C, 0xAB}, /* 0xB8-0xBB */ + {0x95, 0xDC}, {0x99, 0x28}, {0x52, 0x2E}, {0x60, 0x5D}, /* 0xBC-0xBF */ + {0x62, 0xEC}, {0x90, 0x02}, {0x4F, 0x8A}, {0x51, 0x49}, /* 0xC0-0xC3 */ + {0x53, 0x21}, {0x58, 0xD9}, {0x5E, 0xE3}, {0x66, 0xE0}, /* 0xC4-0xC7 */ + {0x6D, 0x38}, {0x70, 0x9A}, {0x72, 0xC2}, {0x73, 0xD6}, /* 0xC8-0xCB */ + {0x7B, 0x50}, {0x80, 0xF1}, {0x94, 0x5B}, {0x53, 0x66}, /* 0xCC-0xCF */ + {0x63, 0x9B}, {0x7F, 0x6B}, {0x4E, 0x56}, {0x50, 0x80}, /* 0xD0-0xD3 */ + {0x58, 0x4A}, {0x58, 0xDE}, {0x60, 0x2A}, {0x61, 0x27}, /* 0xD4-0xD7 */ + {0x62, 0xD0}, {0x69, 0xD0}, {0x9B, 0x41}, {0x5B, 0x8F}, /* 0xD8-0xDB */ + {0x7D, 0x18}, {0x80, 0xB1}, {0x8F, 0x5F}, {0x4E, 0xA4}, /* 0xDC-0xDF */ + {0x50, 0xD1}, {0x54, 0xAC}, {0x55, 0xAC}, {0x5B, 0x0C}, /* 0xE0-0xE3 */ + {0x5D, 0xA0}, {0x5D, 0xE7}, {0x65, 0x2A}, {0x65, 0x4E}, /* 0xE4-0xE7 */ + {0x68, 0x21}, {0x6A, 0x4B}, {0x72, 0xE1}, {0x76, 0x8E}, /* 0xE8-0xEB */ + {0x77, 0xEF}, {0x7D, 0x5E}, {0x7F, 0xF9}, {0x81, 0xA0}, /* 0xEC-0xEF */ + {0x85, 0x4E}, {0x86, 0xDF}, {0x8F, 0x03}, {0x8F, 0x4E}, /* 0xF0-0xF3 */ + {0x90, 0xCA}, {0x99, 0x03}, {0x9A, 0x55}, {0x9B, 0xAB}, /* 0xF4-0xF7 */ + {0x4E, 0x18}, {0x4E, 0x45}, {0x4E, 0x5D}, {0x4E, 0xC7}, /* 0xF8-0xFB */ + {0x4F, 0xF1}, {0x51, 0x77}, {0x52, 0xFE}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x53, 0x40}, {0x53, 0xE3}, {0x53, 0xE5}, /* 0xA0-0xA3 */ + {0x54, 0x8E}, {0x56, 0x14}, {0x57, 0x75}, {0x57, 0xA2}, /* 0xA4-0xA7 */ + {0x5B, 0xC7}, {0x5D, 0x87}, {0x5E, 0xD0}, {0x61, 0xFC}, /* 0xA8-0xAB */ + {0x62, 0xD8}, {0x65, 0x51}, {0x67, 0xB8}, {0x67, 0xE9}, /* 0xAC-0xAF */ + {0x69, 0xCB}, {0x6B, 0x50}, {0x6B, 0xC6}, {0x6B, 0xEC}, /* 0xB0-0xB3 */ + {0x6C, 0x42}, {0x6E, 0x9D}, {0x70, 0x78}, {0x72, 0xD7}, /* 0xB4-0xB7 */ + {0x73, 0x96}, {0x74, 0x03}, {0x77, 0xBF}, {0x77, 0xE9}, /* 0xB8-0xBB */ + {0x7A, 0x76}, {0x7D, 0x7F}, {0x80, 0x09}, {0x81, 0xFC}, /* 0xBC-0xBF */ + {0x82, 0x05}, {0x82, 0x0A}, {0x82, 0xDF}, {0x88, 0x62}, /* 0xC0-0xC3 */ + {0x8B, 0x33}, {0x8C, 0xFC}, {0x8E, 0xC0}, {0x90, 0x11}, /* 0xC4-0xC7 */ + {0x90, 0xB1}, {0x92, 0x64}, {0x92, 0xB6}, {0x99, 0xD2}, /* 0xC8-0xCB */ + {0x9A, 0x45}, {0x9C, 0xE9}, {0x9D, 0xD7}, {0x9F, 0x9C}, /* 0xCC-0xCF */ + {0x57, 0x0B}, {0x5C, 0x40}, {0x83, 0xCA}, {0x97, 0xA0}, /* 0xD0-0xD3 */ + {0x97, 0xAB}, {0x9E, 0xB4}, {0x54, 0x1B}, {0x7A, 0x98}, /* 0xD4-0xD7 */ + {0x7F, 0xA4}, {0x88, 0xD9}, {0x8E, 0xCD}, {0x90, 0xE1}, /* 0xD8-0xDB */ + {0x58, 0x00}, {0x5C, 0x48}, {0x63, 0x98}, {0x7A, 0x9F}, /* 0xDC-0xDF */ + {0x5B, 0xAE}, {0x5F, 0x13}, {0x7A, 0x79}, {0x7A, 0xAE}, /* 0xE0-0xE3 */ + {0x82, 0x8E}, {0x8E, 0xAC}, {0x50, 0x26}, {0x52, 0x38}, /* 0xE4-0xE7 */ + {0x52, 0xF8}, {0x53, 0x77}, {0x57, 0x08}, {0x62, 0xF3}, /* 0xE8-0xEB */ + {0x63, 0x72}, {0x6B, 0x0A}, {0x6D, 0xC3}, {0x77, 0x37}, /* 0xEC-0xEF */ + {0x53, 0xA5}, {0x73, 0x57}, {0x85, 0x68}, {0x8E, 0x76}, /* 0xF0-0xF3 */ + {0x95, 0xD5}, {0x67, 0x3A}, {0x6A, 0xC3}, {0x6F, 0x70}, /* 0xF4-0xF7 */ + {0x8A, 0x6D}, {0x8E, 0xCC}, {0x99, 0x4B}, {0xF9, 0x06}, /* 0xF8-0xFB */ + {0x66, 0x77}, {0x6B, 0x78}, {0x8C, 0xB4}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9B, 0x3C}, {0xF9, 0x07}, {0x53, 0xEB}, /* 0xA0-0xA3 */ + {0x57, 0x2D}, {0x59, 0x4E}, {0x63, 0xC6}, {0x69, 0xFB}, /* 0xA4-0xA7 */ + {0x73, 0xEA}, {0x78, 0x45}, {0x7A, 0xBA}, {0x7A, 0xC5}, /* 0xA8-0xAB */ + {0x7C, 0xFE}, {0x84, 0x75}, {0x89, 0x8F}, {0x8D, 0x73}, /* 0xAC-0xAF */ + {0x90, 0x35}, {0x95, 0xA8}, {0x52, 0xFB}, {0x57, 0x47}, /* 0xB0-0xB3 */ + {0x75, 0x47}, {0x7B, 0x60}, {0x83, 0xCC}, {0x92, 0x1E}, /* 0xB4-0xB7 */ + {0xF9, 0x08}, {0x6A, 0x58}, {0x51, 0x4B}, {0x52, 0x4B}, /* 0xB8-0xBB */ + {0x52, 0x87}, {0x62, 0x1F}, {0x68, 0xD8}, {0x69, 0x75}, /* 0xBC-0xBF */ + {0x96, 0x99}, {0x50, 0xC5}, {0x52, 0xA4}, {0x52, 0xE4}, /* 0xC0-0xC3 */ + {0x61, 0xC3}, {0x65, 0xA4}, {0x68, 0x39}, {0x69, 0xFF}, /* 0xC4-0xC7 */ + {0x74, 0x7E}, {0x7B, 0x4B}, {0x82, 0xB9}, {0x83, 0xEB}, /* 0xC8-0xCB */ + {0x89, 0xB2}, {0x8B, 0x39}, {0x8F, 0xD1}, {0x99, 0x49}, /* 0xCC-0xCF */ + {0xF9, 0x09}, {0x4E, 0xCA}, {0x59, 0x97}, {0x64, 0xD2}, /* 0xD0-0xD3 */ + {0x66, 0x11}, {0x6A, 0x8E}, {0x74, 0x34}, {0x79, 0x81}, /* 0xD4-0xD7 */ + {0x79, 0xBD}, {0x82, 0xA9}, {0x88, 0x7E}, {0x88, 0x7F}, /* 0xD8-0xDB */ + {0x89, 0x5F}, {0xF9, 0x0A}, {0x93, 0x26}, {0x4F, 0x0B}, /* 0xDC-0xDF */ + {0x53, 0xCA}, {0x60, 0x25}, {0x62, 0x71}, {0x6C, 0x72}, /* 0xE0-0xE3 */ + {0x7D, 0x1A}, {0x7D, 0x66}, {0x4E, 0x98}, {0x51, 0x62}, /* 0xE4-0xE7 */ + {0x77, 0xDC}, {0x80, 0xAF}, {0x4F, 0x01}, {0x4F, 0x0E}, /* 0xE8-0xEB */ + {0x51, 0x76}, {0x51, 0x80}, {0x55, 0xDC}, {0x56, 0x68}, /* 0xEC-0xEF */ + {0x57, 0x3B}, {0x57, 0xFA}, {0x57, 0xFC}, {0x59, 0x14}, /* 0xF0-0xF3 */ + {0x59, 0x47}, {0x59, 0x93}, {0x5B, 0xC4}, {0x5C, 0x90}, /* 0xF4-0xF7 */ + {0x5D, 0x0E}, {0x5D, 0xF1}, {0x5E, 0x7E}, {0x5F, 0xCC}, /* 0xF8-0xFB */ + {0x62, 0x80}, {0x65, 0xD7}, {0x65, 0xE3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x67, 0x1E}, {0x67, 0x1F}, {0x67, 0x5E}, /* 0xA0-0xA3 */ + {0x68, 0xCB}, {0x68, 0xC4}, {0x6A, 0x5F}, {0x6B, 0x3A}, /* 0xA4-0xA7 */ + {0x6C, 0x23}, {0x6C, 0x7D}, {0x6C, 0x82}, {0x6D, 0xC7}, /* 0xA8-0xAB */ + {0x73, 0x98}, {0x74, 0x26}, {0x74, 0x2A}, {0x74, 0x82}, /* 0xAC-0xAF */ + {0x74, 0xA3}, {0x75, 0x78}, {0x75, 0x7F}, {0x78, 0x81}, /* 0xB0-0xB3 */ + {0x78, 0xEF}, {0x79, 0x41}, {0x79, 0x47}, {0x79, 0x48}, /* 0xB4-0xB7 */ + {0x79, 0x7A}, {0x7B, 0x95}, {0x7D, 0x00}, {0x7D, 0xBA}, /* 0xB8-0xBB */ + {0x7F, 0x88}, {0x80, 0x06}, {0x80, 0x2D}, {0x80, 0x8C}, /* 0xBC-0xBF */ + {0x8A, 0x18}, {0x8B, 0x4F}, {0x8C, 0x48}, {0x8D, 0x77}, /* 0xC0-0xC3 */ + {0x93, 0x21}, {0x93, 0x24}, {0x98, 0xE2}, {0x99, 0x51}, /* 0xC4-0xC7 */ + {0x9A, 0x0E}, {0x9A, 0x0F}, {0x9A, 0x65}, {0x9E, 0x92}, /* 0xC8-0xCB */ + {0x7D, 0xCA}, {0x4F, 0x76}, {0x54, 0x09}, {0x62, 0xEE}, /* 0xCC-0xCF */ + {0x68, 0x54}, {0x91, 0xD1}, {0x55, 0xAB}, {0x51, 0x3A}, /* 0xD0-0xD3 */ + {0xF9, 0x0B}, {0xF9, 0x0C}, {0x5A, 0x1C}, {0x61, 0xE6}, /* 0xD4-0xD7 */ + {0xF9, 0x0D}, {0x62, 0xCF}, {0x62, 0xFF}, {0xF9, 0x0E}, /* 0xD8-0xDB */ + {0xF9, 0x0F}, {0xF9, 0x10}, {0xF9, 0x11}, {0xF9, 0x12}, /* 0xDC-0xDF */ + {0xF9, 0x13}, {0x90, 0xA3}, {0xF9, 0x14}, {0xF9, 0x15}, /* 0xE0-0xE3 */ + {0xF9, 0x16}, {0xF9, 0x17}, {0xF9, 0x18}, {0x8A, 0xFE}, /* 0xE4-0xE7 */ + {0xF9, 0x19}, {0xF9, 0x1A}, {0xF9, 0x1B}, {0xF9, 0x1C}, /* 0xE8-0xEB */ + {0x66, 0x96}, {0xF9, 0x1D}, {0x71, 0x56}, {0xF9, 0x1E}, /* 0xEC-0xEF */ + {0xF9, 0x1F}, {0x96, 0xE3}, {0xF9, 0x20}, {0x63, 0x4F}, /* 0xF0-0xF3 */ + {0x63, 0x7A}, {0x53, 0x57}, {0xF9, 0x21}, {0x67, 0x8F}, /* 0xF4-0xF7 */ + {0x69, 0x60}, {0x6E, 0x73}, {0xF9, 0x22}, {0x75, 0x37}, /* 0xF8-0xFB */ + {0xF9, 0x23}, {0xF9, 0x24}, {0xF9, 0x25}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7D, 0x0D}, {0xF9, 0x26}, {0xF9, 0x27}, /* 0xA0-0xA3 */ + {0x88, 0x72}, {0x56, 0xCA}, {0x5A, 0x18}, {0xF9, 0x28}, /* 0xA4-0xA7 */ + {0xF9, 0x29}, {0xF9, 0x2A}, {0xF9, 0x2B}, {0xF9, 0x2C}, /* 0xA8-0xAB */ + {0x4E, 0x43}, {0xF9, 0x2D}, {0x51, 0x67}, {0x59, 0x48}, /* 0xAC-0xAF */ + {0x67, 0xF0}, {0x80, 0x10}, {0xF9, 0x2E}, {0x59, 0x73}, /* 0xB0-0xB3 */ + {0x5E, 0x74}, {0x64, 0x9A}, {0x79, 0xCA}, {0x5F, 0xF5}, /* 0xB4-0xB7 */ + {0x60, 0x6C}, {0x62, 0xC8}, {0x63, 0x7B}, {0x5B, 0xE7}, /* 0xB8-0xBB */ + {0x5B, 0xD7}, {0x52, 0xAA}, {0xF9, 0x2F}, {0x59, 0x74}, /* 0xBC-0xBF */ + {0x5F, 0x29}, {0x60, 0x12}, {0xF9, 0x30}, {0xF9, 0x31}, /* 0xC0-0xC3 */ + {0xF9, 0x32}, {0x74, 0x59}, {0xF9, 0x33}, {0xF9, 0x34}, /* 0xC4-0xC7 */ + {0xF9, 0x35}, {0xF9, 0x36}, {0xF9, 0x37}, {0xF9, 0x38}, /* 0xC8-0xCB */ + {0x99, 0xD1}, {0xF9, 0x39}, {0xF9, 0x3A}, {0xF9, 0x3B}, /* 0xCC-0xCF */ + {0xF9, 0x3C}, {0xF9, 0x3D}, {0xF9, 0x3E}, {0xF9, 0x3F}, /* 0xD0-0xD3 */ + {0xF9, 0x40}, {0xF9, 0x41}, {0xF9, 0x42}, {0xF9, 0x43}, /* 0xD4-0xD7 */ + {0x6F, 0xC3}, {0xF9, 0x44}, {0xF9, 0x45}, {0x81, 0xBF}, /* 0xD8-0xDB */ + {0x8F, 0xB2}, {0x60, 0xF1}, {0xF9, 0x46}, {0xF9, 0x47}, /* 0xDC-0xDF */ + {0x81, 0x66}, {0xF9, 0x48}, {0xF9, 0x49}, {0x5C, 0x3F}, /* 0xE0-0xE3 */ + {0xF9, 0x4A}, {0xF9, 0x4B}, {0xF9, 0x4C}, {0xF9, 0x4D}, /* 0xE4-0xE7 */ + {0xF9, 0x4E}, {0xF9, 0x4F}, {0xF9, 0x50}, {0xF9, 0x51}, /* 0xE8-0xEB */ + {0x5A, 0xE9}, {0x8A, 0x25}, {0x67, 0x7B}, {0x7D, 0x10}, /* 0xEC-0xEF */ + {0xF9, 0x52}, {0xF9, 0x53}, {0xF9, 0x54}, {0xF9, 0x55}, /* 0xF0-0xF3 */ + {0xF9, 0x56}, {0xF9, 0x57}, {0x80, 0xFD}, {0xF9, 0x58}, /* 0xF4-0xF7 */ + {0xF9, 0x59}, {0x5C, 0x3C}, {0x6C, 0xE5}, {0x53, 0x3F}, /* 0xF8-0xFB */ + {0x6E, 0xBA}, {0x59, 0x1A}, {0x83, 0x36}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x4E, 0x39}, {0x4E, 0xB6}, {0x4F, 0x46}, /* 0xA0-0xA3 */ + {0x55, 0xAE}, {0x57, 0x18}, {0x58, 0xC7}, {0x5F, 0x56}, /* 0xA4-0xA7 */ + {0x65, 0xB7}, {0x65, 0xE6}, {0x6A, 0x80}, {0x6B, 0xB5}, /* 0xA8-0xAB */ + {0x6E, 0x4D}, {0x77, 0xED}, {0x7A, 0xEF}, {0x7C, 0x1E}, /* 0xAC-0xAF */ + {0x7D, 0xDE}, {0x86, 0xCB}, {0x88, 0x92}, {0x91, 0x32}, /* 0xB0-0xB3 */ + {0x93, 0x5B}, {0x64, 0xBB}, {0x6F, 0xBE}, {0x73, 0x7A}, /* 0xB4-0xB7 */ + {0x75, 0xB8}, {0x90, 0x54}, {0x55, 0x56}, {0x57, 0x4D}, /* 0xB8-0xBB */ + {0x61, 0xBA}, {0x64, 0xD4}, {0x66, 0xC7}, {0x6D, 0xE1}, /* 0xBC-0xBF */ + {0x6E, 0x5B}, {0x6F, 0x6D}, {0x6F, 0xB9}, {0x75, 0xF0}, /* 0xC0-0xC3 */ + {0x80, 0x43}, {0x81, 0xBD}, {0x85, 0x41}, {0x89, 0x83}, /* 0xC4-0xC7 */ + {0x8A, 0xC7}, {0x8B, 0x5A}, {0x93, 0x1F}, {0x6C, 0x93}, /* 0xC8-0xCB */ + {0x75, 0x53}, {0x7B, 0x54}, {0x8E, 0x0F}, {0x90, 0x5D}, /* 0xCC-0xCF */ + {0x55, 0x10}, {0x58, 0x02}, {0x58, 0x58}, {0x5E, 0x62}, /* 0xD0-0xD3 */ + {0x62, 0x07}, {0x64, 0x9E}, {0x68, 0xE0}, {0x75, 0x76}, /* 0xD4-0xD7 */ + {0x7C, 0xD6}, {0x87, 0xB3}, {0x9E, 0xE8}, {0x4E, 0xE3}, /* 0xD8-0xDB */ + {0x57, 0x88}, {0x57, 0x6E}, {0x59, 0x27}, {0x5C, 0x0D}, /* 0xDC-0xDF */ + {0x5C, 0xB1}, {0x5E, 0x36}, {0x5F, 0x85}, {0x62, 0x34}, /* 0xE0-0xE3 */ + {0x64, 0xE1}, {0x73, 0xB3}, {0x81, 0xFA}, {0x88, 0x8B}, /* 0xE4-0xE7 */ + {0x8C, 0xB8}, {0x96, 0x8A}, {0x9E, 0xDB}, {0x5B, 0x85}, /* 0xE8-0xEB */ + {0x5F, 0xB7}, {0x60, 0xB3}, {0x50, 0x12}, {0x52, 0x00}, /* 0xEC-0xEF */ + {0x52, 0x30}, {0x57, 0x16}, {0x58, 0x35}, {0x58, 0x57}, /* 0xF0-0xF3 */ + {0x5C, 0x0E}, {0x5C, 0x60}, {0x5C, 0xF6}, {0x5D, 0x8B}, /* 0xF4-0xF7 */ + {0x5E, 0xA6}, {0x5F, 0x92}, {0x60, 0xBC}, {0x63, 0x11}, /* 0xF8-0xFB */ + {0x63, 0x89}, {0x64, 0x17}, {0x68, 0x43}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x68, 0xF9}, {0x6A, 0xC2}, {0x6D, 0xD8}, /* 0xA0-0xA3 */ + {0x6E, 0x21}, {0x6E, 0xD4}, {0x6F, 0xE4}, {0x71, 0xFE}, /* 0xA4-0xA7 */ + {0x76, 0xDC}, {0x77, 0x79}, {0x79, 0xB1}, {0x7A, 0x3B}, /* 0xA8-0xAB */ + {0x84, 0x04}, {0x89, 0xA9}, {0x8C, 0xED}, {0x8D, 0xF3}, /* 0xAC-0xAF */ + {0x8E, 0x48}, {0x90, 0x03}, {0x90, 0x14}, {0x90, 0x53}, /* 0xB0-0xB3 */ + {0x90, 0xFD}, {0x93, 0x4D}, {0x96, 0x76}, {0x97, 0xDC}, /* 0xB4-0xB7 */ + {0x6B, 0xD2}, {0x70, 0x06}, {0x72, 0x58}, {0x72, 0xA2}, /* 0xB8-0xBB */ + {0x73, 0x68}, {0x77, 0x63}, {0x79, 0xBF}, {0x7B, 0xE4}, /* 0xBC-0xBF */ + {0x7E, 0x9B}, {0x8B, 0x80}, {0x58, 0xA9}, {0x60, 0xC7}, /* 0xC0-0xC3 */ + {0x65, 0x66}, {0x65, 0xFD}, {0x66, 0xBE}, {0x6C, 0x8C}, /* 0xC4-0xC7 */ + {0x71, 0x1E}, {0x71, 0xC9}, {0x8C, 0x5A}, {0x98, 0x13}, /* 0xC8-0xCB */ + {0x4E, 0x6D}, {0x7A, 0x81}, {0x4E, 0xDD}, {0x51, 0xAC}, /* 0xCC-0xCF */ + {0x51, 0xCD}, {0x52, 0xD5}, {0x54, 0x0C}, {0x61, 0xA7}, /* 0xD0-0xD3 */ + {0x67, 0x71}, {0x68, 0x50}, {0x68, 0xDF}, {0x6D, 0x1E}, /* 0xD4-0xD7 */ + {0x6F, 0x7C}, {0x75, 0xBC}, {0x77, 0xB3}, {0x7A, 0xE5}, /* 0xD8-0xDB */ + {0x80, 0xF4}, {0x84, 0x63}, {0x92, 0x85}, {0x51, 0x5C}, /* 0xDC-0xDF */ + {0x65, 0x97}, {0x67, 0x5C}, {0x67, 0x93}, {0x75, 0xD8}, /* 0xE0-0xE3 */ + {0x7A, 0xC7}, {0x83, 0x73}, {0xF9, 0x5A}, {0x8C, 0x46}, /* 0xE4-0xE7 */ + {0x90, 0x17}, {0x98, 0x2D}, {0x5C, 0x6F}, {0x81, 0xC0}, /* 0xE8-0xEB */ + {0x82, 0x9A}, {0x90, 0x41}, {0x90, 0x6F}, {0x92, 0x0D}, /* 0xEC-0xEF */ + {0x5F, 0x97}, {0x5D, 0x9D}, {0x6A, 0x59}, {0x71, 0xC8}, /* 0xF0-0xF3 */ + {0x76, 0x7B}, {0x7B, 0x49}, {0x85, 0xE4}, {0x8B, 0x04}, /* 0xF4-0xF7 */ + {0x91, 0x27}, {0x9A, 0x30}, {0x55, 0x87}, {0x61, 0xF6}, /* 0xF8-0xFB */ + {0xF9, 0x5B}, {0x76, 0x69}, {0x7F, 0x85}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x86, 0x3F}, {0x87, 0xBA}, {0x88, 0xF8}, /* 0xA0-0xA3 */ + {0x90, 0x8F}, {0xF9, 0x5C}, {0x6D, 0x1B}, {0x70, 0xD9}, /* 0xA4-0xA7 */ + {0x73, 0xDE}, {0x7D, 0x61}, {0x84, 0x3D}, {0xF9, 0x5D}, /* 0xA8-0xAB */ + {0x91, 0x6A}, {0x99, 0xF1}, {0xF9, 0x5E}, {0x4E, 0x82}, /* 0xAC-0xAF */ + {0x53, 0x75}, {0x6B, 0x04}, {0x6B, 0x12}, {0x70, 0x3E}, /* 0xB0-0xB3 */ + {0x72, 0x1B}, {0x86, 0x2D}, {0x9E, 0x1E}, {0x52, 0x4C}, /* 0xB4-0xB7 */ + {0x8F, 0xA3}, {0x5D, 0x50}, {0x64, 0xE5}, {0x65, 0x2C}, /* 0xB8-0xBB */ + {0x6B, 0x16}, {0x6F, 0xEB}, {0x7C, 0x43}, {0x7E, 0x9C}, /* 0xBC-0xBF */ + {0x85, 0xCD}, {0x89, 0x64}, {0x89, 0xBD}, {0x62, 0xC9}, /* 0xC0-0xC3 */ + {0x81, 0xD8}, {0x88, 0x1F}, {0x5E, 0xCA}, {0x67, 0x17}, /* 0xC4-0xC7 */ + {0x6D, 0x6A}, {0x72, 0xFC}, {0x74, 0x05}, {0x74, 0x6F}, /* 0xC8-0xCB */ + {0x87, 0x82}, {0x90, 0xDE}, {0x4F, 0x86}, {0x5D, 0x0D}, /* 0xCC-0xCF */ + {0x5F, 0xA0}, {0x84, 0x0A}, {0x51, 0xB7}, {0x63, 0xA0}, /* 0xD0-0xD3 */ + {0x75, 0x65}, {0x4E, 0xAE}, {0x50, 0x06}, {0x51, 0x69}, /* 0xD4-0xD7 */ + {0x51, 0xC9}, {0x68, 0x81}, {0x6A, 0x11}, {0x7C, 0xAE}, /* 0xD8-0xDB */ + {0x7C, 0xB1}, {0x7C, 0xE7}, {0x82, 0x6F}, {0x8A, 0xD2}, /* 0xDC-0xDF */ + {0x8F, 0x1B}, {0x91, 0xCF}, {0x4F, 0xB6}, {0x51, 0x37}, /* 0xE0-0xE3 */ + {0x52, 0xF5}, {0x54, 0x42}, {0x5E, 0xEC}, {0x61, 0x6E}, /* 0xE4-0xE7 */ + {0x62, 0x3E}, {0x65, 0xC5}, {0x6A, 0xDA}, {0x6F, 0xFE}, /* 0xE8-0xEB */ + {0x79, 0x2A}, {0x85, 0xDC}, {0x88, 0x23}, {0x95, 0xAD}, /* 0xEC-0xEF */ + {0x9A, 0x62}, {0x9A, 0x6A}, {0x9E, 0x97}, {0x9E, 0xCE}, /* 0xF0-0xF3 */ + {0x52, 0x9B}, {0x66, 0xC6}, {0x6B, 0x77}, {0x70, 0x1D}, /* 0xF4-0xF7 */ + {0x79, 0x2B}, {0x8F, 0x62}, {0x97, 0x42}, {0x61, 0x90}, /* 0xF8-0xFB */ + {0x62, 0x00}, {0x65, 0x23}, {0x6F, 0x23}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x71, 0x49}, {0x74, 0x89}, {0x7D, 0xF4}, /* 0xA0-0xA3 */ + {0x80, 0x6F}, {0x84, 0xEE}, {0x8F, 0x26}, {0x90, 0x23}, /* 0xA4-0xA7 */ + {0x93, 0x4A}, {0x51, 0xBD}, {0x52, 0x17}, {0x52, 0xA3}, /* 0xA8-0xAB */ + {0x6D, 0x0C}, {0x70, 0xC8}, {0x88, 0xC2}, {0x5E, 0xC9}, /* 0xAC-0xAF */ + {0x65, 0x82}, {0x6B, 0xAE}, {0x6F, 0xC2}, {0x7C, 0x3E}, /* 0xB0-0xB3 */ + {0x73, 0x75}, {0x4E, 0xE4}, {0x4F, 0x36}, {0x56, 0xF9}, /* 0xB4-0xB7 */ + {0xF9, 0x5F}, {0x5C, 0xBA}, {0x5D, 0xBA}, {0x60, 0x1C}, /* 0xB8-0xBB */ + {0x73, 0xB2}, {0x7B, 0x2D}, {0x7F, 0x9A}, {0x7F, 0xCE}, /* 0xBC-0xBF */ + {0x80, 0x46}, {0x90, 0x1E}, {0x92, 0x34}, {0x96, 0xF6}, /* 0xC0-0xC3 */ + {0x97, 0x48}, {0x98, 0x18}, {0x9F, 0x61}, {0x4F, 0x8B}, /* 0xC4-0xC7 */ + {0x6F, 0xA7}, {0x79, 0xAE}, {0x91, 0xB4}, {0x96, 0xB7}, /* 0xC8-0xCB */ + {0x52, 0xDE}, {0xF9, 0x60}, {0x64, 0x88}, {0x64, 0xC4}, /* 0xCC-0xCF */ + {0x6A, 0xD3}, {0x6F, 0x5E}, {0x70, 0x18}, {0x72, 0x10}, /* 0xD0-0xD3 */ + {0x76, 0xE7}, {0x80, 0x01}, {0x86, 0x06}, {0x86, 0x5C}, /* 0xD4-0xD7 */ + {0x8D, 0xEF}, {0x8F, 0x05}, {0x97, 0x32}, {0x9B, 0x6F}, /* 0xD8-0xDB */ + {0x9D, 0xFA}, {0x9E, 0x75}, {0x78, 0x8C}, {0x79, 0x7F}, /* 0xDC-0xDF */ + {0x7D, 0xA0}, {0x83, 0xC9}, {0x93, 0x04}, {0x9E, 0x7F}, /* 0xE0-0xE3 */ + {0x9E, 0x93}, {0x8A, 0xD6}, {0x58, 0xDF}, {0x5F, 0x04}, /* 0xE4-0xE7 */ + {0x67, 0x27}, {0x70, 0x27}, {0x74, 0xCF}, {0x7C, 0x60}, /* 0xE8-0xEB */ + {0x80, 0x7E}, {0x51, 0x21}, {0x70, 0x28}, {0x72, 0x62}, /* 0xEC-0xEF */ + {0x78, 0xCA}, {0x8C, 0xC2}, {0x8C, 0xDA}, {0x8C, 0xF4}, /* 0xF0-0xF3 */ + {0x96, 0xF7}, {0x4E, 0x86}, {0x50, 0xDA}, {0x5B, 0xEE}, /* 0xF4-0xF7 */ + {0x5E, 0xD6}, {0x65, 0x99}, {0x71, 0xCE}, {0x76, 0x42}, /* 0xF8-0xFB */ + {0x77, 0xAD}, {0x80, 0x4A}, {0x84, 0xFC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x90, 0x7C}, {0x9B, 0x27}, {0x9F, 0x8D}, /* 0xA0-0xA3 */ + {0x58, 0xD8}, {0x5A, 0x41}, {0x5C, 0x62}, {0x6A, 0x13}, /* 0xA4-0xA7 */ + {0x6D, 0xDA}, {0x6F, 0x0F}, {0x76, 0x3B}, {0x7D, 0x2F}, /* 0xA8-0xAB */ + {0x7E, 0x37}, {0x85, 0x1E}, {0x89, 0x38}, {0x93, 0xE4}, /* 0xAC-0xAF */ + {0x96, 0x4B}, {0x52, 0x89}, {0x65, 0xD2}, {0x67, 0xF3}, /* 0xB0-0xB3 */ + {0x69, 0xB4}, {0x6D, 0x41}, {0x6E, 0x9C}, {0x70, 0x0F}, /* 0xB4-0xB7 */ + {0x74, 0x09}, {0x74, 0x60}, {0x75, 0x59}, {0x76, 0x24}, /* 0xB8-0xBB */ + {0x78, 0x6B}, {0x8B, 0x2C}, {0x98, 0x5E}, {0x51, 0x6D}, /* 0xBC-0xBF */ + {0x62, 0x2E}, {0x96, 0x78}, {0x4F, 0x96}, {0x50, 0x2B}, /* 0xC0-0xC3 */ + {0x5D, 0x19}, {0x6D, 0xEA}, {0x7D, 0xB8}, {0x8F, 0x2A}, /* 0xC4-0xC7 */ + {0x5F, 0x8B}, {0x61, 0x44}, {0x68, 0x17}, {0xF9, 0x61}, /* 0xC8-0xCB */ + {0x96, 0x86}, {0x52, 0xD2}, {0x80, 0x8B}, {0x51, 0xDC}, /* 0xCC-0xCF */ + {0x51, 0xCC}, {0x69, 0x5E}, {0x7A, 0x1C}, {0x7D, 0xBE}, /* 0xD0-0xD3 */ + {0x83, 0xF1}, {0x96, 0x75}, {0x4F, 0xDA}, {0x52, 0x29}, /* 0xD4-0xD7 */ + {0x53, 0x98}, {0x54, 0x0F}, {0x55, 0x0E}, {0x5C, 0x65}, /* 0xD8-0xDB */ + {0x60, 0xA7}, {0x67, 0x4E}, {0x68, 0xA8}, {0x6D, 0x6C}, /* 0xDC-0xDF */ + {0x72, 0x81}, {0x72, 0xF8}, {0x74, 0x06}, {0x74, 0x83}, /* 0xE0-0xE3 */ + {0xF9, 0x62}, {0x75, 0xE2}, {0x7C, 0x6C}, {0x7F, 0x79}, /* 0xE4-0xE7 */ + {0x7F, 0xB8}, {0x83, 0x89}, {0x88, 0xCF}, {0x88, 0xE1}, /* 0xE8-0xEB */ + {0x91, 0xCC}, {0x91, 0xD0}, {0x96, 0xE2}, {0x9B, 0xC9}, /* 0xEC-0xEF */ + {0x54, 0x1D}, {0x6F, 0x7E}, {0x71, 0xD0}, {0x74, 0x98}, /* 0xF0-0xF3 */ + {0x85, 0xFA}, {0x8E, 0xAA}, {0x96, 0xA3}, {0x9C, 0x57}, /* 0xF4-0xF7 */ + {0x9E, 0x9F}, {0x67, 0x97}, {0x6D, 0xCB}, {0x74, 0x33}, /* 0xF8-0xFB */ + {0x81, 0xE8}, {0x97, 0x16}, {0x78, 0x2C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7A, 0xCB}, {0x7B, 0x20}, {0x7C, 0x92}, /* 0xA0-0xA3 */ + {0x64, 0x69}, {0x74, 0x6A}, {0x75, 0xF2}, {0x78, 0xBC}, /* 0xA4-0xA7 */ + {0x78, 0xE8}, {0x99, 0xAC}, {0x9B, 0x54}, {0x9E, 0xBB}, /* 0xA8-0xAB */ + {0x5B, 0xDE}, {0x5E, 0x55}, {0x6F, 0x20}, {0x81, 0x9C}, /* 0xAC-0xAF */ + {0x83, 0xAB}, {0x90, 0x88}, {0x4E, 0x07}, {0x53, 0x4D}, /* 0xB0-0xB3 */ + {0x5A, 0x29}, {0x5D, 0xD2}, {0x5F, 0x4E}, {0x61, 0x62}, /* 0xB4-0xB7 */ + {0x63, 0x3D}, {0x66, 0x69}, {0x66, 0xFC}, {0x6E, 0xFF}, /* 0xB8-0xBB */ + {0x6F, 0x2B}, {0x70, 0x63}, {0x77, 0x9E}, {0x84, 0x2C}, /* 0xBC-0xBF */ + {0x85, 0x13}, {0x88, 0x3B}, {0x8F, 0x13}, {0x99, 0x45}, /* 0xC0-0xC3 */ + {0x9C, 0x3B}, {0x55, 0x1C}, {0x62, 0xB9}, {0x67, 0x2B}, /* 0xC4-0xC7 */ + {0x6C, 0xAB}, {0x83, 0x09}, {0x89, 0x6A}, {0x97, 0x7A}, /* 0xC8-0xCB */ + {0x4E, 0xA1}, {0x59, 0x84}, {0x5F, 0xD8}, {0x5F, 0xD9}, /* 0xCC-0xCF */ + {0x67, 0x1B}, {0x7D, 0xB2}, {0x7F, 0x54}, {0x82, 0x92}, /* 0xD0-0xD3 */ + {0x83, 0x2B}, {0x83, 0xBD}, {0x8F, 0x1E}, {0x90, 0x99}, /* 0xD4-0xD7 */ + {0x57, 0xCB}, {0x59, 0xB9}, {0x5A, 0x92}, {0x5B, 0xD0}, /* 0xD8-0xDB */ + {0x66, 0x27}, {0x67, 0x9A}, {0x68, 0x85}, {0x6B, 0xCF}, /* 0xDC-0xDF */ + {0x71, 0x64}, {0x7F, 0x75}, {0x8C, 0xB7}, {0x8C, 0xE3}, /* 0xE0-0xE3 */ + {0x90, 0x81}, {0x9B, 0x45}, {0x81, 0x08}, {0x8C, 0x8A}, /* 0xE4-0xE7 */ + {0x96, 0x4C}, {0x9A, 0x40}, {0x9E, 0xA5}, {0x5B, 0x5F}, /* 0xE8-0xEB */ + {0x6C, 0x13}, {0x73, 0x1B}, {0x76, 0xF2}, {0x76, 0xDF}, /* 0xEC-0xEF */ + {0x84, 0x0C}, {0x51, 0xAA}, {0x89, 0x93}, {0x51, 0x4D}, /* 0xF0-0xF3 */ + {0x51, 0x95}, {0x52, 0xC9}, {0x68, 0xC9}, {0x6C, 0x94}, /* 0xF4-0xF7 */ + {0x77, 0x04}, {0x77, 0x20}, {0x7D, 0xBF}, {0x7D, 0xEC}, /* 0xF8-0xFB */ + {0x97, 0x62}, {0x9E, 0xB5}, {0x6E, 0xC5}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x85, 0x11}, {0x51, 0xA5}, {0x54, 0x0D}, /* 0xA0-0xA3 */ + {0x54, 0x7D}, {0x66, 0x0E}, {0x66, 0x9D}, {0x69, 0x27}, /* 0xA4-0xA7 */ + {0x6E, 0x9F}, {0x76, 0xBF}, {0x77, 0x91}, {0x83, 0x17}, /* 0xA8-0xAB */ + {0x84, 0xC2}, {0x87, 0x9F}, {0x91, 0x69}, {0x92, 0x98}, /* 0xAC-0xAF */ + {0x9C, 0xF4}, {0x88, 0x82}, {0x4F, 0xAE}, {0x51, 0x92}, /* 0xB0-0xB3 */ + {0x52, 0xDF}, {0x59, 0xC6}, {0x5E, 0x3D}, {0x61, 0x55}, /* 0xB4-0xB7 */ + {0x64, 0x78}, {0x64, 0x79}, {0x66, 0xAE}, {0x67, 0xD0}, /* 0xB8-0xBB */ + {0x6A, 0x21}, {0x6B, 0xCD}, {0x6B, 0xDB}, {0x72, 0x5F}, /* 0xBC-0xBF */ + {0x72, 0x61}, {0x74, 0x41}, {0x77, 0x38}, {0x77, 0xDB}, /* 0xC0-0xC3 */ + {0x80, 0x17}, {0x82, 0xBC}, {0x83, 0x05}, {0x8B, 0x00}, /* 0xC4-0xC7 */ + {0x8B, 0x28}, {0x8C, 0x8C}, {0x67, 0x28}, {0x6C, 0x90}, /* 0xC8-0xCB */ + {0x72, 0x67}, {0x76, 0xEE}, {0x77, 0x66}, {0x7A, 0x46}, /* 0xCC-0xCF */ + {0x9D, 0xA9}, {0x6B, 0x7F}, {0x6C, 0x92}, {0x59, 0x22}, /* 0xD0-0xD3 */ + {0x67, 0x26}, {0x84, 0x99}, {0x53, 0x6F}, {0x58, 0x93}, /* 0xD4-0xD7 */ + {0x59, 0x99}, {0x5E, 0xDF}, {0x63, 0xCF}, {0x66, 0x34}, /* 0xD8-0xDB */ + {0x67, 0x73}, {0x6E, 0x3A}, {0x73, 0x2B}, {0x7A, 0xD7}, /* 0xDC-0xDF */ + {0x82, 0xD7}, {0x93, 0x28}, {0x52, 0xD9}, {0x5D, 0xEB}, /* 0xE0-0xE3 */ + {0x61, 0xAE}, {0x61, 0xCB}, {0x62, 0x0A}, {0x62, 0xC7}, /* 0xE4-0xE7 */ + {0x64, 0xAB}, {0x65, 0xE0}, {0x69, 0x59}, {0x6B, 0x66}, /* 0xE8-0xEB */ + {0x6B, 0xCB}, {0x71, 0x21}, {0x73, 0xF7}, {0x75, 0x5D}, /* 0xEC-0xEF */ + {0x7E, 0x46}, {0x82, 0x1E}, {0x83, 0x02}, {0x85, 0x6A}, /* 0xF0-0xF3 */ + {0x8A, 0xA3}, {0x8C, 0xBF}, {0x97, 0x27}, {0x9D, 0x61}, /* 0xF4-0xF7 */ + {0x58, 0xA8}, {0x9E, 0xD8}, {0x50, 0x11}, {0x52, 0x0E}, /* 0xF8-0xFB */ + {0x54, 0x3B}, {0x55, 0x4F}, {0x65, 0x87}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6C, 0x76}, {0x7D, 0x0A}, {0x7D, 0x0B}, /* 0xA0-0xA3 */ + {0x80, 0x5E}, {0x86, 0x8A}, {0x95, 0x80}, {0x96, 0xEF}, /* 0xA4-0xA7 */ + {0x52, 0xFF}, {0x6C, 0x95}, {0x72, 0x69}, {0x54, 0x73}, /* 0xA8-0xAB */ + {0x5A, 0x9A}, {0x5C, 0x3E}, {0x5D, 0x4B}, {0x5F, 0x4C}, /* 0xAC-0xAF */ + {0x5F, 0xAE}, {0x67, 0x2A}, {0x68, 0xB6}, {0x69, 0x63}, /* 0xB0-0xB3 */ + {0x6E, 0x3C}, {0x6E, 0x44}, {0x77, 0x09}, {0x7C, 0x73}, /* 0xB4-0xB7 */ + {0x7F, 0x8E}, {0x85, 0x87}, {0x8B, 0x0E}, {0x8F, 0xF7}, /* 0xB8-0xBB */ + {0x97, 0x61}, {0x9E, 0xF4}, {0x5C, 0xB7}, {0x60, 0xB6}, /* 0xBC-0xBF */ + {0x61, 0x0D}, {0x61, 0xAB}, {0x65, 0x4F}, {0x65, 0xFB}, /* 0xC0-0xC3 */ + {0x65, 0xFC}, {0x6C, 0x11}, {0x6C, 0xEF}, {0x73, 0x9F}, /* 0xC4-0xC7 */ + {0x73, 0xC9}, {0x7D, 0xE1}, {0x95, 0x94}, {0x5B, 0xC6}, /* 0xC8-0xCB */ + {0x87, 0x1C}, {0x8B, 0x10}, {0x52, 0x5D}, {0x53, 0x5A}, /* 0xCC-0xCF */ + {0x62, 0xCD}, {0x64, 0x0F}, {0x64, 0xB2}, {0x67, 0x34}, /* 0xD0-0xD3 */ + {0x6A, 0x38}, {0x6C, 0xCA}, {0x73, 0xC0}, {0x74, 0x9E}, /* 0xD4-0xD7 */ + {0x7B, 0x94}, {0x7C, 0x95}, {0x7E, 0x1B}, {0x81, 0x8A}, /* 0xD8-0xDB */ + {0x82, 0x36}, {0x85, 0x84}, {0x8F, 0xEB}, {0x96, 0xF9}, /* 0xDC-0xDF */ + {0x99, 0xC1}, {0x4F, 0x34}, {0x53, 0x4A}, {0x53, 0xCD}, /* 0xE0-0xE3 */ + {0x53, 0xDB}, {0x62, 0xCC}, {0x64, 0x2C}, {0x65, 0x00}, /* 0xE4-0xE7 */ + {0x65, 0x91}, {0x69, 0xC3}, {0x6C, 0xEE}, {0x6F, 0x58}, /* 0xE8-0xEB */ + {0x73, 0xED}, {0x75, 0x54}, {0x76, 0x22}, {0x76, 0xE4}, /* 0xEC-0xEF */ + {0x76, 0xFC}, {0x78, 0xD0}, {0x78, 0xFB}, {0x79, 0x2C}, /* 0xF0-0xF3 */ + {0x7D, 0x46}, {0x82, 0x2C}, {0x87, 0xE0}, {0x8F, 0xD4}, /* 0xF4-0xF7 */ + {0x98, 0x12}, {0x98, 0xEF}, {0x52, 0xC3}, {0x62, 0xD4}, /* 0xF8-0xFB */ + {0x64, 0xA5}, {0x6E, 0x24}, {0x6F, 0x51}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x76, 0x7C}, {0x8D, 0xCB}, {0x91, 0xB1}, /* 0xA0-0xA3 */ + {0x92, 0x62}, {0x9A, 0xEE}, {0x9B, 0x43}, {0x50, 0x23}, /* 0xA4-0xA7 */ + {0x50, 0x8D}, {0x57, 0x4A}, {0x59, 0xA8}, {0x5C, 0x28}, /* 0xA8-0xAB */ + {0x5E, 0x47}, {0x5F, 0x77}, {0x62, 0x3F}, {0x65, 0x3E}, /* 0xAC-0xAF */ + {0x65, 0xB9}, {0x65, 0xC1}, {0x66, 0x09}, {0x67, 0x8B}, /* 0xB0-0xB3 */ + {0x69, 0x9C}, {0x6E, 0xC2}, {0x78, 0xC5}, {0x7D, 0x21}, /* 0xB4-0xB7 */ + {0x80, 0xAA}, {0x81, 0x80}, {0x82, 0x2B}, {0x82, 0xB3}, /* 0xB8-0xBB */ + {0x84, 0xA1}, {0x86, 0x8C}, {0x8A, 0x2A}, {0x8B, 0x17}, /* 0xBC-0xBF */ + {0x90, 0xA6}, {0x96, 0x32}, {0x9F, 0x90}, {0x50, 0x0D}, /* 0xC0-0xC3 */ + {0x4F, 0xF3}, {0xF9, 0x63}, {0x57, 0xF9}, {0x5F, 0x98}, /* 0xC4-0xC7 */ + {0x62, 0xDC}, {0x63, 0x92}, {0x67, 0x6F}, {0x6E, 0x43}, /* 0xC8-0xCB */ + {0x71, 0x19}, {0x76, 0xC3}, {0x80, 0xCC}, {0x80, 0xDA}, /* 0xCC-0xCF */ + {0x88, 0xF4}, {0x88, 0xF5}, {0x89, 0x19}, {0x8C, 0xE0}, /* 0xD0-0xD3 */ + {0x8F, 0x29}, {0x91, 0x4D}, {0x96, 0x6A}, {0x4F, 0x2F}, /* 0xD4-0xD7 */ + {0x4F, 0x70}, {0x5E, 0x1B}, {0x67, 0xCF}, {0x68, 0x22}, /* 0xD8-0xDB */ + {0x76, 0x7D}, {0x76, 0x7E}, {0x9B, 0x44}, {0x5E, 0x61}, /* 0xDC-0xDF */ + {0x6A, 0x0A}, {0x71, 0x69}, {0x71, 0xD4}, {0x75, 0x6A}, /* 0xE0-0xE3 */ + {0xF9, 0x64}, {0x7E, 0x41}, {0x85, 0x43}, {0x85, 0xE9}, /* 0xE4-0xE7 */ + {0x98, 0xDC}, {0x4F, 0x10}, {0x7B, 0x4F}, {0x7F, 0x70}, /* 0xE8-0xEB */ + {0x95, 0xA5}, {0x51, 0xE1}, {0x5E, 0x06}, {0x68, 0xB5}, /* 0xEC-0xEF */ + {0x6C, 0x3E}, {0x6C, 0x4E}, {0x6C, 0xDB}, {0x72, 0xAF}, /* 0xF0-0xF3 */ + {0x7B, 0xC4}, {0x83, 0x03}, {0x6C, 0xD5}, {0x74, 0x3A}, /* 0xF4-0xF7 */ + {0x50, 0xFB}, {0x52, 0x88}, {0x58, 0xC1}, {0x64, 0xD8}, /* 0xF8-0xFB */ + {0x6A, 0x97}, {0x74, 0xA7}, {0x76, 0x56}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x78, 0xA7}, {0x86, 0x17}, {0x95, 0xE2}, /* 0xA0-0xA3 */ + {0x97, 0x39}, {0xF9, 0x65}, {0x53, 0x5E}, {0x5F, 0x01}, /* 0xA4-0xA7 */ + {0x8B, 0x8A}, {0x8F, 0xA8}, {0x8F, 0xAF}, {0x90, 0x8A}, /* 0xA8-0xAB */ + {0x52, 0x25}, {0x77, 0xA5}, {0x9C, 0x49}, {0x9F, 0x08}, /* 0xAC-0xAF */ + {0x4E, 0x19}, {0x50, 0x02}, {0x51, 0x75}, {0x5C, 0x5B}, /* 0xB0-0xB3 */ + {0x5E, 0x77}, {0x66, 0x1E}, {0x66, 0x3A}, {0x67, 0xC4}, /* 0xB4-0xB7 */ + {0x68, 0xC5}, {0x70, 0xB3}, {0x75, 0x01}, {0x75, 0xC5}, /* 0xB8-0xBB */ + {0x79, 0xC9}, {0x7A, 0xDD}, {0x8F, 0x27}, {0x99, 0x20}, /* 0xBC-0xBF */ + {0x9A, 0x08}, {0x4F, 0xDD}, {0x58, 0x21}, {0x58, 0x31}, /* 0xC0-0xC3 */ + {0x5B, 0xF6}, {0x66, 0x6E}, {0x6B, 0x65}, {0x6D, 0x11}, /* 0xC4-0xC7 */ + {0x6E, 0x7A}, {0x6F, 0x7D}, {0x73, 0xE4}, {0x75, 0x2B}, /* 0xC8-0xCB */ + {0x83, 0xE9}, {0x88, 0xDC}, {0x89, 0x13}, {0x8B, 0x5C}, /* 0xCC-0xCF */ + {0x8F, 0x14}, {0x4F, 0x0F}, {0x50, 0xD5}, {0x53, 0x10}, /* 0xD0-0xD3 */ + {0x53, 0x5C}, {0x5B, 0x93}, {0x5F, 0xA9}, {0x67, 0x0D}, /* 0xD4-0xD7 */ + {0x79, 0x8F}, {0x81, 0x79}, {0x83, 0x2F}, {0x85, 0x14}, /* 0xD8-0xDB */ + {0x89, 0x07}, {0x89, 0x86}, {0x8F, 0x39}, {0x8F, 0x3B}, /* 0xDC-0xDF */ + {0x99, 0xA5}, {0x9C, 0x12}, {0x67, 0x2C}, {0x4E, 0x76}, /* 0xE0-0xE3 */ + {0x4F, 0xF8}, {0x59, 0x49}, {0x5C, 0x01}, {0x5C, 0xEF}, /* 0xE4-0xE7 */ + {0x5C, 0xF0}, {0x63, 0x67}, {0x68, 0xD2}, {0x70, 0xFD}, /* 0xE8-0xEB */ + {0x71, 0xA2}, {0x74, 0x2B}, {0x7E, 0x2B}, {0x84, 0xEC}, /* 0xEC-0xEF */ + {0x87, 0x02}, {0x90, 0x22}, {0x92, 0xD2}, {0x9C, 0xF3}, /* 0xF0-0xF3 */ + {0x4E, 0x0D}, {0x4E, 0xD8}, {0x4F, 0xEF}, {0x50, 0x85}, /* 0xF4-0xF7 */ + {0x52, 0x56}, {0x52, 0x6F}, {0x54, 0x26}, {0x54, 0x90}, /* 0xF8-0xFB */ + {0x57, 0xE0}, {0x59, 0x2B}, {0x5A, 0x66}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5B, 0x5A}, {0x5B, 0x75}, {0x5B, 0xCC}, /* 0xA0-0xA3 */ + {0x5E, 0x9C}, {0xF9, 0x66}, {0x62, 0x76}, {0x65, 0x77}, /* 0xA4-0xA7 */ + {0x65, 0xA7}, {0x6D, 0x6E}, {0x6E, 0xA5}, {0x72, 0x36}, /* 0xA8-0xAB */ + {0x7B, 0x26}, {0x7C, 0x3F}, {0x7F, 0x36}, {0x81, 0x50}, /* 0xAC-0xAF */ + {0x81, 0x51}, {0x81, 0x9A}, {0x82, 0x40}, {0x82, 0x99}, /* 0xB0-0xB3 */ + {0x83, 0xA9}, {0x8A, 0x03}, {0x8C, 0xA0}, {0x8C, 0xE6}, /* 0xB4-0xB7 */ + {0x8C, 0xFB}, {0x8D, 0x74}, {0x8D, 0xBA}, {0x90, 0xE8}, /* 0xB8-0xBB */ + {0x91, 0xDC}, {0x96, 0x1C}, {0x96, 0x44}, {0x99, 0xD9}, /* 0xBC-0xBF */ + {0x9C, 0xE7}, {0x53, 0x17}, {0x52, 0x06}, {0x54, 0x29}, /* 0xC0-0xC3 */ + {0x56, 0x74}, {0x58, 0xB3}, {0x59, 0x54}, {0x59, 0x6E}, /* 0xC4-0xC7 */ + {0x5F, 0xFF}, {0x61, 0xA4}, {0x62, 0x6E}, {0x66, 0x10}, /* 0xC8-0xCB */ + {0x6C, 0x7E}, {0x71, 0x1A}, {0x76, 0xC6}, {0x7C, 0x89}, /* 0xCC-0xCF */ + {0x7C, 0xDE}, {0x7D, 0x1B}, {0x82, 0xAC}, {0x8C, 0xC1}, /* 0xD0-0xD3 */ + {0x96, 0xF0}, {0xF9, 0x67}, {0x4F, 0x5B}, {0x5F, 0x17}, /* 0xD4-0xD7 */ + {0x5F, 0x7F}, {0x62, 0xC2}, {0x5D, 0x29}, {0x67, 0x0B}, /* 0xD8-0xDB */ + {0x68, 0xDA}, {0x78, 0x7C}, {0x7E, 0x43}, {0x9D, 0x6C}, /* 0xDC-0xDF */ + {0x4E, 0x15}, {0x50, 0x99}, {0x53, 0x15}, {0x53, 0x2A}, /* 0xE0-0xE3 */ + {0x53, 0x51}, {0x59, 0x83}, {0x5A, 0x62}, {0x5E, 0x87}, /* 0xE4-0xE7 */ + {0x60, 0xB2}, {0x61, 0x8A}, {0x62, 0x49}, {0x62, 0x79}, /* 0xE8-0xEB */ + {0x65, 0x90}, {0x67, 0x87}, {0x69, 0xA7}, {0x6B, 0xD4}, /* 0xEC-0xEF */ + {0x6B, 0xD6}, {0x6B, 0xD7}, {0x6B, 0xD8}, {0x6C, 0xB8}, /* 0xF0-0xF3 */ + {0xF9, 0x68}, {0x74, 0x35}, {0x75, 0xFA}, {0x78, 0x12}, /* 0xF4-0xF7 */ + {0x78, 0x91}, {0x79, 0xD5}, {0x79, 0xD8}, {0x7C, 0x83}, /* 0xF8-0xFB */ + {0x7D, 0xCB}, {0x7F, 0xE1}, {0x80, 0xA5}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x81, 0x3E}, {0x81, 0xC2}, {0x83, 0xF2}, /* 0xA0-0xA3 */ + {0x87, 0x1A}, {0x88, 0xE8}, {0x8A, 0xB9}, {0x8B, 0x6C}, /* 0xA4-0xA7 */ + {0x8C, 0xBB}, {0x91, 0x19}, {0x97, 0x5E}, {0x98, 0xDB}, /* 0xA8-0xAB */ + {0x9F, 0x3B}, {0x56, 0xAC}, {0x5B, 0x2A}, {0x5F, 0x6C}, /* 0xAC-0xAF */ + {0x65, 0x8C}, {0x6A, 0xB3}, {0x6B, 0xAF}, {0x6D, 0x5C}, /* 0xB0-0xB3 */ + {0x6F, 0xF1}, {0x70, 0x15}, {0x72, 0x5D}, {0x73, 0xAD}, /* 0xB4-0xB7 */ + {0x8C, 0xA7}, {0x8C, 0xD3}, {0x98, 0x3B}, {0x61, 0x91}, /* 0xB8-0xBB */ + {0x6C, 0x37}, {0x80, 0x58}, {0x9A, 0x01}, {0x4E, 0x4D}, /* 0xBC-0xBF */ + {0x4E, 0x8B}, {0x4E, 0x9B}, {0x4E, 0xD5}, {0x4F, 0x3A}, /* 0xC0-0xC3 */ + {0x4F, 0x3C}, {0x4F, 0x7F}, {0x4F, 0xDF}, {0x50, 0xFF}, /* 0xC4-0xC7 */ + {0x53, 0xF2}, {0x53, 0xF8}, {0x55, 0x06}, {0x55, 0xE3}, /* 0xC8-0xCB */ + {0x56, 0xDB}, {0x58, 0xEB}, {0x59, 0x62}, {0x5A, 0x11}, /* 0xCC-0xCF */ + {0x5B, 0xEB}, {0x5B, 0xFA}, {0x5C, 0x04}, {0x5D, 0xF3}, /* 0xD0-0xD3 */ + {0x5E, 0x2B}, {0x5F, 0x99}, {0x60, 0x1D}, {0x63, 0x68}, /* 0xD4-0xD7 */ + {0x65, 0x9C}, {0x65, 0xAF}, {0x67, 0xF6}, {0x67, 0xFB}, /* 0xD8-0xDB */ + {0x68, 0xAD}, {0x6B, 0x7B}, {0x6C, 0x99}, {0x6C, 0xD7}, /* 0xDC-0xDF */ + {0x6E, 0x23}, {0x70, 0x09}, {0x73, 0x45}, {0x78, 0x02}, /* 0xE0-0xE3 */ + {0x79, 0x3E}, {0x79, 0x40}, {0x79, 0x60}, {0x79, 0xC1}, /* 0xE4-0xE7 */ + {0x7B, 0xE9}, {0x7D, 0x17}, {0x7D, 0x72}, {0x80, 0x86}, /* 0xE8-0xEB */ + {0x82, 0x0D}, {0x83, 0x8E}, {0x84, 0xD1}, {0x86, 0xC7}, /* 0xEC-0xEF */ + {0x88, 0xDF}, {0x8A, 0x50}, {0x8A, 0x5E}, {0x8B, 0x1D}, /* 0xF0-0xF3 */ + {0x8C, 0xDC}, {0x8D, 0x66}, {0x8F, 0xAD}, {0x90, 0xAA}, /* 0xF4-0xF7 */ + {0x98, 0xFC}, {0x99, 0xDF}, {0x9E, 0x9D}, {0x52, 0x4A}, /* 0xF8-0xFB */ + {0xF9, 0x69}, {0x67, 0x14}, {0xF9, 0x6A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x50, 0x98}, {0x52, 0x2A}, {0x5C, 0x71}, /* 0xA0-0xA3 */ + {0x65, 0x63}, {0x6C, 0x55}, {0x73, 0xCA}, {0x75, 0x23}, /* 0xA4-0xA7 */ + {0x75, 0x9D}, {0x7B, 0x97}, {0x84, 0x9C}, {0x91, 0x78}, /* 0xA8-0xAB */ + {0x97, 0x30}, {0x4E, 0x77}, {0x64, 0x92}, {0x6B, 0xBA}, /* 0xAC-0xAF */ + {0x71, 0x5E}, {0x85, 0xA9}, {0x4E, 0x09}, {0xF9, 0x6B}, /* 0xB0-0xB3 */ + {0x67, 0x49}, {0x68, 0xEE}, {0x6E, 0x17}, {0x82, 0x9F}, /* 0xB4-0xB7 */ + {0x85, 0x18}, {0x88, 0x6B}, {0x63, 0xF7}, {0x6F, 0x81}, /* 0xB8-0xBB */ + {0x92, 0x12}, {0x98, 0xAF}, {0x4E, 0x0A}, {0x50, 0xB7}, /* 0xBC-0xBF */ + {0x50, 0xCF}, {0x51, 0x1F}, {0x55, 0x46}, {0x55, 0xAA}, /* 0xC0-0xC3 */ + {0x56, 0x17}, {0x5B, 0x40}, {0x5C, 0x19}, {0x5C, 0xE0}, /* 0xC4-0xC7 */ + {0x5E, 0x38}, {0x5E, 0x8A}, {0x5E, 0xA0}, {0x5E, 0xC2}, /* 0xC8-0xCB */ + {0x60, 0xF3}, {0x68, 0x51}, {0x6A, 0x61}, {0x6E, 0x58}, /* 0xCC-0xCF */ + {0x72, 0x3D}, {0x72, 0x40}, {0x72, 0xC0}, {0x76, 0xF8}, /* 0xD0-0xD3 */ + {0x79, 0x65}, {0x7B, 0xB1}, {0x7F, 0xD4}, {0x88, 0xF3}, /* 0xD4-0xD7 */ + {0x89, 0xF4}, {0x8A, 0x73}, {0x8C, 0x61}, {0x8C, 0xDE}, /* 0xD8-0xDB */ + {0x97, 0x1C}, {0x58, 0x5E}, {0x74, 0xBD}, {0x8C, 0xFD}, /* 0xDC-0xDF */ + {0x55, 0xC7}, {0xF9, 0x6C}, {0x7A, 0x61}, {0x7D, 0x22}, /* 0xE0-0xE3 */ + {0x82, 0x72}, {0x72, 0x72}, {0x75, 0x1F}, {0x75, 0x25}, /* 0xE4-0xE7 */ + {0xF9, 0x6D}, {0x7B, 0x19}, {0x58, 0x85}, {0x58, 0xFB}, /* 0xE8-0xEB */ + {0x5D, 0xBC}, {0x5E, 0x8F}, {0x5E, 0xB6}, {0x5F, 0x90}, /* 0xEC-0xEF */ + {0x60, 0x55}, {0x62, 0x92}, {0x63, 0x7F}, {0x65, 0x4D}, /* 0xF0-0xF3 */ + {0x66, 0x91}, {0x66, 0xD9}, {0x66, 0xF8}, {0x68, 0x16}, /* 0xF4-0xF7 */ + {0x68, 0xF2}, {0x72, 0x80}, {0x74, 0x5E}, {0x7B, 0x6E}, /* 0xF8-0xFB */ + {0x7D, 0x6E}, {0x7D, 0xD6}, {0x7F, 0x72}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x80, 0xE5}, {0x82, 0x12}, {0x85, 0xAF}, /* 0xA0-0xA3 */ + {0x89, 0x7F}, {0x8A, 0x93}, {0x90, 0x1D}, {0x92, 0xE4}, /* 0xA4-0xA7 */ + {0x9E, 0xCD}, {0x9F, 0x20}, {0x59, 0x15}, {0x59, 0x6D}, /* 0xA8-0xAB */ + {0x5E, 0x2D}, {0x60, 0xDC}, {0x66, 0x14}, {0x66, 0x73}, /* 0xAC-0xAF */ + {0x67, 0x90}, {0x6C, 0x50}, {0x6D, 0xC5}, {0x6F, 0x5F}, /* 0xB0-0xB3 */ + {0x77, 0xF3}, {0x78, 0xA9}, {0x84, 0xC6}, {0x91, 0xCB}, /* 0xB4-0xB7 */ + {0x93, 0x2B}, {0x4E, 0xD9}, {0x50, 0xCA}, {0x51, 0x48}, /* 0xB8-0xBB */ + {0x55, 0x84}, {0x5B, 0x0B}, {0x5B, 0xA3}, {0x62, 0x47}, /* 0xBC-0xBF */ + {0x65, 0x7E}, {0x65, 0xCB}, {0x6E, 0x32}, {0x71, 0x7D}, /* 0xC0-0xC3 */ + {0x74, 0x01}, {0x74, 0x44}, {0x74, 0x87}, {0x74, 0xBF}, /* 0xC4-0xC7 */ + {0x76, 0x6C}, {0x79, 0xAA}, {0x7D, 0xDA}, {0x7E, 0x55}, /* 0xC8-0xCB */ + {0x7F, 0xA8}, {0x81, 0x7A}, {0x81, 0xB3}, {0x82, 0x39}, /* 0xCC-0xCF */ + {0x86, 0x1A}, {0x87, 0xEC}, {0x8A, 0x75}, {0x8D, 0xE3}, /* 0xD0-0xD3 */ + {0x90, 0x78}, {0x92, 0x91}, {0x94, 0x25}, {0x99, 0x4D}, /* 0xD4-0xD7 */ + {0x9B, 0xAE}, {0x53, 0x68}, {0x5C, 0x51}, {0x69, 0x54}, /* 0xD8-0xDB */ + {0x6C, 0xC4}, {0x6D, 0x29}, {0x6E, 0x2B}, {0x82, 0x0C}, /* 0xDC-0xDF */ + {0x85, 0x9B}, {0x89, 0x3B}, {0x8A, 0x2D}, {0x8A, 0xAA}, /* 0xE0-0xE3 */ + {0x96, 0xEA}, {0x9F, 0x67}, {0x52, 0x61}, {0x66, 0xB9}, /* 0xE4-0xE7 */ + {0x6B, 0xB2}, {0x7E, 0x96}, {0x87, 0xFE}, {0x8D, 0x0D}, /* 0xE8-0xEB */ + {0x95, 0x83}, {0x96, 0x5D}, {0x65, 0x1D}, {0x6D, 0x89}, /* 0xEC-0xEF */ + {0x71, 0xEE}, {0xF9, 0x6E}, {0x57, 0xCE}, {0x59, 0xD3}, /* 0xF0-0xF3 */ + {0x5B, 0xAC}, {0x60, 0x27}, {0x60, 0xFA}, {0x62, 0x10}, /* 0xF4-0xF7 */ + {0x66, 0x1F}, {0x66, 0x5F}, {0x73, 0x29}, {0x73, 0xF9}, /* 0xF8-0xFB */ + {0x76, 0xDB}, {0x77, 0x01}, {0x7B, 0x6C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x80, 0x56}, {0x80, 0x72}, {0x81, 0x65}, /* 0xA0-0xA3 */ + {0x8A, 0xA0}, {0x91, 0x92}, {0x4E, 0x16}, {0x52, 0xE2}, /* 0xA4-0xA7 */ + {0x6B, 0x72}, {0x6D, 0x17}, {0x7A, 0x05}, {0x7B, 0x39}, /* 0xA8-0xAB */ + {0x7D, 0x30}, {0xF9, 0x6F}, {0x8C, 0xB0}, {0x53, 0xEC}, /* 0xAC-0xAF */ + {0x56, 0x2F}, {0x58, 0x51}, {0x5B, 0xB5}, {0x5C, 0x0F}, /* 0xB0-0xB3 */ + {0x5C, 0x11}, {0x5D, 0xE2}, {0x62, 0x40}, {0x63, 0x83}, /* 0xB4-0xB7 */ + {0x64, 0x14}, {0x66, 0x2D}, {0x68, 0xB3}, {0x6C, 0xBC}, /* 0xB8-0xBB */ + {0x6D, 0x88}, {0x6E, 0xAF}, {0x70, 0x1F}, {0x70, 0xA4}, /* 0xBC-0xBF */ + {0x71, 0xD2}, {0x75, 0x26}, {0x75, 0x8F}, {0x75, 0x8E}, /* 0xC0-0xC3 */ + {0x76, 0x19}, {0x7B, 0x11}, {0x7B, 0xE0}, {0x7C, 0x2B}, /* 0xC4-0xC7 */ + {0x7D, 0x20}, {0x7D, 0x39}, {0x85, 0x2C}, {0x85, 0x6D}, /* 0xC8-0xCB */ + {0x86, 0x07}, {0x8A, 0x34}, {0x90, 0x0D}, {0x90, 0x61}, /* 0xCC-0xCF */ + {0x90, 0xB5}, {0x92, 0xB7}, {0x97, 0xF6}, {0x9A, 0x37}, /* 0xD0-0xD3 */ + {0x4F, 0xD7}, {0x5C, 0x6C}, {0x67, 0x5F}, {0x6D, 0x91}, /* 0xD4-0xD7 */ + {0x7C, 0x9F}, {0x7E, 0x8C}, {0x8B, 0x16}, {0x8D, 0x16}, /* 0xD8-0xDB */ + {0x90, 0x1F}, {0x5B, 0x6B}, {0x5D, 0xFD}, {0x64, 0x0D}, /* 0xDC-0xDF */ + {0x84, 0xC0}, {0x90, 0x5C}, {0x98, 0xE1}, {0x73, 0x87}, /* 0xE0-0xE3 */ + {0x5B, 0x8B}, {0x60, 0x9A}, {0x67, 0x7E}, {0x6D, 0xDE}, /* 0xE4-0xE7 */ + {0x8A, 0x1F}, {0x8A, 0xA6}, {0x90, 0x01}, {0x98, 0x0C}, /* 0xE8-0xEB */ + {0x52, 0x37}, {0xF9, 0x70}, {0x70, 0x51}, {0x78, 0x8E}, /* 0xEC-0xEF */ + {0x93, 0x96}, {0x88, 0x70}, {0x91, 0xD7}, {0x4F, 0xEE}, /* 0xF0-0xF3 */ + {0x53, 0xD7}, {0x55, 0xFD}, {0x56, 0xDA}, {0x57, 0x82}, /* 0xF4-0xF7 */ + {0x58, 0xFD}, {0x5A, 0xC2}, {0x5B, 0x88}, {0x5C, 0xAB}, /* 0xF8-0xFB */ + {0x5C, 0xC0}, {0x5E, 0x25}, {0x61, 0x01}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x62, 0x0D}, {0x62, 0x4B}, {0x63, 0x88}, /* 0xA0-0xA3 */ + {0x64, 0x1C}, {0x65, 0x36}, {0x65, 0x78}, {0x6A, 0x39}, /* 0xA4-0xA7 */ + {0x6B, 0x8A}, {0x6C, 0x34}, {0x6D, 0x19}, {0x6F, 0x31}, /* 0xA8-0xAB */ + {0x71, 0xE7}, {0x72, 0xE9}, {0x73, 0x78}, {0x74, 0x07}, /* 0xAC-0xAF */ + {0x74, 0xB2}, {0x76, 0x26}, {0x77, 0x61}, {0x79, 0xC0}, /* 0xB0-0xB3 */ + {0x7A, 0x57}, {0x7A, 0xEA}, {0x7C, 0xB9}, {0x7D, 0x8F}, /* 0xB4-0xB7 */ + {0x7D, 0xAC}, {0x7E, 0x61}, {0x7F, 0x9E}, {0x81, 0x29}, /* 0xB8-0xBB */ + {0x83, 0x31}, {0x84, 0x90}, {0x84, 0xDA}, {0x85, 0xEA}, /* 0xBC-0xBF */ + {0x88, 0x96}, {0x8A, 0xB0}, {0x8B, 0x90}, {0x8F, 0x38}, /* 0xC0-0xC3 */ + {0x90, 0x42}, {0x90, 0x83}, {0x91, 0x6C}, {0x92, 0x96}, /* 0xC4-0xC7 */ + {0x92, 0xB9}, {0x96, 0x8B}, {0x96, 0xA7}, {0x96, 0xA8}, /* 0xC8-0xCB */ + {0x96, 0xD6}, {0x97, 0x00}, {0x98, 0x08}, {0x99, 0x96}, /* 0xCC-0xCF */ + {0x9A, 0xD3}, {0x9B, 0x1A}, {0x53, 0xD4}, {0x58, 0x7E}, /* 0xD0-0xD3 */ + {0x59, 0x19}, {0x5B, 0x70}, {0x5B, 0xBF}, {0x6D, 0xD1}, /* 0xD4-0xD7 */ + {0x6F, 0x5A}, {0x71, 0x9F}, {0x74, 0x21}, {0x74, 0xB9}, /* 0xD8-0xDB */ + {0x80, 0x85}, {0x83, 0xFD}, {0x5D, 0xE1}, {0x5F, 0x87}, /* 0xDC-0xDF */ + {0x5F, 0xAA}, {0x60, 0x42}, {0x65, 0xEC}, {0x68, 0x12}, /* 0xE0-0xE3 */ + {0x69, 0x6F}, {0x6A, 0x53}, {0x6B, 0x89}, {0x6D, 0x35}, /* 0xE4-0xE7 */ + {0x6D, 0xF3}, {0x73, 0xE3}, {0x76, 0xFE}, {0x77, 0xAC}, /* 0xE8-0xEB */ + {0x7B, 0x4D}, {0x7D, 0x14}, {0x81, 0x23}, {0x82, 0x1C}, /* 0xEC-0xEF */ + {0x83, 0x40}, {0x84, 0xF4}, {0x85, 0x63}, {0x8A, 0x62}, /* 0xF0-0xF3 */ + {0x8A, 0xC4}, {0x91, 0x87}, {0x93, 0x1E}, {0x98, 0x06}, /* 0xF4-0xF7 */ + {0x99, 0xB4}, {0x62, 0x0C}, {0x88, 0x53}, {0x8F, 0xF0}, /* 0xF8-0xFB */ + {0x92, 0x65}, {0x5D, 0x07}, {0x5D, 0x27}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5D, 0x69}, {0x74, 0x5F}, {0x81, 0x9D}, /* 0xA0-0xA3 */ + {0x87, 0x68}, {0x6F, 0xD5}, {0x62, 0xFE}, {0x7F, 0xD2}, /* 0xA4-0xA7 */ + {0x89, 0x36}, {0x89, 0x72}, {0x4E, 0x1E}, {0x4E, 0x58}, /* 0xA8-0xAB */ + {0x50, 0xE7}, {0x52, 0xDD}, {0x53, 0x47}, {0x62, 0x7F}, /* 0xAC-0xAF */ + {0x66, 0x07}, {0x7E, 0x69}, {0x88, 0x05}, {0x96, 0x5E}, /* 0xB0-0xB3 */ + {0x4F, 0x8D}, {0x53, 0x19}, {0x56, 0x36}, {0x59, 0xCB}, /* 0xB4-0xB7 */ + {0x5A, 0xA4}, {0x5C, 0x38}, {0x5C, 0x4E}, {0x5C, 0x4D}, /* 0xB8-0xBB */ + {0x5E, 0x02}, {0x5F, 0x11}, {0x60, 0x43}, {0x65, 0xBD}, /* 0xBC-0xBF */ + {0x66, 0x2F}, {0x66, 0x42}, {0x67, 0xBE}, {0x67, 0xF4}, /* 0xC0-0xC3 */ + {0x73, 0x1C}, {0x77, 0xE2}, {0x79, 0x3A}, {0x7F, 0xC5}, /* 0xC4-0xC7 */ + {0x84, 0x94}, {0x84, 0xCD}, {0x89, 0x96}, {0x8A, 0x66}, /* 0xC8-0xCB */ + {0x8A, 0x69}, {0x8A, 0xE1}, {0x8C, 0x55}, {0x8C, 0x7A}, /* 0xCC-0xCF */ + {0x57, 0xF4}, {0x5B, 0xD4}, {0x5F, 0x0F}, {0x60, 0x6F}, /* 0xD0-0xD3 */ + {0x62, 0xED}, {0x69, 0x0D}, {0x6B, 0x96}, {0x6E, 0x5C}, /* 0xD4-0xD7 */ + {0x71, 0x84}, {0x7B, 0xD2}, {0x87, 0x55}, {0x8B, 0x58}, /* 0xD8-0xDB */ + {0x8E, 0xFE}, {0x98, 0xDF}, {0x98, 0xFE}, {0x4F, 0x38}, /* 0xDC-0xDF */ + {0x4F, 0x81}, {0x4F, 0xE1}, {0x54, 0x7B}, {0x5A, 0x20}, /* 0xE0-0xE3 */ + {0x5B, 0xB8}, {0x61, 0x3C}, {0x65, 0xB0}, {0x66, 0x68}, /* 0xE4-0xE7 */ + {0x71, 0xFC}, {0x75, 0x33}, {0x79, 0x5E}, {0x7D, 0x33}, /* 0xE8-0xEB */ + {0x81, 0x4E}, {0x81, 0xE3}, {0x83, 0x98}, {0x85, 0xAA}, /* 0xEC-0xEF */ + {0x85, 0xCE}, {0x87, 0x03}, {0x8A, 0x0A}, {0x8E, 0xAB}, /* 0xF0-0xF3 */ + {0x8F, 0x9B}, {0xF9, 0x71}, {0x8F, 0xC5}, {0x59, 0x31}, /* 0xF4-0xF7 */ + {0x5B, 0xA4}, {0x5B, 0xE6}, {0x60, 0x89}, {0x5B, 0xE9}, /* 0xF8-0xFB */ + {0x5C, 0x0B}, {0x5F, 0xC3}, {0x6C, 0x81}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xF9, 0x72}, {0x6D, 0xF1}, {0x70, 0x0B}, /* 0xA0-0xA3 */ + {0x75, 0x1A}, {0x82, 0xAF}, {0x8A, 0xF6}, {0x4E, 0xC0}, /* 0xA4-0xA7 */ + {0x53, 0x41}, {0xF9, 0x73}, {0x96, 0xD9}, {0x6C, 0x0F}, /* 0xA8-0xAB */ + {0x4E, 0x9E}, {0x4F, 0xC4}, {0x51, 0x52}, {0x55, 0x5E}, /* 0xAC-0xAF */ + {0x5A, 0x25}, {0x5C, 0xE8}, {0x62, 0x11}, {0x72, 0x59}, /* 0xB0-0xB3 */ + {0x82, 0xBD}, {0x83, 0xAA}, {0x86, 0xFE}, {0x88, 0x59}, /* 0xB4-0xB7 */ + {0x8A, 0x1D}, {0x96, 0x3F}, {0x96, 0xC5}, {0x99, 0x13}, /* 0xB8-0xBB */ + {0x9D, 0x09}, {0x9D, 0x5D}, {0x58, 0x0A}, {0x5C, 0xB3}, /* 0xBC-0xBF */ + {0x5D, 0xBD}, {0x5E, 0x44}, {0x60, 0xE1}, {0x61, 0x15}, /* 0xC0-0xC3 */ + {0x63, 0xE1}, {0x6A, 0x02}, {0x6E, 0x25}, {0x91, 0x02}, /* 0xC4-0xC7 */ + {0x93, 0x54}, {0x98, 0x4E}, {0x9C, 0x10}, {0x9F, 0x77}, /* 0xC8-0xCB */ + {0x5B, 0x89}, {0x5C, 0xB8}, {0x63, 0x09}, {0x66, 0x4F}, /* 0xCC-0xCF */ + {0x68, 0x48}, {0x77, 0x3C}, {0x96, 0xC1}, {0x97, 0x8D}, /* 0xD0-0xD3 */ + {0x98, 0x54}, {0x9B, 0x9F}, {0x65, 0xA1}, {0x8B, 0x01}, /* 0xD4-0xD7 */ + {0x8E, 0xCB}, {0x95, 0xBC}, {0x55, 0x35}, {0x5C, 0xA9}, /* 0xD8-0xDB */ + {0x5D, 0xD6}, {0x5E, 0xB5}, {0x66, 0x97}, {0x76, 0x4C}, /* 0xDC-0xDF */ + {0x83, 0xF4}, {0x95, 0xC7}, {0x58, 0xD3}, {0x62, 0xBC}, /* 0xE0-0xE3 */ + {0x72, 0xCE}, {0x9D, 0x28}, {0x4E, 0xF0}, {0x59, 0x2E}, /* 0xE4-0xE7 */ + {0x60, 0x0F}, {0x66, 0x3B}, {0x6B, 0x83}, {0x79, 0xE7}, /* 0xE8-0xEB */ + {0x9D, 0x26}, {0x53, 0x93}, {0x54, 0xC0}, {0x57, 0xC3}, /* 0xEC-0xEF */ + {0x5D, 0x16}, {0x61, 0x1B}, {0x66, 0xD6}, {0x6D, 0xAF}, /* 0xF0-0xF3 */ + {0x78, 0x8D}, {0x82, 0x7E}, {0x96, 0x98}, {0x97, 0x44}, /* 0xF4-0xF7 */ + {0x53, 0x84}, {0x62, 0x7C}, {0x63, 0x96}, {0x6D, 0xB2}, /* 0xF8-0xFB */ + {0x7E, 0x0A}, {0x81, 0x4B}, {0x98, 0x4D}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6A, 0xFB}, {0x7F, 0x4C}, {0x9D, 0xAF}, /* 0xA0-0xA3 */ + {0x9E, 0x1A}, {0x4E, 0x5F}, {0x50, 0x3B}, {0x51, 0xB6}, /* 0xA4-0xA7 */ + {0x59, 0x1C}, {0x60, 0xF9}, {0x63, 0xF6}, {0x69, 0x30}, /* 0xA8-0xAB */ + {0x72, 0x3A}, {0x80, 0x36}, {0xF9, 0x74}, {0x91, 0xCE}, /* 0xAC-0xAF */ + {0x5F, 0x31}, {0xF9, 0x75}, {0xF9, 0x76}, {0x7D, 0x04}, /* 0xB0-0xB3 */ + {0x82, 0xE5}, {0x84, 0x6F}, {0x84, 0xBB}, {0x85, 0xE5}, /* 0xB4-0xB7 */ + {0x8E, 0x8D}, {0xF9, 0x77}, {0x4F, 0x6F}, {0xF9, 0x78}, /* 0xB8-0xBB */ + {0xF9, 0x79}, {0x58, 0xE4}, {0x5B, 0x43}, {0x60, 0x59}, /* 0xBC-0xBF */ + {0x63, 0xDA}, {0x65, 0x18}, {0x65, 0x6D}, {0x66, 0x98}, /* 0xC0-0xC3 */ + {0xF9, 0x7A}, {0x69, 0x4A}, {0x6A, 0x23}, {0x6D, 0x0B}, /* 0xC4-0xC7 */ + {0x70, 0x01}, {0x71, 0x6C}, {0x75, 0xD2}, {0x76, 0x0D}, /* 0xC8-0xCB */ + {0x79, 0xB3}, {0x7A, 0x70}, {0xF9, 0x7B}, {0x7F, 0x8A}, /* 0xCC-0xCF */ + {0xF9, 0x7C}, {0x89, 0x44}, {0xF9, 0x7D}, {0x8B, 0x93}, /* 0xD0-0xD3 */ + {0x91, 0xC0}, {0x96, 0x7D}, {0xF9, 0x7E}, {0x99, 0x0A}, /* 0xD4-0xD7 */ + {0x57, 0x04}, {0x5F, 0xA1}, {0x65, 0xBC}, {0x6F, 0x01}, /* 0xD8-0xDB */ + {0x76, 0x00}, {0x79, 0xA6}, {0x8A, 0x9E}, {0x99, 0xAD}, /* 0xDC-0xDF */ + {0x9B, 0x5A}, {0x9F, 0x6C}, {0x51, 0x04}, {0x61, 0xB6}, /* 0xE0-0xE3 */ + {0x62, 0x91}, {0x6A, 0x8D}, {0x81, 0xC6}, {0x50, 0x43}, /* 0xE4-0xE7 */ + {0x58, 0x30}, {0x5F, 0x66}, {0x71, 0x09}, {0x8A, 0x00}, /* 0xE8-0xEB */ + {0x8A, 0xFA}, {0x5B, 0x7C}, {0x86, 0x16}, {0x4F, 0xFA}, /* 0xEC-0xEF */ + {0x51, 0x3C}, {0x56, 0xB4}, {0x59, 0x44}, {0x63, 0xA9}, /* 0xF0-0xF3 */ + {0x6D, 0xF9}, {0x5D, 0xAA}, {0x69, 0x6D}, {0x51, 0x86}, /* 0xF4-0xF7 */ + {0x4E, 0x88}, {0x4F, 0x59}, {0xF9, 0x7F}, {0xF9, 0x80}, /* 0xF8-0xFB */ + {0xF9, 0x81}, {0x59, 0x82}, {0xF9, 0x82}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xF9, 0x83}, {0x6B, 0x5F}, {0x6C, 0x5D}, /* 0xA0-0xA3 */ + {0xF9, 0x84}, {0x74, 0xB5}, {0x79, 0x16}, {0xF9, 0x85}, /* 0xA4-0xA7 */ + {0x82, 0x07}, {0x82, 0x45}, {0x83, 0x39}, {0x8F, 0x3F}, /* 0xA8-0xAB */ + {0x8F, 0x5D}, {0xF9, 0x86}, {0x99, 0x18}, {0xF9, 0x87}, /* 0xAC-0xAF */ + {0xF9, 0x88}, {0xF9, 0x89}, {0x4E, 0xA6}, {0xF9, 0x8A}, /* 0xB0-0xB3 */ + {0x57, 0xDF}, {0x5F, 0x79}, {0x66, 0x13}, {0xF9, 0x8B}, /* 0xB4-0xB7 */ + {0xF9, 0x8C}, {0x75, 0xAB}, {0x7E, 0x79}, {0x8B, 0x6F}, /* 0xB8-0xBB */ + {0xF9, 0x8D}, {0x90, 0x06}, {0x9A, 0x5B}, {0x56, 0xA5}, /* 0xBC-0xBF */ + {0x58, 0x27}, {0x59, 0xF8}, {0x5A, 0x1F}, {0x5B, 0xB4}, /* 0xC0-0xC3 */ + {0xF9, 0x8E}, {0x5E, 0xF6}, {0xF9, 0x8F}, {0xF9, 0x90}, /* 0xC4-0xC7 */ + {0x63, 0x50}, {0x63, 0x3B}, {0xF9, 0x91}, {0x69, 0x3D}, /* 0xC8-0xCB */ + {0x6C, 0x87}, {0x6C, 0xBF}, {0x6D, 0x8E}, {0x6D, 0x93}, /* 0xCC-0xCF */ + {0x6D, 0xF5}, {0x6F, 0x14}, {0xF9, 0x92}, {0x70, 0xDF}, /* 0xD0-0xD3 */ + {0x71, 0x36}, {0x71, 0x59}, {0xF9, 0x93}, {0x71, 0xC3}, /* 0xD4-0xD7 */ + {0x71, 0xD5}, {0xF9, 0x94}, {0x78, 0x4F}, {0x78, 0x6F}, /* 0xD8-0xDB */ + {0xF9, 0x95}, {0x7B, 0x75}, {0x7D, 0xE3}, {0xF9, 0x96}, /* 0xDC-0xDF */ + {0x7E, 0x2F}, {0xF9, 0x97}, {0x88, 0x4D}, {0x8E, 0xDF}, /* 0xE0-0xE3 */ + {0xF9, 0x98}, {0xF9, 0x99}, {0xF9, 0x9A}, {0x92, 0x5B}, /* 0xE4-0xE7 */ + {0xF9, 0x9B}, {0x9C, 0xF6}, {0xF9, 0x9C}, {0xF9, 0x9D}, /* 0xE8-0xEB */ + {0xF9, 0x9E}, {0x60, 0x85}, {0x6D, 0x85}, {0xF9, 0x9F}, /* 0xEC-0xEF */ + {0x71, 0xB1}, {0xF9, 0xA0}, {0xF9, 0xA1}, {0x95, 0xB1}, /* 0xF0-0xF3 */ + {0x53, 0xAD}, {0xF9, 0xA2}, {0xF9, 0xA3}, {0xF9, 0xA4}, /* 0xF4-0xF7 */ + {0x67, 0xD3}, {0xF9, 0xA5}, {0x70, 0x8E}, {0x71, 0x30}, /* 0xF8-0xFB */ + {0x74, 0x30}, {0x82, 0x76}, {0x82, 0xD2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xF9, 0xA6}, {0x95, 0xBB}, {0x9A, 0xE5}, /* 0xA0-0xA3 */ + {0x9E, 0x7D}, {0x66, 0xC4}, {0xF9, 0xA7}, {0x71, 0xC1}, /* 0xA4-0xA7 */ + {0x84, 0x49}, {0xF9, 0xA8}, {0xF9, 0xA9}, {0x58, 0x4B}, /* 0xA8-0xAB */ + {0xF9, 0xAA}, {0xF9, 0xAB}, {0x5D, 0xB8}, {0x5F, 0x71}, /* 0xAC-0xAF */ + {0xF9, 0xAC}, {0x66, 0x20}, {0x66, 0x8E}, {0x69, 0x79}, /* 0xB0-0xB3 */ + {0x69, 0xAE}, {0x6C, 0x38}, {0x6C, 0xF3}, {0x6E, 0x36}, /* 0xB4-0xB7 */ + {0x6F, 0x41}, {0x6F, 0xDA}, {0x70, 0x1B}, {0x70, 0x2F}, /* 0xB8-0xBB */ + {0x71, 0x50}, {0x71, 0xDF}, {0x73, 0x70}, {0xF9, 0xAD}, /* 0xBC-0xBF */ + {0x74, 0x5B}, {0xF9, 0xAE}, {0x74, 0xD4}, {0x76, 0xC8}, /* 0xC0-0xC3 */ + {0x7A, 0x4E}, {0x7E, 0x93}, {0xF9, 0xAF}, {0xF9, 0xB0}, /* 0xC4-0xC7 */ + {0x82, 0xF1}, {0x8A, 0x60}, {0x8F, 0xCE}, {0xF9, 0xB1}, /* 0xC8-0xCB */ + {0x93, 0x48}, {0xF9, 0xB2}, {0x97, 0x19}, {0xF9, 0xB3}, /* 0xCC-0xCF */ + {0xF9, 0xB4}, {0x4E, 0x42}, {0x50, 0x2A}, {0xF9, 0xB5}, /* 0xD0-0xD3 */ + {0x52, 0x08}, {0x53, 0xE1}, {0x66, 0xF3}, {0x6C, 0x6D}, /* 0xD4-0xD7 */ + {0x6F, 0xCA}, {0x73, 0x0A}, {0x77, 0x7F}, {0x7A, 0x62}, /* 0xD8-0xDB */ + {0x82, 0xAE}, {0x85, 0xDD}, {0x86, 0x02}, {0xF9, 0xB6}, /* 0xDC-0xDF */ + {0x88, 0xD4}, {0x8A, 0x63}, {0x8B, 0x7D}, {0x8C, 0x6B}, /* 0xE0-0xE3 */ + {0xF9, 0xB7}, {0x92, 0xB3}, {0xF9, 0xB8}, {0x97, 0x13}, /* 0xE4-0xE7 */ + {0x98, 0x10}, {0x4E, 0x94}, {0x4F, 0x0D}, {0x4F, 0xC9}, /* 0xE8-0xEB */ + {0x50, 0xB2}, {0x53, 0x48}, {0x54, 0x3E}, {0x54, 0x33}, /* 0xEC-0xEF */ + {0x55, 0xDA}, {0x58, 0x62}, {0x58, 0xBA}, {0x59, 0x67}, /* 0xF0-0xF3 */ + {0x5A, 0x1B}, {0x5B, 0xE4}, {0x60, 0x9F}, {0xF9, 0xB9}, /* 0xF4-0xF7 */ + {0x61, 0xCA}, {0x65, 0x56}, {0x65, 0xFF}, {0x66, 0x64}, /* 0xF8-0xFB */ + {0x68, 0xA7}, {0x6C, 0x5A}, {0x6F, 0xB3}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x70, 0xCF}, {0x71, 0xAC}, {0x73, 0x52}, /* 0xA0-0xA3 */ + {0x7B, 0x7D}, {0x87, 0x08}, {0x8A, 0xA4}, {0x9C, 0x32}, /* 0xA4-0xA7 */ + {0x9F, 0x07}, {0x5C, 0x4B}, {0x6C, 0x83}, {0x73, 0x44}, /* 0xA8-0xAB */ + {0x73, 0x89}, {0x92, 0x3A}, {0x6E, 0xAB}, {0x74, 0x65}, /* 0xAC-0xAF */ + {0x76, 0x1F}, {0x7A, 0x69}, {0x7E, 0x15}, {0x86, 0x0A}, /* 0xB0-0xB3 */ + {0x51, 0x40}, {0x58, 0xC5}, {0x64, 0xC1}, {0x74, 0xEE}, /* 0xB4-0xB7 */ + {0x75, 0x15}, {0x76, 0x70}, {0x7F, 0xC1}, {0x90, 0x95}, /* 0xB8-0xBB */ + {0x96, 0xCD}, {0x99, 0x54}, {0x6E, 0x26}, {0x74, 0xE6}, /* 0xBC-0xBF */ + {0x7A, 0xA9}, {0x7A, 0xAA}, {0x81, 0xE5}, {0x86, 0xD9}, /* 0xC0-0xC3 */ + {0x87, 0x78}, {0x8A, 0x1B}, {0x5A, 0x49}, {0x5B, 0x8C}, /* 0xC4-0xC7 */ + {0x5B, 0x9B}, {0x68, 0xA1}, {0x69, 0x00}, {0x6D, 0x63}, /* 0xC8-0xCB */ + {0x73, 0xA9}, {0x74, 0x13}, {0x74, 0x2C}, {0x78, 0x97}, /* 0xCC-0xCF */ + {0x7D, 0xE9}, {0x7F, 0xEB}, {0x81, 0x18}, {0x81, 0x55}, /* 0xD0-0xD3 */ + {0x83, 0x9E}, {0x8C, 0x4C}, {0x96, 0x2E}, {0x98, 0x11}, /* 0xD4-0xD7 */ + {0x66, 0xF0}, {0x5F, 0x80}, {0x65, 0xFA}, {0x67, 0x89}, /* 0xD8-0xDB */ + {0x6C, 0x6A}, {0x73, 0x8B}, {0x50, 0x2D}, {0x5A, 0x03}, /* 0xDC-0xDF */ + {0x6B, 0x6A}, {0x77, 0xEE}, {0x59, 0x16}, {0x5D, 0x6C}, /* 0xE0-0xE3 */ + {0x5D, 0xCD}, {0x73, 0x25}, {0x75, 0x4F}, {0xF9, 0xBA}, /* 0xE4-0xE7 */ + {0xF9, 0xBB}, {0x50, 0xE5}, {0x51, 0xF9}, {0x58, 0x2F}, /* 0xE8-0xEB */ + {0x59, 0x2D}, {0x59, 0x96}, {0x59, 0xDA}, {0x5B, 0xE5}, /* 0xEC-0xEF */ + {0xF9, 0xBC}, {0xF9, 0xBD}, {0x5D, 0xA2}, {0x62, 0xD7}, /* 0xF0-0xF3 */ + {0x64, 0x16}, {0x64, 0x93}, {0x64, 0xFE}, {0xF9, 0xBE}, /* 0xF4-0xF7 */ + {0x66, 0xDC}, {0xF9, 0xBF}, {0x6A, 0x48}, {0xF9, 0xC0}, /* 0xF8-0xFB */ + {0x71, 0xFF}, {0x74, 0x64}, {0xF9, 0xC1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7A, 0x88}, {0x7A, 0xAF}, {0x7E, 0x47}, /* 0xA0-0xA3 */ + {0x7E, 0x5E}, {0x80, 0x00}, {0x81, 0x70}, {0xF9, 0xC2}, /* 0xA4-0xA7 */ + {0x87, 0xEF}, {0x89, 0x81}, {0x8B, 0x20}, {0x90, 0x59}, /* 0xA8-0xAB */ + {0xF9, 0xC3}, {0x90, 0x80}, {0x99, 0x52}, {0x61, 0x7E}, /* 0xAC-0xAF */ + {0x6B, 0x32}, {0x6D, 0x74}, {0x7E, 0x1F}, {0x89, 0x25}, /* 0xB0-0xB3 */ + {0x8F, 0xB1}, {0x4F, 0xD1}, {0x50, 0xAD}, {0x51, 0x97}, /* 0xB4-0xB7 */ + {0x52, 0xC7}, {0x57, 0xC7}, {0x58, 0x89}, {0x5B, 0xB9}, /* 0xB8-0xBB */ + {0x5E, 0xB8}, {0x61, 0x42}, {0x69, 0x95}, {0x6D, 0x8C}, /* 0xBC-0xBF */ + {0x6E, 0x67}, {0x6E, 0xB6}, {0x71, 0x94}, {0x74, 0x62}, /* 0xC0-0xC3 */ + {0x75, 0x28}, {0x75, 0x2C}, {0x80, 0x73}, {0x83, 0x38}, /* 0xC4-0xC7 */ + {0x84, 0xC9}, {0x8E, 0x0A}, {0x93, 0x94}, {0x93, 0xDE}, /* 0xC8-0xCB */ + {0xF9, 0xC4}, {0x4E, 0x8E}, {0x4F, 0x51}, {0x50, 0x76}, /* 0xCC-0xCF */ + {0x51, 0x2A}, {0x53, 0xC8}, {0x53, 0xCB}, {0x53, 0xF3}, /* 0xD0-0xD3 */ + {0x5B, 0x87}, {0x5B, 0xD3}, {0x5C, 0x24}, {0x61, 0x1A}, /* 0xD4-0xD7 */ + {0x61, 0x82}, {0x65, 0xF4}, {0x72, 0x5B}, {0x73, 0x97}, /* 0xD8-0xDB */ + {0x74, 0x40}, {0x76, 0xC2}, {0x79, 0x50}, {0x79, 0x91}, /* 0xDC-0xDF */ + {0x79, 0xB9}, {0x7D, 0x06}, {0x7F, 0xBD}, {0x82, 0x8B}, /* 0xE0-0xE3 */ + {0x85, 0xD5}, {0x86, 0x5E}, {0x8F, 0xC2}, {0x90, 0x47}, /* 0xE4-0xE7 */ + {0x90, 0xF5}, {0x91, 0xEA}, {0x96, 0x85}, {0x96, 0xE8}, /* 0xE8-0xEB */ + {0x96, 0xE9}, {0x52, 0xD6}, {0x5F, 0x67}, {0x65, 0xED}, /* 0xEC-0xEF */ + {0x66, 0x31}, {0x68, 0x2F}, {0x71, 0x5C}, {0x7A, 0x36}, /* 0xF0-0xF3 */ + {0x90, 0xC1}, {0x98, 0x0A}, {0x4E, 0x91}, {0xF9, 0xC5}, /* 0xF4-0xF7 */ + {0x6A, 0x52}, {0x6B, 0x9E}, {0x6F, 0x90}, {0x71, 0x89}, /* 0xF8-0xFB */ + {0x80, 0x18}, {0x82, 0xB8}, {0x85, 0x53}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x90, 0x4B}, {0x96, 0x95}, {0x96, 0xF2}, /* 0xA0-0xA3 */ + {0x97, 0xFB}, {0x85, 0x1A}, {0x9B, 0x31}, {0x4E, 0x90}, /* 0xA4-0xA7 */ + {0x71, 0x8A}, {0x96, 0xC4}, {0x51, 0x43}, {0x53, 0x9F}, /* 0xA8-0xAB */ + {0x54, 0xE1}, {0x57, 0x13}, {0x57, 0x12}, {0x57, 0xA3}, /* 0xAC-0xAF */ + {0x5A, 0x9B}, {0x5A, 0xC4}, {0x5B, 0xC3}, {0x60, 0x28}, /* 0xB0-0xB3 */ + {0x61, 0x3F}, {0x63, 0xF4}, {0x6C, 0x85}, {0x6D, 0x39}, /* 0xB4-0xB7 */ + {0x6E, 0x72}, {0x6E, 0x90}, {0x72, 0x30}, {0x73, 0x3F}, /* 0xB8-0xBB */ + {0x74, 0x57}, {0x82, 0xD1}, {0x88, 0x81}, {0x8F, 0x45}, /* 0xBC-0xBF */ + {0x90, 0x60}, {0xF9, 0xC6}, {0x96, 0x62}, {0x98, 0x58}, /* 0xC0-0xC3 */ + {0x9D, 0x1B}, {0x67, 0x08}, {0x8D, 0x8A}, {0x92, 0x5E}, /* 0xC4-0xC7 */ + {0x4F, 0x4D}, {0x50, 0x49}, {0x50, 0xDE}, {0x53, 0x71}, /* 0xC8-0xCB */ + {0x57, 0x0D}, {0x59, 0xD4}, {0x5A, 0x01}, {0x5C, 0x09}, /* 0xCC-0xCF */ + {0x61, 0x70}, {0x66, 0x90}, {0x6E, 0x2D}, {0x72, 0x32}, /* 0xD0-0xD3 */ + {0x74, 0x4B}, {0x7D, 0xEF}, {0x80, 0xC3}, {0x84, 0x0E}, /* 0xD4-0xD7 */ + {0x84, 0x66}, {0x85, 0x3F}, {0x87, 0x5F}, {0x88, 0x5B}, /* 0xD8-0xDB */ + {0x89, 0x18}, {0x8B, 0x02}, {0x90, 0x55}, {0x97, 0xCB}, /* 0xDC-0xDF */ + {0x9B, 0x4F}, {0x4E, 0x73}, {0x4F, 0x91}, {0x51, 0x12}, /* 0xE0-0xE3 */ + {0x51, 0x6A}, {0xF9, 0xC7}, {0x55, 0x2F}, {0x55, 0xA9}, /* 0xE4-0xE7 */ + {0x5B, 0x7A}, {0x5B, 0xA5}, {0x5E, 0x7C}, {0x5E, 0x7D}, /* 0xE8-0xEB */ + {0x5E, 0xBE}, {0x60, 0xA0}, {0x60, 0xDF}, {0x61, 0x08}, /* 0xEC-0xEF */ + {0x61, 0x09}, {0x63, 0xC4}, {0x65, 0x38}, {0x67, 0x09}, /* 0xF0-0xF3 */ + {0xF9, 0xC8}, {0x67, 0xD4}, {0x67, 0xDA}, {0xF9, 0xC9}, /* 0xF4-0xF7 */ + {0x69, 0x61}, {0x69, 0x62}, {0x6C, 0xB9}, {0x6D, 0x27}, /* 0xF8-0xFB */ + {0xF9, 0xCA}, {0x6E, 0x38}, {0xF9, 0xCB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6F, 0xE1}, {0x73, 0x36}, {0x73, 0x37}, /* 0xA0-0xA3 */ + {0xF9, 0xCC}, {0x74, 0x5C}, {0x75, 0x31}, {0xF9, 0xCD}, /* 0xA4-0xA7 */ + {0x76, 0x52}, {0xF9, 0xCE}, {0xF9, 0xCF}, {0x7D, 0xAD}, /* 0xA8-0xAB */ + {0x81, 0xFE}, {0x84, 0x38}, {0x88, 0xD5}, {0x8A, 0x98}, /* 0xAC-0xAF */ + {0x8A, 0xDB}, {0x8A, 0xED}, {0x8E, 0x30}, {0x8E, 0x42}, /* 0xB0-0xB3 */ + {0x90, 0x4A}, {0x90, 0x3E}, {0x90, 0x7A}, {0x91, 0x49}, /* 0xB4-0xB7 */ + {0x91, 0xC9}, {0x93, 0x6E}, {0xF9, 0xD0}, {0xF9, 0xD1}, /* 0xB8-0xBB */ + {0x58, 0x09}, {0xF9, 0xD2}, {0x6B, 0xD3}, {0x80, 0x89}, /* 0xBC-0xBF */ + {0x80, 0xB2}, {0xF9, 0xD3}, {0xF9, 0xD4}, {0x51, 0x41}, /* 0xC0-0xC3 */ + {0x59, 0x6B}, {0x5C, 0x39}, {0xF9, 0xD5}, {0xF9, 0xD6}, /* 0xC4-0xC7 */ + {0x6F, 0x64}, {0x73, 0xA7}, {0x80, 0xE4}, {0x8D, 0x07}, /* 0xC8-0xCB */ + {0xF9, 0xD7}, {0x92, 0x17}, {0x95, 0x8F}, {0xF9, 0xD8}, /* 0xCC-0xCF */ + {0xF9, 0xD9}, {0xF9, 0xDA}, {0xF9, 0xDB}, {0x80, 0x7F}, /* 0xD0-0xD3 */ + {0x62, 0x0E}, {0x70, 0x1C}, {0x7D, 0x68}, {0x87, 0x8D}, /* 0xD4-0xD7 */ + {0xF9, 0xDC}, {0x57, 0xA0}, {0x60, 0x69}, {0x61, 0x47}, /* 0xD8-0xDB */ + {0x6B, 0xB7}, {0x8A, 0xBE}, {0x92, 0x80}, {0x96, 0xB1}, /* 0xDC-0xDF */ + {0x4E, 0x59}, {0x54, 0x1F}, {0x6D, 0xEB}, {0x85, 0x2D}, /* 0xE0-0xE3 */ + {0x96, 0x70}, {0x97, 0xF3}, {0x98, 0xEE}, {0x63, 0xD6}, /* 0xE4-0xE7 */ + {0x6C, 0xE3}, {0x90, 0x91}, {0x51, 0xDD}, {0x61, 0xC9}, /* 0xE8-0xEB */ + {0x81, 0xBA}, {0x9D, 0xF9}, {0x4F, 0x9D}, {0x50, 0x1A}, /* 0xEC-0xEF */ + {0x51, 0x00}, {0x5B, 0x9C}, {0x61, 0x0F}, {0x61, 0xFF}, /* 0xF0-0xF3 */ + {0x64, 0xEC}, {0x69, 0x05}, {0x6B, 0xC5}, {0x75, 0x91}, /* 0xF4-0xF7 */ + {0x77, 0xE3}, {0x7F, 0xA9}, {0x82, 0x64}, {0x85, 0x8F}, /* 0xF8-0xFB */ + {0x87, 0xFB}, {0x88, 0x63}, {0x8A, 0xBC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8B, 0x70}, {0x91, 0xAB}, {0x4E, 0x8C}, /* 0xA0-0xA3 */ + {0x4E, 0xE5}, {0x4F, 0x0A}, {0xF9, 0xDD}, {0xF9, 0xDE}, /* 0xA4-0xA7 */ + {0x59, 0x37}, {0x59, 0xE8}, {0xF9, 0xDF}, {0x5D, 0xF2}, /* 0xA8-0xAB */ + {0x5F, 0x1B}, {0x5F, 0x5B}, {0x60, 0x21}, {0xF9, 0xE0}, /* 0xAC-0xAF */ + {0xF9, 0xE1}, {0xF9, 0xE2}, {0xF9, 0xE3}, {0x72, 0x3E}, /* 0xB0-0xB3 */ + {0x73, 0xE5}, {0xF9, 0xE4}, {0x75, 0x70}, {0x75, 0xCD}, /* 0xB4-0xB7 */ + {0xF9, 0xE5}, {0x79, 0xFB}, {0xF9, 0xE6}, {0x80, 0x0C}, /* 0xB8-0xBB */ + {0x80, 0x33}, {0x80, 0x84}, {0x82, 0xE1}, {0x83, 0x51}, /* 0xBC-0xBF */ + {0xF9, 0xE7}, {0xF9, 0xE8}, {0x8C, 0xBD}, {0x8C, 0xB3}, /* 0xC0-0xC3 */ + {0x90, 0x87}, {0xF9, 0xE9}, {0xF9, 0xEA}, {0x98, 0xF4}, /* 0xC4-0xC7 */ + {0x99, 0x0C}, {0xF9, 0xEB}, {0xF9, 0xEC}, {0x70, 0x37}, /* 0xC8-0xCB */ + {0x76, 0xCA}, {0x7F, 0xCA}, {0x7F, 0xCC}, {0x7F, 0xFC}, /* 0xCC-0xCF */ + {0x8B, 0x1A}, {0x4E, 0xBA}, {0x4E, 0xC1}, {0x52, 0x03}, /* 0xD0-0xD3 */ + {0x53, 0x70}, {0xF9, 0xED}, {0x54, 0xBD}, {0x56, 0xE0}, /* 0xD4-0xD7 */ + {0x59, 0xFB}, {0x5B, 0xC5}, {0x5F, 0x15}, {0x5F, 0xCD}, /* 0xD8-0xDB */ + {0x6E, 0x6E}, {0xF9, 0xEE}, {0xF9, 0xEF}, {0x7D, 0x6A}, /* 0xDC-0xDF */ + {0x83, 0x35}, {0xF9, 0xF0}, {0x86, 0x93}, {0x8A, 0x8D}, /* 0xE0-0xE3 */ + {0xF9, 0xF1}, {0x97, 0x6D}, {0x97, 0x77}, {0xF9, 0xF2}, /* 0xE4-0xE7 */ + {0xF9, 0xF3}, {0x4E, 0x00}, {0x4F, 0x5A}, {0x4F, 0x7E}, /* 0xE8-0xEB */ + {0x58, 0xF9}, {0x65, 0xE5}, {0x6E, 0xA2}, {0x90, 0x38}, /* 0xEC-0xEF */ + {0x93, 0xB0}, {0x99, 0xB9}, {0x4E, 0xFB}, {0x58, 0xEC}, /* 0xF0-0xF3 */ + {0x59, 0x8A}, {0x59, 0xD9}, {0x60, 0x41}, {0xF9, 0xF4}, /* 0xF4-0xF7 */ + {0xF9, 0xF5}, {0x7A, 0x14}, {0xF9, 0xF6}, {0x83, 0x4F}, /* 0xF8-0xFB */ + {0x8C, 0xC3}, {0x51, 0x65}, {0x53, 0x44}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_ED[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xF9, 0xF7}, {0xF9, 0xF8}, {0xF9, 0xF9}, /* 0xA0-0xA3 */ + {0x4E, 0xCD}, {0x52, 0x69}, {0x5B, 0x55}, {0x82, 0xBF}, /* 0xA4-0xA7 */ + {0x4E, 0xD4}, {0x52, 0x3A}, {0x54, 0xA8}, {0x59, 0xC9}, /* 0xA8-0xAB */ + {0x59, 0xFF}, {0x5B, 0x50}, {0x5B, 0x57}, {0x5B, 0x5C}, /* 0xAC-0xAF */ + {0x60, 0x63}, {0x61, 0x48}, {0x6E, 0xCB}, {0x70, 0x99}, /* 0xB0-0xB3 */ + {0x71, 0x6E}, {0x73, 0x86}, {0x74, 0xF7}, {0x75, 0xB5}, /* 0xB4-0xB7 */ + {0x78, 0xC1}, {0x7D, 0x2B}, {0x80, 0x05}, {0x81, 0xEA}, /* 0xB8-0xBB */ + {0x83, 0x28}, {0x85, 0x17}, {0x85, 0xC9}, {0x8A, 0xEE}, /* 0xBC-0xBF */ + {0x8C, 0xC7}, {0x96, 0xCC}, {0x4F, 0x5C}, {0x52, 0xFA}, /* 0xC0-0xC3 */ + {0x56, 0xBC}, {0x65, 0xAB}, {0x66, 0x28}, {0x70, 0x7C}, /* 0xC4-0xC7 */ + {0x70, 0xB8}, {0x72, 0x35}, {0x7D, 0xBD}, {0x82, 0x8D}, /* 0xC8-0xCB */ + {0x91, 0x4C}, {0x96, 0xC0}, {0x9D, 0x72}, {0x5B, 0x71}, /* 0xCC-0xCF */ + {0x68, 0xE7}, {0x6B, 0x98}, {0x6F, 0x7A}, {0x76, 0xDE}, /* 0xD0-0xD3 */ + {0x5C, 0x91}, {0x66, 0xAB}, {0x6F, 0x5B}, {0x7B, 0xB4}, /* 0xD4-0xD7 */ + {0x7C, 0x2A}, {0x88, 0x36}, {0x96, 0xDC}, {0x4E, 0x08}, /* 0xD8-0xDB */ + {0x4E, 0xD7}, {0x53, 0x20}, {0x58, 0x34}, {0x58, 0xBB}, /* 0xDC-0xDF */ + {0x58, 0xEF}, {0x59, 0x6C}, {0x5C, 0x07}, {0x5E, 0x33}, /* 0xE0-0xE3 */ + {0x5E, 0x84}, {0x5F, 0x35}, {0x63, 0x8C}, {0x66, 0xB2}, /* 0xE4-0xE7 */ + {0x67, 0x56}, {0x6A, 0x1F}, {0x6A, 0xA3}, {0x6B, 0x0C}, /* 0xE8-0xEB */ + {0x6F, 0x3F}, {0x72, 0x46}, {0xF9, 0xFA}, {0x73, 0x50}, /* 0xEC-0xEF */ + {0x74, 0x8B}, {0x7A, 0xE0}, {0x7C, 0xA7}, {0x81, 0x78}, /* 0xF0-0xF3 */ + {0x81, 0xDF}, {0x81, 0xE7}, {0x83, 0x8A}, {0x84, 0x6C}, /* 0xF4-0xF7 */ + {0x85, 0x23}, {0x85, 0x94}, {0x85, 0xCF}, {0x88, 0xDD}, /* 0xF8-0xFB */ + {0x8D, 0x13}, {0x91, 0xAC}, {0x95, 0x77}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x96, 0x9C}, {0x51, 0x8D}, {0x54, 0xC9}, /* 0xA0-0xA3 */ + {0x57, 0x28}, {0x5B, 0xB0}, {0x62, 0x4D}, {0x67, 0x50}, /* 0xA4-0xA7 */ + {0x68, 0x3D}, {0x68, 0x93}, {0x6E, 0x3D}, {0x6E, 0xD3}, /* 0xA8-0xAB */ + {0x70, 0x7D}, {0x7E, 0x21}, {0x88, 0xC1}, {0x8C, 0xA1}, /* 0xAC-0xAF */ + {0x8F, 0x09}, {0x9F, 0x4B}, {0x9F, 0x4E}, {0x72, 0x2D}, /* 0xB0-0xB3 */ + {0x7B, 0x8F}, {0x8A, 0xCD}, {0x93, 0x1A}, {0x4F, 0x47}, /* 0xB4-0xB7 */ + {0x4F, 0x4E}, {0x51, 0x32}, {0x54, 0x80}, {0x59, 0xD0}, /* 0xB8-0xBB */ + {0x5E, 0x95}, {0x62, 0xB5}, {0x67, 0x75}, {0x69, 0x6E}, /* 0xBC-0xBF */ + {0x6A, 0x17}, {0x6C, 0xAE}, {0x6E, 0x1A}, {0x72, 0xD9}, /* 0xC0-0xC3 */ + {0x73, 0x2A}, {0x75, 0xBD}, {0x7B, 0xB8}, {0x7D, 0x35}, /* 0xC4-0xC7 */ + {0x82, 0xE7}, {0x83, 0xF9}, {0x84, 0x57}, {0x85, 0xF7}, /* 0xC8-0xCB */ + {0x8A, 0x5B}, {0x8C, 0xAF}, {0x8E, 0x87}, {0x90, 0x19}, /* 0xCC-0xCF */ + {0x90, 0xB8}, {0x96, 0xCE}, {0x9F, 0x5F}, {0x52, 0xE3}, /* 0xD0-0xD3 */ + {0x54, 0x0A}, {0x5A, 0xE1}, {0x5B, 0xC2}, {0x64, 0x58}, /* 0xD4-0xD7 */ + {0x65, 0x75}, {0x6E, 0xF4}, {0x72, 0xC4}, {0xF9, 0xFB}, /* 0xD8-0xDB */ + {0x76, 0x84}, {0x7A, 0x4D}, {0x7B, 0x1B}, {0x7C, 0x4D}, /* 0xDC-0xDF */ + {0x7E, 0x3E}, {0x7F, 0xDF}, {0x83, 0x7B}, {0x8B, 0x2B}, /* 0xE0-0xE3 */ + {0x8C, 0xCA}, {0x8D, 0x64}, {0x8D, 0xE1}, {0x8E, 0x5F}, /* 0xE4-0xE7 */ + {0x8F, 0xEA}, {0x8F, 0xF9}, {0x90, 0x69}, {0x93, 0xD1}, /* 0xE8-0xEB */ + {0x4F, 0x43}, {0x4F, 0x7A}, {0x50, 0xB3}, {0x51, 0x68}, /* 0xEC-0xEF */ + {0x51, 0x78}, {0x52, 0x4D}, {0x52, 0x6A}, {0x58, 0x61}, /* 0xF0-0xF3 */ + {0x58, 0x7C}, {0x59, 0x60}, {0x5C, 0x08}, {0x5C, 0x55}, /* 0xF4-0xF7 */ + {0x5E, 0xDB}, {0x60, 0x9B}, {0x62, 0x30}, {0x68, 0x13}, /* 0xF8-0xFB */ + {0x6B, 0xBF}, {0x6C, 0x08}, {0x6F, 0xB1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x71, 0x4E}, {0x74, 0x20}, {0x75, 0x30}, /* 0xA0-0xA3 */ + {0x75, 0x38}, {0x75, 0x51}, {0x76, 0x72}, {0x7B, 0x4C}, /* 0xA4-0xA7 */ + {0x7B, 0x8B}, {0x7B, 0xAD}, {0x7B, 0xC6}, {0x7E, 0x8F}, /* 0xA8-0xAB */ + {0x8A, 0x6E}, {0x8F, 0x3E}, {0x8F, 0x49}, {0x92, 0x3F}, /* 0xAC-0xAF */ + {0x92, 0x93}, {0x93, 0x22}, {0x94, 0x2B}, {0x96, 0xFB}, /* 0xB0-0xB3 */ + {0x98, 0x5A}, {0x98, 0x6B}, {0x99, 0x1E}, {0x52, 0x07}, /* 0xB4-0xB7 */ + {0x62, 0x2A}, {0x62, 0x98}, {0x6D, 0x59}, {0x76, 0x64}, /* 0xB8-0xBB */ + {0x7A, 0xCA}, {0x7B, 0xC0}, {0x7D, 0x76}, {0x53, 0x60}, /* 0xBC-0xBF */ + {0x5C, 0xBE}, {0x5E, 0x97}, {0x6F, 0x38}, {0x70, 0xB9}, /* 0xC0-0xC3 */ + {0x7C, 0x98}, {0x97, 0x11}, {0x9B, 0x8E}, {0x9E, 0xDE}, /* 0xC4-0xC7 */ + {0x63, 0xA5}, {0x64, 0x7A}, {0x87, 0x76}, {0x4E, 0x01}, /* 0xC8-0xCB */ + {0x4E, 0x95}, {0x4E, 0xAD}, {0x50, 0x5C}, {0x50, 0x75}, /* 0xCC-0xCF */ + {0x54, 0x48}, {0x59, 0xC3}, {0x5B, 0x9A}, {0x5E, 0x40}, /* 0xD0-0xD3 */ + {0x5E, 0xAD}, {0x5E, 0xF7}, {0x5F, 0x81}, {0x60, 0xC5}, /* 0xD4-0xD7 */ + {0x63, 0x3A}, {0x65, 0x3F}, {0x65, 0x74}, {0x65, 0xCC}, /* 0xD8-0xDB */ + {0x66, 0x76}, {0x66, 0x78}, {0x67, 0xFE}, {0x69, 0x68}, /* 0xDC-0xDF */ + {0x6A, 0x89}, {0x6B, 0x63}, {0x6C, 0x40}, {0x6D, 0xC0}, /* 0xE0-0xE3 */ + {0x6D, 0xE8}, {0x6E, 0x1F}, {0x6E, 0x5E}, {0x70, 0x1E}, /* 0xE4-0xE7 */ + {0x70, 0xA1}, {0x73, 0x8E}, {0x73, 0xFD}, {0x75, 0x3A}, /* 0xE8-0xEB */ + {0x77, 0x5B}, {0x78, 0x87}, {0x79, 0x8E}, {0x7A, 0x0B}, /* 0xEC-0xEF */ + {0x7A, 0x7D}, {0x7C, 0xBE}, {0x7D, 0x8E}, {0x82, 0x47}, /* 0xF0-0xF3 */ + {0x8A, 0x02}, {0x8A, 0xEA}, {0x8C, 0x9E}, {0x91, 0x2D}, /* 0xF4-0xF7 */ + {0x91, 0x4A}, {0x91, 0xD8}, {0x92, 0x66}, {0x92, 0xCC}, /* 0xF8-0xFB */ + {0x93, 0x20}, {0x97, 0x06}, {0x97, 0x56}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x97, 0x5C}, {0x98, 0x02}, {0x9F, 0x0E}, /* 0xA0-0xA3 */ + {0x52, 0x36}, {0x52, 0x91}, {0x55, 0x7C}, {0x58, 0x24}, /* 0xA4-0xA7 */ + {0x5E, 0x1D}, {0x5F, 0x1F}, {0x60, 0x8C}, {0x63, 0xD0}, /* 0xA8-0xAB */ + {0x68, 0xAF}, {0x6F, 0xDF}, {0x79, 0x6D}, {0x7B, 0x2C}, /* 0xAC-0xAF */ + {0x81, 0xCD}, {0x85, 0xBA}, {0x88, 0xFD}, {0x8A, 0xF8}, /* 0xB0-0xB3 */ + {0x8E, 0x44}, {0x91, 0x8D}, {0x96, 0x64}, {0x96, 0x9B}, /* 0xB4-0xB7 */ + {0x97, 0x3D}, {0x98, 0x4C}, {0x9F, 0x4A}, {0x4F, 0xCE}, /* 0xB8-0xBB */ + {0x51, 0x46}, {0x51, 0xCB}, {0x52, 0xA9}, {0x56, 0x32}, /* 0xBC-0xBF */ + {0x5F, 0x14}, {0x5F, 0x6B}, {0x63, 0xAA}, {0x64, 0xCD}, /* 0xC0-0xC3 */ + {0x65, 0xE9}, {0x66, 0x41}, {0x66, 0xFA}, {0x66, 0xF9}, /* 0xC4-0xC7 */ + {0x67, 0x1D}, {0x68, 0x9D}, {0x68, 0xD7}, {0x69, 0xFD}, /* 0xC8-0xCB */ + {0x6F, 0x15}, {0x6F, 0x6E}, {0x71, 0x67}, {0x71, 0xE5}, /* 0xCC-0xCF */ + {0x72, 0x2A}, {0x74, 0xAA}, {0x77, 0x3A}, {0x79, 0x56}, /* 0xD0-0xD3 */ + {0x79, 0x5A}, {0x79, 0xDF}, {0x7A, 0x20}, {0x7A, 0x95}, /* 0xD4-0xD7 */ + {0x7C, 0x97}, {0x7C, 0xDF}, {0x7D, 0x44}, {0x7E, 0x70}, /* 0xD8-0xDB */ + {0x80, 0x87}, {0x85, 0xFB}, {0x86, 0xA4}, {0x8A, 0x54}, /* 0xDC-0xDF */ + {0x8A, 0xBF}, {0x8D, 0x99}, {0x8E, 0x81}, {0x90, 0x20}, /* 0xE0-0xE3 */ + {0x90, 0x6D}, {0x91, 0xE3}, {0x96, 0x3B}, {0x96, 0xD5}, /* 0xE4-0xE7 */ + {0x9C, 0xE5}, {0x65, 0xCF}, {0x7C, 0x07}, {0x8D, 0xB3}, /* 0xE8-0xEB */ + {0x93, 0xC3}, {0x5B, 0x58}, {0x5C, 0x0A}, {0x53, 0x52}, /* 0xEC-0xEF */ + {0x62, 0xD9}, {0x73, 0x1D}, {0x50, 0x27}, {0x5B, 0x97}, /* 0xF0-0xF3 */ + {0x5F, 0x9E}, {0x60, 0xB0}, {0x61, 0x6B}, {0x68, 0xD5}, /* 0xF4-0xF7 */ + {0x6D, 0xD9}, {0x74, 0x2E}, {0x7A, 0x2E}, {0x7D, 0x42}, /* 0xF8-0xFB */ + {0x7D, 0x9C}, {0x7E, 0x31}, {0x81, 0x6B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8E, 0x2A}, {0x8E, 0x35}, {0x93, 0x7E}, /* 0xA0-0xA3 */ + {0x94, 0x18}, {0x4F, 0x50}, {0x57, 0x50}, {0x5D, 0xE6}, /* 0xA4-0xA7 */ + {0x5E, 0xA7}, {0x63, 0x2B}, {0x7F, 0x6A}, {0x4E, 0x3B}, /* 0xA8-0xAB */ + {0x4F, 0x4F}, {0x4F, 0x8F}, {0x50, 0x5A}, {0x59, 0xDD}, /* 0xAC-0xAF */ + {0x80, 0xC4}, {0x54, 0x6A}, {0x54, 0x68}, {0x55, 0xFE}, /* 0xB0-0xB3 */ + {0x59, 0x4F}, {0x5B, 0x99}, {0x5D, 0xDE}, {0x5E, 0xDA}, /* 0xB4-0xB7 */ + {0x66, 0x5D}, {0x67, 0x31}, {0x67, 0xF1}, {0x68, 0x2A}, /* 0xB8-0xBB */ + {0x6C, 0xE8}, {0x6D, 0x32}, {0x6E, 0x4A}, {0x6F, 0x8D}, /* 0xBC-0xBF */ + {0x70, 0xB7}, {0x73, 0xE0}, {0x75, 0x87}, {0x7C, 0x4C}, /* 0xC0-0xC3 */ + {0x7D, 0x02}, {0x7D, 0x2C}, {0x7D, 0xA2}, {0x82, 0x1F}, /* 0xC4-0xC7 */ + {0x86, 0xDB}, {0x8A, 0x3B}, {0x8A, 0x85}, {0x8D, 0x70}, /* 0xC8-0xCB */ + {0x8E, 0x8A}, {0x8F, 0x33}, {0x90, 0x31}, {0x91, 0x4E}, /* 0xCC-0xCF */ + {0x91, 0x52}, {0x94, 0x44}, {0x99, 0xD0}, {0x7A, 0xF9}, /* 0xD0-0xD3 */ + {0x7C, 0xA5}, {0x4F, 0xCA}, {0x51, 0x01}, {0x51, 0xC6}, /* 0xD4-0xD7 */ + {0x57, 0xC8}, {0x5B, 0xEF}, {0x5C, 0xFB}, {0x66, 0x59}, /* 0xD8-0xDB */ + {0x6A, 0x3D}, {0x6D, 0x5A}, {0x6E, 0x96}, {0x6F, 0xEC}, /* 0xDC-0xDF */ + {0x71, 0x0C}, {0x75, 0x6F}, {0x7A, 0xE3}, {0x88, 0x22}, /* 0xE0-0xE3 */ + {0x90, 0x21}, {0x90, 0x75}, {0x96, 0xCB}, {0x99, 0xFF}, /* 0xE4-0xE7 */ + {0x83, 0x01}, {0x4E, 0x2D}, {0x4E, 0xF2}, {0x88, 0x46}, /* 0xE8-0xEB */ + {0x91, 0xCD}, {0x53, 0x7D}, {0x6A, 0xDB}, {0x69, 0x6B}, /* 0xEC-0xEF */ + {0x6C, 0x41}, {0x84, 0x7A}, {0x58, 0x9E}, {0x61, 0x8E}, /* 0xF0-0xF3 */ + {0x66, 0xFE}, {0x62, 0xEF}, {0x70, 0xDD}, {0x75, 0x11}, /* 0xF4-0xF7 */ + {0x75, 0xC7}, {0x7E, 0x52}, {0x84, 0xB8}, {0x8B, 0x49}, /* 0xF8-0xFB */ + {0x8D, 0x08}, {0x4E, 0x4B}, {0x53, 0xEA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x54, 0xAB}, {0x57, 0x30}, {0x57, 0x40}, /* 0xA0-0xA3 */ + {0x5F, 0xD7}, {0x63, 0x01}, {0x63, 0x07}, {0x64, 0x6F}, /* 0xA4-0xA7 */ + {0x65, 0x2F}, {0x65, 0xE8}, {0x66, 0x7A}, {0x67, 0x9D}, /* 0xA8-0xAB */ + {0x67, 0xB3}, {0x6B, 0x62}, {0x6C, 0x60}, {0x6C, 0x9A}, /* 0xAC-0xAF */ + {0x6F, 0x2C}, {0x77, 0xE5}, {0x78, 0x25}, {0x79, 0x49}, /* 0xB0-0xB3 */ + {0x79, 0x57}, {0x7D, 0x19}, {0x80, 0xA2}, {0x81, 0x02}, /* 0xB4-0xB7 */ + {0x81, 0xF3}, {0x82, 0x9D}, {0x82, 0xB7}, {0x87, 0x18}, /* 0xB8-0xBB */ + {0x8A, 0x8C}, {0xF9, 0xFC}, {0x8D, 0x04}, {0x8D, 0xBE}, /* 0xBC-0xBF */ + {0x90, 0x72}, {0x76, 0xF4}, {0x7A, 0x19}, {0x7A, 0x37}, /* 0xC0-0xC3 */ + {0x7E, 0x54}, {0x80, 0x77}, {0x55, 0x07}, {0x55, 0xD4}, /* 0xC4-0xC7 */ + {0x58, 0x75}, {0x63, 0x2F}, {0x64, 0x22}, {0x66, 0x49}, /* 0xC8-0xCB */ + {0x66, 0x4B}, {0x68, 0x6D}, {0x69, 0x9B}, {0x6B, 0x84}, /* 0xCC-0xCF */ + {0x6D, 0x25}, {0x6E, 0xB1}, {0x73, 0xCD}, {0x74, 0x68}, /* 0xD0-0xD3 */ + {0x74, 0xA1}, {0x75, 0x5B}, {0x75, 0xB9}, {0x76, 0xE1}, /* 0xD4-0xD7 */ + {0x77, 0x1E}, {0x77, 0x8B}, {0x79, 0xE6}, {0x7E, 0x09}, /* 0xD8-0xDB */ + {0x7E, 0x1D}, {0x81, 0xFB}, {0x85, 0x2F}, {0x88, 0x97}, /* 0xDC-0xDF */ + {0x8A, 0x3A}, {0x8C, 0xD1}, {0x8E, 0xEB}, {0x8F, 0xB0}, /* 0xE0-0xE3 */ + {0x90, 0x32}, {0x93, 0xAD}, {0x96, 0x63}, {0x96, 0x73}, /* 0xE4-0xE7 */ + {0x97, 0x07}, {0x4F, 0x84}, {0x53, 0xF1}, {0x59, 0xEA}, /* 0xE8-0xEB */ + {0x5A, 0xC9}, {0x5E, 0x19}, {0x68, 0x4E}, {0x74, 0xC6}, /* 0xEC-0xEF */ + {0x75, 0xBE}, {0x79, 0xE9}, {0x7A, 0x92}, {0x81, 0xA3}, /* 0xF0-0xF3 */ + {0x86, 0xED}, {0x8C, 0xEA}, {0x8D, 0xCC}, {0x8F, 0xED}, /* 0xF4-0xF7 */ + {0x65, 0x9F}, {0x67, 0x15}, {0xF9, 0xFD}, {0x57, 0xF7}, /* 0xF8-0xFB */ + {0x6F, 0x57}, {0x7D, 0xDD}, {0x8F, 0x2F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x93, 0xF6}, {0x96, 0xC6}, {0x5F, 0xB5}, /* 0xA0-0xA3 */ + {0x61, 0xF2}, {0x6F, 0x84}, {0x4E, 0x14}, {0x4F, 0x98}, /* 0xA4-0xA7 */ + {0x50, 0x1F}, {0x53, 0xC9}, {0x55, 0xDF}, {0x5D, 0x6F}, /* 0xA8-0xAB */ + {0x5D, 0xEE}, {0x6B, 0x21}, {0x6B, 0x64}, {0x78, 0xCB}, /* 0xAC-0xAF */ + {0x7B, 0x9A}, {0xF9, 0xFE}, {0x8E, 0x49}, {0x8E, 0xCA}, /* 0xB0-0xB3 */ + {0x90, 0x6E}, {0x63, 0x49}, {0x64, 0x3E}, {0x77, 0x40}, /* 0xB4-0xB7 */ + {0x7A, 0x84}, {0x93, 0x2F}, {0x94, 0x7F}, {0x9F, 0x6A}, /* 0xB8-0xBB */ + {0x64, 0xB0}, {0x6F, 0xAF}, {0x71, 0xE6}, {0x74, 0xA8}, /* 0xBC-0xBF */ + {0x74, 0xDA}, {0x7A, 0xC4}, {0x7C, 0x12}, {0x7E, 0x82}, /* 0xC0-0xC3 */ + {0x7C, 0xB2}, {0x7E, 0x98}, {0x8B, 0x9A}, {0x8D, 0x0A}, /* 0xC4-0xC7 */ + {0x94, 0x7D}, {0x99, 0x10}, {0x99, 0x4C}, {0x52, 0x39}, /* 0xC8-0xCB */ + {0x5B, 0xDF}, {0x64, 0xE6}, {0x67, 0x2D}, {0x7D, 0x2E}, /* 0xCC-0xCF */ + {0x50, 0xED}, {0x53, 0xC3}, {0x58, 0x79}, {0x61, 0x58}, /* 0xD0-0xD3 */ + {0x61, 0x59}, {0x61, 0xFA}, {0x65, 0xAC}, {0x7A, 0xD9}, /* 0xD4-0xD7 */ + {0x8B, 0x92}, {0x8B, 0x96}, {0x50, 0x09}, {0x50, 0x21}, /* 0xD8-0xDB */ + {0x52, 0x75}, {0x55, 0x31}, {0x5A, 0x3C}, {0x5E, 0xE0}, /* 0xDC-0xDF */ + {0x5F, 0x70}, {0x61, 0x34}, {0x65, 0x5E}, {0x66, 0x0C}, /* 0xE0-0xE3 */ + {0x66, 0x36}, {0x66, 0xA2}, {0x69, 0xCD}, {0x6E, 0xC4}, /* 0xE4-0xE7 */ + {0x6F, 0x32}, {0x73, 0x16}, {0x76, 0x21}, {0x7A, 0x93}, /* 0xE8-0xEB */ + {0x81, 0x39}, {0x82, 0x59}, {0x83, 0xD6}, {0x84, 0xBC}, /* 0xEC-0xEF */ + {0x50, 0xB5}, {0x57, 0xF0}, {0x5B, 0xC0}, {0x5B, 0xE8}, /* 0xF0-0xF3 */ + {0x5F, 0x69}, {0x63, 0xA1}, {0x78, 0x26}, {0x7D, 0xB5}, /* 0xF4-0xF7 */ + {0x83, 0xDC}, {0x85, 0x21}, {0x91, 0xC7}, {0x91, 0xF5}, /* 0xF8-0xFB */ + {0x51, 0x8A}, {0x67, 0xF5}, {0x7B, 0x56}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8C, 0xAC}, {0x51, 0xC4}, {0x59, 0xBB}, /* 0xA0-0xA3 */ + {0x60, 0xBD}, {0x86, 0x55}, {0x50, 0x1C}, {0xF9, 0xFF}, /* 0xA4-0xA7 */ + {0x52, 0x54}, {0x5C, 0x3A}, {0x61, 0x7D}, {0x62, 0x1A}, /* 0xA8-0xAB */ + {0x62, 0xD3}, {0x64, 0xF2}, {0x65, 0xA5}, {0x6E, 0xCC}, /* 0xAC-0xAF */ + {0x76, 0x20}, {0x81, 0x0A}, {0x8E, 0x60}, {0x96, 0x5F}, /* 0xB0-0xB3 */ + {0x96, 0xBB}, {0x4E, 0xDF}, {0x53, 0x43}, {0x55, 0x98}, /* 0xB4-0xB7 */ + {0x59, 0x29}, {0x5D, 0xDD}, {0x64, 0xC5}, {0x6C, 0xC9}, /* 0xB8-0xBB */ + {0x6D, 0xFA}, {0x73, 0x94}, {0x7A, 0x7F}, {0x82, 0x1B}, /* 0xBC-0xBF */ + {0x85, 0xA6}, {0x8C, 0xE4}, {0x8E, 0x10}, {0x90, 0x77}, /* 0xC0-0xC3 */ + {0x91, 0xE7}, {0x95, 0xE1}, {0x96, 0x21}, {0x97, 0xC6}, /* 0xC4-0xC7 */ + {0x51, 0xF8}, {0x54, 0xF2}, {0x55, 0x86}, {0x5F, 0xB9}, /* 0xC8-0xCB */ + {0x64, 0xA4}, {0x6F, 0x88}, {0x7D, 0xB4}, {0x8F, 0x1F}, /* 0xCC-0xCF */ + {0x8F, 0x4D}, {0x94, 0x35}, {0x50, 0xC9}, {0x5C, 0x16}, /* 0xD0-0xD3 */ + {0x6C, 0xBE}, {0x6D, 0xFB}, {0x75, 0x1B}, {0x77, 0xBB}, /* 0xD4-0xD7 */ + {0x7C, 0x3D}, {0x7C, 0x64}, {0x8A, 0x79}, {0x8A, 0xC2}, /* 0xD8-0xDB */ + {0x58, 0x1E}, {0x59, 0xBE}, {0x5E, 0x16}, {0x63, 0x77}, /* 0xDC-0xDF */ + {0x72, 0x52}, {0x75, 0x8A}, {0x77, 0x6B}, {0x8A, 0xDC}, /* 0xE0-0xE3 */ + {0x8C, 0xBC}, {0x8F, 0x12}, {0x5E, 0xF3}, {0x66, 0x74}, /* 0xE4-0xE7 */ + {0x6D, 0xF8}, {0x80, 0x7D}, {0x83, 0xC1}, {0x8A, 0xCB}, /* 0xE8-0xEB */ + {0x97, 0x51}, {0x9B, 0xD6}, {0xFA, 0x00}, {0x52, 0x43}, /* 0xEC-0xEF */ + {0x66, 0xFF}, {0x6D, 0x95}, {0x6E, 0xEF}, {0x7D, 0xE0}, /* 0xF0-0xF3 */ + {0x8A, 0xE6}, {0x90, 0x2E}, {0x90, 0x5E}, {0x9A, 0xD4}, /* 0xF4-0xF7 */ + {0x52, 0x1D}, {0x52, 0x7F}, {0x54, 0xE8}, {0x61, 0x94}, /* 0xF8-0xFB */ + {0x62, 0x84}, {0x62, 0xDB}, {0x68, 0xA2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x69, 0x12}, {0x69, 0x5A}, {0x6A, 0x35}, /* 0xA0-0xA3 */ + {0x70, 0x92}, {0x71, 0x26}, {0x78, 0x5D}, {0x79, 0x01}, /* 0xA4-0xA7 */ + {0x79, 0x0E}, {0x79, 0xD2}, {0x7A, 0x0D}, {0x80, 0x96}, /* 0xA8-0xAB */ + {0x82, 0x78}, {0x82, 0xD5}, {0x83, 0x49}, {0x85, 0x49}, /* 0xAC-0xAF */ + {0x8C, 0x82}, {0x8D, 0x85}, {0x91, 0x62}, {0x91, 0x8B}, /* 0xB0-0xB3 */ + {0x91, 0xAE}, {0x4F, 0xC3}, {0x56, 0xD1}, {0x71, 0xED}, /* 0xB4-0xB7 */ + {0x77, 0xD7}, {0x87, 0x00}, {0x89, 0xF8}, {0x5B, 0xF8}, /* 0xB8-0xBB */ + {0x5F, 0xD6}, {0x67, 0x51}, {0x90, 0xA8}, {0x53, 0xE2}, /* 0xBC-0xBF */ + {0x58, 0x5A}, {0x5B, 0xF5}, {0x60, 0xA4}, {0x61, 0x81}, /* 0xC0-0xC3 */ + {0x64, 0x60}, {0x7E, 0x3D}, {0x80, 0x70}, {0x85, 0x25}, /* 0xC4-0xC7 */ + {0x92, 0x83}, {0x64, 0xAE}, {0x50, 0xAC}, {0x5D, 0x14}, /* 0xC8-0xCB */ + {0x67, 0x00}, {0x58, 0x9C}, {0x62, 0xBD}, {0x63, 0xA8}, /* 0xCC-0xCF */ + {0x69, 0x0E}, {0x69, 0x78}, {0x6A, 0x1E}, {0x6E, 0x6B}, /* 0xD0-0xD3 */ + {0x76, 0xBA}, {0x79, 0xCB}, {0x82, 0xBB}, {0x84, 0x29}, /* 0xD4-0xD7 */ + {0x8A, 0xCF}, {0x8D, 0xA8}, {0x8F, 0xFD}, {0x91, 0x12}, /* 0xD8-0xDB */ + {0x91, 0x4B}, {0x91, 0x9C}, {0x93, 0x10}, {0x93, 0x18}, /* 0xDC-0xDF */ + {0x93, 0x9A}, {0x96, 0xDB}, {0x9A, 0x36}, {0x9C, 0x0D}, /* 0xE0-0xE3 */ + {0x4E, 0x11}, {0x75, 0x5C}, {0x79, 0x5D}, {0x7A, 0xFA}, /* 0xE4-0xE7 */ + {0x7B, 0x51}, {0x7B, 0xC9}, {0x7E, 0x2E}, {0x84, 0xC4}, /* 0xE8-0xEB */ + {0x8E, 0x59}, {0x8E, 0x74}, {0x8E, 0xF8}, {0x90, 0x10}, /* 0xEC-0xEF */ + {0x66, 0x25}, {0x69, 0x3F}, {0x74, 0x43}, {0x51, 0xFA}, /* 0xF0-0xF3 */ + {0x67, 0x2E}, {0x9E, 0xDC}, {0x51, 0x45}, {0x5F, 0xE0}, /* 0xF4-0xF7 */ + {0x6C, 0x96}, {0x87, 0xF2}, {0x88, 0x5D}, {0x88, 0x77}, /* 0xF8-0xFB */ + {0x60, 0xB4}, {0x81, 0xB5}, {0x84, 0x03}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8D, 0x05}, {0x53, 0xD6}, {0x54, 0x39}, /* 0xA0-0xA3 */ + {0x56, 0x34}, {0x5A, 0x36}, {0x5C, 0x31}, {0x70, 0x8A}, /* 0xA4-0xA7 */ + {0x7F, 0xE0}, {0x80, 0x5A}, {0x81, 0x06}, {0x81, 0xED}, /* 0xA8-0xAB */ + {0x8D, 0xA3}, {0x91, 0x89}, {0x9A, 0x5F}, {0x9D, 0xF2}, /* 0xAC-0xAF */ + {0x50, 0x74}, {0x4E, 0xC4}, {0x53, 0xA0}, {0x60, 0xFB}, /* 0xB0-0xB3 */ + {0x6E, 0x2C}, {0x5C, 0x64}, {0x4F, 0x88}, {0x50, 0x24}, /* 0xB4-0xB7 */ + {0x55, 0xE4}, {0x5C, 0xD9}, {0x5E, 0x5F}, {0x60, 0x65}, /* 0xB8-0xBB */ + {0x68, 0x94}, {0x6C, 0xBB}, {0x6D, 0xC4}, {0x71, 0xBE}, /* 0xBC-0xBF */ + {0x75, 0xD4}, {0x75, 0xF4}, {0x76, 0x61}, {0x7A, 0x1A}, /* 0xC0-0xC3 */ + {0x7A, 0x49}, {0x7D, 0xC7}, {0x7D, 0xFB}, {0x7F, 0x6E}, /* 0xC4-0xC7 */ + {0x81, 0xF4}, {0x86, 0xA9}, {0x8F, 0x1C}, {0x96, 0xC9}, /* 0xC8-0xCB */ + {0x99, 0xB3}, {0x9F, 0x52}, {0x52, 0x47}, {0x52, 0xC5}, /* 0xCC-0xCF */ + {0x98, 0xED}, {0x89, 0xAA}, {0x4E, 0x03}, {0x67, 0xD2}, /* 0xD0-0xD3 */ + {0x6F, 0x06}, {0x4F, 0xB5}, {0x5B, 0xE2}, {0x67, 0x95}, /* 0xD4-0xD7 */ + {0x6C, 0x88}, {0x6D, 0x78}, {0x74, 0x1B}, {0x78, 0x27}, /* 0xD8-0xDB */ + {0x91, 0xDD}, {0x93, 0x7C}, {0x87, 0xC4}, {0x79, 0xE4}, /* 0xDC-0xDF */ + {0x7A, 0x31}, {0x5F, 0xEB}, {0x4E, 0xD6}, {0x54, 0xA4}, /* 0xE0-0xE3 */ + {0x55, 0x3E}, {0x58, 0xAE}, {0x59, 0xA5}, {0x60, 0xF0}, /* 0xE4-0xE7 */ + {0x62, 0x53}, {0x62, 0xD6}, {0x67, 0x36}, {0x69, 0x55}, /* 0xE8-0xEB */ + {0x82, 0x35}, {0x96, 0x40}, {0x99, 0xB1}, {0x99, 0xDD}, /* 0xEC-0xEF */ + {0x50, 0x2C}, {0x53, 0x53}, {0x55, 0x44}, {0x57, 0x7C}, /* 0xF0-0xF3 */ + {0xFA, 0x01}, {0x62, 0x58}, {0xFA, 0x02}, {0x64, 0xE2}, /* 0xF4-0xF7 */ + {0x66, 0x6B}, {0x67, 0xDD}, {0x6F, 0xC1}, {0x6F, 0xEF}, /* 0xF8-0xFB */ + {0x74, 0x22}, {0x74, 0x38}, {0x8A, 0x17}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x94, 0x38}, {0x54, 0x51}, {0x56, 0x06}, /* 0xA0-0xA3 */ + {0x57, 0x66}, {0x5F, 0x48}, {0x61, 0x9A}, {0x6B, 0x4E}, /* 0xA4-0xA7 */ + {0x70, 0x58}, {0x70, 0xAD}, {0x7D, 0xBB}, {0x8A, 0x95}, /* 0xA8-0xAB */ + {0x59, 0x6A}, {0x81, 0x2B}, {0x63, 0xA2}, {0x77, 0x08}, /* 0xAC-0xAF */ + {0x80, 0x3D}, {0x8C, 0xAA}, {0x58, 0x54}, {0x64, 0x2D}, /* 0xB0-0xB3 */ + {0x69, 0xBB}, {0x5B, 0x95}, {0x5E, 0x11}, {0x6E, 0x6F}, /* 0xB4-0xB7 */ + {0xFA, 0x03}, {0x85, 0x69}, {0x51, 0x4C}, {0x53, 0xF0}, /* 0xB8-0xBB */ + {0x59, 0x2A}, {0x60, 0x20}, {0x61, 0x4B}, {0x6B, 0x86}, /* 0xBC-0xBF */ + {0x6C, 0x70}, {0x6C, 0xF0}, {0x7B, 0x1E}, {0x80, 0xCE}, /* 0xC0-0xC3 */ + {0x82, 0xD4}, {0x8D, 0xC6}, {0x90, 0xB0}, {0x98, 0xB1}, /* 0xC4-0xC7 */ + {0xFA, 0x04}, {0x64, 0xC7}, {0x6F, 0xA4}, {0x64, 0x91}, /* 0xC8-0xCB */ + {0x65, 0x04}, {0x51, 0x4E}, {0x54, 0x10}, {0x57, 0x1F}, /* 0xCC-0xCF */ + {0x8A, 0x0E}, {0x61, 0x5F}, {0x68, 0x76}, {0xFA, 0x05}, /* 0xD0-0xD3 */ + {0x75, 0xDB}, {0x7B, 0x52}, {0x7D, 0x71}, {0x90, 0x1A}, /* 0xD4-0xD7 */ + {0x58, 0x06}, {0x69, 0xCC}, {0x81, 0x7F}, {0x89, 0x2A}, /* 0xD8-0xDB */ + {0x90, 0x00}, {0x98, 0x39}, {0x50, 0x78}, {0x59, 0x57}, /* 0xDC-0xDF */ + {0x59, 0xAC}, {0x62, 0x95}, {0x90, 0x0F}, {0x9B, 0x2A}, /* 0xE0-0xE3 */ + {0x61, 0x5D}, {0x72, 0x79}, {0x95, 0xD6}, {0x57, 0x61}, /* 0xE4-0xE7 */ + {0x5A, 0x46}, {0x5D, 0xF4}, {0x62, 0x8A}, {0x64, 0xAD}, /* 0xE8-0xEB */ + {0x64, 0xFA}, {0x67, 0x77}, {0x6C, 0xE2}, {0x6D, 0x3E}, /* 0xEC-0xEF */ + {0x72, 0x2C}, {0x74, 0x36}, {0x78, 0x34}, {0x7F, 0x77}, /* 0xF0-0xF3 */ + {0x82, 0xAD}, {0x8D, 0xDB}, {0x98, 0x17}, {0x52, 0x24}, /* 0xF4-0xF7 */ + {0x57, 0x42}, {0x67, 0x7F}, {0x72, 0x48}, {0x74, 0xE3}, /* 0xF8-0xFB */ + {0x8C, 0xA9}, {0x8F, 0xA6}, {0x92, 0x11}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x96, 0x2A}, {0x51, 0x6B}, {0x53, 0xED}, /* 0xA0-0xA3 */ + {0x63, 0x4C}, {0x4F, 0x69}, {0x55, 0x04}, {0x60, 0x96}, /* 0xA4-0xA7 */ + {0x65, 0x57}, {0x6C, 0x9B}, {0x6D, 0x7F}, {0x72, 0x4C}, /* 0xA8-0xAB */ + {0x72, 0xFD}, {0x7A, 0x17}, {0x89, 0x87}, {0x8C, 0x9D}, /* 0xAC-0xAF */ + {0x5F, 0x6D}, {0x6F, 0x8E}, {0x70, 0xF9}, {0x81, 0xA8}, /* 0xB0-0xB3 */ + {0x61, 0x0E}, {0x4F, 0xBF}, {0x50, 0x4F}, {0x62, 0x41}, /* 0xB4-0xB7 */ + {0x72, 0x47}, {0x7B, 0xC7}, {0x7D, 0xE8}, {0x7F, 0xE9}, /* 0xB8-0xBB */ + {0x90, 0x4D}, {0x97, 0xAD}, {0x9A, 0x19}, {0x8C, 0xB6}, /* 0xBC-0xBF */ + {0x57, 0x6A}, {0x5E, 0x73}, {0x67, 0xB0}, {0x84, 0x0D}, /* 0xC0-0xC3 */ + {0x8A, 0x55}, {0x54, 0x20}, {0x5B, 0x16}, {0x5E, 0x63}, /* 0xC4-0xC7 */ + {0x5E, 0xE2}, {0x5F, 0x0A}, {0x65, 0x83}, {0x80, 0xBA}, /* 0xC8-0xCB */ + {0x85, 0x3D}, {0x95, 0x89}, {0x96, 0x5B}, {0x4F, 0x48}, /* 0xCC-0xCF */ + {0x53, 0x05}, {0x53, 0x0D}, {0x53, 0x0F}, {0x54, 0x86}, /* 0xD0-0xD3 */ + {0x54, 0xFA}, {0x57, 0x03}, {0x5E, 0x03}, {0x60, 0x16}, /* 0xD4-0xD7 */ + {0x62, 0x9B}, {0x62, 0xB1}, {0x63, 0x55}, {0xFA, 0x06}, /* 0xD8-0xDB */ + {0x6C, 0xE1}, {0x6D, 0x66}, {0x75, 0xB1}, {0x78, 0x32}, /* 0xDC-0xDF */ + {0x80, 0xDE}, {0x81, 0x2F}, {0x82, 0xDE}, {0x84, 0x61}, /* 0xE0-0xE3 */ + {0x84, 0xB2}, {0x88, 0x8D}, {0x89, 0x12}, {0x90, 0x0B}, /* 0xE4-0xE7 */ + {0x92, 0xEA}, {0x98, 0xFD}, {0x9B, 0x91}, {0x5E, 0x45}, /* 0xE8-0xEB */ + {0x66, 0xB4}, {0x66, 0xDD}, {0x70, 0x11}, {0x72, 0x06}, /* 0xEC-0xEF */ + {0xFA, 0x07}, {0x4F, 0xF5}, {0x52, 0x7D}, {0x5F, 0x6A}, /* 0xF0-0xF3 */ + {0x61, 0x53}, {0x67, 0x53}, {0x6A, 0x19}, {0x6F, 0x02}, /* 0xF4-0xF7 */ + {0x74, 0xE2}, {0x79, 0x68}, {0x88, 0x68}, {0x8C, 0x79}, /* 0xF8-0xFB */ + {0x98, 0xC7}, {0x98, 0xC4}, {0x9A, 0x43}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x54, 0xC1}, {0x7A, 0x1F}, {0x69, 0x53}, /* 0xA0-0xA3 */ + {0x8A, 0xF7}, {0x8C, 0x4A}, {0x98, 0xA8}, {0x99, 0xAE}, /* 0xA4-0xA7 */ + {0x5F, 0x7C}, {0x62, 0xAB}, {0x75, 0xB2}, {0x76, 0xAE}, /* 0xA8-0xAB */ + {0x88, 0xAB}, {0x90, 0x7F}, {0x96, 0x42}, {0x53, 0x39}, /* 0xAC-0xAF */ + {0x5F, 0x3C}, {0x5F, 0xC5}, {0x6C, 0xCC}, {0x73, 0xCC}, /* 0xB0-0xB3 */ + {0x75, 0x62}, {0x75, 0x8B}, {0x7B, 0x46}, {0x82, 0xFE}, /* 0xB4-0xB7 */ + {0x99, 0x9D}, {0x4E, 0x4F}, {0x90, 0x3C}, {0x4E, 0x0B}, /* 0xB8-0xBB */ + {0x4F, 0x55}, {0x53, 0xA6}, {0x59, 0x0F}, {0x5E, 0xC8}, /* 0xBC-0xBF */ + {0x66, 0x30}, {0x6C, 0xB3}, {0x74, 0x55}, {0x83, 0x77}, /* 0xC0-0xC3 */ + {0x87, 0x66}, {0x8C, 0xC0}, {0x90, 0x50}, {0x97, 0x1E}, /* 0xC4-0xC7 */ + {0x9C, 0x15}, {0x58, 0xD1}, {0x5B, 0x78}, {0x86, 0x50}, /* 0xC8-0xCB */ + {0x8B, 0x14}, {0x9D, 0xB4}, {0x5B, 0xD2}, {0x60, 0x68}, /* 0xCC-0xCF */ + {0x60, 0x8D}, {0x65, 0xF1}, {0x6C, 0x57}, {0x6F, 0x22}, /* 0xD0-0xD3 */ + {0x6F, 0xA3}, {0x70, 0x1A}, {0x7F, 0x55}, {0x7F, 0xF0}, /* 0xD4-0xD7 */ + {0x95, 0x91}, {0x95, 0x92}, {0x96, 0x50}, {0x97, 0xD3}, /* 0xD8-0xDB */ + {0x52, 0x72}, {0x8F, 0x44}, {0x51, 0xFD}, {0x54, 0x2B}, /* 0xDC-0xDF */ + {0x54, 0xB8}, {0x55, 0x63}, {0x55, 0x8A}, {0x6A, 0xBB}, /* 0xE0-0xE3 */ + {0x6D, 0xB5}, {0x7D, 0xD8}, {0x82, 0x66}, {0x92, 0x9C}, /* 0xE4-0xE7 */ + {0x96, 0x77}, {0x9E, 0x79}, {0x54, 0x08}, {0x54, 0xC8}, /* 0xE8-0xEB */ + {0x76, 0xD2}, {0x86, 0xE4}, {0x95, 0xA4}, {0x95, 0xD4}, /* 0xEC-0xEF */ + {0x96, 0x5C}, {0x4E, 0xA2}, {0x4F, 0x09}, {0x59, 0xEE}, /* 0xF0-0xF3 */ + {0x5A, 0xE6}, {0x5D, 0xF7}, {0x60, 0x52}, {0x62, 0x97}, /* 0xF4-0xF7 */ + {0x67, 0x6D}, {0x68, 0x41}, {0x6C, 0x86}, {0x6E, 0x2F}, /* 0xF8-0xFB */ + {0x7F, 0x38}, {0x80, 0x9B}, {0x82, 0x2A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xFA, 0x08}, {0xFA, 0x09}, {0x98, 0x05}, /* 0xA0-0xA3 */ + {0x4E, 0xA5}, {0x50, 0x55}, {0x54, 0xB3}, {0x57, 0x93}, /* 0xA4-0xA7 */ + {0x59, 0x5A}, {0x5B, 0x69}, {0x5B, 0xB3}, {0x61, 0xC8}, /* 0xA8-0xAB */ + {0x69, 0x77}, {0x6D, 0x77}, {0x70, 0x23}, {0x87, 0xF9}, /* 0xAC-0xAF */ + {0x89, 0xE3}, {0x8A, 0x72}, {0x8A, 0xE7}, {0x90, 0x82}, /* 0xB0-0xB3 */ + {0x99, 0xED}, {0x9A, 0xB8}, {0x52, 0xBE}, {0x68, 0x38}, /* 0xB4-0xB7 */ + {0x50, 0x16}, {0x5E, 0x78}, {0x67, 0x4F}, {0x83, 0x47}, /* 0xB8-0xBB */ + {0x88, 0x4C}, {0x4E, 0xAB}, {0x54, 0x11}, {0x56, 0xAE}, /* 0xBC-0xBF */ + {0x73, 0xE6}, {0x91, 0x15}, {0x97, 0xFF}, {0x99, 0x09}, /* 0xC0-0xC3 */ + {0x99, 0x57}, {0x99, 0x99}, {0x56, 0x53}, {0x58, 0x9F}, /* 0xC4-0xC7 */ + {0x86, 0x5B}, {0x8A, 0x31}, {0x61, 0xB2}, {0x6A, 0xF6}, /* 0xC8-0xCB */ + {0x73, 0x7B}, {0x8E, 0xD2}, {0x6B, 0x47}, {0x96, 0xAA}, /* 0xCC-0xCF */ + {0x9A, 0x57}, {0x59, 0x55}, {0x72, 0x00}, {0x8D, 0x6B}, /* 0xD0-0xD3 */ + {0x97, 0x69}, {0x4F, 0xD4}, {0x5C, 0xF4}, {0x5F, 0x26}, /* 0xD4-0xD7 */ + {0x61, 0xF8}, {0x66, 0x5B}, {0x6C, 0xEB}, {0x70, 0xAB}, /* 0xD8-0xDB */ + {0x73, 0x84}, {0x73, 0xB9}, {0x73, 0xFE}, {0x77, 0x29}, /* 0xDC-0xDF */ + {0x77, 0x4D}, {0x7D, 0x43}, {0x7D, 0x62}, {0x7E, 0x23}, /* 0xE0-0xE3 */ + {0x82, 0x37}, {0x88, 0x52}, {0xFA, 0x0A}, {0x8C, 0xE2}, /* 0xE4-0xE7 */ + {0x92, 0x49}, {0x98, 0x6F}, {0x5B, 0x51}, {0x7A, 0x74}, /* 0xE8-0xEB */ + {0x88, 0x40}, {0x98, 0x01}, {0x5A, 0xCC}, {0x4F, 0xE0}, /* 0xEC-0xEF */ + {0x53, 0x54}, {0x59, 0x3E}, {0x5C, 0xFD}, {0x63, 0x3E}, /* 0xF0-0xF3 */ + {0x6D, 0x79}, {0x72, 0xF9}, {0x81, 0x05}, {0x81, 0x07}, /* 0xF4-0xF7 */ + {0x83, 0xA2}, {0x92, 0xCF}, {0x98, 0x30}, {0x4E, 0xA8}, /* 0xF8-0xFB */ + {0x51, 0x44}, {0x52, 0x11}, {0x57, 0x8B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5F, 0x62}, {0x6C, 0xC2}, {0x6E, 0xCE}, /* 0xA0-0xA3 */ + {0x70, 0x05}, {0x70, 0x50}, {0x70, 0xAF}, {0x71, 0x92}, /* 0xA4-0xA7 */ + {0x73, 0xE9}, {0x74, 0x69}, {0x83, 0x4A}, {0x87, 0xA2}, /* 0xA8-0xAB */ + {0x88, 0x61}, {0x90, 0x08}, {0x90, 0xA2}, {0x93, 0xA3}, /* 0xAC-0xAF */ + {0x99, 0xA8}, {0x51, 0x6E}, {0x5F, 0x57}, {0x60, 0xE0}, /* 0xB0-0xB3 */ + {0x61, 0x67}, {0x66, 0xB3}, {0x85, 0x59}, {0x8E, 0x4A}, /* 0xB4-0xB7 */ + {0x91, 0xAF}, {0x97, 0x8B}, {0x4E, 0x4E}, {0x4E, 0x92}, /* 0xB8-0xBB */ + {0x54, 0x7C}, {0x58, 0xD5}, {0x58, 0xFA}, {0x59, 0x7D}, /* 0xBC-0xBF */ + {0x5C, 0xB5}, {0x5F, 0x27}, {0x62, 0x36}, {0x62, 0x48}, /* 0xC0-0xC3 */ + {0x66, 0x0A}, {0x66, 0x67}, {0x6B, 0xEB}, {0x6D, 0x69}, /* 0xC4-0xC7 */ + {0x6D, 0xCF}, {0x6E, 0x56}, {0x6E, 0xF8}, {0x6F, 0x94}, /* 0xC8-0xCB */ + {0x6F, 0xE0}, {0x6F, 0xE9}, {0x70, 0x5D}, {0x72, 0xD0}, /* 0xCC-0xCF */ + {0x74, 0x25}, {0x74, 0x5A}, {0x74, 0xE0}, {0x76, 0x93}, /* 0xD0-0xD3 */ + {0x79, 0x5C}, {0x7C, 0xCA}, {0x7E, 0x1E}, {0x80, 0xE1}, /* 0xD4-0xD7 */ + {0x82, 0xA6}, {0x84, 0x6B}, {0x84, 0xBF}, {0x86, 0x4E}, /* 0xD8-0xDB */ + {0x86, 0x5F}, {0x87, 0x74}, {0x8B, 0x77}, {0x8C, 0x6A}, /* 0xDC-0xDF */ + {0x93, 0xAC}, {0x98, 0x00}, {0x98, 0x65}, {0x60, 0xD1}, /* 0xE0-0xE3 */ + {0x62, 0x16}, {0x91, 0x77}, {0x5A, 0x5A}, {0x66, 0x0F}, /* 0xE4-0xE7 */ + {0x6D, 0xF7}, {0x6E, 0x3E}, {0x74, 0x3F}, {0x9B, 0x42}, /* 0xE8-0xEB */ + {0x5F, 0xFD}, {0x60, 0xDA}, {0x7B, 0x0F}, {0x54, 0xC4}, /* 0xEC-0xEF */ + {0x5F, 0x18}, {0x6C, 0x5E}, {0x6C, 0xD3}, {0x6D, 0x2A}, /* 0xF0-0xF3 */ + {0x70, 0xD8}, {0x7D, 0x05}, {0x86, 0x79}, {0x8A, 0x0C}, /* 0xF4-0xF7 */ + {0x9D, 0x3B}, {0x53, 0x16}, {0x54, 0x8C}, {0x5B, 0x05}, /* 0xF8-0xFB */ + {0x6A, 0x3A}, {0x70, 0x6B}, {0x75, 0x75}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x79, 0x8D}, {0x79, 0xBE}, {0x82, 0xB1}, /* 0xA0-0xA3 */ + {0x83, 0xEF}, {0x8A, 0x71}, {0x8B, 0x41}, {0x8C, 0xA8}, /* 0xA4-0xA7 */ + {0x97, 0x74}, {0xFA, 0x0B}, {0x64, 0xF4}, {0x65, 0x2B}, /* 0xA8-0xAB */ + {0x78, 0xBA}, {0x78, 0xBB}, {0x7A, 0x6B}, {0x4E, 0x38}, /* 0xAC-0xAF */ + {0x55, 0x9A}, {0x59, 0x50}, {0x5B, 0xA6}, {0x5E, 0x7B}, /* 0xB0-0xB3 */ + {0x60, 0xA3}, {0x63, 0xDB}, {0x6B, 0x61}, {0x66, 0x65}, /* 0xB4-0xB7 */ + {0x68, 0x53}, {0x6E, 0x19}, {0x71, 0x65}, {0x74, 0xB0}, /* 0xB8-0xBB */ + {0x7D, 0x08}, {0x90, 0x84}, {0x9A, 0x69}, {0x9C, 0x25}, /* 0xBC-0xBF */ + {0x6D, 0x3B}, {0x6E, 0xD1}, {0x73, 0x3E}, {0x8C, 0x41}, /* 0xC0-0xC3 */ + {0x95, 0xCA}, {0x51, 0xF0}, {0x5E, 0x4C}, {0x5F, 0xA8}, /* 0xC4-0xC7 */ + {0x60, 0x4D}, {0x60, 0xF6}, {0x61, 0x30}, {0x61, 0x4C}, /* 0xC8-0xCB */ + {0x66, 0x43}, {0x66, 0x44}, {0x69, 0xA5}, {0x6C, 0xC1}, /* 0xCC-0xCF */ + {0x6E, 0x5F}, {0x6E, 0xC9}, {0x6F, 0x62}, {0x71, 0x4C}, /* 0xD0-0xD3 */ + {0x74, 0x9C}, {0x76, 0x87}, {0x7B, 0xC1}, {0x7C, 0x27}, /* 0xD4-0xD7 */ + {0x83, 0x52}, {0x87, 0x57}, {0x90, 0x51}, {0x96, 0x8D}, /* 0xD8-0xDB */ + {0x9E, 0xC3}, {0x53, 0x2F}, {0x56, 0xDE}, {0x5E, 0xFB}, /* 0xDC-0xDF */ + {0x5F, 0x8A}, {0x60, 0x62}, {0x60, 0x94}, {0x61, 0xF7}, /* 0xE0-0xE3 */ + {0x66, 0x66}, {0x67, 0x03}, {0x6A, 0x9C}, {0x6D, 0xEE}, /* 0xE4-0xE7 */ + {0x6F, 0xAE}, {0x70, 0x70}, {0x73, 0x6A}, {0x7E, 0x6A}, /* 0xE8-0xEB */ + {0x81, 0xBE}, {0x83, 0x34}, {0x86, 0xD4}, {0x8A, 0xA8}, /* 0xEC-0xEF */ + {0x8C, 0xC4}, {0x52, 0x83}, {0x73, 0x72}, {0x5B, 0x96}, /* 0xF0-0xF3 */ + {0x6A, 0x6B}, {0x94, 0x04}, {0x54, 0xEE}, {0x56, 0x86}, /* 0xF4-0xF7 */ + {0x5B, 0x5D}, {0x65, 0x48}, {0x65, 0x85}, {0x66, 0xC9}, /* 0xF8-0xFB */ + {0x68, 0x9F}, {0x6D, 0x8D}, {0x6D, 0xC6}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_FD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x40-0x43 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x44-0x47 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x48-0x4B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x4C-0x4F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x50-0x53 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x54-0x57 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x58-0x5B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x5C-0x5F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x60-0x63 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x64-0x67 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x68-0x6B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x6C-0x6F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x70-0x73 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x74-0x77 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x78-0x7B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x72, 0x3B}, {0x80, 0xB4}, {0x91, 0x75}, /* 0xA0-0xA3 */ + {0x9A, 0x4D}, {0x4F, 0xAF}, {0x50, 0x19}, {0x53, 0x9A}, /* 0xA4-0xA7 */ + {0x54, 0x0E}, {0x54, 0x3C}, {0x55, 0x89}, {0x55, 0xC5}, /* 0xA8-0xAB */ + {0x5E, 0x3F}, {0x5F, 0x8C}, {0x67, 0x3D}, {0x71, 0x66}, /* 0xAC-0xAF */ + {0x73, 0xDD}, {0x90, 0x05}, {0x52, 0xDB}, {0x52, 0xF3}, /* 0xB0-0xB3 */ + {0x58, 0x64}, {0x58, 0xCE}, {0x71, 0x04}, {0x71, 0x8F}, /* 0xB4-0xB7 */ + {0x71, 0xFB}, {0x85, 0xB0}, {0x8A, 0x13}, {0x66, 0x88}, /* 0xB8-0xBB */ + {0x85, 0xA8}, {0x55, 0xA7}, {0x66, 0x84}, {0x71, 0x4A}, /* 0xBC-0xBF */ + {0x84, 0x31}, {0x53, 0x49}, {0x55, 0x99}, {0x6B, 0xC1}, /* 0xC0-0xC3 */ + {0x5F, 0x59}, {0x5F, 0xBD}, {0x63, 0xEE}, {0x66, 0x89}, /* 0xC4-0xC7 */ + {0x71, 0x47}, {0x8A, 0xF1}, {0x8F, 0x1D}, {0x9E, 0xBE}, /* 0xC8-0xCB */ + {0x4F, 0x11}, {0x64, 0x3A}, {0x70, 0xCB}, {0x75, 0x66}, /* 0xCC-0xCF */ + {0x86, 0x67}, {0x60, 0x64}, {0x8B, 0x4E}, {0x9D, 0xF8}, /* 0xD0-0xD3 */ + {0x51, 0x47}, {0x51, 0xF6}, {0x53, 0x08}, {0x6D, 0x36}, /* 0xD4-0xD7 */ + {0x80, 0xF8}, {0x9E, 0xD1}, {0x66, 0x15}, {0x6B, 0x23}, /* 0xD8-0xDB */ + {0x70, 0x98}, {0x75, 0xD5}, {0x54, 0x03}, {0x5C, 0x79}, /* 0xDC-0xDF */ + {0x7D, 0x07}, {0x8A, 0x16}, {0x6B, 0x20}, {0x6B, 0x3D}, /* 0xE0-0xE3 */ + {0x6B, 0x46}, {0x54, 0x38}, {0x60, 0x70}, {0x6D, 0x3D}, /* 0xE4-0xE7 */ + {0x7F, 0xD5}, {0x82, 0x08}, {0x50, 0xD6}, {0x51, 0xDE}, /* 0xE8-0xEB */ + {0x55, 0x9C}, {0x56, 0x6B}, {0x56, 0xCD}, {0x59, 0xEC}, /* 0xEC-0xEF */ + {0x5B, 0x09}, {0x5E, 0x0C}, {0x61, 0x99}, {0x61, 0x98}, /* 0xF0-0xF3 */ + {0x62, 0x31}, {0x66, 0x5E}, {0x66, 0xE6}, {0x71, 0x99}, /* 0xF4-0xF7 */ + {0x71, 0xB9}, {0x71, 0xBA}, {0x72, 0xA7}, {0x79, 0xA7}, /* 0xF8-0xFB */ + {0x7A, 0x00}, {0x7F, 0xB2}, {0x8A, 0x70}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_81, c2u_82, c2u_83, c2u_84, c2u_85, c2u_86, c2u_87, + c2u_88, c2u_89, c2u_8A, c2u_8B, c2u_8C, c2u_8D, c2u_8E, c2u_8F, + c2u_90, c2u_91, c2u_92, c2u_93, c2u_94, c2u_95, c2u_96, c2u_97, + c2u_98, c2u_99, c2u_9A, c2u_9B, c2u_9C, c2u_9D, c2u_9E, c2u_9F, + c2u_A0, c2u_A1, c2u_A2, c2u_A3, c2u_A4, c2u_A5, c2u_A6, c2u_A7, + c2u_A8, c2u_A9, c2u_AA, c2u_AB, c2u_AC, c2u_AD, c2u_AE, c2u_AF, + c2u_B0, c2u_B1, c2u_B2, c2u_B3, c2u_B4, c2u_B5, c2u_B6, c2u_B7, + c2u_B8, c2u_B9, c2u_BA, c2u_BB, c2u_BC, c2u_BD, c2u_BE, c2u_BF, + c2u_C0, c2u_C1, c2u_C2, c2u_C3, c2u_C4, c2u_C5, c2u_C6, c2u_C7, + c2u_C8, NULL, c2u_CA, c2u_CB, c2u_CC, c2u_CD, c2u_CE, c2u_CF, + c2u_D0, c2u_D1, c2u_D2, c2u_D3, c2u_D4, c2u_D5, c2u_D6, c2u_D7, + c2u_D8, c2u_D9, c2u_DA, c2u_DB, c2u_DC, c2u_DD, c2u_DE, c2u_DF, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, c2u_EB, c2u_EC, c2u_ED, c2u_EE, c2u_EF, + c2u_F0, c2u_F1, c2u_F2, c2u_F3, c2u_F4, c2u_F5, c2u_F6, c2u_F7, + c2u_F8, c2u_F9, c2u_FA, c2u_FB, c2u_FC, c2u_FD, NULL, NULL, +}; + +static unsigned char u2c_01[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xA9, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA4, 0xA9, 0xA4, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xA9, 0xA5, 0xA8, 0xA6, 0xA9, 0xA6, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xA9, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA8, /* 0x3C-0x3F */ + 0xA9, 0xA8, 0xA8, 0xA9, 0xA9, 0xA9, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xA9, 0xB0, 0xA8, 0xAF, 0xA9, 0xAF, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xAB, 0xA9, 0xAB, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xAE, 0xA9, 0xAE, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_02[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xA7, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xA2, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xA2, 0xA8, 0xA2, 0xAB, 0xA2, 0xAA, 0xA2, 0xAD, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xA2, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_03[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xA5, 0xC1, 0xA5, 0xC2, 0xA5, 0xC3, /* 0x90-0x93 */ + 0xA5, 0xC4, 0xA5, 0xC5, 0xA5, 0xC6, 0xA5, 0xC7, /* 0x94-0x97 */ + 0xA5, 0xC8, 0xA5, 0xC9, 0xA5, 0xCA, 0xA5, 0xCB, /* 0x98-0x9B */ + 0xA5, 0xCC, 0xA5, 0xCD, 0xA5, 0xCE, 0xA5, 0xCF, /* 0x9C-0x9F */ + 0xA5, 0xD0, 0xA5, 0xD1, 0x3F, 0x3F, 0xA5, 0xD2, /* 0xA0-0xA3 */ + 0xA5, 0xD3, 0xA5, 0xD4, 0xA5, 0xD5, 0xA5, 0xD6, /* 0xA4-0xA7 */ + 0xA5, 0xD7, 0xA5, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xA5, 0xE1, 0xA5, 0xE2, 0xA5, 0xE3, /* 0xB0-0xB3 */ + 0xA5, 0xE4, 0xA5, 0xE5, 0xA5, 0xE6, 0xA5, 0xE7, /* 0xB4-0xB7 */ + 0xA5, 0xE8, 0xA5, 0xE9, 0xA5, 0xEA, 0xA5, 0xEB, /* 0xB8-0xBB */ + 0xA5, 0xEC, 0xA5, 0xED, 0xA5, 0xEE, 0xA5, 0xEF, /* 0xBC-0xBF */ + 0xA5, 0xF0, 0xA5, 0xF1, 0x3F, 0x3F, 0xA5, 0xF2, /* 0xC0-0xC3 */ + 0xA5, 0xF3, 0xA5, 0xF4, 0xA5, 0xF5, 0xA5, 0xF6, /* 0xC4-0xC7 */ + 0xA5, 0xF7, 0xA5, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_04[512] = { + 0x3F, 0x3F, 0xAC, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xAC, 0xA1, 0xAC, 0xA2, 0xAC, 0xA3, 0xAC, 0xA4, /* 0x10-0x13 */ + 0xAC, 0xA5, 0xAC, 0xA6, 0xAC, 0xA8, 0xAC, 0xA9, /* 0x14-0x17 */ + 0xAC, 0xAA, 0xAC, 0xAB, 0xAC, 0xAC, 0xAC, 0xAD, /* 0x18-0x1B */ + 0xAC, 0xAE, 0xAC, 0xAF, 0xAC, 0xB0, 0xAC, 0xB1, /* 0x1C-0x1F */ + 0xAC, 0xB2, 0xAC, 0xB3, 0xAC, 0xB4, 0xAC, 0xB5, /* 0x20-0x23 */ + 0xAC, 0xB6, 0xAC, 0xB7, 0xAC, 0xB8, 0xAC, 0xB9, /* 0x24-0x27 */ + 0xAC, 0xBA, 0xAC, 0xBB, 0xAC, 0xBC, 0xAC, 0xBD, /* 0x28-0x2B */ + 0xAC, 0xBE, 0xAC, 0xBF, 0xAC, 0xC0, 0xAC, 0xC1, /* 0x2C-0x2F */ + 0xAC, 0xD1, 0xAC, 0xD2, 0xAC, 0xD3, 0xAC, 0xD4, /* 0x30-0x33 */ + 0xAC, 0xD5, 0xAC, 0xD6, 0xAC, 0xD8, 0xAC, 0xD9, /* 0x34-0x37 */ + 0xAC, 0xDA, 0xAC, 0xDB, 0xAC, 0xDC, 0xAC, 0xDD, /* 0x38-0x3B */ + 0xAC, 0xDE, 0xAC, 0xDF, 0xAC, 0xE0, 0xAC, 0xE1, /* 0x3C-0x3F */ + 0xAC, 0xE2, 0xAC, 0xE3, 0xAC, 0xE4, 0xAC, 0xE5, /* 0x40-0x43 */ + 0xAC, 0xE6, 0xAC, 0xE7, 0xAC, 0xE8, 0xAC, 0xE9, /* 0x44-0x47 */ + 0xAC, 0xEA, 0xAC, 0xEB, 0xAC, 0xEC, 0xAC, 0xED, /* 0x48-0x4B */ + 0xAC, 0xEE, 0xAC, 0xEF, 0xAC, 0xF0, 0xAC, 0xF1, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xAC, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_20[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xA1, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xA1, 0xAE, 0xA1, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xA1, 0xB0, 0xA1, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xA2, 0xD3, 0xA2, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xA1, 0xA5, 0xA1, 0xA6, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xA2, 0xB6, 0x3F, 0x3F, 0xA1, 0xC7, 0xA1, 0xC8, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD8, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xA9, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0xFA, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xA9, 0xFB, 0xA9, 0xFC, 0xA9, 0xFD, /* 0x80-0x83 */ + 0xA9, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_21[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xC9, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xA2, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xA4, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xE0, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xA2, 0xE5, 0xA2, 0xE2, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xD9, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xCA, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xF7, /* 0x50-0x53 */ + 0xA8, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xFB, /* 0x58-0x5B */ + 0xA8, 0xFC, 0xA8, 0xFD, 0xA8, 0xFE, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA5, 0xB0, 0xA5, 0xB1, 0xA5, 0xB2, 0xA5, 0xB3, /* 0x60-0x63 */ + 0xA5, 0xB4, 0xA5, 0xB5, 0xA5, 0xB6, 0xA5, 0xB7, /* 0x64-0x67 */ + 0xA5, 0xB8, 0xA5, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xA5, 0xA1, 0xA5, 0xA2, 0xA5, 0xA3, 0xA5, 0xA4, /* 0x70-0x73 */ + 0xA5, 0xA5, 0xA5, 0xA6, 0xA5, 0xA7, 0xA5, 0xA8, /* 0x74-0x77 */ + 0xA5, 0xA9, 0xA5, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xA1, 0xE7, 0xA1, 0xE8, 0xA1, 0xE6, 0xA1, 0xE9, /* 0x90-0x93 */ + 0xA1, 0xEA, 0xA2, 0xD5, 0xA2, 0xD8, 0xA2, 0xD6, /* 0x94-0x97 */ + 0xA2, 0xD9, 0xA2, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xA1, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xA2, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_22[512] = { + 0xA2, 0xA3, 0x3F, 0x3F, 0xA1, 0xD3, 0xA2, 0xA4, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD4, /* 0x04-0x07 */ + 0xA1, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF5, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xB3, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xA2, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xEE, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xA1, 0xF0, 0xA1, 0xC4, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xA1, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xA1, 0xAB, 0x3F, 0x3F, 0xA1, 0xFC, /* 0x24-0x27 */ + 0xA1, 0xFD, 0xA1, 0xFB, 0xA1, 0xFA, 0xA1, 0xF2, /* 0x28-0x2B */ + 0xA1, 0xF3, 0x3F, 0x3F, 0xA2, 0xB1, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xA1, 0xC5, 0xA1, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xA1, 0xAD, 0xA1, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD6, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA1, 0xC1, 0xA1, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xA1, 0xC2, 0xA1, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xEC, 0xA1, 0xED, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF8, 0xA1, 0xF9, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF6, 0xA1, 0xF7, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xA2, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xA1, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_23[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD2, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_24[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA8, 0xE7, 0xA8, 0xE8, 0xA8, 0xE9, 0xA8, 0xEA, /* 0x60-0x63 */ + 0xA8, 0xEB, 0xA8, 0xEC, 0xA8, 0xED, 0xA8, 0xEE, /* 0x64-0x67 */ + 0xA8, 0xEF, 0xA8, 0xF0, 0xA8, 0xF1, 0xA8, 0xF2, /* 0x68-0x6B */ + 0xA8, 0xF3, 0xA8, 0xF4, 0xA8, 0xF5, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xA9, 0xE7, 0xA9, 0xE8, 0xA9, 0xE9, 0xA9, 0xEA, /* 0x74-0x77 */ + 0xA9, 0xEB, 0xA9, 0xEC, 0xA9, 0xED, 0xA9, 0xEE, /* 0x78-0x7B */ + 0xA9, 0xEF, 0xA9, 0xF0, 0xA9, 0xF1, 0xA9, 0xF2, /* 0x7C-0x7F */ + + 0xA9, 0xF3, 0xA9, 0xF4, 0xA9, 0xF5, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xA9, 0xCD, 0xA9, 0xCE, 0xA9, 0xCF, 0xA9, 0xD0, /* 0x9C-0x9F */ + 0xA9, 0xD1, 0xA9, 0xD2, 0xA9, 0xD3, 0xA9, 0xD4, /* 0xA0-0xA3 */ + 0xA9, 0xD5, 0xA9, 0xD6, 0xA9, 0xD7, 0xA9, 0xD8, /* 0xA4-0xA7 */ + 0xA9, 0xD9, 0xA9, 0xDA, 0xA9, 0xDB, 0xA9, 0xDC, /* 0xA8-0xAB */ + 0xA9, 0xDD, 0xA9, 0xDE, 0xA9, 0xDF, 0xA9, 0xE0, /* 0xAC-0xAF */ + 0xA9, 0xE1, 0xA9, 0xE2, 0xA9, 0xE3, 0xA9, 0xE4, /* 0xB0-0xB3 */ + 0xA9, 0xE5, 0xA9, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xA8, 0xCD, 0xA8, 0xCE, 0xA8, 0xCF, 0xA8, 0xD0, /* 0xD0-0xD3 */ + 0xA8, 0xD1, 0xA8, 0xD2, 0xA8, 0xD3, 0xA8, 0xD4, /* 0xD4-0xD7 */ + 0xA8, 0xD5, 0xA8, 0xD6, 0xA8, 0xD7, 0xA8, 0xD8, /* 0xD8-0xDB */ + 0xA8, 0xD9, 0xA8, 0xDA, 0xA8, 0xDB, 0xA8, 0xDC, /* 0xDC-0xDF */ + 0xA8, 0xDD, 0xA8, 0xDE, 0xA8, 0xDF, 0xA8, 0xE0, /* 0xE0-0xE3 */ + 0xA8, 0xE1, 0xA8, 0xE2, 0xA8, 0xE3, 0xA8, 0xE4, /* 0xE4-0xE7 */ + 0xA8, 0xE5, 0xA8, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_25[512] = { + 0xA6, 0xA1, 0xA6, 0xAC, 0xA6, 0xA2, 0xA6, 0xAD, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xA6, 0xA3, 0xA6, 0xC8, 0xA6, 0xC7, 0xA6, 0xAE, /* 0x0C-0x0F */ + 0xA6, 0xA4, 0xA6, 0xC2, 0xA6, 0xC1, 0xA6, 0xAF, /* 0x10-0x13 */ + 0xA6, 0xA6, 0xA6, 0xC6, 0xA6, 0xC5, 0xA6, 0xB1, /* 0x14-0x17 */ + 0xA6, 0xA5, 0xA6, 0xC4, 0xA6, 0xC3, 0xA6, 0xB0, /* 0x18-0x1B */ + 0xA6, 0xA7, 0xA6, 0xBC, 0xA6, 0xC9, 0xA6, 0xCA, /* 0x1C-0x1F */ + 0xA6, 0xB7, 0xA6, 0xCB, 0xA6, 0xCC, 0xA6, 0xB2, /* 0x20-0x23 */ + 0xA6, 0xA9, 0xA6, 0xBE, 0xA6, 0xCD, 0xA6, 0xCE, /* 0x24-0x27 */ + 0xA6, 0xB9, 0xA6, 0xCF, 0xA6, 0xD0, 0xA6, 0xB4, /* 0x28-0x2B */ + 0xA6, 0xA8, 0xA6, 0xD1, 0xA6, 0xD2, 0xA6, 0xB8, /* 0x2C-0x2F */ + 0xA6, 0xBD, 0xA6, 0xD3, 0xA6, 0xD4, 0xA6, 0xB3, /* 0x30-0x33 */ + 0xA6, 0xAA, 0xA6, 0xD5, 0xA6, 0xD6, 0xA6, 0xBA, /* 0x34-0x37 */ + 0xA6, 0xBF, 0xA6, 0xD7, 0xA6, 0xD8, 0xA6, 0xB5, /* 0x38-0x3B */ + 0xA6, 0xAB, 0xA6, 0xD9, 0xA6, 0xDA, 0xA6, 0xBB, /* 0x3C-0x3F */ + 0xA6, 0xDB, 0xA6, 0xDC, 0xA6, 0xC0, 0xA6, 0xDD, /* 0x40-0x43 */ + 0xA6, 0xDE, 0xA6, 0xDF, 0xA6, 0xE0, 0xA6, 0xE1, /* 0x44-0x47 */ + 0xA6, 0xE2, 0xA6, 0xE3, 0xA6, 0xE4, 0xA6, 0xB6, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xC6, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xA1, 0xE1, 0xA1, 0xE0, 0x3F, 0x3F, 0xA2, 0xC3, /* 0xA0-0xA3 */ + 0xA2, 0xC7, 0xA2, 0xC8, 0xA2, 0xCB, 0xA2, 0xCA, /* 0xA4-0xA7 */ + 0xA2, 0xC9, 0xA2, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xE3, 0xA1, 0xE2, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xBA, 0xA2, 0xB9, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xA1, 0xE5, 0xA1, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xA2, 0xB8, 0xA2, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xDF, 0xA1, 0xDE, /* 0xC4-0xC7 */ + 0xA2, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xDB, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xDD, 0xA1, 0xDC, /* 0xCC-0xCF */ + 0xA2, 0xC4, 0xA2, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_26[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA1, 0xDA, 0xA1, 0xD9, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xCF, 0xA2, 0xCE, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xA2, 0xD0, 0x3F, 0x3F, 0xA2, 0xD1, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xA1, 0xCF, 0x3F, 0x3F, 0xA1, 0xCE, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA2, 0xBC, 0xA2, 0xBD, 0x3F, 0x3F, 0xA2, 0xC0, /* 0x60-0x63 */ + 0xA2, 0xBB, 0xA2, 0xBE, 0x3F, 0x3F, 0xA2, 0xBF, /* 0x64-0x67 */ + 0xA2, 0xCD, 0xA2, 0xDB, 0xA2, 0xDC, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xA2, 0xDD, 0xA2, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_30[512] = { + 0xA1, 0xA1, 0xA1, 0xA2, 0xA1, 0xA3, 0xA1, 0xA8, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xA1, 0xB4, 0xA1, 0xB5, 0xA1, 0xB6, 0xA1, 0xB7, /* 0x08-0x0B */ + 0xA1, 0xB8, 0xA1, 0xB9, 0xA1, 0xBA, 0xA1, 0xBB, /* 0x0C-0x0F */ + 0xA1, 0xBC, 0xA1, 0xBD, 0x3F, 0x3F, 0xA1, 0xEB, /* 0x10-0x13 */ + 0xA1, 0xB2, 0xA1, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xAA, 0xA1, 0xAA, 0xA2, 0xAA, 0xA3, /* 0x40-0x43 */ + 0xAA, 0xA4, 0xAA, 0xA5, 0xAA, 0xA6, 0xAA, 0xA7, /* 0x44-0x47 */ + 0xAA, 0xA8, 0xAA, 0xA9, 0xAA, 0xAA, 0xAA, 0xAB, /* 0x48-0x4B */ + 0xAA, 0xAC, 0xAA, 0xAD, 0xAA, 0xAE, 0xAA, 0xAF, /* 0x4C-0x4F */ + 0xAA, 0xB0, 0xAA, 0xB1, 0xAA, 0xB2, 0xAA, 0xB3, /* 0x50-0x53 */ + 0xAA, 0xB4, 0xAA, 0xB5, 0xAA, 0xB6, 0xAA, 0xB7, /* 0x54-0x57 */ + 0xAA, 0xB8, 0xAA, 0xB9, 0xAA, 0xBA, 0xAA, 0xBB, /* 0x58-0x5B */ + 0xAA, 0xBC, 0xAA, 0xBD, 0xAA, 0xBE, 0xAA, 0xBF, /* 0x5C-0x5F */ + 0xAA, 0xC0, 0xAA, 0xC1, 0xAA, 0xC2, 0xAA, 0xC3, /* 0x60-0x63 */ + 0xAA, 0xC4, 0xAA, 0xC5, 0xAA, 0xC6, 0xAA, 0xC7, /* 0x64-0x67 */ + 0xAA, 0xC8, 0xAA, 0xC9, 0xAA, 0xCA, 0xAA, 0xCB, /* 0x68-0x6B */ + 0xAA, 0xCC, 0xAA, 0xCD, 0xAA, 0xCE, 0xAA, 0xCF, /* 0x6C-0x6F */ + 0xAA, 0xD0, 0xAA, 0xD1, 0xAA, 0xD2, 0xAA, 0xD3, /* 0x70-0x73 */ + 0xAA, 0xD4, 0xAA, 0xD5, 0xAA, 0xD6, 0xAA, 0xD7, /* 0x74-0x77 */ + 0xAA, 0xD8, 0xAA, 0xD9, 0xAA, 0xDA, 0xAA, 0xDB, /* 0x78-0x7B */ + 0xAA, 0xDC, 0xAA, 0xDD, 0xAA, 0xDE, 0xAA, 0xDF, /* 0x7C-0x7F */ + + 0xAA, 0xE0, 0xAA, 0xE1, 0xAA, 0xE2, 0xAA, 0xE3, /* 0x80-0x83 */ + 0xAA, 0xE4, 0xAA, 0xE5, 0xAA, 0xE6, 0xAA, 0xE7, /* 0x84-0x87 */ + 0xAA, 0xE8, 0xAA, 0xE9, 0xAA, 0xEA, 0xAA, 0xEB, /* 0x88-0x8B */ + 0xAA, 0xEC, 0xAA, 0xED, 0xAA, 0xEE, 0xAA, 0xEF, /* 0x8C-0x8F */ + 0xAA, 0xF0, 0xAA, 0xF1, 0xAA, 0xF2, 0xAA, 0xF3, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xAB, 0xA1, 0xAB, 0xA2, 0xAB, 0xA3, /* 0xA0-0xA3 */ + 0xAB, 0xA4, 0xAB, 0xA5, 0xAB, 0xA6, 0xAB, 0xA7, /* 0xA4-0xA7 */ + 0xAB, 0xA8, 0xAB, 0xA9, 0xAB, 0xAA, 0xAB, 0xAB, /* 0xA8-0xAB */ + 0xAB, 0xAC, 0xAB, 0xAD, 0xAB, 0xAE, 0xAB, 0xAF, /* 0xAC-0xAF */ + 0xAB, 0xB0, 0xAB, 0xB1, 0xAB, 0xB2, 0xAB, 0xB3, /* 0xB0-0xB3 */ + 0xAB, 0xB4, 0xAB, 0xB5, 0xAB, 0xB6, 0xAB, 0xB7, /* 0xB4-0xB7 */ + 0xAB, 0xB8, 0xAB, 0xB9, 0xAB, 0xBA, 0xAB, 0xBB, /* 0xB8-0xBB */ + 0xAB, 0xBC, 0xAB, 0xBD, 0xAB, 0xBE, 0xAB, 0xBF, /* 0xBC-0xBF */ + 0xAB, 0xC0, 0xAB, 0xC1, 0xAB, 0xC2, 0xAB, 0xC3, /* 0xC0-0xC3 */ + 0xAB, 0xC4, 0xAB, 0xC5, 0xAB, 0xC6, 0xAB, 0xC7, /* 0xC4-0xC7 */ + 0xAB, 0xC8, 0xAB, 0xC9, 0xAB, 0xCA, 0xAB, 0xCB, /* 0xC8-0xCB */ + 0xAB, 0xCC, 0xAB, 0xCD, 0xAB, 0xCE, 0xAB, 0xCF, /* 0xCC-0xCF */ + 0xAB, 0xD0, 0xAB, 0xD1, 0xAB, 0xD2, 0xAB, 0xD3, /* 0xD0-0xD3 */ + 0xAB, 0xD4, 0xAB, 0xD5, 0xAB, 0xD6, 0xAB, 0xD7, /* 0xD4-0xD7 */ + 0xAB, 0xD8, 0xAB, 0xD9, 0xAB, 0xDA, 0xAB, 0xDB, /* 0xD8-0xDB */ + 0xAB, 0xDC, 0xAB, 0xDD, 0xAB, 0xDE, 0xAB, 0xDF, /* 0xDC-0xDF */ + 0xAB, 0xE0, 0xAB, 0xE1, 0xAB, 0xE2, 0xAB, 0xE3, /* 0xE0-0xE3 */ + 0xAB, 0xE4, 0xAB, 0xE5, 0xAB, 0xE6, 0xAB, 0xE7, /* 0xE4-0xE7 */ + 0xAB, 0xE8, 0xAB, 0xE9, 0xAB, 0xEA, 0xAB, 0xEB, /* 0xE8-0xEB */ + 0xAB, 0xEC, 0xAB, 0xED, 0xAB, 0xEE, 0xAB, 0xEF, /* 0xEC-0xEF */ + 0xAB, 0xF0, 0xAB, 0xF1, 0xAB, 0xF2, 0xAB, 0xF3, /* 0xF0-0xF3 */ + 0xAB, 0xF4, 0xAB, 0xF5, 0xAB, 0xF6, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_31[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA3, /* 0x30-0x33 */ + 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA6, 0xA4, 0xA7, /* 0x34-0x37 */ + 0xA4, 0xA8, 0xA4, 0xA9, 0xA4, 0xAA, 0xA4, 0xAB, /* 0x38-0x3B */ + 0xA4, 0xAC, 0xA4, 0xAD, 0xA4, 0xAE, 0xA4, 0xAF, /* 0x3C-0x3F */ + 0xA4, 0xB0, 0xA4, 0xB1, 0xA4, 0xB2, 0xA4, 0xB3, /* 0x40-0x43 */ + 0xA4, 0xB4, 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB7, /* 0x44-0x47 */ + 0xA4, 0xB8, 0xA4, 0xB9, 0xA4, 0xBA, 0xA4, 0xBB, /* 0x48-0x4B */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0xA4, 0xBF, /* 0x4C-0x4F */ + 0xA4, 0xC0, 0xA4, 0xC1, 0xA4, 0xC2, 0xA4, 0xC3, /* 0x50-0x53 */ + 0xA4, 0xC4, 0xA4, 0xC5, 0xA4, 0xC6, 0xA4, 0xC7, /* 0x54-0x57 */ + 0xA4, 0xC8, 0xA4, 0xC9, 0xA4, 0xCA, 0xA4, 0xCB, /* 0x58-0x5B */ + 0xA4, 0xCC, 0xA4, 0xCD, 0xA4, 0xCE, 0xA4, 0xCF, /* 0x5C-0x5F */ + 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xD2, 0xA4, 0xD3, /* 0x60-0x63 */ + 0xA4, 0xD4, 0xA4, 0xD5, 0xA4, 0xD6, 0xA4, 0xD7, /* 0x64-0x67 */ + 0xA4, 0xD8, 0xA4, 0xD9, 0xA4, 0xDA, 0xA4, 0xDB, /* 0x68-0x6B */ + 0xA4, 0xDC, 0xA4, 0xDD, 0xA4, 0xDE, 0xA4, 0xDF, /* 0x6C-0x6F */ + 0xA4, 0xE0, 0xA4, 0xE1, 0xA4, 0xE2, 0xA4, 0xE3, /* 0x70-0x73 */ + 0xA4, 0xE4, 0xA4, 0xE5, 0xA4, 0xE6, 0xA4, 0xE7, /* 0x74-0x77 */ + 0xA4, 0xE8, 0xA4, 0xE9, 0xA4, 0xEA, 0xA4, 0xEB, /* 0x78-0x7B */ + 0xA4, 0xEC, 0xA4, 0xED, 0xA4, 0xEE, 0xA4, 0xEF, /* 0x7C-0x7F */ + + 0xA4, 0xF0, 0xA4, 0xF1, 0xA4, 0xF2, 0xA4, 0xF3, /* 0x80-0x83 */ + 0xA4, 0xF4, 0xA4, 0xF5, 0xA4, 0xF6, 0xA4, 0xF7, /* 0x84-0x87 */ + 0xA4, 0xF8, 0xA4, 0xF9, 0xA4, 0xFA, 0xA4, 0xFB, /* 0x88-0x8B */ + 0xA4, 0xFC, 0xA4, 0xFD, 0xA4, 0xFE, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_32[512] = { + 0xA9, 0xB1, 0xA9, 0xB2, 0xA9, 0xB3, 0xA9, 0xB4, /* 0x00-0x03 */ + 0xA9, 0xB5, 0xA9, 0xB6, 0xA9, 0xB7, 0xA9, 0xB8, /* 0x04-0x07 */ + 0xA9, 0xB9, 0xA9, 0xBA, 0xA9, 0xBB, 0xA9, 0xBC, /* 0x08-0x0B */ + 0xA9, 0xBD, 0xA9, 0xBE, 0xA9, 0xBF, 0xA9, 0xC0, /* 0x0C-0x0F */ + 0xA9, 0xC1, 0xA9, 0xC2, 0xA9, 0xC3, 0xA9, 0xC4, /* 0x10-0x13 */ + 0xA9, 0xC5, 0xA9, 0xC6, 0xA9, 0xC7, 0xA9, 0xC8, /* 0x14-0x17 */ + 0xA9, 0xC9, 0xA9, 0xCA, 0xA9, 0xCB, 0xA9, 0xCC, /* 0x18-0x1B */ + 0xA2, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA8, 0xB1, 0xA8, 0xB2, 0xA8, 0xB3, 0xA8, 0xB4, /* 0x60-0x63 */ + 0xA8, 0xB5, 0xA8, 0xB6, 0xA8, 0xB7, 0xA8, 0xB8, /* 0x64-0x67 */ + 0xA8, 0xB9, 0xA8, 0xBA, 0xA8, 0xBB, 0xA8, 0xBC, /* 0x68-0x6B */ + 0xA8, 0xBD, 0xA8, 0xBE, 0xA8, 0xBF, 0xA8, 0xC0, /* 0x6C-0x6F */ + 0xA8, 0xC1, 0xA8, 0xC2, 0xA8, 0xC3, 0xA8, 0xC4, /* 0x70-0x73 */ + 0xA8, 0xC5, 0xA8, 0xC6, 0xA8, 0xC7, 0xA8, 0xC8, /* 0x74-0x77 */ + 0xA8, 0xC9, 0xA8, 0xCA, 0xA8, 0xCB, 0xA8, 0xCC, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xDE, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_33[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xA7, 0xC9, 0xA7, 0xCA, 0xA7, 0xCB, 0xA7, 0xCC, /* 0x80-0x83 */ + 0xA7, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xA7, 0xBA, 0xA7, 0xBB, 0xA7, 0xDC, 0xA7, 0xDD, /* 0x88-0x8B */ + 0xA7, 0xDE, 0xA7, 0xB6, 0xA7, 0xB7, 0xA7, 0xB8, /* 0x8C-0x8F */ + 0xA7, 0xD4, 0xA7, 0xD5, 0xA7, 0xD6, 0xA7, 0xD7, /* 0x90-0x93 */ + 0xA7, 0xD8, 0xA7, 0xA1, 0xA7, 0xA2, 0xA7, 0xA3, /* 0x94-0x97 */ + 0xA7, 0xA5, 0xA7, 0xAB, 0xA7, 0xAC, 0xA7, 0xAD, /* 0x98-0x9B */ + 0xA7, 0xAE, 0xA7, 0xAF, 0xA7, 0xB0, 0xA7, 0xB1, /* 0x9C-0x9F */ + 0xA7, 0xB2, 0xA7, 0xB3, 0xA7, 0xB4, 0xA7, 0xA7, /* 0xA0-0xA3 */ + 0xA7, 0xA8, 0xA7, 0xA9, 0xA7, 0xAA, 0xA7, 0xBD, /* 0xA4-0xA7 */ + 0xA7, 0xBE, 0xA7, 0xE5, 0xA7, 0xE6, 0xA7, 0xE7, /* 0xA8-0xAB */ + 0xA7, 0xE8, 0xA7, 0xE1, 0xA7, 0xE2, 0xA7, 0xE3, /* 0xAC-0xAF */ + 0xA7, 0xBF, 0xA7, 0xC0, 0xA7, 0xC1, 0xA7, 0xC2, /* 0xB0-0xB3 */ + 0xA7, 0xC3, 0xA7, 0xC4, 0xA7, 0xC5, 0xA7, 0xC6, /* 0xB4-0xB7 */ + 0xA7, 0xC7, 0xA7, 0xC8, 0xA7, 0xCE, 0xA7, 0xCF, /* 0xB8-0xBB */ + 0xA7, 0xD0, 0xA7, 0xD1, 0xA7, 0xD2, 0xA7, 0xD3, /* 0xBC-0xBF */ + 0xA7, 0xDA, 0xA7, 0xDB, 0xA2, 0xE3, 0xA7, 0xEC, /* 0xC0-0xC3 */ + 0xA7, 0xA6, 0xA7, 0xE0, 0xA7, 0xEF, 0xA2, 0xE1, /* 0xC4-0xC7 */ + 0xA7, 0xBC, 0xA7, 0xED, 0xA7, 0xB5, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xB9, /* 0xCC-0xCF */ + 0xA7, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xEB, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xDF, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xA2, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xE4, /* 0xD8-0xDB */ + 0xA7, 0xEE, 0xA7, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4E[512] = { + 0xEC, 0xE9, 0xEF, 0xCB, 0x3F, 0x3F, 0xF6, 0xD2, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xB2, /* 0x04-0x07 */ + 0xED, 0xDB, 0xDF, 0xB2, 0xDF, 0xBE, 0xF9, 0xBB, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xDC, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xF5, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xF3, 0xA6, 0xDD, 0xE0, 0xE1, 0xA6, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xCE, 0xF8, 0xDC, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xAA, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xF1, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xFA, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xFC, 0xAF, 0xD3, 0xA1, 0x3F, 0x3F, 0xF1, 0xAB, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xD1, 0xD2, 0xAC, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCE, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xFD, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xDE, 0xBF, 0xFB, 0xBA, 0xF9, 0xB9, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xD2, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xE3, 0xAB, 0xEB, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xCE, 0xFA, 0xCB, 0xF7, 0xE5, 0xA5, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xE1, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xD4, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xE1, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xE3, 0xDF, 0xAD, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xEB, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xAF, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xF5, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xE5, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xC0, /* 0x88-0x8B */ + 0xEC, 0xA3, 0x3F, 0x3F, 0xE9, 0xCD, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xEA, 0xA7, 0xE9, 0xF6, 0xFB, 0xBB, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xE7, 0xE9, 0xEF, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xD0, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xC1, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xAC, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xD8, 0xCC, 0xF9, 0xF1, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xCE, 0xDF, 0xFA, 0xA4, 0xE6, 0xB2, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xFA, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xBD, /* 0xA8-0xAB */ + 0xCC, 0xC8, 0xEF, 0xCD, 0xD5, 0xD5, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xA2, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xD1, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xE4, 0xA7, 0xEC, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF6, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xFB, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xD1, 0xCB, 0xBF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xED, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xED, 0xA8, 0xDE, 0xC2, 0xF6, 0xE2, 0xED, 0xDC, /* 0xD4-0xD7 */ + 0xDC, 0xF5, 0xE0, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xD4, 0xCE, 0x3F, 0x3F, 0xF4, 0xB5, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xDB, /* 0xE0-0xE3 */ + 0xD6, 0xB5, 0xEC, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xE4, 0xE6, 0x3F, 0x3F, 0xF1, 0xEA, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xEC, 0xCB, 0xC0, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xF2, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0x3F, 0x3F, 0xD0, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF9, 0xF2, 0xEC, 0xA5, 0xD0, 0xDF, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE7, 0xEA, 0xD0, 0xEB, 0xDC, 0xD1, /* 0x0C-0x0F */ + 0xDB, 0xE9, 0xFD, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xD7, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xDA, 0xE1, 0x3F, 0x3F, 0xD6, 0xB6, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xE3, 0xDF, 0x3F, 0x3F, 0xDE, 0xC3, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xDE, 0xC4, 0xCA, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xEC, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xA3, 0xEE, 0xB7, /* 0x44-0x47 */ + 0xF8, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xEA, 0xC8, 0xEE, 0xB8, 0xF1, 0xAC, /* 0x4C-0x4F */ + 0xF1, 0xA5, 0xE9, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xF9, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xE5, 0xF9, 0xEC, 0xEA, 0xDD, 0xD6, /* 0x58-0x5B */ + 0xED, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xF8, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xBA, /* 0x6C-0x6F */ + 0xDB, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xA2, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xCD, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xED, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xEB, 0xDE, 0xC5, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xE3, 0xE0, 0x3F, 0x3F, 0xCA, 0xC9, /* 0x80-0x83 */ + 0xF2, 0xE9, 0x3F, 0x3F, 0xD5, 0xCE, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xF6, 0xB6, 0x3F, 0x3F, 0xCE, 0xC2, 0xD6, 0xC7, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xE3, 0xB4, 0x3F, 0x3F, 0xF1, 0xAD, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xEA, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xC2, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xF3, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xEA, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xEB, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xB2, 0xFD, 0xA5, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF6, 0xD5, 0xD5, 0xE2, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xB5, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xF5, 0xF5, 0xB5, /* 0xC0-0xC3 */ + 0xE4, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xE7, 0xEB, 0xF1, 0xD5, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xBB, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xE9, 0xB5, 0x3F, 0x3F, 0xCC, 0xC9, /* 0xD0-0xD3 */ + 0xFA, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xD4, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xD6, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xDC, 0xC1, 0x3F, 0x3F, 0xDE, 0xC6, /* 0xDC-0xDF */ + 0xFA, 0xEF, 0xE3, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xF3, 0xDC, 0xF6, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xCE, 0xFC, 0x3F, 0x3F, 0xDB, 0xC4, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xF8, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xDC, 0xE4, 0x3F, 0x3F, 0xE5, 0xEF, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB1, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xD6, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF3, 0xDA, 0x3F, 0x3F, 0xCB, 0xC1, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xDB, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xD9, 0xFA, 0xD3, 0xEE, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xB8, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xFD, 0xA6, 0xEB, 0xEF, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xF4, 0xA6, 0x3F, 0x3F, 0xCC, 0xCA, 0xF3, 0xA8, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xF3, 0xDB, 0x3F, 0x3F, 0xDB, 0xA7, /* 0x20-0x23 */ + 0xF6, 0xB7, 0x3F, 0x3F, 0xCF, 0xE6, 0xF0, 0xF2, /* 0x24-0x27 */ + 0xCB, 0xDA, 0x3F, 0x3F, 0xE7, 0xD2, 0xD7, 0xC3, /* 0x28-0x2B */ + 0xF6, 0xF0, 0xE8, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xA6, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE7, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xA3, /* 0x44-0x47 */ + 0xCC, 0xA7, 0xEA, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xB6, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xFA, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xAE, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xEF, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xCB, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xF6, 0xB0, 0xEF, 0xCF, 0xE9, 0xCF, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xF7, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xCE, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xDC, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xDB, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xCB, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xDF, 0xA1, 0xDD, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xF5, 0xCA, 0xE9, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xEC, 0xEE, 0xEE, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF3, 0xF0, 0x3F, 0x3F, 0xDF, 0xBF, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xCB, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xD0, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF4, 0xD2, 0xE0, 0xBA, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xC0, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xCE, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xDC, 0xD2, 0xFD, 0xEA, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xF6, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xCA, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE8, 0xE9, 0x3F, 0x3F, 0xE3, 0xAC, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF3, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xCA, 0xA4, 0x3F, 0x3F, 0xDB, 0xF8, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xC7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0xEB, 0xF0, 0xF1, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xE5, 0xE2, 0x3F, 0x3F, 0xCC, 0xCC, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xCB, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xE3, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xC1, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xD6, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xD0, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xB9, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xE3, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xD3, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xE5, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xE8, 0xB4, 0xEB, 0xC3, 0x3F, 0x3F, 0xEA, 0xAA, /* 0x40-0x43 */ + 0xFA, 0xFC, 0xF5, 0xF6, 0xF0, 0xBC, 0xFD, 0xD4, /* 0x44-0x47 */ + 0xE0, 0xBB, 0xCE, 0xC3, 0x3F, 0x3F, 0xD0, 0xBA, /* 0x48-0x4B */ + 0xF7, 0xBA, 0xD8, 0xF3, 0xF7, 0xCD, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xAE, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xD4, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xE7, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xEC, 0xFD, 0x3F, 0x3F, 0xD2, 0xAE, /* 0x64-0x67 */ + 0xEE, 0xEF, 0xD5, 0xD7, 0xEA, 0xE4, 0xF8, 0xA2, /* 0x68-0x6B */ + 0xCD, 0xEB, 0xD7, 0xBF, 0xFB, 0xB1, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xCD, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xDC, 0xB2, 0xD0, 0xEC, 0xCE, 0xFD, /* 0x74-0x77 */ + 0xEE, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xCC, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xD0, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xF7, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xFC, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xEE, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xB3, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xD8, 0xF4, 0x3F, 0x3F, 0xE9, 0xB7, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCE, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xD9, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xF1, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xD4, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xA7, 0xD5, 0xD2, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD6, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF4, 0xA2, 0x3F, 0x3F, 0xF1, 0xD7, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xD5, 0xD8, 0x3F, 0x3F, 0xF0, 0xBD, /* 0xC8-0xCB */ + 0xD7, 0xD0, 0xD4, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD7, 0xCF, 0xEB, 0xEA, 0xFD, 0xEB, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xDB, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xFC, 0xC5, 0xCB, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xD5, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xF4, 0xC8, 0xE8, 0xEA, 0xF5, 0xF3, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF9, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0xD3, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xD3, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xC2, 0xEF, 0xB7, /* 0x04-0x07 */ + 0xE7, 0xD4, 0x3F, 0x3F, 0xCA, 0xCA, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xFB, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xFA, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xAA, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xF4, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xF7, 0xF7, 0xDC, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xD7, 0xD7, 0xDF, 0xA2, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xBE, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xD3, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xA4, 0xE1, 0xEC, /* 0x34-0x37 */ + 0xCF, 0xE7, 0xF3, 0xCB, 0xED, 0xA9, 0xCA, 0xBE, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xEF, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xCE, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xFB, 0xD0, 0xBB, /* 0x48-0x4B */ + 0xD5, 0xB7, 0xEE, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xF4, 0xA8, 0x3F, 0x3F, 0xDC, 0xF8, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xA7, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xDA, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xE0, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xED, 0xA5, 0xEE, 0xF2, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xF9, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xDC, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xF3, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xF8, 0xF2, 0x3F, 0x3F, 0xF4, 0xF9, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xF1, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xBC, /* 0x84-0x87 */ + 0xDB, 0xF9, 0xD7, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xCB, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF0, 0xA5, 0xCB, 0xFD, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xF4, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xED, /* 0x9C-0x9F */ + 0xCA, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xAB, /* 0xA0-0xA3 */ + 0xD0, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xF0, 0xBE, 0xD2, 0xBD, 0xCC, 0xA4, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xB6, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xCC, 0xCD, 0x3F, 0x3F, 0xDA, 0xFA, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xF6, 0xCF, 0x3F, 0x3F, 0xE9, 0xB8, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xD8, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xCC, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xCD, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xD4, 0xD1, 0xE9, 0xED, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xCA, 0xEB, 0xD9, 0xE2, 0x3F, 0x3F, 0xFD, 0xB2, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xE3, 0xAD, 0xD6, 0xCC, 0xD9, 0xB4, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xA7, 0xEE, 0xD3, /* 0xE0-0xE3 */ + 0xD0, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xB3, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xD5, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xCF, 0xE8, 0x3F, 0x3F, 0xED, 0xC3, 0xD0, 0xB2, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xFE, 0xDA, 0xA8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xF8, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xFD, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xF8, 0xD1, 0x3F, 0x3F, 0xF8, 0xD2, /* 0x0C-0x0F */ + 0xDC, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xDD, 0xE2, 0xFB, 0xF9, 0xDD, 0xC1, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE3, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xED, 0xDD, 0xCE, 0xC4, 0x3F, 0x3F, 0xCB, 0xA1, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xE3, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xDD, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xF9, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xFB, /* 0x3C-0x3F */ + 0xCF, 0xA1, 0xE4, 0xA8, 0x3F, 0x3F, 0xF4, 0xB6, /* 0x40-0x43 */ + 0xEC, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xAE, /* 0x44-0x47 */ + 0xE7, 0xED, 0xFD, 0xC1, 0xDA, 0xE2, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xD8, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xDD, 0xE4, 0xF0, 0xEF, 0xF6, 0xF1, /* 0x50-0x53 */ + 0xFA, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xF5, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xCF, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xDC, 0xD4, 0x3F, 0x3F, 0xDC, 0xA6, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xEF, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xCF, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xE0, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xD6, /* 0x6C-0x6F */ + 0xEC, 0xD4, 0xEA, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xCA, 0xBF, 0xD5, 0xB0, 0x3F, 0x3F, 0xCF, 0xE9, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xF1, 0xED, 0x3F, 0x3F, 0xCC, 0xCF, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xE4, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xED, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xD7, 0xD8, 0x3F, 0x3F, 0xFD, 0xA7, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xAB, /* 0x9C-0x9F */ + 0xF6, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xCF, 0xF0, 0xF9, 0xBD, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xE6, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xDB, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xD1, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xE9, 0xD1, 0xF3, 0xA9, 0xD0, 0xE0, 0xE9, 0xD2, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xDA, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xE2, 0xD2, 0x3F, 0x3F, 0xF6, 0xA2, 0xE1, 0xF4, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xE4, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xE7, 0xD5, 0xF5, 0xBF, 0xCF, 0xA2, /* 0xE0-0xE3 */ + 0xCD, 0xAF, 0xCF, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xCD, 0xB0, 0xF1, 0xFE, 0xD0, 0xA3, /* 0xE8-0xEB */ + 0xE1, 0xAF, 0xF8, 0xA3, 0x3F, 0x3F, 0xCA, 0xA6, /* 0xEC-0xEF */ + 0xF7, 0xBB, 0xF2, 0xEA, 0xDE, 0xC8, 0xE9, 0xD3, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xDE, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_54[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xDE, /* 0x00-0x03 */ + 0xCA, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xF9, 0xEA, 0xD1, 0xCE, 0xEE, 0xD4, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xD4, 0xD2, 0xD9, 0xA3, 0xFD, 0xA8, 0xD7, 0xD9, /* 0x0C-0x0F */ + 0xF7, 0xCE, 0xFA, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xD6, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xD7, 0xF0, 0x3F, 0x3F, 0xEB, 0xE1, /* 0x1C-0x1F */ + 0xF8, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xFA, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xDD, 0xC3, 0x3F, 0x3F, 0xF9, 0xDF, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xEF, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xFD, 0xE5, 0xF6, 0xA3, 0x3F, 0x3F, 0xD9, 0xFC, /* 0x38-0x3B */ + 0xFD, 0xA9, 0x3F, 0x3F, 0xE7, 0xEE, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xE5, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xEF, 0xD0, 0x3F, 0x3F, 0xCD, 0xB1, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xF7, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF1, 0xB2, 0x3F, 0x3F, 0xF1, 0xB1, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xCD, 0xB2, 0x3F, 0x3F, 0xDA, 0xAB, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xCA, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xE2, /* 0x78-0x7B */ + 0xFB, 0xBC, 0xD9, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xEE, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD3, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xFB, 0xFA, 0x3F, 0x3F, 0xCF, 0xA4, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xDC, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xF6, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xED, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA1, /* 0xA8-0xAB */ + 0xCE, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xA6, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xF9, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xEC, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xE4, 0xEE, 0xF9, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xFB, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xF9, 0xEB, 0xEE, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xEA, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xCA, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF4, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xCD, 0xD6, 0xFC, 0xF6, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xC9, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD4, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xF8, 0xA6, 0x3F, 0x3F, 0xDE, 0xCA, 0xF2, 0xC6, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xDA, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD3, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xD8, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xE6, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF3, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xE4, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xE4, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xF6, 0xF2, 0x3F, 0x3F, 0xDF, 0xC2, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xFD, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xF6, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xBA, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xAF, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xE1, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xF0, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xCB, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xE0, 0xBC, 0x3F, 0x3F, 0xF4, 0xCA, 0xD4, 0xFA, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xFD, 0xAA, 0xF9, 0xE2, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xF4, 0xB7, 0xFD, 0xC2, 0xFC, 0xB0, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xFD, 0xEC, 0xCA, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xBD, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xEA, 0xE7, 0xDF, 0xC3, 0xD1, 0xD2, /* 0xA8-0xAB */ + 0xCE, 0xE2, 0x3F, 0x3F, 0xD3, 0xA4, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xFD, 0xAB, 0x3F, 0x3F, 0xDF, 0xE0, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xF2, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF0, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD0, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xAA, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xCB, /* 0xE0-0xE3 */ + 0xF6, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE1, 0xF5, 0xF1, 0xB3, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xA3, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xCA, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xCF, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xC4, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xB0, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xBF, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xF6, 0xA4, 0x3F, 0x3F, 0xE3, 0xB6, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xC6, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xD0, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xED, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xDD, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xF7, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xE6, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xDE, 0xAD, 0x3F, 0x3F, 0xFA, 0xBF, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xE5, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xED, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xA5, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xFD, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xF5, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xF6, 0xDE, 0xCC, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xDE, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xEC, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xCD, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xD6, 0xB7, 0xCD, 0xB3, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD5, /* 0x00-0x03 */ + 0xE5, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xCF, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xD0, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xEA, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xAE, 0xEA, 0xAD, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xF1, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xD3, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xCF, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xEE, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD0, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xF2, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xF0, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xF2, 0xA3, 0x3F, 0x3F, 0xF7, 0xF8, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xB3, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xA9, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xD3, 0xBB, 0xCA, 0xEC, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF1, 0xA6, 0xCB, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xF7, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xCD, 0xDE, 0x3F, 0x3F, 0xF7, 0xA4, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xC0, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xDD, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xCC, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xCF, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xF6, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xF7, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD3, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xFE, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xA7, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xEB, 0xD9, 0x3F, 0x3F, 0xCF, 0xA7, 0xEA, 0xAF, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xEF, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xB9, /* 0xC4-0xC7 */ + 0xF1, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xD8, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xF2, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xB4, /* 0xDC-0xDF */ + 0xDC, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xF3, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xE3, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xFB, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xDB, 0xC6, 0xD0, 0xF1, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xD0, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0xCF, 0xDC, 0x3F, 0x3F, 0xD3, 0xD1, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xCC, 0xB1, 0xF7, 0xD8, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xCB, 0xA8, 0xEB, 0xBC, 0xE4, 0xBE, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xDC, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xDC, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xF0, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xC0, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xED, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xEB, /* 0x2C-0x2F */ + 0xE5, 0xE8, 0xDC, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xED, 0xDE, 0xD3, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xF7, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xD4, 0xE7, 0xAB, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xC3, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xE1, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xF7, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xF3, /* 0x54-0x57 */ + 0xD3, 0xD2, 0x3F, 0x3F, 0xF5, 0xC0, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xDD, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xEE, 0xF3, 0xE7, 0xF1, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xFD, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xF2, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xF3, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xEE, 0xF4, 0x3F, 0x3F, 0xE2, 0xD3, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xD1, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xDF, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE9, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xD7, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xF5, 0xCD, 0x3F, 0x3F, 0xF1, 0xF2, 0xFA, 0xC7, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xD9, 0xF8, 0xD4, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xE5, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xC5, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF2, 0xED, 0xDF, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xCB, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xDB, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xE8, 0xB5, 0x3F, 0x3F, 0xD3, 0xA6, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xB5, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xF9, 0xC9, 0x3F, 0x3F, 0xE4, 0xE2, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xFB, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xD7, 0xA4, 0xCE, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xD5, 0xD6, 0xE6, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xE5, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xCD, /* 0xE8-0xEB */ + 0xEC, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xE0, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xEC, 0xEC, 0xFB, 0xBE, 0xDF, 0xEB, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE1, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xBE, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xD0, 0xF3, 0xE0, 0xAA, 0xE8, 0xE2, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE2, 0xD4, 0xD2, 0xFD, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xE5, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xD3, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xDE, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xF4, 0xB8, 0xF7, 0xBC, 0xDC, 0xFD, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xE8, 0xEC, 0xE4, 0xE7, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xE3, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xA8, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xF1, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE5, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xF4, /* 0x44-0x47 */ + 0xD2, 0xAF, 0xDC, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xA5, 0xF1, 0xB4, /* 0x4C-0x4F */ + 0xFC, 0xB1, 0xCC, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xDD, 0xC6, 0xFA, 0xD1, 0x3F, 0x3F, 0xF7, 0xDF, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xA8, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xEE, 0xF5, 0x3F, 0x3F, 0xDE, 0xCE, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF3, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xAC, 0xEB, 0xC4, /* 0x68-0x6B */ + 0xED, 0xE1, 0xE0, 0xAB, 0xDD, 0xC7, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xB3, /* 0x70-0x73 */ + 0xD2, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xCA, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xFB, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xFD, 0xDD, 0xE5, /* 0x80-0x83 */ + 0xD8, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xF4, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xF5, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xED, 0xD0, 0xD2, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xD9, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xF6, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xDB, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xF7, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xD8, 0xD9, 0x3F, 0x3F, 0xF4, 0xA3, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xDD, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xD1, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xB5, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xED, 0xAB, 0x3F, 0x3F, 0xE3, 0xB7, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xEE, 0xBB, 0xCD, 0xB4, 0x3F, 0x3F, 0xE0, 0xF3, /* 0xD0-0xD3 */ + 0xEA, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xEC, 0xF5, 0xE8, 0xEE, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xCB, 0xA9, 0xF1, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xCD, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xEC, 0xA9, 0x3F, 0x3F, 0xF2, 0xEB, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xFD, 0xEF, 0x3F, 0x3F, 0xF9, 0xF3, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xE6, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xD8, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xAC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0x3F, 0x3F, 0xEA, 0xCE, 0x3F, 0x3F, 0xE8, 0xDF, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xDE, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xD2, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF4, /* 0x18-0x1B */ + 0xD1, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xC2, /* 0x1C-0x1F */ + 0xE3, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE4, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xD8, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xA5, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xF3, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xD7, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xE8, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xE8, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xE6, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xE6, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xFE, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xDA, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xAC, 0xEA, 0xB0, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xE3, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xCA, 0xAA, 0xE1, 0xF9, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xEA, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF2, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xFA, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xEE, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xF4, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xD2, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xFB, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xFD, 0xF0, 0x3F, 0x3F, 0xE0, 0xBD, /* 0x08-0x0B */ + 0xCE, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xC6, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xAE, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xDF, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xBE, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xED, 0xAD, 0xFA, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xCD, 0xEE, 0xED, 0xA6, 0x3F, 0x3F, 0xED, 0xAE, /* 0x54-0x57 */ + 0xF0, 0xED, 0x3F, 0x3F, 0xDD, 0xA1, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xED, 0xAF, 0xFC, 0xF8, 0x3F, 0x3F, 0xD8, 0xEB, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xF9, /* 0x60-0x63 */ + 0xCD, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xFA, 0xA9, 0x3F, 0x3F, 0xE1, 0xDD, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xE2, 0xD5, 0xED, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xDD, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xF9, 0xCA, 0x3F, 0x3F, 0xEA, 0xE8, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xE5, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xD3, 0xEB, 0x3F, 0x3F, 0xE9, 0xD4, /* 0x84-0x87 */ + 0xE1, 0xFA, 0xE4, 0xCC, 0x3F, 0x3F, 0xE1, 0xE4, /* 0x88-0x8B */ + 0xE8, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xDB, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xD5, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xF7, 0xB5, 0xFC, 0xF3, 0xF0, 0xF3, /* 0x94-0x97 */ + 0xCE, 0xAF, 0xF1, 0xB5, 0xEF, 0xD2, 0xE8, 0xC8, /* 0x98-0x9B */ + 0xEB, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xD4, 0xE0, 0xBE, /* 0xA0-0xA3 */ + 0xE3, 0xF8, 0xEA, 0xE9, 0xFC, 0xB2, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE0, 0xF4, 0x3F, 0x3F, 0xCF, 0xE0, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xEE, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xAA, /* 0xB0-0xB3 */ + 0xE6, 0xC3, 0xE1, 0xB2, 0xCA, 0xAB, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xE3, 0xE4, 0xE9, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xD6, /* 0xBC-0xBF */ + 0xF3, 0xF2, 0x3F, 0x3F, 0xEE, 0xD6, 0xEA, 0xB2, /* 0xC0-0xC3 */ + 0xD0, 0xF6, 0xEC, 0xD9, 0xDA, 0xCB, 0xCF, 0xA8, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xDD, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xD8, 0xDB, 0x3F, 0x3F, 0xF9, 0xCE, 0xE9, 0xD5, /* 0xD0-0xD3 */ + 0xE3, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xBC, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xAC, 0xF3, 0xCC, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xCD, 0xFB, 0xF6, 0xD6, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xE7, 0xF5, 0xE8, 0xEF, 0xE3, 0xF9, 0xD2, 0xBB, /* 0xE4-0xE7 */ + 0xF3, 0xF3, 0xE3, 0xFB, 0x3F, 0x3F, 0xDE, 0xD0, /* 0xE8-0xEB */ + 0xCE, 0xB0, 0x3F, 0x3F, 0xD6, 0xF7, 0xF1, 0xD9, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xF5, 0xC1, 0xDC, 0xC4, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xF5, 0xBB, 0x3F, 0x3F, 0xDE, 0xD1, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x3F, 0x3F, 0xDC, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xDE, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xE2, /* 0x04-0x07 */ + 0xEE, 0xF6, 0xEA, 0xCF, 0xF0, 0xEE, 0xE3, 0xFC, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xD3, 0xDF, 0xD3, 0xF4, 0xE1, 0xB3, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xE1, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xD3, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xDF, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xE9, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xDB, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF6, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xE3, 0xB9, 0xEB, 0xC5, 0xF4, 0xA9, 0xCD, 0xB6, /* 0x38-0x3B */ + 0xD2, 0xF9, 0x3F, 0x3F, 0xDA, 0xAD, 0xD2, 0xE3, /* 0x3C-0x3F */ + 0xCF, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCB, 0xDC, 0xCC, 0xFA, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xCF, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xA9, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xE3, 0xBB, 0xE3, 0xBA, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xE0, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xEE, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB3, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xD3, 0xF5, 0x3F, 0x3F, 0xD7, 0xA6, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xF6, 0xB5, 0xD7, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE1, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xEA, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xDF, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xFD, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xD0, 0xF7, 0xED, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xCB, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xE4, 0xDB, 0x3F, 0x3F, 0xE1, 0xFB, /* 0xA8-0xAB */ + 0xCB, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xD3, 0xE0, 0x3F, 0x3F, 0xE4, 0xBF, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xFB, 0xC0, 0x3F, 0x3F, 0xDA, 0xBE, /* 0xB4-0xB7 */ + 0xE4, 0xCD, 0x3F, 0x3F, 0xD6, 0xB9, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xC0, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xE1, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xF6, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xDF, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xE4, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xE7, /* 0xEC-0xEF */ + 0xDC, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xFA, 0xD6, 0x3F, 0x3F, 0xD3, 0xF6, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xDA, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xFA, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xFD, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xD5, 0xCF, 0xD0, 0xF8, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xCD, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xF5, 0xCB, 0x3F, 0x3F, 0xE4, 0xF0, 0xCB, 0xAB, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xD7, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xFE, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xDD, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xAE, /* 0x48-0x4B */ + 0xCA, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xD5, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xE3, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE8, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xAB, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xA9, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xF7, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xD4, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCE, 0xE4, 0x3F, 0x3F, 0xE8, 0xF2, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xF5, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xE7, 0xAE, 0x3F, 0x3F, 0xD6, 0xBA, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xDF, 0xEC, 0xE4, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xE8, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xB5, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xDC, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF4, 0xB9, 0xF1, 0xB6, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xE2, 0xDE, 0xE1, 0xB5, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xCD, 0xEF, 0xF1, 0xA7, 0xCE, 0xE5, /* 0xE4-0xE7 */ + 0xCB, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xE3, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xAC, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xD0, 0xF9, 0xEC, 0xAB, 0xDE, 0xD3, /* 0xF0-0xF3 */ + 0xF7, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xF5, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE1, 0xDE, 0xCB, 0xEE, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xBC, 0xF8, 0xD6, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xEE, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xFD, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xF7, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xDE, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF2, 0xED, 0x3F, 0x3F, 0xDB, 0xD9, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xF0, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE1, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xD4, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xE0, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xE3, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xE1, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xDF, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xD9, 0xB6, 0x3F, 0x3F, 0xFD, 0xAC, /* 0x3C-0x3F */ + 0xEF, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE4, 0xC1, 0xF8, 0xEB, 0x3F, 0x3F, 0xDB, 0xAC, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xFC, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xD8, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xBA, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xDB, 0xDF, 0xD3, 0xD3, 0xF8, 0xC7, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xCE, 0xF8, 0xC1, /* 0x70-0x73 */ + 0xD2, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB4, /* 0x74-0x77 */ + 0xFA, 0xB9, 0xCA, 0xCF, 0x3F, 0x3F, 0xFC, 0xB3, /* 0x78-0x7B */ + 0xEA, 0xEA, 0xEA, 0xEB, 0xD0, 0xFA, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xED, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xE7, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xC9, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xED, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xEE, 0xBC, 0x3F, 0x3F, 0xEF, 0xC1, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xD2, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xDD, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xDF, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xF8, 0xF1, 0xA8, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xB7, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xEF, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xE4, 0xDD, 0xDF, 0xEE, 0xCB, 0xAC, /* 0xB4-0xB7 */ + 0xE9, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xEC, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xCB, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xF9, 0xBF, 0xD6, 0xAF, 0xD5, 0xC6, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xCF, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xA9, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xF8, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xB7, 0xEE, 0xF8, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xD9, /* 0xDC-0xDF */ + 0xF3, 0xDF, 0x3F, 0x3F, 0xF8, 0xC8, 0xCE, 0xC6, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xD5, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xE6, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xC5, 0xEF, 0xD5, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xEF, 0xFC, 0xDF, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0x3F, 0x3F, 0xDC, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD6, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xC9, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xD2, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xE3, 0xBD, 0x3F, 0x3F, 0xCF, 0xE1, /* 0x10-0x13 */ + 0xF0, 0xC0, 0xEC, 0xDA, 0x3F, 0x3F, 0xDD, 0xD7, /* 0x14-0x17 */ + 0xFB, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xAC, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xA9, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xD7, 0xFB, 0xC1, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xD2, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xE5, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xED, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xAD, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xF9, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xF7, 0xA5, 0x3F, 0x3F, 0xCB, 0xAE, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xDA, 0xAF, 0x3F, 0x3F, 0xD8, 0xB6, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xA7, 0xFB, 0xB2, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xFD, 0xC4, 0x3F, 0x3F, 0xEC, 0xAD, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xA1, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE9, 0xE9, 0xEE, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xF3, 0xF4, 0xF8, 0xF3, 0xF0, 0xC1, /* 0x68-0x6B */ + 0xDE, 0xAF, 0xF8, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xF3, 0xE0, 0xE7, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xAD, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xE6, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xF9, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xD8, /* 0x7C-0x7F */ + + 0xE8, 0xD9, 0xEF, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xD3, 0xE2, 0x3F, 0x3F, 0xE2, 0xDF, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xE0, 0xD7, 0xC8, /* 0x88-0x8B */ + 0xFD, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xDF, 0xEF, 0xCC, 0xD3, 0xD3, 0xF9, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xF0, /* 0x94-0x97 */ + 0xDB, 0xC7, 0xDE, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xF4, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xD5, 0xD0, 0xE5, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xFC, 0xC7, 0xDC, 0xD6, 0xE2, 0xE0, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xB0, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF3, 0xA3, 0x3F, 0x3F, 0xD3, 0xEC, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xF4, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xFD, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xFD, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xF9, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xD0, 0xFB, 0xEC, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xBC, 0xF2, 0xA4, /* 0xD4-0xD7 */ + 0xD8, 0xCE, 0xD8, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xF5, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xE1, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xD2, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xFB, 0xEC, 0x3F, 0x3F, 0xDD, 0xC8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xE8, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xC1, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD7, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xD6, 0xBB, 0xDE, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xF7, 0xBD, 0xEC, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xD0, 0xE1, 0x3F, 0x3F, 0xE0, 0xF5, /* 0x24-0x27 */ + 0xEA, 0xB3, 0x3F, 0x3F, 0xCE, 0xD6, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xA5, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xEC, 0xF6, 0xE2, 0xE1, 0xE3, 0xBE, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xFC, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xCD, 0xF0, 0x3F, 0x3F, 0xF9, 0xF6, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xDF, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xE5, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xCE, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xE1, 0xED, 0xB0, /* 0x60-0x63 */ + 0xFD, 0xD1, 0xF6, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF9, 0xCF, 0xEB, 0xDA, 0xCA, 0xC1, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xD2, 0xB8, 0xCD, 0xF1, 0x3F, 0x3F, 0xE3, 0xD3, /* 0x6C-0x6F */ + 0xFD, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xE6, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE3, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xF0, 0xAA, 0xF9, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xFC, 0xE2, 0x3F, 0x3F, 0xF8, 0xA7, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xE5, 0xEE, 0xF9, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF6, /* 0x9C-0x9F */ + 0xEA, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xB4, /* 0xA0-0xA3 */ + 0xF5, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xDC, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xF0, 0xF5, 0x3F, 0x3F, 0xDD, 0xE8, 0xD3, 0xED, /* 0xB0-0xB3 */ + 0xF5, 0xFC, 0x3F, 0x3F, 0xDA, 0xBF, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xCC, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xD3, 0xFA, 0xF4, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xEF, 0xD7, 0x3F, 0x3F, 0xD4, 0xC3, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xFB, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xED, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xE0, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xEE, /* 0xDC-0xDF */ + 0xFB, 0xB3, 0xE4, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xF6, 0xE7, 0xD2, 0xDD, 0x3F, 0x3F, 0xDF, 0xCC, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xC9, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xE5, 0xA9, 0xE0, 0xF6, 0xF6, 0xB3, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_61[512] = { + 0x3F, 0x3F, 0xE1, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xF0, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xEA, 0xEF, 0xEA, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xDA, 0xC0, 0xF8, 0xB4, 0xEB, 0xF2, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xE4, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xD7, 0xE4, 0xF1, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xEF, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xD7, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xFC, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xF3, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xC4, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xE3, 0xE5, 0x3F, 0x3F, 0xCB, 0xC5, 0xEA, 0xB4, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xBD, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xD7, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xDB, /* 0x44-0x47 */ + 0xED, 0xB1, 0x3F, 0x3F, 0xCC, 0xC3, 0xF7, 0xBE, /* 0x48-0x4B */ + 0xFC, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xF4, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xD9, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xF3, 0xD3, 0xF3, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF7, 0xE4, 0x3F, 0x3F, 0xF7, 0xD1, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xB7, 0xCE, 0xB1, /* 0x60-0x63 */ + 0xCA, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xB4, /* 0x64-0x67 */ + 0xCB, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xF6, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xE7, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xEA, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xD4, 0xCB, 0xAF, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xF4, 0xAA, 0xE9, 0xAF, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xF5, 0xC3, 0xE9, 0xD8, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xE9, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xF3, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xD5, 0xFB, 0xDE, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xF4, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xFD, 0xF3, 0xFD, 0xF2, 0xF7, 0xA6, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xDD, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xD3, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xCC, 0xA8, 0x3F, 0x3F, 0xDA, 0xC1, /* 0xA8-0xAB */ + 0xCC, 0xD5, 0x3F, 0x3F, 0xD9, 0xE4, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xCA, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE3, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xBC, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xF0, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xC4, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xD0, /* 0xC4-0xC7 */ + 0xFA, 0xAB, 0xEB, 0xEB, 0xE7, 0xF8, 0xD9, 0xE5, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xD7, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xA4, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xFB, 0xFC, 0xE3, /* 0xF4-0xF7 */ + 0xFA, 0xD8, 0x3F, 0x3F, 0xF3, 0xD5, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xCF, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0xD5, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xD4, /* 0x04-0x07 */ + 0xCD, 0xFC, 0x3F, 0x3F, 0xD9, 0xE6, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xE2, 0xF9, 0xE2, 0xA1, 0xEB, 0xD4, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xE0, 0xF7, 0xE4, 0xB2, 0xCC, 0xFC, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xE4, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xAB, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xBD, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xCA, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xB8, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xC0, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xEE, 0xFA, 0xFD, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xD3, 0xE3, 0x3F, 0x3F, 0xFB, 0xC2, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xE8, 0xDB, 0xAE, /* 0x3C-0x3F */ + 0xE1, 0xB6, 0xF8, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xBF, /* 0x44-0x47 */ + 0xFB, 0xC3, 0xDD, 0xEA, 0x3F, 0x3F, 0xE2, 0xA2, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xEE, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xE8, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xF6, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xCA, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xD0, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xA6, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xDD, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xE4, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xAF, /* 0x7C-0x7F */ + + 0xD0, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xF4, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xCC, 0xBC, 0xF7, 0xEA, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xE5, 0xE4, 0xDF, 0xF1, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xF7, 0xE1, 0x3F, 0x3F, 0xF9, 0xF7, /* 0x94-0x97 */ + 0xEF, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD8, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xA9, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xF8, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xEE, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xD8, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xE4, 0xE3, 0xF5, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xD9, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xE7, /* 0xC4-0xC7 */ + 0xD2, 0xB9, 0xD5, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xDA, 0xE5, 0xDA, 0xD0, 0x3F, 0x3F, 0xD1, 0xD9, /* 0xCC-0xCF */ + 0xCE, 0xD8, 0x3F, 0x3F, 0xCB, 0xDE, 0xF4, 0xAC, /* 0xD0-0xD3 */ + 0xDA, 0xFB, 0x3F, 0x3F, 0xF6, 0xE9, 0xE8, 0xF3, /* 0xD4-0xD7 */ + 0xCF, 0xAC, 0xF0, 0xF0, 0x3F, 0x3F, 0xF4, 0xFD, /* 0xD8-0xDB */ + 0xDB, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xCE, 0xC0, 0xE3, 0xD4, 0xD1, 0xCF, 0xF1, 0xF5, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xCD, 0xF2, 0x3F, 0x3F, 0xCF, 0xEB, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xB8, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xA6, 0xD1, 0xDA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0x3F, 0x3F, 0xF2, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA6, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xE4, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xD3, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xA9, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xC9, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xD8, 0xE6, 0xC9, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xD8, 0xB8, 0xFA, 0xF3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF3, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xF8, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xF3, /* 0x4C-0x4F */ + 0xE6, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xF8, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xE9, /* 0x64-0x67 */ + 0xDE, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xDF, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xEC, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xDF, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xF4, 0xD2, 0xBA, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xF2, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xB7, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xE2, 0xA3, 0xD3, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xED, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xC9, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xFA, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCF, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xD0, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xD5, 0xD3, 0xF3, 0xF5, 0xF7, 0xAE, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xEF, 0xC8, 0x3F, 0x3F, 0xCD, 0xF3, /* 0xA4-0xA7 */ + 0xF5, 0xCF, 0xE5, 0xF3, 0xF0, 0xC2, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCA, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xEA, 0xF1, 0x3F, 0x3F, 0xD0, 0xA6, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xDA, /* 0xCC-0xCF */ + 0xF0, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xE7, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xC0, 0xFC, 0xB5, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xE4, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xCC, 0xA9, 0xFD, 0xC6, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xEA, 0xB5, 0x3F, 0x3F, 0xE5, 0xAA, 0xDF, 0xBA, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_64[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE1, 0xDF, 0x3F, 0x3F, 0xDA, 0xD1, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xE1, 0xB8, 0x3F, 0x3F, 0xE8, 0xF4, 0xD3, 0xFD, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xE2, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xCA, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xDA, 0xE6, 0xF7, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xCD, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xB6, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xEE, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xF5, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xD8, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA7, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xD9, 0xB8, 0xD9, 0xB9, 0xEF, 0xC9, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD6, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF7, 0xCB, 0xDF, 0xAE, 0xE8, 0xF5, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xB5, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xD5, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xF4, 0xCC, 0xDA, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xE8, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xF7, 0xEB, 0xF5, 0xC9, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xF3, 0xBC, 0x3F, 0x3F, 0xDA, 0xD2, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xB5, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xE8, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xD6, 0xCF, 0xF4, 0xBA, 0x3F, 0x3F, 0xF7, 0xC9, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xAA, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xF0, 0xC3, 0xCC, 0xD6, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xD3, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xD3, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xDB, 0xFB, 0x3F, 0x3F, 0xCB, 0xE0, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xD3, 0xE4, 0xF6, 0xF7, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xD5, 0xBA, 0xF3, 0xCD, 0xCB, 0xE1, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xEB, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xAD, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xFC, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xEC, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xF6, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0xDA, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xF7, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xE5, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xE0, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xFD, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xE6, 0xFC, 0xAB, /* 0x28-0x2B */ + 0xD5, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA8, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xA5, 0xCD, 0xB9, /* 0x34-0x37 */ + 0xEA, 0xF2, 0xCB, 0xC7, 0x3F, 0x3F, 0xCD, 0xF4, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xAF, 0xEF, 0xD9, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCD, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xFC, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xDF, 0xF3, 0xCE, 0xE7, 0xDA, 0xC2, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xCF, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF9, 0xF8, 0xA8, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xE2, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xF2, 0xDF, 0xA4, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xC4, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xCC, 0xD7, 0xE5, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xBB, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xEF, 0xDA, 0xEE, 0xD8, 0x3F, 0x3F, 0xDD, 0xA7, /* 0x74-0x77 */ + 0xE2, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xC0, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xB0, 0xF8, 0xCA, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xFC, 0xFA, 0x3F, 0x3F, 0xD9, 0xFE, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xDE, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xDD, 0xEC, 0xDA, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xE0, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xD6, 0xF9, 0x3F, 0x3F, 0xCD, 0xD7, /* 0x98-0x9B */ + 0xDE, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xF8, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xE4, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xD0, 0xC5, 0xF4, 0xAE, 0x3F, 0x3F, 0xDD, 0xA8, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xC5, /* 0xA8-0xAB */ + 0xF3, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xD9, /* 0xAC-0xAF */ + 0xE3, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xA8, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xDB, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xE5, 0xDA, 0xE3, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xDB, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xD5, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xC1, /* 0xC8-0xCB */ + 0xEF, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xE9, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xB2, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xFD, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xD9, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xFE, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xEC, 0xED, 0xD3, 0xA9, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF2, 0xA9, 0xF0, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xE2, 0xE2, 0xE9, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xF9, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xE9, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xDA, 0xDA, 0xC3, /* 0xF8-0xFB */ + 0xDA, 0xC4, 0xD4, 0xC5, 0x3F, 0x3F, 0xE7, 0xFA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xE0, 0xE3, 0xB0, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xDB, 0xB2, 0xFB, 0xC4, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xF3, 0xE3, 0x3F, 0x3F, 0xD9, 0xA5, 0xFB, 0xE7, /* 0x0C-0x0F */ + 0xDD, 0xCB, 0xD0, 0xD4, 0x3F, 0x3F, 0xE6, 0xB6, /* 0x10-0x13 */ + 0xE0, 0xAE, 0xFD, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB5, 0xE0, 0xF8, /* 0x1C-0x1F */ + 0xE7, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xF5, 0xF0, 0x3F, 0x3F, 0xD8, 0xDC, /* 0x24-0x27 */ + 0xED, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xE1, 0xB9, 0x3F, 0x3F, 0xE3, 0xC0, /* 0x2C-0x2F */ + 0xF9, 0xC0, 0xE9, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xD9, 0xDB, 0x3F, 0x3F, 0xF3, 0xE4, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB6, 0xE4, 0xE9, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xF0, 0xC5, 0xE3, 0xC1, 0xFC, 0xCC, /* 0x40-0x43 */ + 0xFC, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF2, 0xCB, 0x3F, 0x3F, 0xF2, 0xCC, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xCF, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xF1, 0xDB, 0x3F, 0x3F, 0xFA, 0xD9, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF1, 0xB8, 0xFD, 0xF5, 0xE0, 0xF9, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xE7, 0xFB, 0xFC, 0xB7, 0xFC, 0xE4, 0xFB, 0xC5, /* 0x64-0x67 */ + 0xE3, 0xE7, 0xD8, 0xB9, 0x3F, 0x3F, 0xF6, 0xF8, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xC5, 0xCC, 0xD8, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xAF, /* 0x70-0x73 */ + 0xF4, 0xE7, 0x3F, 0x3F, 0xEF, 0xDC, 0xCF, 0xFC, /* 0x74-0x77 */ + 0xEF, 0xDD, 0x3F, 0x3F, 0xF2, 0xAA, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xFD, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xAC, /* 0x84-0x87 */ + 0xFD, 0xBB, 0xFD, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xB2, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xEA, 0xD1, 0xDF, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xEC, 0xE4, 0xDE, /* 0x94-0x97 */ + 0xE5, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xD9, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCD, 0xBC, 0x3F, 0x3F, 0xF3, 0xE5, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xD5, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xBA, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xE7, 0xFB, 0xB5, /* 0xB0-0xB3 */ + 0xF8, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE0, 0xE7, 0x3F, 0x3F, 0xCC, 0xD9, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xC6, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xE7, 0xA5, 0x3F, 0x3F, 0xD5, 0xF5, 0xD3, 0xBE, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xFC, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xF2, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xDF, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xE8, 0xF8, 0xF8, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xCE, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xF6, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xE8, 0xD8, 0x3F, 0x3F, 0xCD, 0xD8, 0xE7, 0xD6, /* 0xF0-0xF3 */ + 0xCC, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xE3, /* 0xF4-0xF7 */ + 0xDF, 0xF6, 0xF0, 0xC7, 0xF0, 0xC6, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xD8, 0xBA, 0x3F, 0x3F, 0xF1, 0xF4, 0xF4, 0xF0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0xF5, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xE5, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xEA, 0xC5, 0xEA, 0xF3, 0x3F, 0x3F, 0xDD, 0xDB, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xDC, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xDE, 0xFD, 0xF2, 0xF9, 0x3F, 0x3F, 0xD5, 0xC7, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xD0, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xF0, 0xC8, 0xD1, 0xA1, 0xD1, 0xA2, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xD4, 0xD6, 0xE8, /* 0x24-0x27 */ + 0xD9, 0xCA, 0x3F, 0x3F, 0xDA, 0xB1, 0xD8, 0xC7, /* 0x28-0x2B */ + 0xDC, 0xE2, 0xF3, 0xCE, 0xF5, 0xF4, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF1, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xDA, 0xD3, 0x3F, 0x3F, 0xF6, 0xEA, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xF5, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xFD, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xD2, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xDF, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xDD, 0xFA, 0xBA, /* 0x4C-0x4F */ + 0xEE, 0xA7, 0xF5, 0xBD, 0x3F, 0x3F, 0xF8, 0xF5, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xE8, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xD4, 0xE1, 0x3F, 0x3F, 0xD1, 0xA3, 0xE1, 0xD6, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xF9, 0xF8, 0x3F, 0x3F, 0xDB, 0xCA, /* 0x6C-0x6F */ + 0xCB, 0xF9, 0xD4, 0xD4, 0x3F, 0x3F, 0xD9, 0xDC, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xEE, 0xBE, 0x3F, 0x3F, 0xF7, 0xED, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xEE, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xE6, 0xF7, 0xF9, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xED, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE8, 0xDB, 0x3F, 0x3F, 0xDB, 0xB3, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xF7, /* 0x8C-0x8F */ + 0xE0, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xE2, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xF6, 0xD7, 0x3F, 0x3F, 0xD7, 0xF9, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xDD, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xCD, 0xFD, 0xF2, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xBD, /* 0xAC-0xAF */ + 0xF8, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xAC, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xAD, 0xCA, 0xAE, /* 0xB4-0xB7 */ + 0xCF, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xC2, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xDC, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xDA, /* 0xCC-0xCF */ + 0xD9, 0xBB, 0xCA, 0xF3, 0xF6, 0xD3, 0xE6, 0xF8, /* 0xD0-0xD3 */ + 0xEA, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xF6, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF6, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xCF, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xCA, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xAF, /* 0xEC-0xEF */ + 0xD2, 0xB0, 0xF1, 0xBA, 0x3F, 0x3F, 0xD7, 0xB3, /* 0xF0-0xF3 */ + 0xE3, 0xC3, 0xF3, 0xFD, 0xDE, 0xDA, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xDB, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xDE, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xE3, 0xEE, 0xFB, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xF7, 0xD7, 0xCA, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xCE, 0xE8, 0xDB, 0xDB, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xBB, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xF1, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xFA, 0xB7, 0xD0, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xCC, 0xAB, 0xEE, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xCB, 0xFA, 0xF9, 0xF9, 0xCC, 0xFD, 0xD3, 0xFE, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xE4, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xEE, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xD4, 0xD5, 0xDF, 0xCD, 0x3F, 0x3F, 0xFC, 0xB8, /* 0x50-0x53 */ + 0xD1, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xF2, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xD2, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xD4, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xD5, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xD8, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xD9, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xA9, /* 0x90-0x93 */ + 0xF6, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xDB, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xF0, 0xC9, 0x3F, 0x3F, 0xFC, 0xFC, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xE8, 0xC9, 0xF4, 0xFE, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xFC, /* 0xA4-0xA7 */ + 0xD7, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xDE, 0xDC, 0x3F, 0x3F, 0xF0, 0xAC, /* 0xAC-0xAF */ + 0xCC, 0xFE, 0xCD, 0xE1, 0x3F, 0x3F, 0xE1, 0xBA, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xDB, 0xEF, 0xDA, 0xB2, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xD1, 0xA5, 0xDC, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xD8, 0xF6, 0x3F, 0x3F, 0xD1, 0xA4, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xCD, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xEA, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xF0, 0xF7, 0x3F, 0x3F, 0xF0, 0xCA, /* 0xD4-0xD7 */ + 0xD0, 0xBE, 0x3F, 0x3F, 0xDD, 0xDC, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xD6, /* 0xDC-0xDF */ + 0xD3, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xD0, /* 0xE4-0xE7 */ + 0xCD, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xB5, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xF8, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xD4, 0xA1, 0xCE, 0xB2, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_69[512] = { + 0xE8, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xEB, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE3, 0xD5, 0xF5, 0xD0, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xA1, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xA7, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xE5, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xE6, 0xCB, 0x3F, 0x3F, 0xF5, 0xF1, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xC5, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xA3, /* 0x50-0x53 */ + 0xE0, 0xDB, 0xF6, 0xEB, 0x3F, 0x3F, 0xCB, 0xF1, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xD9, 0xEA, 0xF5, 0xA2, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xD1, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xD1, 0xF8, 0xEA, 0xF8, 0xEA, 0xF9, 0xDA, 0xB3, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xEF, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xEF, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xE5, 0xF6, 0xEE, 0xBF, 0xE2, 0xE4, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD0, 0xBF, 0x3F, 0x3F, 0xFA, 0xAC, /* 0x74-0x77 */ + 0xF5, 0xD1, 0xE7, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xE9, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xCE, /* 0x98-0x9B */ + 0xDB, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xFC, 0xCE, 0x3F, 0x3F, 0xDD, 0xEE, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xB4, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xD7, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xB4, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xCD, 0xBE, 0x3F, 0x3F, 0xDA, 0xE9, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xB0, /* 0xC8-0xCB */ + 0xF7, 0xD9, 0xF3, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xCE, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xCE, 0xAA, 0x3F, 0x3F, 0xCB, 0xC8, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xA7, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF0, 0xCB, 0x3F, 0x3F, 0xD0, 0xC7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xC5, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xE0, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xD5, 0xDA, 0x3F, 0x3F, 0xD7, 0xA7, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xC0, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF8, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xD2, 0xED, 0xE9, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xD9, 0xBC, 0x3F, 0x3F, 0xE5, 0xC6, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF5, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xDA, 0xD4, 0xE2, 0xA7, 0xFB, 0xFC, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF1, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xCA, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xE8, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xE9, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xF8, 0xE2, 0xE5, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xD0, 0xB9, 0xD4, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xA6, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xDF, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xF4, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xD3, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xCC, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xEF, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xE5, 0xE5, 0xD0, 0xD5, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xFC, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xFC, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xFE, 0xED, 0xEA, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xB1, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xE3, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xA2, 0xCF, 0xF6, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xD0, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xEA, 0xF1, 0xEE, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xCB, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xA1, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD5, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xED, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xED, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xB2, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xBC, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xFD, 0xE2, 0xF3, 0xAD, 0x3F, 0x3F, 0xFD, 0xDB, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xB0, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xA7, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xFD, 0xE3, 0xCE, 0xB3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xE4, 0xFA, 0xCE, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xCA, 0xB0, 0x3F, 0x3F, 0xF7, 0xA7, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xCF, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xA2, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xFC, 0xB6, 0xF2, 0xAD, 0xEF, 0xE1, /* 0x60-0x63 */ + 0xF3, 0xAE, 0xDC, 0xC6, 0xD9, 0xEB, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xE0, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xA8, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xF6, /* 0x74-0x77 */ + 0xCF, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xDD, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xD1, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xEA, /* 0x80-0x83 */ + 0xF2, 0xCF, 0x3F, 0x3F, 0xF7, 0xBF, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE2, 0xE6, 0xE2, 0xA8, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xD6, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xED, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xF9, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xB1, 0xDE, 0xB2, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xE8, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xD3, 0xAB, 0x3F, 0x3F, 0xEB, 0xDC, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xAF, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xCA, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xFC, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xFD, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xEB, 0xF6, 0xCF, 0xB2, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xEC, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xD9, 0xBD, 0x3F, 0x3F, 0xD8, 0xDF, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xB8, 0xEB, 0xBE, /* 0xD0-0xD3 */ + 0xDD, 0xEF, 0x3F, 0x3F, 0xDD, 0xF0, 0xDD, 0xF1, /* 0xD4-0xD7 */ + 0xDD, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xBE, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xC6, /* 0xE8-0xEB */ + 0xCF, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xEE, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xAB, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xDA, 0xC5, 0x3F, 0x3F, 0xD8, 0xEC, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xA8, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xE2, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xBC, /* 0x34-0x37 */ + 0xE7, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xF0, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xEF, 0xE2, 0xF1, 0xF0, 0xCF, 0xB4, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xF1, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xE0, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xDF, 0xA5, 0x3F, 0x3F, 0xF9, 0xD2, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xFD, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xE6, 0xA3, 0xFB, 0xF1, 0xCB, 0xB0, /* 0x5C-0x5F */ + 0xF2, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xCD, 0xE7, 0x3F, 0x3F, 0xE8, 0xDC, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xE7, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xF7, 0xC0, 0x3F, 0x3F, 0xD0, 0xE3, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xA1, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xBD, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xD1, 0xA9, 0xDD, 0xCC, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xE3, 0xFE, 0xD1, 0xAA, 0xE8, 0xAA, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xEA, 0xB6, 0xF9, 0xFA, 0xE6, 0xCC, /* 0x84-0x87 */ + 0xF6, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xD4, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xD9, 0xCB, 0x3F, 0x3F, 0xD9, 0xD2, 0xD3, 0xCB, /* 0x90-0x93 */ + 0xD8, 0xF7, 0xDA, 0xA9, 0xF5, 0xF8, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xDE, 0xDE, 0xF2, 0xAF, 0xF8, 0xA9, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xC8, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xC1, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xC1, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xDD, 0xF3, 0xEA, 0xFA, 0x3F, 0x3F, 0xF6, 0xBD, /* 0xB8-0xBB */ + 0xE1, 0xBB, 0xCD, 0xBF, 0xF4, 0xD4, 0xE6, 0xCD, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xFC, 0xCF, 0xFB, 0xA2, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xE0, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF4, 0xBB, 0xDA, 0xD5, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xF9, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xF2, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xDB, 0xF6, 0x3F, 0x3F, 0xDE, 0xDF, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xF2, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF8, 0xDC, 0xF7, 0xEE, 0xEB, 0xE8, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xD2, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF1, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xDA, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xEA, 0xDA, 0xC6, /* 0xEC-0xEF */ + 0xF7, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xB6, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xC7, /* 0x08-0x0B */ + 0xD6, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xDC, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xA9, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE2, 0xAA, 0x3F, 0x3F, 0xD5, 0xA6, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xD7, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xF2, 0xD0, 0x3F, 0x3F, 0xEA, 0xFB, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xE0, 0xDD, 0xFB, 0xF3, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xBD, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xE2, 0xE7, 0xFD, 0xD7, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xCE, 0xC8, 0xEA, 0xB7, 0x3F, 0x3F, 0xFC, 0xC0, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xFD, 0xE7, 0xF7, 0xEF, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xD7, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xEF, 0xBA, 0xF1, 0xDD, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xDE, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xCB, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xDD, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xFB, 0xC7, 0xD5, 0xC8, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xD7, 0xDF, 0x3F, 0x3F, 0xDD, 0xA9, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xE9, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xAD, /* 0x74-0x77 */ + 0xF6, 0xD9, 0xFA, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xAA, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xE6, 0xEE, 0x3F, 0x3F, 0xCC, 0xDC, /* 0x84-0x87 */ + 0xE1, 0xBC, 0xE0, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xE9, 0xBF, 0xFC, 0xFD, 0xE6, 0xCE, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xE1, 0xD7, 0x3F, 0x3F, 0xE6, 0xCF, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xF4, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xF3, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xFB, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF9, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xEF, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xEE, /* 0xC0-0xC3 */ + 0xF6, 0xBE, 0xE0, 0xB2, 0xFC, 0xFE, 0xD1, 0xAB, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xFA, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xC8, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xE2, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xD4, 0xA3, 0xF0, 0xF8, 0xD7, 0xA8, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xE7, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xD3, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xEF, 0xE4, 0x3F, 0x3F, 0xD7, 0xC5, 0xEB, 0xE2, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xE7, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xE4, 0xA2, 0x3F, 0x3F, 0xE2, 0xE8, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xE6, 0xD0, 0x3F, 0x3F, 0xFB, 0xE8, /* 0xF4-0xF7 */ + 0xF4, 0xE8, 0xE5, 0xF4, 0xF4, 0xBC, 0xF4, 0xD5, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xB6, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xFC, 0xB9, 0xEE, 0xC2, 0xCA, 0xF5, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xE5, /* 0x1C-0x1F */ + 0xCB, 0xE2, 0xD4, 0xA4, 0x3F, 0x3F, 0xDE, 0xE0, /* 0x20-0x23 */ + 0xDA, 0xFD, 0xE4, 0xC6, 0xE8, 0xBE, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xDE, /* 0x28-0x2B */ + 0xF6, 0xB4, 0xEA, 0xD2, 0x3F, 0x3F, 0xF9, 0xFB, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xC2, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xCA, 0xE4, 0x3F, 0x3F, 0xE7, 0xB7, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEA, 0xFD, 0x3F, 0x3F, 0xD9, 0xDD, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xDA, 0xB4, 0xEE, 0xAA, 0xFB, 0xE9, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xCB, /* 0x40-0x43 */ + 0xDA, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xBE, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xD3, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xC9, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xDF, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xC0, /* 0x58-0x5B */ + 0xE3, 0xD7, 0x3F, 0x3F, 0xEF, 0xE6, 0xFC, 0xD0, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xC0, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xD3, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xDC, 0xF7, 0xB7, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xB8, 0xD1, 0xF9, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xC8, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xEA, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xDE, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xD7, 0xB6, 0xCF, 0xB5, 0x3F, 0x3F, 0xD9, 0xA8, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xEE, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xDD, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xA2, 0xE8, 0xAE, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xBD, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xF2, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xC1, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xFC, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xB5, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF3, 0xE7, 0xD8, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xFC, 0xD1, 0x3F, 0x3F, 0xED, 0xB2, /* 0xC8-0xCB */ + 0xF4, 0xAF, 0x3F, 0x3F, 0xFB, 0xA3, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xFC, 0xC1, 0x3F, 0x3F, 0xEE, 0xAB, /* 0xD0-0xD3 */ + 0xD4, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xF2, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xEE, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xFB, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xE3, 0xD8, 0xBB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0x3F, 0x3F, 0xE5, 0xDB, 0xF8, 0xF7, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xD4, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xA9, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xCB, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xE6, 0xD1, 0xF0, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xD8, 0xAE, 0x3F, 0x3F, 0xF9, 0xD3, 0xD5, 0xFE, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xBC, /* 0x28-0x2B */ + 0xF2, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xE2, 0xAB, 0xF3, 0xE8, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEF, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xEC, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xE7, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xDA, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xCC, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xFC, /* 0x54-0x57 */ + 0xDA, 0xEB, 0x3F, 0x3F, 0xE2, 0xD8, 0xED, 0xD6, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xD1, 0xE0, 0xB3, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xD2, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xEB, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xD3, 0xC1, 0xF0, 0xCD, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xCF, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xD2, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xD4, 0xD8, 0xDC, 0xC9, 0xD7, 0xF1, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xDF, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xF3, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xF4, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xF1, 0xBF, 0xF8, 0xB1, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xE9, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xFB, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xD5, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xD4, /* 0xA0-0xA3 */ + 0xF7, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xC8, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xE8, 0xF3, 0xBD, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xEE, 0xFE, 0x3F, 0x3F, 0xE7, 0xFE, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xD3, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xB6, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCC, 0xAD, 0xF6, 0xFA, 0xD6, 0xB2, 0xD2, 0xD8, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xD8, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xE3, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xB9, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xAD, /* 0xDC-0xDF */ + 0xFB, 0xCC, 0xEB, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xD4, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xFB, 0xCD, 0x3F, 0x3F, 0xD5, 0xBD, /* 0xE8-0xEB */ + 0xF1, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xFB, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xDE, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xEB, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0x3F, 0x3F, 0xE5, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xFB, 0xA4, 0xD4, 0xB9, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xDE, 0xE1, 0x3F, 0x3F, 0xE4, 0xA3, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xB7, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xF8, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xDE, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xD6, 0xD2, 0x3F, 0x3F, 0xF9, 0xD5, 0xE7, 0xBA, /* 0x18-0x1B */ + 0xEB, 0xD5, 0xD5, 0xF7, 0xEF, 0xE7, 0xE1, 0xBE, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xAE, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xE9, /* 0x24-0x27 */ + 0xD6, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xBB, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xCB, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xB3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xCE, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xFB, 0xA5, 0xE1, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xF7, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xFB, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xBD, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xFD, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xFC, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xCF, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xED, 0xC7, 0xEE, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xCC, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xA7, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xFA, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xA4, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xFD, 0xDC, 0xED, 0xB3, 0xCE, 0xC9, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xEF, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xE1, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xDB, /* 0xA8-0xAB */ + 0xCB, 0xE3, 0xF7, 0xA9, 0x3F, 0x3F, 0xFB, 0xA6, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB9, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xC0, /* 0xB4-0xB7 */ + 0xED, 0xC8, 0xEF, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xD6, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xCE, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xA1, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xFB, 0xF4, 0xD5, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF1, 0xF6, 0x3F, 0x3F, 0xE6, 0xD3, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xCC, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xF8, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xDC, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xFD, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xE5, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xF1, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xDB, 0xCC, 0xDD, 0xCD, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xC8, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xD9, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xA5, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xE6, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xD4, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xC8, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xD6, 0xA1, 0xFD, 0xBF, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xFC, 0xD3, 0x3F, 0x3F, 0xEF, 0xA1, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xE7, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xEE, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xE6, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xE9, 0xF2, 0x3F, 0x3F, 0xDF, 0xB0, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xD8, 0xE0, 0xFC, 0xBA, 0xFD, 0xAF, 0xF0, 0xCE, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xDB, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE5, 0xC9, 0x3F, 0x3F, 0xED, 0xB4, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE0, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xE3, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE9, 0xFB, 0xEA, 0xA8, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xB7, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xA7, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xE9, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xFD, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xD9, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xEC, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE8, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xE6, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xFD, 0xF8, 0xFD, 0xF9, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xBF, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xE7, 0xA7, 0x3F, 0x3F, 0xE6, 0xD7, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xD4, 0xF3, 0xD4, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xFA, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xD7, 0xF2, 0x3F, 0x3F, 0xE1, 0xC0, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xDB, 0xE2, 0xE6, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xBD, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xF0, 0xCF, 0xF3, 0xBE, 0xE2, 0xAC, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF5, 0xB7, 0xE0, 0xF0, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xB8, /* 0xF8-0xFB */ + 0xE3, 0xE8, 0x3F, 0x3F, 0xD4, 0xA7, 0xE8, 0xFC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0xFA, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xEF, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD6, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xB4, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xD0, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xF7, 0xF0, 0xEE, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xEA, 0xBA, 0x3F, 0x3F, 0xEA, 0xD3, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xED, 0xC9, 0xDD, 0xAB, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xAC, 0xFD, 0xA1, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xDF, 0xD0, 0xEC, 0xB3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xDF, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xED, 0xF8, 0xB8, /* 0x44-0x47 */ + 0xF7, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xF8, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xE0, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xD4, 0xBA, 0xE4, 0xB3, 0x3F, 0x3F, 0xE9, 0xDA, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xDE, 0xB6, 0x3F, 0x3F, 0xD9, 0xBF, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xD9, 0xC0, 0xD6, 0xEF, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xCC, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xDA, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xE5, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xF7, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xCC, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xDF, 0xF9, 0xD7, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xBB, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xFA, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xCC, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xF3, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xDF, 0xD2, 0x3F, 0x3F, 0xCE, 0xCA, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xEE, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xE4, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xFB, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xB7, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xEE, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xCE, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xE2, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xD7, 0xE1, 0xFA, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xD5, 0xC9, 0xF8, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xD9, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xE9, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xED, /* 0x18-0x1B */ + 0xE3, 0xC4, 0xF0, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE8, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xE0, 0xFA, 0xEE, 0xC4, 0xD9, 0xDE, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xA2, 0xEB, 0xA3, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xC2, 0xEA, 0xBB, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE8, 0xAB, 0xDE, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xED, 0xEF, 0x3F, 0x3F, 0xE8, 0xA3, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xF1, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xD4, 0xBC, 0x3F, 0x3F, 0xFC, 0xEA, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xE7, 0xBE, 0x3F, 0x3F, 0xFC, 0xF2, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD6, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xE2, 0xAE, 0x3F, 0x3F, 0xD3, 0xB7, 0xFA, 0xCC, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xFA, 0xDC, 0x3F, 0x3F, 0xED, 0xB5, 0xE1, 0xE3, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE8, 0xAC, 0x3F, 0x3F, 0xE8, 0xDD, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xE9, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xF4, 0xBD, 0x3F, 0x3F, 0xCF, 0xB8, 0xE9, 0xDB, /* 0x94-0x97 */ + 0xD1, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xC7, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xC9, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xE8, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xDE, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xBC, 0xD3, 0xE5, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xFA, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xDA, 0xD6, 0x3F, 0x3F, 0xCA, 0xB1, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xDA, 0xC8, 0xDF, 0xA6, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xF9, 0xB3, 0xF2, 0xD2, 0x3F, 0x3F, 0xCA, 0xC4, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xCB, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xCD, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xFD, 0xB0, 0xD5, 0xA8, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xF1, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xE9, /* 0xE0-0xE3 */ + 0xDC, 0xCA, 0xEC, 0xB4, 0xFA, 0xC0, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xFB, 0xA8, 0xD0, 0xA8, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xDA, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xEE, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xE0, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xEF, 0xEA, 0xFA, 0xDE, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0x3F, 0x3F, 0xE0, 0xC4, 0x3F, 0x3F, 0xCF, 0xB9, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xD5, 0xCA, 0xD7, 0xE2, 0xE2, 0xAF, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xD7, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xCD, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xDA, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xEF, 0xA2, 0xE2, 0xDA, 0xF6, 0xFC, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xFB, 0xD0, 0xD1, 0xAD, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xCD, 0xE4, 0x3F, 0x3F, 0xD1, 0xAE, 0xDC, 0xED, /* 0x28-0x2B */ + 0xE8, 0xCE, 0x3F, 0x3F, 0xF0, 0xF9, 0xCE, 0xB5, /* 0x2C-0x2F */ + 0xE6, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xFB, /* 0x30-0x33 */ + 0xD0, 0xD6, 0xDD, 0xF5, 0xF7, 0xF1, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xF6, 0xFD, 0x3F, 0x3F, 0xDB, 0xF7, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xEA, /* 0x3C-0x3F */ + 0xE9, 0xDC, 0xD9, 0xC1, 0x3F, 0x3F, 0xF5, 0xF2, /* 0x40-0x43 */ + 0xE0, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xD4, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xF9, 0xC2, 0x3F, 0x3F, 0xEA, 0xBC, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xD2, 0xC5, 0xFB, 0xD1, 0xE7, 0xC0, /* 0x58-0x5B */ + 0xEB, 0xA5, 0x3F, 0x3F, 0xDF, 0xFA, 0xE3, 0xA2, /* 0x5C-0x5F */ + 0xD7, 0xB9, 0x3F, 0x3F, 0xE9, 0xC3, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xE8, 0xFD, 0xE8, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF2, 0xD3, 0xFB, 0xA9, 0xD8, 0xA5, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xCB, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xC8, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xAF, 0xD7, 0xE3, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xC6, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xD6, 0xA2, 0x3F, 0x3F, 0xED, 0xF0, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xD7, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xFC, 0xD4, 0x3F, 0x3F, 0xDA, 0xD7, 0xCC, 0xDF, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xF2, 0xD4, 0x3F, 0x3F, 0xD1, 0xB0, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xCC, 0xE0, 0x3F, 0x3F, 0xDB, 0xFD, /* 0xA4-0xA7 */ + 0xF3, 0xBF, 0x3F, 0x3F, 0xF0, 0xD1, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xFC, 0xBB, 0x3F, 0x3F, 0xE2, 0xB0, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xE6, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE2, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xDF, 0xDE, 0x3F, 0x3F, 0xE0, 0xC7, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xEF, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xE1, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xEA, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xE7, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xCE, 0xB6, 0x3F, 0x3F, 0xF3, 0xC0, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xCD, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xFB, 0xD2, 0x3F, 0x3F, 0xF8, 0xF8, 0xF7, 0xFB, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xBF, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xB7, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xB6, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_75[512] = { + 0x3F, 0x3F, 0xDC, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xCC, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xF1, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xE8, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xCA, 0xF6, 0x3F, 0x3F, 0xE4, 0xA4, 0xF4, 0xD6, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xE6, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xA7, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xDF, 0xE7, 0xE1, 0xC1, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xE9, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xCB, /* 0x28-0x2B */ + 0xE9, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xEF, 0xA3, 0xEB, 0xA6, 0xCB, 0xA3, 0xE3, 0xE9, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xFB, /* 0x34-0x37 */ + 0xEF, 0xA4, 0x3F, 0x3F, 0xEF, 0xEB, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xB4, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xCD, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xE6, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xEF, 0xA5, 0x3F, 0x3F, 0xD3, 0xCC, /* 0x50-0x53 */ + 0xDA, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xD7, 0xBA, 0x3F, 0x3F, 0xF2, 0xD5, /* 0x58-0x5B */ + 0xF5, 0xE5, 0xD9, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xB4, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xD5, 0xD4, 0xFD, 0xCF, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xE3, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xE1, /* 0x6C-0x6F */ + 0xEC, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xFB, 0xFE, 0xD3, 0xD7, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xD1, 0xB1, 0x3F, 0x3F, 0xCB, 0xB1, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xB2, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xB2, 0xF1, 0xC2, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xE1, 0xF9, 0xB5, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xC3, 0xE1, 0xC2, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xEB, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xDF, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xCB, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xB9, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xF8, 0xDE, 0xF9, 0xAA, 0xCA, 0xF7, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xED, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xD3, 0xB8, 0xF2, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xD4, 0xD9, 0xEE, 0xC5, 0xF2, 0xF0, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xB2, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xDC, 0xBB, 0x3F, 0x3F, 0xF1, 0xF8, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xEC, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xCA, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xF6, 0xC0, 0xFD, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xD4, 0xE3, 0xCC, 0xE2, 0x3F, 0x3F, 0xF7, 0xD4, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xE5, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xD3, 0xC3, 0x3F, 0x3F, 0xD8, 0xA6, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xF6, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xF6, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xCD, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0xE5, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE5, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE1, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xB0, /* 0x1C-0x1F */ + 0xF4, 0xB0, 0xF3, 0xEA, 0xDA, 0xEE, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xD7, 0xBB, 0x3F, 0x3F, 0xE2, 0xB1, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xAA, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xFB, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xE4, 0xDF, 0x3F, 0x3F, 0xCA, 0xD6, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xA8, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xFE, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xF6, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xEF, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xD4, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE0, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xE8, 0xB9, 0x3F, 0x3F, 0xEF, 0xA6, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xCD, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xF4, /* 0x78-0x7B */ + 0xDB, 0xA1, 0xDB, 0xDC, 0xDB, 0xDD, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xEE, 0xDC, 0x3F, 0x3F, 0xCB, 0xCB, 0xFC, 0xD5, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xEB, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xCD, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xD3, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xAB, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xD4, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xA9, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xDD, 0xDB, 0xCD, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xCE, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xE7, 0xC3, 0x3F, 0x3F, 0xEC, 0xCC, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xEC, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xCC, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xFC, /* 0xD8-0xDB */ + 0xD4, 0xA8, 0x3F, 0x3F, 0xED, 0xD3, 0xD8, 0xEF, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF2, 0xD7, 0x3F, 0x3F, 0xCA, 0xF8, /* 0xE0-0xE3 */ + 0xDA, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xD4, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xCD, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xEE, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xF2, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xDF, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xDA, 0xF0, 0x3F, 0x3F, 0xE2, 0xEA, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0x3F, 0x3F, 0xE0, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD8, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xF7, 0xAF, 0xDA, 0xB6, 0x3F, 0x3F, 0xCA, 0xD7, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xD8, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xD8, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xFA, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xEF, /* 0x34-0x37 */ + 0xD9, 0xC2, 0x3F, 0x3F, 0xF0, 0xD2, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xE4, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xF3, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xFA, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xEC, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xE2, 0xB2, 0x3F, 0x3F, 0xD4, 0xBD, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xCE, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xE2, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xD4, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xC2, 0xE7, 0xDA, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xD9, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xD9, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xBE, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xDC, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE2, 0xEB, 0xD6, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xCA, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xDA, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xD7, /* 0xB8-0xBB */ + 0xCC, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xBA, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xB8, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xC3, /* 0xD8-0xDB */ + 0xD0, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xC5, 0xEB, 0xF8, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xF2, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xCF, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xD3, 0xAD, 0xE8, 0xE1, 0xCE, 0xEC, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xB4, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xE3, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xF7, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xF2, 0xB2, 0xF3, 0xF6, 0xF6, 0xDB, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xD7, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xDF, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xF7, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xD0, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xDA, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF5, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xBC, /* 0x68-0x6B */ + 0xCC, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xDB, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xDD, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xD1, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xED, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xD6, 0xDE, 0xE4, 0xF4, 0xE1, 0xEF, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xDD, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xCF, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xE5, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xA1, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xE0, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xAC, 0xFC, 0xAD, /* 0xB8-0xBB */ + 0xD8, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xED, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xDB, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xF0, 0xF3, 0xAF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xA5, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xDA, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xD8, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xCC, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xB4, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xCA, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xF2, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0x3F, 0x3F, 0xF5, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xA8, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xA6, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xEC, 0xD5, 0xF8, /* 0x28-0x2B */ + 0xDA, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xC6, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xE4, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xDE, 0xE5, 0xD1, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xB6, /* 0x44-0x47 */ + 0xD1, 0xB7, 0xF2, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xE9, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xD3, 0xF2, 0xB4, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xD4, 0xCB, 0xE4, /* 0x58-0x5B */ + 0xFB, 0xD4, 0xF5, 0xE6, 0xE3, 0xEA, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xDE, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xDF, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF8, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xF0, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xB8, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xDF, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xD0, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xFC, 0xA1, 0xEF, 0xEE, 0xDC, 0xD8, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xE9, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xDD, 0xFD, 0xFB, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xC9, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xC9, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xD4, 0xAA, 0x3F, 0x3F, 0xE5, 0xCC, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE9, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD0, 0xD8, 0xFC, 0xA2, 0xD4, 0xBE, /* 0xBC-0xBF */ + 0xE2, 0xB3, 0xDE, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xDC, 0xBC, 0xD2, 0xB6, 0xF5, 0xD5, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xCE, 0xA1, 0xF5, 0xA9, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xDD, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xDD, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xD5, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xF6, 0xDF, 0x3F, 0x3F, 0xF2, 0xDA, 0xE4, 0xEB, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xF2, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xB9, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7A[512] = { + 0xFD, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xE1, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xCA, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xEF, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xF5, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xEC, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xAD, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF2, 0xC2, 0xF6, 0xC3, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xD7, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xA2, /* 0x1C-0x1F */ + 0xF0, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xFA, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF6, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xF3, 0xF2, 0xC3, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xAB, /* 0x38-0x3B */ + 0xCA, 0xB3, 0xCD, 0xA6, 0x3F, 0x3F, 0xCD, 0xC3, /* 0x3C-0x3F */ + 0xCD, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xCF, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF6, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xEE, 0xDD, 0xE7, 0xC4, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xB4, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xDF, 0xE2, 0xE7, 0xDB, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xE8, 0xB1, 0x3F, 0x3F, 0xFC, 0xAE, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xE5, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xFA, 0xEB, 0x3F, 0x3F, 0xCF, 0xBC, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xCF, 0xE2, 0xCD, 0xF6, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xEF, 0xF0, 0x3F, 0x3F, 0xF4, 0xBE, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xD4, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xF3, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xE9, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xF2, 0xF3, 0xEB, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xF0, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCF, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xDF, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xE8, 0xC0, 0xE8, 0xC1, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xE3, 0xE9, 0xA2, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xAA, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF3, 0xC1, 0xD0, 0xAB, 0x3F, 0x3F, 0xD4, 0xE4, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xBC, 0xD8, 0xA1, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xDF, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xF3, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xDC, 0xBD, 0x3F, 0x3F, 0xCC, 0xE5, /* 0xDC-0xDF */ + 0xED, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xE2, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xD4, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xB5, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xCA, 0xE6, 0x3F, 0x3F, 0xD3, 0xAE, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xE6, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xF1, 0xD3, 0xF5, 0xE7, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xDA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xEE, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xE1, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xDF, 0xE9, 0x3F, 0x3F, 0xEE, 0xDE, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xC2, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xD8, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xAC, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xF0, 0xAF, 0xD6, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xE1, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xB6, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xD4, 0xF5, 0x3F, 0x3F, 0xD0, 0xC9, /* 0x48-0x4B */ + 0xEF, 0xA7, 0xE2, 0xEC, 0x3F, 0x3F, 0xDB, 0xEA, /* 0x4C-0x4F */ + 0xCE, 0xCC, 0xF5, 0xE8, 0xF7, 0xD5, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xD3, 0xCD, 0x3F, 0x3F, 0xF3, 0xFE, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xD0, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE0, 0xFE, 0x3F, 0x3F, 0xDF, 0xFB, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xE6, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE8, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xCD, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xA8, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xB4, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xDA, 0xD8, 0xD1, 0xB9, 0x3F, 0x3F, 0xDF, 0xA9, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xB0, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xCC, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xCE, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xEF, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xDF, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xED, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xEE, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xEF, 0xBD, 0xFC, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xDB, 0xF4, 0x3F, 0x3F, 0xEF, 0xAA, 0xF8, 0xB9, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF5, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xD9, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xE1, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xD4, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xDE, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xEA, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xC2, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xAF, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xCA, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xD7, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xD8, 0xE1, 0xC7, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF4, 0xD8, 0xD6, 0xB3, 0xDD, 0xAD, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xBE, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xF1, 0xC3, 0xEE, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xD6, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xF4, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xD7, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xB7, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xFB, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xDD, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xA3, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xDA, 0xD9, 0x3F, 0x3F, 0xF0, 0xD8, /* 0x94-0x97 */ + 0xEF, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xD8, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xF1, 0xD4, 0x3F, 0x3F, 0xED, 0xF2, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xDB, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xD5, 0xDC, 0xF3, 0xC4, 0xCB, 0xD7, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE2, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xF1, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xD5, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xD8, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xD0, 0xF0, 0xD9, /* 0xDC-0xDF */ + 0xCB, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xDD, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xA7, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xAC, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0xD1, 0xBA, 0x3F, 0x3F, 0xF1, 0xC4, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xE5, 0xB3, 0xFB, 0xF5, 0xE9, 0xE1, 0xFD, 0xE0, /* 0x04-0x07 */ + 0xFC, 0xBC, 0x3F, 0x3F, 0xDA, 0xA2, 0xDA, 0xA3, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xD2, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD2, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xE2, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xE9, /* 0x14-0x17 */ + 0xCE, 0xDC, 0xF2, 0xB5, 0xD0, 0xE4, 0xDD, 0xD1, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xE1, 0xC8, 0xDB, 0xB7, 0xDF, 0xE3, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xB9, /* 0x28-0x2B */ + 0xF1, 0xC5, 0x3F, 0x3F, 0xF3, 0xCF, 0xD7, 0xAB, /* 0x2C-0x2F */ + 0xE1, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xEB, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xEE, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xE1, 0xC9, 0xCA, 0xFA, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xFB, 0xFA, 0xE1, /* 0x40-0x43 */ + 0xF0, 0xDA, 0xCC, 0xE7, 0xDA, 0xF4, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xCC, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xED, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xD5, 0xA9, 0xFA, 0xE2, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xE5, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xEB, 0xD6, 0x3F, 0x3F, 0xEC, 0xDF, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xFC, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xF7, 0xD6, 0xDE, 0xEA, 0xCB, 0xB4, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xBE, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xCC, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xBD, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xF2, 0xE2, 0xB7, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xE8, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xF0, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xD6, 0xE0, 0x3F, 0x3F, 0xF1, 0xC6, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE2, 0xB8, 0xEB, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xCB, 0xB5, 0xD8, 0xD1, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xF4, 0xCE, 0xF3, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xD7, 0xC6, 0x3F, 0x3F, 0xD1, 0xBB, 0xF7, 0xAA, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xED, 0xCA, 0xD7, 0xD3, 0xD8, 0xFA, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xC5, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xCC, 0xDD, 0xFC, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xFD, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xF9, 0xE5, 0x3F, 0x3F, 0xE0, 0xCA, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF2, 0xFD, 0xD3, 0xB0, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xF4, 0xF3, 0xDA, 0xC9, 0x3F, 0x3F, 0xE6, 0xDE, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF8, 0xBA, 0xE8, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xD8, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xD5, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xD6, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xC6, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF2, 0xDB, 0xE4, 0xFC, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xE8, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xDA, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xF2, 0xDC, 0xFB, 0xD6, 0xE9, 0xB2, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xEE, 0xAD, 0x3F, 0x3F, 0xFA, 0xE3, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xEE, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xEA, 0xE6, 0xE0, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF0, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xAC, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF5, 0xC5, 0xEE, 0xE0, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xDB, 0xE5, 0x3F, 0x3F, 0xDD, 0xDE, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xF0, 0xE9, 0xA3, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xF9, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xF2, 0xC4, 0xE0, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xA4, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xE2, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xE3, 0xB1, 0xFC, 0xEB, 0xCD, 0xA8, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xCC, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xF0, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xE6, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xCD, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xC3, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xE1, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xAB, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xC5, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xE9, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xF3, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xC0, /* 0x98-0x9B */ + 0xD5, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xAE, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xF9, 0xFC, 0x3F, 0x3F, 0xCC, 0xC0, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xE5, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xCE, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xD8, 0xD2, 0xF9, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xAA, 0xCE, 0xD1, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xC7, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xDB, 0xEB, 0x3F, 0x3F, 0xDF, 0xFE, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD8, 0xE1, 0x3F, 0x3F, 0xF7, 0xF3, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xD7, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xD4, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD1, 0xBC, 0x3F, 0x3F, 0xE5, 0xCF, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xCB, 0xB6, 0x3F, 0x3F, 0xDA, 0xB8, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xCD, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xBE, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xBA, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xCF, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xE0, 0xCC, 0xEB, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xFD, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xD7, 0xE8, 0xCB, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xE9, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xE8, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xE3, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xCD, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xEC, 0xCE, 0x3F, 0x3F, 0xD6, 0xBF, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xA7, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xDF, 0xD6, 0xFD, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xE1, /* 0xDC-0xDF */ + 0xF6, 0xA8, 0xDD, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xF8, 0xBB, 0x3F, 0x3F, 0xE8, 0xD1, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xF9, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xCE, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xEC, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0xE9, 0xA5, 0xD6, 0xD5, 0x3F, 0x3F, 0xCD, 0xC5, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xED, 0xBA, 0xD1, 0xBD, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xCF, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xEC, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD2, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xCC, 0xE9, 0x3F, 0x3F, 0xD9, 0xC4, /* 0x14-0x17 */ + 0xE9, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD1, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xBC, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xAD, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF7, 0xB0, 0x3F, 0x3F, 0xCC, 0xEA, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xC4, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xC0, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xFD, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xA1, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xDE, 0xBD, 0x3F, 0x3F, 0xF6, 0xA9, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xA4, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xA4, /* 0x6C-0x6F */ + 0xF5, 0xC6, 0x3F, 0x3F, 0xE1, 0xA2, 0xE9, 0xC6, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xC5, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xF4, 0xE9, 0xD6, 0xEC, 0xEB, 0xD3, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xEC, 0xBD, 0xE2, 0xDC, 0xDE, 0xEB, 0xF0, 0xDC, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xEB, 0xBF, 0x3F, 0x3F, 0xD7, 0xCE, /* 0x88-0x8B */ + 0xD1, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xAB, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xFD, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xCA, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xCD, 0xC6, 0xF2, 0xB6, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xDD, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xCC, 0xB7, 0xDB, 0xB8, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xE9, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xCE, 0xDD, 0xEB, 0xC0, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xFD, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xCB, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xD6, /* 0xC0-0xC3 */ + 0xF1, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xDB, 0xCE, 0x3F, 0x3F, 0xF7, 0xC3, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xCF, 0xCB, 0xA4, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xE0, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xFB, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xEB, 0xCA, 0xE0, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xCE, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xD4, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xFD, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xD2, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xB7, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xFA, 0xF6, 0xF6, 0xAA, 0xFA, 0xF7, /* 0x04-0x07 */ + 0xD8, 0xE6, 0x3F, 0x3F, 0xF4, 0xB1, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xE8, 0xD2, 0x3F, 0x3F, 0xCA, 0xC5, 0xCC, 0xEB, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xEE, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xE2, 0xBB, 0x3F, 0x3F, 0xF7, 0xAD, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xE1, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xF3, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xA1, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xFD, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xEC, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xDD, 0xAF, 0xDD, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xCB, 0xB7, 0xE8, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xE1, 0xA3, 0xD2, 0xE0, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xFE, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xE9, 0xA6, 0xCB, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xED, 0xF3, 0xDC, 0xD9, 0xE0, 0xCD, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xDA, /* 0x7C-0x7F */ + + 0xDB, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xCC, 0xAE, 0x3F, 0x3F, 0xDA, 0xDB, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xC7, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xB1, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xD8, 0xAF, 0xE3, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCE, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xF3, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xF8, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xCE, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF5, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xEC, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD3, 0xC5, 0xFC, 0xEC, 0xD2, 0xDB, /* 0xBC-0xBF */ + 0xD4, 0xEB, 0x3F, 0x3F, 0xDE, 0xA2, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE6, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xF0, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xD5, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xF4, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xED, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE8, 0xC2, 0x3F, 0x3F, 0xED, 0xF5, /* 0xE4-0xE7 */ + 0xD7, 0xFC, 0x3F, 0x3F, 0xED, 0xBB, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF6, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xB8, /* 0xF0-0xF3 */ + 0xF6, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xE6, 0xF2, 0xDD, /* 0xF8-0xFB */ + 0xCF, 0xBF, 0x3F, 0x3F, 0xEB, 0xAC, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xCF, 0xC0, 0x3F, 0x3F, 0xE6, 0xA8, /* 0x04-0x07 */ + 0xFD, 0xE9, 0x3F, 0x3F, 0xCF, 0xC1, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xE0, 0xDF, 0xDE, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xA2, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xBF, /* 0x18-0x1B */ + 0xE2, 0xEF, 0x3F, 0x3F, 0xD9, 0xF1, 0xF1, 0xC7, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xCB, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xFE, 0xDB, 0xBA, /* 0x28-0x2B */ + 0xDA, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF6, 0xEC, 0xDA, 0xDC, 0xFA, 0xE4, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xE0, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xDD, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xE6, 0xA9, 0x3F, 0x3F, 0xEF, 0xF3, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xF3, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xEB, 0xFA, 0x3F, 0x3F, 0xF9, 0xE6, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xDD, 0xD5, 0xDE, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xCA, 0xDE, 0xDF, 0xE4, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xFD, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xF5, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xF5, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xE3, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xED, 0xCB, 0xCF, 0xE4, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xD3, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xDD, 0xB3, 0xD4, 0xEC, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xF2, 0xB9, 0x3F, 0x3F, 0xDF, 0xB7, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xCB, 0xCE, 0xFB, 0xD8, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xD0, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xDD, 0xD2, 0xF7, 0xF4, 0xE7, 0xDC, 0xE4, 0xA5, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xFC, 0xA3, 0x3F, 0x3F, 0xDB, 0xBB, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xBA, /* 0xB4-0xB7 */ + 0xE9, 0xFD, 0xD0, 0xCA, 0x3F, 0x3F, 0xF5, 0xD6, /* 0xB8-0xBB */ + 0xD9, 0xC5, 0xE4, 0xB4, 0x3F, 0x3F, 0xED, 0xA7, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xEA, 0xBD, 0xE6, 0xFE, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xF7, 0xC4, 0xF5, 0xAD, 0x3F, 0x3F, 0xD9, 0xE0, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xB4, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xE2, 0xCF, 0xC2, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xEC, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE5, 0xB4, 0xCD, 0xC8, 0xEE, 0xC8, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xE7, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xCD, 0xC9, 0xF9, 0xB7, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0x3F, 0x3F, 0xF1, 0xE8, 0xD9, 0xF2, 0xDB, 0xF5, /* 0x00-0x03 */ + 0xCA, 0xB5, 0xD9, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xD8, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xAB, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xED, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xD4, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xDA, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xE2, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xFC, 0xED, 0xEC, 0xE0, 0xD2, 0xFE, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xE9, 0xC7, 0xE6, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xE2, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xBB, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF5, 0xAE, 0xFB, 0xAA, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xFB, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xEC, 0xBF, 0xFC, 0xD8, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xE5, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xC3, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xE2, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xD7, 0xE9, 0xED, 0xF6, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xED, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xEC, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xE3, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xD4, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xF8, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xDD, 0xB4, 0xE4, 0xB5, 0xD8, 0xB0, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD8, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xF4, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xCE, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xD6, 0xE1, 0xCF, 0xD2, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xD0, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xA2, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xEE, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xF3, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xDC, 0xCC, 0x3F, 0x3F, 0xD0, 0xCB, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xA4, /* 0xEC-0xEF */ + 0xCD, 0xCA, 0xD7, 0xD4, 0xDE, 0xA3, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xE4, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xEE, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE2, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xFE, /* 0x00-0x03 */ + 0xD4, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xD1, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xD8, 0xF0, 0xF8, 0xC3, 0xEA, 0xD7, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xF5, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xD8, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xFD, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEB, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xD5, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xE7, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xCA, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xE7, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xF8, 0xE3, 0x3F, 0x3F, 0xD4, 0xDD, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xD8, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xD9, /* 0x68-0x6B */ + 0xED, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xB5, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD0, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xF1, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xE2, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xE3, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xD9, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xDF, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xDB, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xE4, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xF1, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xB6, /* 0xB8-0xBB */ + 0xF3, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xDA, /* 0xBC-0xBF */ + 0xE1, 0xE0, 0x3F, 0x3F, 0xD9, 0xAC, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF5, 0xEB, 0x3F, 0x3F, 0xE0, 0xB6, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xE9, 0xC8, 0x3F, 0x3F, 0xCB, 0xCF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xE3, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xDE, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xBE, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xDC, 0xEF, 0x3F, 0x3F, 0xD6, 0xA5, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xE2, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xD6, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xD9, 0xA1, 0x3F, 0x3F, 0xD8, 0xC0, /* 0x10-0x13 */ + 0xDC, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xBD, /* 0x14-0x17 */ + 0xDF, 0xB8, 0x3F, 0x3F, 0xEA, 0xA5, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xAD, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xF3, 0xF9, 0x3F, 0x3F, 0xED, 0xF8, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xF5, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xE1, 0xCA, 0xEB, 0xE3, 0x3F, 0x3F, 0xF2, 0xDE, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF8, 0xCC, 0x3F, 0x3F, 0xEA, 0xD9, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xD3, 0xC6, 0x3F, 0x3F, 0xDB, 0xE6, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF5, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF0, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xFE, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xFB, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xF2, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xCF, 0xF2, 0xF7, 0xB9, 0xD9, 0xF3, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xE1, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xDA, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xB9, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xFB, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xCB, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xED, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xE0, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xC0, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xFD, 0xBC, 0xDF, 0xB1, 0xE3, 0xEF, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xA3, /* 0xAC-0xAF */ + 0xFD, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xB1, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xCD, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xED, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xD5, 0xC0, 0xE3, 0xF0, 0xED, 0xFA, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xE9, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD5, 0xED, 0xE7, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xD4, 0xF6, 0xE5, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xDB, 0xE7, 0xE2, 0xBF, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xCB, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xF4, 0xF0, 0xDD, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xAB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xDE, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xD6, 0xE1, 0xCC, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xB3, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xEE, 0xDC, 0xA2, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xD0, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD5, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xA1, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xDB, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF9, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xCB, 0xF3, 0xF4, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xC8, /* 0x58-0x5B */ + 0xD6, 0xD7, 0x3F, 0x3F, 0xE9, 0xE5, 0xFB, 0xDC, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xD0, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xFB, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xA5, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xDB, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xE2, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xF7, /* 0xA0-0xA3 */ + 0xF0, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xF6, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xEF, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xB1, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xFC, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xE8, 0xC3, 0x3F, 0x3F, 0xF1, 0xC8, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF1, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xF9, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF2, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xB6, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xF5, 0xB9, 0x3F, 0x3F, 0xDC, 0xF0, 0xE3, 0xF1, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xE8, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xF2, 0xBB, 0x3F, 0x3F, 0xDE, 0xA4, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xDA, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xE9, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xE3, 0xDA, 0x3F, 0x3F, 0xFC, 0xD9, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xDA, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xC4, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xE3, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xFB, 0xDD, 0x3F, 0x3F, 0xEF, 0xCA, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xE8, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xCC, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xEB, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xAD, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xAB, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xD9, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xA2, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF6, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xDA, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xE0, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xA8, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xF9, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xFA, 0xAF, 0x3F, 0x3F, 0xEB, 0xFC, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xEA, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xE3, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xC5, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xE3, 0xD5, 0xEE, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xCD, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xD9, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xC1, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xFA, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xEB, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xFA, 0xBC, 0xE6, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xE5, 0xE2, 0xFA, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xB6, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xE4, 0xB7, 0x3F, 0x3F, 0xEA, 0xDB, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF5, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xFB, 0xAC, 0xCF, 0xC3, 0xEB, 0xFD, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF8, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xB9, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xE1, 0xF1, 0x3F, 0x3F, 0xD2, 0xA4, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xFB, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xDA, 0xD0, 0xDB, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xEA, 0xBE, 0xD9, 0xB1, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xCA, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xE7, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xF8, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xB2, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xC0, 0xF2, 0xDF, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xE5, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xAC, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xCD, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xEE, 0xAE, 0xD6, 0xAE, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xEA, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xE7, 0xE0, 0xEB, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xCF, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xDC, 0xCD, 0xED, 0xFB, 0x3F, 0x3F, 0xDE, 0xF0, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xD7, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xDE, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xD7, /* 0xF0-0xF3 */ + 0xDB, 0xD0, 0xDB, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xD5, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF0, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xDC, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xCA, 0xE8, 0x3F, 0x3F, 0xF8, 0xE6, 0xDC, 0xCE, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xEA, 0xDC, 0xDB, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE9, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xDB, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xA8, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xD7, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xE1, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xCB, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE5, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xDC, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xD5, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xCA, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xA9, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xA4, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xE9, 0xA9, 0x3F, 0x3F, 0xD3, 0xC7, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xDD, 0xF8, 0xAE, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xB8, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xAE, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xF2, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xCA, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xCC, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xD4, 0xAD, 0xF6, 0xD1, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xCC, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xC6, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD5, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCE, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xC7, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xB0, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xDF, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xF5, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8A[512] = { + 0xE5, 0xEB, 0x3F, 0x3F, 0xEF, 0xF4, 0xDD, 0xB5, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xCD, 0xAA, 0x3F, 0x3F, 0xE3, 0xF2, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xFB, 0xF7, 0x3F, 0x3F, 0xF7, 0xD0, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xBA, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xE1, 0xF6, 0xFE, /* 0x14-0x17 */ + 0xD1, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xC5, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xE4, 0xB8, 0x3F, 0x3F, 0xE1, 0xE8, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xC1, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xD2, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xBE, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xE0, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xFA, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xE1, 0xCD, 0x3F, 0x3F, 0xCA, 0xB8, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xE0, 0xF1, 0xC9, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xDE, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xF0, 0xDF, 0xF8, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xCC, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xF2, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xE7, 0xC9, 0x3F, 0x3F, 0xE2, 0xF3, 0xE7, 0xE1, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xCB, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xE3, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xCF, 0xF8, 0xEF, 0xAC, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xFD, 0xFE, 0xFC, 0xA5, 0xFA, 0xB1, 0xDF, 0xD9, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xE0, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xF4, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xF1, 0xCA, 0x3F, 0x3F, 0xCE, 0xA3, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xF2, 0xBC, 0xEC, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xA5, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xF7, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xEB, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xDE, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xE1, 0xA4, 0xCD, 0xAB, 0x3F, 0x3F, 0xD9, 0xF4, /* 0xA0-0xA3 */ + 0xE8, 0xA6, 0xCD, 0xCE, 0xE1, 0xE9, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xFC, 0xEF, 0x3F, 0x3F, 0xE0, 0xE3, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xE2, 0xC1, 0x3F, 0x3F, 0xCE, 0xA4, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xDE, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xEB, 0xFE, 0x3F, 0x3F, 0xEB, 0xDD, 0xF0, 0xE0, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xDB, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xE2, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xC8, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xEB, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xEE, 0xB5, 0x3F, 0x3F, 0xF5, 0xD8, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xDF, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xE5, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xB0, /* 0xD8-0xDB */ + 0xF4, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xE3, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xF4, 0xFA, 0xB2, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xF5, 0xCA, 0xDF, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xEB, 0xB1, 0xED, 0xBF, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xFD, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xA6, 0xF9, 0xA4, /* 0xF4-0xF7 */ + 0xF0, 0xB3, 0x3F, 0x3F, 0xE5, 0xEC, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xE7, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0xD9, 0xC7, 0xE4, 0xD7, 0xEA, 0xDD, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD4, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xBA, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xDA, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xF9, 0xCC, 0x3F, 0x3F, 0xE1, 0xDA, 0xDB, 0xBF, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xCC, 0xC5, 0xEC, 0xD0, 0xCB, 0xBB, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xDE, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xE9, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xD9, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xE3, /* 0x28-0x2B */ + 0xD7, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xC4, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xD0, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xFC, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF1, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xD2, 0xD1, 0xC1, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xE3, 0xDB, 0x3F, 0x3F, 0xD3, 0xC9, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xDC, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xED, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xDE, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xBB, /* 0x6C-0x6F */ + 0xEC, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xCC, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xDE, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE7, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xD4, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xA8, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xE2, 0xC2, 0x3F, 0x3F, 0xF3, 0xD8, 0xE5, 0xD3, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xD9, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xC6, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xDB, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xAC, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xFC, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xE7, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xD1, 0xC2, 0x3F, 0x3F, 0xF9, 0xA5, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xE8, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xE3, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xCA, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xDF, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xDF, 0xE7, 0xE3, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xF8, 0xFB, 0xE3, 0xCF, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xB0, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xE7, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xD9, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xF8, 0xAF, 0xEF, 0xF6, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xDD, 0xB6, 0xEE, 0xAF, 0xCD, 0xF8, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xB8, /* 0xA4-0xA7 */ + 0xFC, 0xA7, 0xF7, 0xFC, 0xF7, 0xB1, 0xCE, 0xBB, /* 0xA8-0xAB */ + 0xF4, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xCD, /* 0xAC-0xAF */ + 0xE1, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xC3, /* 0xB0-0xB3 */ + 0xCF, 0xFE, 0x3F, 0x3F, 0xF8, 0xBF, 0xD8, 0xE2, /* 0xB4-0xB7 */ + 0xD3, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xA8, /* 0xB8-0xBB */ + 0xF4, 0xE4, 0xEC, 0xC2, 0x3F, 0x3F, 0xD9, 0xF5, /* 0xBC-0xBF */ + 0xF9, 0xC5, 0xDD, 0xD3, 0xD6, 0xF1, 0xEC, 0xFC, /* 0xC0-0xC3 */ + 0xFC, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xC0, /* 0xC4-0xC7 */ + 0xCA, 0xB9, 0x3F, 0x3F, 0xEE, 0xE4, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xF2, 0xE1, 0x3F, 0x3F, 0xDE, 0xB9, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xF2, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xDE, 0xF4, 0x3F, 0x3F, 0xDF, 0xDB, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xDB, 0xD3, 0x3F, 0x3F, 0xFA, 0xE7, 0xD8, 0xE3, /* 0xE0-0xE3 */ + 0xF4, 0xC1, 0x3F, 0x3F, 0xDD, 0xB7, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xF5, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xD4, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xD6, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xB8, /* 0xF8-0xFB */ + 0xCF, 0xC5, 0xDF, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xF2, 0xBE, 0xF6, 0xA1, 0x3F, 0x3F, 0xEB, 0xCB, /* 0x04-0x07 */ + 0xF1, 0xFC, 0x3F, 0x3F, 0xF3, 0xC7, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE0, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xFC, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xDB, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xEE, 0xE5, 0x3F, 0x3F, 0xDE, 0xF5, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xD3, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xF1, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xAF, /* 0x70-0x73 */ + 0xDD, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xC3, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xF5, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xC6, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xF0, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xAC, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xF5, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xEB, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xBA, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xBF, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xC5, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xA2, /* 0xC8-0xCB */ + 0xF2, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xBA, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xF5, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xCB, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xEE, 0xE6, 0x3F, 0x3F, 0xE0, 0xD3, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xCE, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xD8, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xAF, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xC9, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xCE, /* 0x0C-0x0F */ + 0xF4, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xE6, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xA1, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xEB, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF1, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xB3, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xF0, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xF4, /* 0x44-0x47 */ + 0xD4, 0xB0, 0xF3, 0xB2, 0xFB, 0xB7, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xF5, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xE7, /* 0x5C-0x5F */ + 0xF4, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xF5, 0xED, 0x3F, 0x3F, 0xCF, 0xF3, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xF0, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xCE, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xCC, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xE5, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xF5, 0xE3, 0xF3, /* 0xA8-0xAB */ + 0xCF, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCF, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xB3, 0xE4, 0xD8, /* 0xC8-0xCB */ + 0xCF, 0xF9, 0xCF, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xCD, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xE3, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xE2, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xF5, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xBB, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xDC, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF2, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xD6, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xEE, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xE5, 0xD8, 0xC2, /* 0x10-0x13 */ + 0xDC, 0xD0, 0xCC, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xE0, /* 0x18-0x1B */ + 0xF6, 0xCA, 0xFD, 0xCA, 0xD8, 0xD6, 0xF4, 0xCF, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xA6, 0xDC, 0xBE, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xDB, 0xD4, 0xD7, 0xC7, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xFE, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xCD, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xE2, 0xC3, 0xDC, 0xDE, 0x3F, 0x3F, 0xDC, 0xDF, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xAD, 0xE6, 0xAB, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xF9, 0xDD, 0xEA, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xEF, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xF4, 0xD0, 0xCE, 0xF3, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xE6, 0xAC, 0x3F, 0x3F, 0xCE, 0xDE, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xF9, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xF4, /* 0x98-0x9B */ + 0xCD, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xB8, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xFD, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xDC, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xDE, 0xF6, 0x3F, 0x3F, 0xDC, 0xAA, /* 0xAC-0xAF */ + 0xF2, 0xE3, 0xE9, 0xB4, 0xD2, 0xDC, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xE6, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xE3, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xCA, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xD0, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xDA, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xBC, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xE8, 0xDA, 0xDE, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF2, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xE2, 0xFB, 0x3F, 0x3F, 0xCC, 0xA6, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xBB, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xEE, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF5, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0xF7, 0xDC, 0xE1, 0xEA, 0xCE, 0xC1, 0xD4, 0xB1, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xFD, 0xB1, 0xE6, 0xBD, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xFB, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xE7, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE1, 0xCE, 0x3F, 0x3F, 0xF7, 0xE2, /* 0x0C-0x0F */ + 0xF5, 0xEF, 0xCF, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xD4, 0xB2, 0xCC, 0xEF, 0x3F, 0x3F, 0xD4, 0xE8, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xEE, 0xCF, 0xF7, 0xD7, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xE0, 0xA6, 0xD6, 0xC1, 0xE1, 0xDC, /* 0x1C-0x1F */ + 0xF0, 0xE3, 0xF1, 0xE4, 0xDC, 0xF1, 0xD6, 0xA7, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xF5, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF1, 0xCE, 0xF2, 0xE4, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xD0, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEC, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xF9, 0xBA, 0x3F, 0x3F, 0xEB, 0xB5, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xD4, 0xED, 0xE2, 0xC4, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xE7, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xB4, 0xEA, 0xA1, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xF8, 0xBC, 0xCE, 0xA6, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF9, 0xC6, 0xFC, 0xDA, 0x3F, 0x3F, 0xD4, 0xB3, /* 0x50-0x53 */ + 0xD3, 0xB9, 0xEA, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xE9, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xE1, 0xE1, 0xD3, 0xCF, 0xF4, 0xF6, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xEA, 0xC0, 0xE1, 0xCF, 0x3F, 0x3F, 0xCC, 0xBA, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xEE, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xF0, 0xE4, 0xF3, 0xB4, 0xD4, 0xEE, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xC0, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xF1, 0xE5, 0x3F, 0x3F, 0xF4, 0xC3, /* 0x74-0x77 */ + 0xE0, 0xD4, 0x3F, 0x3F, 0xEB, 0xB6, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xD7, 0xA1, 0xCB, 0xE8, 0x3F, 0x3F, 0xF9, 0xAD, /* 0x7C-0x7F */ + + 0xE9, 0xAD, 0xD8, 0xE4, 0xFA, 0xB3, 0xE2, 0xC5, /* 0x80-0x83 */ + 0xFC, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xC4, /* 0x84-0x87 */ + 0xD8, 0xB1, 0x3F, 0x3F, 0xDC, 0xAB, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xA4, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xEB, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xE8, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xD8, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xAE, 0xD1, 0xE1, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xC0, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xF5, 0xBE, 0x3F, 0x3F, 0xDE, 0xF7, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xFB, /* 0xAC-0xAF */ + 0xF7, 0xC6, 0xCF, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xE1, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xEE, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xE9, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF4, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xCD, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xCF, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xDD, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xCE, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xE9, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xD4, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xC7, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xDB, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xFA, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xDE, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xF8, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xEF, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xB3, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xEB, 0xB7, 0xEF, 0xF8, 0xF5, 0xDC, /* 0x48-0x4B */ + 0xED, 0xCC, 0xDB, 0xD5, 0xF1, 0xCF, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xD0, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xB2, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xD9, 0xAE, 0xD5, 0xAC, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE2, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xFD, 0xA3, 0x3F, 0x3F, 0xFB, 0xE5, /* 0x74-0x77 */ + 0xDF, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xF5, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xF6, 0xAD, 0x3F, 0x3F, 0xF5, 0xB3, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xF0, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xA5, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xF5, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xA2, /* 0xA8-0xAB */ + 0xED, 0xFD, 0x3F, 0x3F, 0xF5, 0xB4, 0xFB, 0xB8, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xDB, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xD6, 0xCA, 0xCB, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xE5, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xFA, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xEB, 0xB8, 0x3F, 0x3F, 0xE0, 0xB7, /* 0xC8-0xCB */ + 0xD7, 0xEC, 0xF1, 0xEC, 0xE5, 0xAF, 0xD5, 0xE1, /* 0xCC-0xCF */ + 0xD7, 0xED, 0xD1, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xF2, /* 0xD4-0xD7 */ + 0xEF, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xDD, 0xBC, 0xF6, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xE5, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xC4, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xE9, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xF3, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xD4, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xCC, 0xA2, 0xF7, 0xFE, 0xDF, 0xBC, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xCD, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xB7, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xD6, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xAD, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xAF, /* 0x3C-0x3F */ + 0xCB, 0xA5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCB, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xFA, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xC6, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xE7, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xC7, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xA4, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xCF, 0xC9, 0xE2, 0xFC, 0xEF, 0xFA, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xEB, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xC8, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xD4, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xE0, 0xD5, 0x3F, 0x3F, 0xEF, 0xB0, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xC7, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xD9, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xF9, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xE5, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xCA, 0xE1, 0xD1, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE2, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xEF, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xF9, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xF2, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xE0, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xE8, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xCB, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xCB, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD6, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xF5, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xF5, 0xDF, 0x3F, 0x3F, 0xEE, 0xB6, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xF6, 0xD3, 0xCA, /* 0x1C-0x1F */ + 0xEF, 0xFC, 0xD1, 0xC4, 0xEF, 0xB1, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xD1, 0xC5, 0x3F, 0x3F, 0xD0, 0xDE, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xD9, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xB8, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xD1, 0xF3, 0xB9, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xE7, 0xCC, 0x3F, 0x3F, 0xD6, 0xA8, 0xCE, 0xA7, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xD4, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xE4, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xB4, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xB9, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xCB, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xF6, 0xDD, 0x3F, 0x3F, 0xF1, 0xA3, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xCC, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xE9, 0xCA, 0x3F, 0x3F, 0xE1, 0xF0, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xE0, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xAF, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xD1, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xFB, 0xE0, 0xF2, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xEC, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xEC, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xEE, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xCB, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xCC, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xD7, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xA1, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_94[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xFC, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xF1, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE0, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xB2, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF4, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xF7, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xF1, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xCA, 0xFC, 0xCA, 0xFD, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xCE, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xF3, 0xC8, 0x3F, 0x3F, 0xF3, 0xBA, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_95[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xFE, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xDA, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xEC, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xF8, 0xCD, 0x3F, 0x3F, 0xCB, 0xD2, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xCE, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF9, 0xD8, 0xF9, 0xD9, 0xCA, 0xE0, /* 0x90-0x93 */ + 0xDA, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCB, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xC8, /* 0xA0-0xA3 */ + 0xF9, 0xEE, 0xDB, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xD0, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xD5, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xE6, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xA2, /* 0xB8-0xBB */ + 0xE4, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xE1, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xC4, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xF9, 0xEF, 0xCF, 0xF4, 0xF7, 0xE6, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xCE, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF4, 0xC5, 0xDC, 0xA3, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_96[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xDD, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xF4, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xA1, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xD6, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xC1, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xE6, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xB9, /* 0x3C-0x3F */ + 0xF6, 0xED, 0x3F, 0x3F, 0xF9, 0xAE, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDD, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xB0, /* 0x48-0x4B */ + 0xD8, 0xE8, 0xCB, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF9, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xCE, /* 0x58-0x5B */ + 0xF9, 0xF0, 0xE0, 0xED, 0xE3, 0xB3, 0xF4, 0xB3, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xC2, 0xF2, 0xE6, /* 0x60-0x63 */ + 0xF0, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xD6, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xEB, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xE7, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD7, 0xD5, 0xD4, 0xB6, 0xF9, 0xE8, /* 0x74-0x77 */ + 0xD7, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE5, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xE9, 0xEA, 0xD7, 0xCC, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xE9, 0xE2, 0xC9, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xFC, 0xDB, 0xCD, 0xAD, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xCC, 0xB0, 0xEA, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xE4, 0xF6, 0xD0, 0xC0, 0x3F, 0x3F, 0xF0, 0xB7, /* 0x98-0x9B */ + 0xEE, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xF6, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xCA, /* 0xA4-0xA7 */ + 0xE2, 0xCB, 0x3F, 0x3F, 0xFA, 0xCF, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xEB, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xCB, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xB4, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xED, 0xCD, 0xE4, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xEA, 0xA9, 0xE4, 0xBA, 0xF3, 0xA2, 0xCD, 0xD2, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF6, 0xCB, 0x3F, 0x3F, 0xF1, 0xE6, /* 0xC8-0xCB */ + 0xED, 0xC1, 0xE8, 0xBC, 0xEE, 0xD1, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xF0, 0xE7, 0xE2, 0xCC, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xE4, 0xAA, 0x3F, 0x3F, 0xF5, 0xE1, /* 0xD8-0xDB */ + 0xED, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xEE, 0xD1, 0xF1, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xE9, 0xEB, 0xE9, 0xEC, 0xE0, 0xE4, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xA7, /* 0xEC-0xEF */ + 0xDD, 0xD4, 0x3F, 0x3F, 0xEA, 0xA3, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xC3, 0xD6, 0xF4, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xDA, 0xDF, 0x3F, 0x3F, 0xEF, 0xB3, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_97[512] = { + 0xE2, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xFD, 0xF2, 0xE8, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xEF, 0xC5, 0x3F, 0x3F, 0xE7, 0xE7, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xFD, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE7, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xDF, 0xDC, 0x3F, 0x3F, 0xF9, 0xC7, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xF6, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xDF, 0xAC, 0x3F, 0x3F, 0xD6, 0xDA, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xDC, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF0, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xFA, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE4, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xD6, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xF4, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xFE, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xF0, 0xA1, 0x3F, 0x3F, 0xDE, 0xAA, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xDA, 0xBC, 0xD8, 0xFC, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xFA, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xEC, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xFC, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xE6, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xCB, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xB9, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xE4, 0xD3, 0x3F, 0x3F, 0xCD, 0xF9, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCF, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xCA, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xD4, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xF8, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xC7, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xDF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xDB, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD4, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xE5, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xD2, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xA4, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xC2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0xFB, 0xE1, 0xFA, 0xED, 0xF0, 0xA2, 0xCC, 0xF1, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xFA, 0xA3, 0xE2, 0xF7, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xE2, 0xCE, 0x3F, 0x3F, 0xE9, 0xF5, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xE1, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xE7, 0xE8, 0xE8, 0xD7, 0xDA, 0xF8, 0xD4, 0xCB, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xF6, /* 0x14-0x17 */ + 0xD6, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD4, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xFA, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xCC, 0xF2, 0xF7, 0xDD, 0x3F, 0x3F, 0xDE, 0xBA, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xA8, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xF0, 0xB9, 0xE4, 0xFE, 0xE4, 0xC9, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xE4, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xEA, 0xC3, 0x3F, 0x3F, 0xEF, 0xB4, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xBE, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xFB, 0xE2, 0x3F, 0x3F, 0xCD, 0xD3, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xB5, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xE9, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xF9, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xBD, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xF7, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF8, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xFC, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xAB, /* 0xD8-0xDB */ + 0xDB, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xDD, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xE1, 0xE2, 0xD1, 0xC6, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF6, 0xD0, 0xEB, 0xE6, 0xDA, 0xF9, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xEC, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xDE, 0xF8, 0xF8, 0xE9, 0xE3, 0xDE, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF5, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xFA, 0xC3, 0xE5, 0xD7, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xEC, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xF3, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xBB, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xE6, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xB6, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xDC, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xCE, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xD8, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xD0, 0xCF, 0x3F, 0x3F, 0xCF, 0xFA, /* 0x48-0x4B */ + 0xF3, 0xCA, 0xE0, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xD1, 0xC7, 0xE9, 0xAE, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xE8, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0xFA, 0xC4, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xCF, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xFA, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xF9, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xDC, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xFB, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xD8, 0xA9, 0xE5, 0xDF, 0xF9, 0xA7, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xF6, 0xEE, 0x3F, 0x3F, 0xF6, 0xCC, /* 0xB0-0xB3 */ + 0xE2, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xEC, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xDA, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xF1, 0xD2, 0xD2, 0xCC, 0xCF, 0xCB, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xCA, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xDD, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF6, 0xEF, 0x3F, 0x3F, 0xDE, 0xF9, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xFA, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xD5, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xE7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0x3F, 0x3F, 0xDE, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xDC, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xC8, 0xD1, 0xC9, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF8, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xF6, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xD4, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xE2, 0xE1, 0xD3, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xD8, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xFE, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCF, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xFD, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xCE, 0xF6, 0x3F, 0x3F, 0xFA, 0xD0, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xF3, 0xE6, 0xBE, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xAE, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xF0, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xD1, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xFC, 0xBE, 0xD5, 0xF1, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xCD, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xFA, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xD0, /* 0xD0-0xD3 */ + 0xF4, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xCD, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE7, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xA5, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9B[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xD1, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xA2, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xE3, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xEA, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xD0, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xCE, 0xDA, 0xFB, 0xEB, 0xDB, 0xA6, /* 0x40-0x43 */ + 0xDB, 0xDE, 0xD8, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xE0, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xD8, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE0, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xDB, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xC6, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF8, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xD5, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF7, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xD8, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xD7, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xED, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xCD, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xCC, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xF5, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xE4, 0xCA, 0x3F, 0x3F, 0xDC, 0xE1, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xF9, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xFC, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xA7, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xC4, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xBE, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xDC, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xF7, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xF0, 0xE8, 0x3F, 0x3F, 0xDD, 0xC0, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xCF, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xF3, /* 0xF0-0xF3 */ + 0xD9, 0xB0, 0x3F, 0x3F, 0xE6, 0xE9, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9D[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xE4, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xC4, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xEC, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xE4, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFB, 0xF8, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xCC, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xE4, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xCD, 0xDC, 0xD9, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xDD, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xCE, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xD9, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xA3, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xF9, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xCD, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xCE, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xAF, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xFD, 0xD3, 0xEB, 0xED, 0xD6, 0xDC, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xA4, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xB6, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD6, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xF9, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE7, 0xA4, 0x3F, 0x3F, 0xD6, 0xE3, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xCB, 0xD6, 0xE4, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xF2, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xDE, 0xFA, 0x3F, 0x3F, 0xD7, 0xF8, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xD8, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xCF, 0xD5, 0xD8, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xAB, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xFD, 0xCB, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFC, 0xDC, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xE0, 0xA8, 0xD5, 0xF3, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xFD, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xCC, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xD9, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xEA, /* 0xD8-0xDB */ + 0xF5, 0xF5, 0x3F, 0x3F, 0xEF, 0xC7, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xD3, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xDA, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xA8, /* 0x04-0x07 */ + 0xDC, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xA3, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xD5, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xE0, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xAC, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xBA, 0xEE, 0xB1, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xB2, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xCD, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xD2, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xD6, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xE5, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xBB, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE5, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xCB, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xD7, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xDB, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xCA, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xCF, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AC[512] = { + 0xB0, 0xA1, 0xB0, 0xA2, 0x81, 0x41, 0x81, 0x42, /* 0x00-0x03 */ + 0xB0, 0xA3, 0x81, 0x43, 0x81, 0x44, 0xB0, 0xA4, /* 0x04-0x07 */ + 0xB0, 0xA5, 0xB0, 0xA6, 0xB0, 0xA7, 0x81, 0x45, /* 0x08-0x0B */ + 0x81, 0x46, 0x81, 0x47, 0x81, 0x48, 0x81, 0x49, /* 0x0C-0x0F */ + 0xB0, 0xA8, 0xB0, 0xA9, 0xB0, 0xAA, 0xB0, 0xAB, /* 0x10-0x13 */ + 0xB0, 0xAC, 0xB0, 0xAD, 0xB0, 0xAE, 0xB0, 0xAF, /* 0x14-0x17 */ + 0x81, 0x4A, 0xB0, 0xB0, 0xB0, 0xB1, 0xB0, 0xB2, /* 0x18-0x1B */ + 0xB0, 0xB3, 0xB0, 0xB4, 0x81, 0x4B, 0x81, 0x4C, /* 0x1C-0x1F */ + 0xB0, 0xB5, 0x81, 0x4D, 0x81, 0x4E, 0x81, 0x4F, /* 0x20-0x23 */ + 0xB0, 0xB6, 0x81, 0x50, 0x81, 0x51, 0x81, 0x52, /* 0x24-0x27 */ + 0x81, 0x53, 0x81, 0x54, 0x81, 0x55, 0x81, 0x56, /* 0x28-0x2B */ + 0xB0, 0xB7, 0xB0, 0xB8, 0x81, 0x57, 0xB0, 0xB9, /* 0x2C-0x2F */ + 0xB0, 0xBA, 0xB0, 0xBB, 0x81, 0x58, 0x81, 0x59, /* 0x30-0x33 */ + 0x81, 0x5A, 0x81, 0x61, 0x81, 0x62, 0x81, 0x63, /* 0x34-0x37 */ + 0xB0, 0xBC, 0xB0, 0xBD, 0x81, 0x64, 0x81, 0x65, /* 0x38-0x3B */ + 0xB0, 0xBE, 0x81, 0x66, 0x81, 0x67, 0x81, 0x68, /* 0x3C-0x3F */ + 0xB0, 0xBF, 0x81, 0x69, 0x81, 0x6A, 0x81, 0x6B, /* 0x40-0x43 */ + 0x81, 0x6C, 0x81, 0x6D, 0x81, 0x6E, 0x81, 0x6F, /* 0x44-0x47 */ + 0x81, 0x70, 0x81, 0x71, 0x81, 0x72, 0xB0, 0xC0, /* 0x48-0x4B */ + 0x81, 0x73, 0xB0, 0xC1, 0x81, 0x74, 0x81, 0x75, /* 0x4C-0x4F */ + 0x81, 0x76, 0x81, 0x77, 0x81, 0x78, 0x81, 0x79, /* 0x50-0x53 */ + 0xB0, 0xC2, 0x81, 0x7A, 0x81, 0x81, 0x81, 0x82, /* 0x54-0x57 */ + 0xB0, 0xC3, 0x81, 0x83, 0x81, 0x84, 0x81, 0x85, /* 0x58-0x5B */ + 0xB0, 0xC4, 0x81, 0x86, 0x81, 0x87, 0x81, 0x88, /* 0x5C-0x5F */ + 0x81, 0x89, 0x81, 0x8A, 0x81, 0x8B, 0x81, 0x8C, /* 0x60-0x63 */ + 0x81, 0x8D, 0x81, 0x8E, 0x81, 0x8F, 0x81, 0x90, /* 0x64-0x67 */ + 0x81, 0x91, 0x81, 0x92, 0x81, 0x93, 0x81, 0x94, /* 0x68-0x6B */ + 0x81, 0x95, 0x81, 0x96, 0x81, 0x97, 0x81, 0x98, /* 0x6C-0x6F */ + 0xB0, 0xC5, 0xB0, 0xC6, 0x81, 0x99, 0x81, 0x9A, /* 0x70-0x73 */ + 0xB0, 0xC7, 0x81, 0x9B, 0x81, 0x9C, 0xB0, 0xC8, /* 0x74-0x77 */ + 0xB0, 0xC9, 0x81, 0x9D, 0xB0, 0xCA, 0x81, 0x9E, /* 0x78-0x7B */ + 0x81, 0x9F, 0x81, 0xA0, 0x81, 0xA1, 0x81, 0xA2, /* 0x7C-0x7F */ + + 0xB0, 0xCB, 0xB0, 0xCC, 0x81, 0xA3, 0xB0, 0xCD, /* 0x80-0x83 */ + 0xB0, 0xCE, 0xB0, 0xCF, 0xB0, 0xD0, 0x81, 0xA4, /* 0x84-0x87 */ + 0x81, 0xA5, 0xB0, 0xD1, 0xB0, 0xD2, 0xB0, 0xD3, /* 0x88-0x8B */ + 0xB0, 0xD4, 0x81, 0xA6, 0x81, 0xA7, 0x81, 0xA8, /* 0x8C-0x8F */ + 0xB0, 0xD5, 0x81, 0xA9, 0x81, 0xAA, 0x81, 0xAB, /* 0x90-0x93 */ + 0xB0, 0xD6, 0x81, 0xAC, 0x81, 0xAD, 0x81, 0xAE, /* 0x94-0x97 */ + 0x81, 0xAF, 0x81, 0xB0, 0x81, 0xB1, 0x81, 0xB2, /* 0x98-0x9B */ + 0xB0, 0xD7, 0xB0, 0xD8, 0x81, 0xB3, 0xB0, 0xD9, /* 0x9C-0x9F */ + 0xB0, 0xDA, 0xB0, 0xDB, 0x81, 0xB4, 0x81, 0xB5, /* 0xA0-0xA3 */ + 0x81, 0xB6, 0x81, 0xB7, 0x81, 0xB8, 0x81, 0xB9, /* 0xA4-0xA7 */ + 0xB0, 0xDC, 0xB0, 0xDD, 0xB0, 0xDE, 0x81, 0xBA, /* 0xA8-0xAB */ + 0xB0, 0xDF, 0x81, 0xBB, 0x81, 0xBC, 0xB0, 0xE0, /* 0xAC-0xAF */ + 0xB0, 0xE1, 0x81, 0xBD, 0x81, 0xBE, 0x81, 0xBF, /* 0xB0-0xB3 */ + 0x81, 0xC0, 0x81, 0xC1, 0x81, 0xC2, 0x81, 0xC3, /* 0xB4-0xB7 */ + 0xB0, 0xE2, 0xB0, 0xE3, 0x81, 0xC4, 0xB0, 0xE4, /* 0xB8-0xBB */ + 0xB0, 0xE5, 0xB0, 0xE6, 0x81, 0xC5, 0x81, 0xC6, /* 0xBC-0xBF */ + 0x81, 0xC7, 0xB0, 0xE7, 0x81, 0xC8, 0x81, 0xC9, /* 0xC0-0xC3 */ + 0xB0, 0xE8, 0x81, 0xCA, 0x81, 0xCB, 0x81, 0xCC, /* 0xC4-0xC7 */ + 0xB0, 0xE9, 0x81, 0xCD, 0x81, 0xCE, 0x81, 0xCF, /* 0xC8-0xCB */ + 0xB0, 0xEA, 0x81, 0xD0, 0x81, 0xD1, 0x81, 0xD2, /* 0xCC-0xCF */ + 0x81, 0xD3, 0x81, 0xD4, 0x81, 0xD5, 0x81, 0xD6, /* 0xD0-0xD3 */ + 0x81, 0xD7, 0xB0, 0xEB, 0x81, 0xD8, 0xB0, 0xEC, /* 0xD4-0xD7 */ + 0x81, 0xD9, 0x81, 0xDA, 0x81, 0xDB, 0x81, 0xDC, /* 0xD8-0xDB */ + 0x81, 0xDD, 0x81, 0xDE, 0x81, 0xDF, 0x81, 0xE0, /* 0xDC-0xDF */ + 0xB0, 0xED, 0xB0, 0xEE, 0x81, 0xE1, 0x81, 0xE2, /* 0xE0-0xE3 */ + 0xB0, 0xEF, 0x81, 0xE3, 0x81, 0xE4, 0xB0, 0xF0, /* 0xE4-0xE7 */ + 0xB0, 0xF1, 0x81, 0xE5, 0xB0, 0xF2, 0x81, 0xE6, /* 0xE8-0xEB */ + 0xB0, 0xF3, 0x81, 0xE7, 0x81, 0xE8, 0xB0, 0xF4, /* 0xEC-0xEF */ + 0xB0, 0xF5, 0xB0, 0xF6, 0x81, 0xE9, 0xB0, 0xF7, /* 0xF0-0xF3 */ + 0x81, 0xEA, 0xB0, 0xF8, 0xB0, 0xF9, 0x81, 0xEB, /* 0xF4-0xF7 */ + 0x81, 0xEC, 0x81, 0xED, 0x81, 0xEE, 0x81, 0xEF, /* 0xF8-0xFB */ + 0xB0, 0xFA, 0xB0, 0xFB, 0x81, 0xF0, 0x81, 0xF1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AD[512] = { + 0xB0, 0xFC, 0x81, 0xF2, 0x81, 0xF3, 0x81, 0xF4, /* 0x00-0x03 */ + 0xB0, 0xFD, 0x81, 0xF5, 0xB0, 0xFE, 0x81, 0xF6, /* 0x04-0x07 */ + 0x81, 0xF7, 0x81, 0xF8, 0x81, 0xF9, 0x81, 0xFA, /* 0x08-0x0B */ + 0xB1, 0xA1, 0xB1, 0xA2, 0x81, 0xFB, 0xB1, 0xA3, /* 0x0C-0x0F */ + 0x81, 0xFC, 0xB1, 0xA4, 0x81, 0xFD, 0x81, 0xFE, /* 0x10-0x13 */ + 0x82, 0x41, 0x82, 0x42, 0x82, 0x43, 0x82, 0x44, /* 0x14-0x17 */ + 0xB1, 0xA5, 0x82, 0x45, 0x82, 0x46, 0x82, 0x47, /* 0x18-0x1B */ + 0xB1, 0xA6, 0x82, 0x48, 0x82, 0x49, 0x82, 0x4A, /* 0x1C-0x1F */ + 0xB1, 0xA7, 0x82, 0x4B, 0x82, 0x4C, 0x82, 0x4D, /* 0x20-0x23 */ + 0x82, 0x4E, 0x82, 0x4F, 0x82, 0x50, 0x82, 0x51, /* 0x24-0x27 */ + 0x82, 0x52, 0xB1, 0xA8, 0x82, 0x53, 0x82, 0x54, /* 0x28-0x2B */ + 0xB1, 0xA9, 0xB1, 0xAA, 0x82, 0x55, 0x82, 0x56, /* 0x2C-0x2F */ + 0x82, 0x57, 0x82, 0x58, 0x82, 0x59, 0x82, 0x5A, /* 0x30-0x33 */ + 0xB1, 0xAB, 0xB1, 0xAC, 0x82, 0x61, 0x82, 0x62, /* 0x34-0x37 */ + 0xB1, 0xAD, 0x82, 0x63, 0x82, 0x64, 0x82, 0x65, /* 0x38-0x3B */ + 0xB1, 0xAE, 0x82, 0x66, 0x82, 0x67, 0x82, 0x68, /* 0x3C-0x3F */ + 0x82, 0x69, 0x82, 0x6A, 0x82, 0x6B, 0x82, 0x6C, /* 0x40-0x43 */ + 0xB1, 0xAF, 0xB1, 0xB0, 0x82, 0x6D, 0xB1, 0xB1, /* 0x44-0x47 */ + 0x82, 0x6E, 0xB1, 0xB2, 0x82, 0x6F, 0x82, 0x70, /* 0x48-0x4B */ + 0x82, 0x71, 0x82, 0x72, 0x82, 0x73, 0x82, 0x74, /* 0x4C-0x4F */ + 0xB1, 0xB3, 0x82, 0x75, 0x82, 0x76, 0x82, 0x77, /* 0x50-0x53 */ + 0xB1, 0xB4, 0x82, 0x78, 0x82, 0x79, 0x82, 0x7A, /* 0x54-0x57 */ + 0xB1, 0xB5, 0x82, 0x81, 0x82, 0x82, 0x82, 0x83, /* 0x58-0x5B */ + 0x82, 0x84, 0x82, 0x85, 0x82, 0x86, 0x82, 0x87, /* 0x5C-0x5F */ + 0x82, 0x88, 0xB1, 0xB6, 0x82, 0x89, 0xB1, 0xB7, /* 0x60-0x63 */ + 0x82, 0x8A, 0x82, 0x8B, 0x82, 0x8C, 0x82, 0x8D, /* 0x64-0x67 */ + 0x82, 0x8E, 0x82, 0x8F, 0x82, 0x90, 0x82, 0x91, /* 0x68-0x6B */ + 0xB1, 0xB8, 0xB1, 0xB9, 0x82, 0x92, 0x82, 0x93, /* 0x6C-0x6F */ + 0xB1, 0xBA, 0x82, 0x94, 0x82, 0x95, 0xB1, 0xBB, /* 0x70-0x73 */ + 0xB1, 0xBC, 0xB1, 0xBD, 0xB1, 0xBE, 0x82, 0x96, /* 0x74-0x77 */ + 0x82, 0x97, 0x82, 0x98, 0x82, 0x99, 0xB1, 0xBF, /* 0x78-0x7B */ + 0xB1, 0xC0, 0xB1, 0xC1, 0x82, 0x9A, 0xB1, 0xC2, /* 0x7C-0x7F */ + + 0x82, 0x9B, 0xB1, 0xC3, 0xB1, 0xC4, 0x82, 0x9C, /* 0x80-0x83 */ + 0x82, 0x9D, 0x82, 0x9E, 0x82, 0x9F, 0x82, 0xA0, /* 0x84-0x87 */ + 0xB1, 0xC5, 0xB1, 0xC6, 0x82, 0xA1, 0x82, 0xA2, /* 0x88-0x8B */ + 0xB1, 0xC7, 0x82, 0xA3, 0x82, 0xA4, 0x82, 0xA5, /* 0x8C-0x8F */ + 0xB1, 0xC8, 0x82, 0xA6, 0x82, 0xA7, 0x82, 0xA8, /* 0x90-0x93 */ + 0x82, 0xA9, 0x82, 0xAA, 0x82, 0xAB, 0x82, 0xAC, /* 0x94-0x97 */ + 0x82, 0xAD, 0x82, 0xAE, 0x82, 0xAF, 0x82, 0xB0, /* 0x98-0x9B */ + 0xB1, 0xC9, 0xB1, 0xCA, 0x82, 0xB1, 0x82, 0xB2, /* 0x9C-0x9F */ + 0x82, 0xB3, 0x82, 0xB4, 0x82, 0xB5, 0x82, 0xB6, /* 0xA0-0xA3 */ + 0xB1, 0xCB, 0x82, 0xB7, 0x82, 0xB8, 0x82, 0xB9, /* 0xA4-0xA7 */ + 0x82, 0xBA, 0x82, 0xBB, 0x82, 0xBC, 0x82, 0xBD, /* 0xA8-0xAB */ + 0x82, 0xBE, 0x82, 0xBF, 0x82, 0xC0, 0x82, 0xC1, /* 0xAC-0xAF */ + 0x82, 0xC2, 0x82, 0xC3, 0x82, 0xC4, 0x82, 0xC5, /* 0xB0-0xB3 */ + 0x82, 0xC6, 0x82, 0xC7, 0x82, 0xC8, 0xB1, 0xCC, /* 0xB4-0xB7 */ + 0x82, 0xC9, 0x82, 0xCA, 0x82, 0xCB, 0x82, 0xCC, /* 0xB8-0xBB */ + 0x82, 0xCD, 0x82, 0xCE, 0x82, 0xCF, 0x82, 0xD0, /* 0xBC-0xBF */ + 0xB1, 0xCD, 0xB1, 0xCE, 0x82, 0xD1, 0x82, 0xD2, /* 0xC0-0xC3 */ + 0xB1, 0xCF, 0x82, 0xD3, 0x82, 0xD4, 0x82, 0xD5, /* 0xC4-0xC7 */ + 0xB1, 0xD0, 0x82, 0xD6, 0x82, 0xD7, 0x82, 0xD8, /* 0xC8-0xCB */ + 0x82, 0xD9, 0x82, 0xDA, 0x82, 0xDB, 0x82, 0xDC, /* 0xCC-0xCF */ + 0xB1, 0xD1, 0xB1, 0xD2, 0x82, 0xDD, 0xB1, 0xD3, /* 0xD0-0xD3 */ + 0x82, 0xDE, 0x82, 0xDF, 0x82, 0xE0, 0x82, 0xE1, /* 0xD4-0xD7 */ + 0x82, 0xE2, 0x82, 0xE3, 0x82, 0xE4, 0x82, 0xE5, /* 0xD8-0xDB */ + 0xB1, 0xD4, 0x82, 0xE6, 0x82, 0xE7, 0x82, 0xE8, /* 0xDC-0xDF */ + 0xB1, 0xD5, 0x82, 0xE9, 0x82, 0xEA, 0x82, 0xEB, /* 0xE0-0xE3 */ + 0xB1, 0xD6, 0x82, 0xEC, 0x82, 0xED, 0x82, 0xEE, /* 0xE4-0xE7 */ + 0x82, 0xEF, 0x82, 0xF0, 0x82, 0xF1, 0x82, 0xF2, /* 0xE8-0xEB */ + 0x82, 0xF3, 0x82, 0xF4, 0x82, 0xF5, 0x82, 0xF6, /* 0xEC-0xEF */ + 0x82, 0xF7, 0x82, 0xF8, 0x82, 0xF9, 0x82, 0xFA, /* 0xF0-0xF3 */ + 0x82, 0xFB, 0x82, 0xFC, 0x82, 0xFD, 0x82, 0xFE, /* 0xF4-0xF7 */ + 0xB1, 0xD7, 0xB1, 0xD8, 0x83, 0x41, 0x83, 0x42, /* 0xF8-0xFB */ + 0xB1, 0xD9, 0x83, 0x43, 0x83, 0x44, 0xB1, 0xDA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AE[512] = { + 0xB1, 0xDB, 0xB1, 0xDC, 0x83, 0x45, 0x83, 0x46, /* 0x00-0x03 */ + 0x83, 0x47, 0x83, 0x48, 0x83, 0x49, 0x83, 0x4A, /* 0x04-0x07 */ + 0xB1, 0xDD, 0xB1, 0xDE, 0x83, 0x4B, 0xB1, 0xDF, /* 0x08-0x0B */ + 0x83, 0x4C, 0xB1, 0xE0, 0x83, 0x4D, 0x83, 0x4E, /* 0x0C-0x0F */ + 0x83, 0x4F, 0x83, 0x50, 0x83, 0x51, 0x83, 0x52, /* 0x10-0x13 */ + 0xB1, 0xE1, 0x83, 0x53, 0x83, 0x54, 0x83, 0x55, /* 0x14-0x17 */ + 0x83, 0x56, 0x83, 0x57, 0x83, 0x58, 0x83, 0x59, /* 0x18-0x1B */ + 0x83, 0x5A, 0x83, 0x61, 0x83, 0x62, 0x83, 0x63, /* 0x1C-0x1F */ + 0x83, 0x64, 0x83, 0x65, 0x83, 0x66, 0x83, 0x67, /* 0x20-0x23 */ + 0x83, 0x68, 0x83, 0x69, 0x83, 0x6A, 0x83, 0x6B, /* 0x24-0x27 */ + 0x83, 0x6C, 0x83, 0x6D, 0x83, 0x6E, 0x83, 0x6F, /* 0x28-0x2B */ + 0x83, 0x70, 0x83, 0x71, 0x83, 0x72, 0x83, 0x73, /* 0x2C-0x2F */ + 0xB1, 0xE2, 0xB1, 0xE3, 0x83, 0x74, 0x83, 0x75, /* 0x30-0x33 */ + 0xB1, 0xE4, 0x83, 0x76, 0x83, 0x77, 0xB1, 0xE5, /* 0x34-0x37 */ + 0xB1, 0xE6, 0x83, 0x78, 0xB1, 0xE7, 0x83, 0x79, /* 0x38-0x3B */ + 0x83, 0x7A, 0x83, 0x81, 0x83, 0x82, 0x83, 0x83, /* 0x3C-0x3F */ + 0xB1, 0xE8, 0xB1, 0xE9, 0x83, 0x84, 0xB1, 0xEA, /* 0x40-0x43 */ + 0x83, 0x85, 0xB1, 0xEB, 0xB1, 0xEC, 0x83, 0x86, /* 0x44-0x47 */ + 0x83, 0x87, 0x83, 0x88, 0xB1, 0xED, 0x83, 0x89, /* 0x48-0x4B */ + 0xB1, 0xEE, 0xB1, 0xEF, 0xB1, 0xF0, 0x83, 0x8A, /* 0x4C-0x4F */ + 0xB1, 0xF1, 0x83, 0x8B, 0x83, 0x8C, 0x83, 0x8D, /* 0x50-0x53 */ + 0xB1, 0xF2, 0x83, 0x8E, 0xB1, 0xF3, 0x83, 0x8F, /* 0x54-0x57 */ + 0x83, 0x90, 0x83, 0x91, 0x83, 0x92, 0x83, 0x93, /* 0x58-0x5B */ + 0xB1, 0xF4, 0xB1, 0xF5, 0x83, 0x94, 0xB1, 0xF6, /* 0x5C-0x5F */ + 0xB1, 0xF7, 0xB1, 0xF8, 0x83, 0x95, 0x83, 0x96, /* 0x60-0x63 */ + 0x83, 0x97, 0xB1, 0xF9, 0x83, 0x98, 0x83, 0x99, /* 0x64-0x67 */ + 0xB1, 0xFA, 0xB1, 0xFB, 0x83, 0x9A, 0x83, 0x9B, /* 0x68-0x6B */ + 0xB1, 0xFC, 0x83, 0x9C, 0x83, 0x9D, 0x83, 0x9E, /* 0x6C-0x6F */ + 0xB1, 0xFD, 0x83, 0x9F, 0x83, 0xA0, 0x83, 0xA1, /* 0x70-0x73 */ + 0x83, 0xA2, 0x83, 0xA3, 0x83, 0xA4, 0x83, 0xA5, /* 0x74-0x77 */ + 0xB1, 0xFE, 0xB2, 0xA1, 0x83, 0xA6, 0xB2, 0xA2, /* 0x78-0x7B */ + 0xB2, 0xA3, 0xB2, 0xA4, 0x83, 0xA7, 0x83, 0xA8, /* 0x7C-0x7F */ + + 0x83, 0xA9, 0x83, 0xAA, 0x83, 0xAB, 0x83, 0xAC, /* 0x80-0x83 */ + 0xB2, 0xA5, 0xB2, 0xA6, 0x83, 0xAD, 0x83, 0xAE, /* 0x84-0x87 */ + 0x83, 0xAF, 0x83, 0xB0, 0x83, 0xB1, 0x83, 0xB2, /* 0x88-0x8B */ + 0xB2, 0xA7, 0x83, 0xB3, 0x83, 0xB4, 0x83, 0xB5, /* 0x8C-0x8F */ + 0x83, 0xB6, 0x83, 0xB7, 0x83, 0xB8, 0x83, 0xB9, /* 0x90-0x93 */ + 0x83, 0xBA, 0x83, 0xBB, 0x83, 0xBC, 0x83, 0xBD, /* 0x94-0x97 */ + 0x83, 0xBE, 0x83, 0xBF, 0x83, 0xC0, 0x83, 0xC1, /* 0x98-0x9B */ + 0x83, 0xC2, 0x83, 0xC3, 0x83, 0xC4, 0x83, 0xC5, /* 0x9C-0x9F */ + 0x83, 0xC6, 0x83, 0xC7, 0x83, 0xC8, 0x83, 0xC9, /* 0xA0-0xA3 */ + 0x83, 0xCA, 0x83, 0xCB, 0x83, 0xCC, 0x83, 0xCD, /* 0xA4-0xA7 */ + 0x83, 0xCE, 0x83, 0xCF, 0x83, 0xD0, 0x83, 0xD1, /* 0xA8-0xAB */ + 0x83, 0xD2, 0x83, 0xD3, 0x83, 0xD4, 0x83, 0xD5, /* 0xAC-0xAF */ + 0x83, 0xD6, 0x83, 0xD7, 0x83, 0xD8, 0x83, 0xD9, /* 0xB0-0xB3 */ + 0x83, 0xDA, 0x83, 0xDB, 0x83, 0xDC, 0x83, 0xDD, /* 0xB4-0xB7 */ + 0x83, 0xDE, 0x83, 0xDF, 0x83, 0xE0, 0x83, 0xE1, /* 0xB8-0xBB */ + 0xB2, 0xA8, 0xB2, 0xA9, 0xB2, 0xAA, 0x83, 0xE2, /* 0xBC-0xBF */ + 0xB2, 0xAB, 0x83, 0xE3, 0x83, 0xE4, 0x83, 0xE5, /* 0xC0-0xC3 */ + 0xB2, 0xAC, 0x83, 0xE6, 0x83, 0xE7, 0x83, 0xE8, /* 0xC4-0xC7 */ + 0x83, 0xE9, 0x83, 0xEA, 0x83, 0xEB, 0x83, 0xEC, /* 0xC8-0xCB */ + 0xB2, 0xAD, 0xB2, 0xAE, 0x83, 0xED, 0xB2, 0xAF, /* 0xCC-0xCF */ + 0xB2, 0xB0, 0xB2, 0xB1, 0x83, 0xEE, 0x83, 0xEF, /* 0xD0-0xD3 */ + 0x83, 0xF0, 0x83, 0xF1, 0x83, 0xF2, 0x83, 0xF3, /* 0xD4-0xD7 */ + 0xB2, 0xB2, 0xB2, 0xB3, 0x83, 0xF4, 0x83, 0xF5, /* 0xD8-0xDB */ + 0xB2, 0xB4, 0x83, 0xF6, 0x83, 0xF7, 0x83, 0xF8, /* 0xDC-0xDF */ + 0x83, 0xF9, 0x83, 0xFA, 0x83, 0xFB, 0x83, 0xFC, /* 0xE0-0xE3 */ + 0x83, 0xFD, 0x83, 0xFE, 0x84, 0x41, 0x84, 0x42, /* 0xE4-0xE7 */ + 0xB2, 0xB5, 0x84, 0x43, 0x84, 0x44, 0xB2, 0xB6, /* 0xE8-0xEB */ + 0x84, 0x45, 0xB2, 0xB7, 0x84, 0x46, 0x84, 0x47, /* 0xEC-0xEF */ + 0x84, 0x48, 0x84, 0x49, 0x84, 0x4A, 0x84, 0x4B, /* 0xF0-0xF3 */ + 0xB2, 0xB8, 0x84, 0x4C, 0x84, 0x4D, 0x84, 0x4E, /* 0xF4-0xF7 */ + 0xB2, 0xB9, 0x84, 0x4F, 0x84, 0x50, 0x84, 0x51, /* 0xF8-0xFB */ + 0xB2, 0xBA, 0x84, 0x52, 0x84, 0x53, 0x84, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AF[512] = { + 0x84, 0x55, 0x84, 0x56, 0x84, 0x57, 0x84, 0x58, /* 0x00-0x03 */ + 0x84, 0x59, 0x84, 0x5A, 0x84, 0x61, 0xB2, 0xBB, /* 0x04-0x07 */ + 0xB2, 0xBC, 0x84, 0x62, 0x84, 0x63, 0x84, 0x64, /* 0x08-0x0B */ + 0x84, 0x65, 0xB2, 0xBD, 0x84, 0x66, 0x84, 0x67, /* 0x0C-0x0F */ + 0xB2, 0xBE, 0x84, 0x68, 0x84, 0x69, 0x84, 0x6A, /* 0x10-0x13 */ + 0x84, 0x6B, 0x84, 0x6C, 0x84, 0x6D, 0x84, 0x6E, /* 0x14-0x17 */ + 0x84, 0x6F, 0x84, 0x70, 0x84, 0x71, 0x84, 0x72, /* 0x18-0x1B */ + 0x84, 0x73, 0x84, 0x74, 0x84, 0x75, 0x84, 0x76, /* 0x1C-0x1F */ + 0x84, 0x77, 0x84, 0x78, 0x84, 0x79, 0x84, 0x7A, /* 0x20-0x23 */ + 0x84, 0x81, 0x84, 0x82, 0x84, 0x83, 0x84, 0x84, /* 0x24-0x27 */ + 0x84, 0x85, 0x84, 0x86, 0x84, 0x87, 0x84, 0x88, /* 0x28-0x2B */ + 0xB2, 0xBF, 0xB2, 0xC0, 0x84, 0x89, 0x84, 0x8A, /* 0x2C-0x2F */ + 0xB2, 0xC1, 0x84, 0x8B, 0xB2, 0xC2, 0x84, 0x8C, /* 0x30-0x33 */ + 0xB2, 0xC3, 0x84, 0x8D, 0x84, 0x8E, 0x84, 0x8F, /* 0x34-0x37 */ + 0x84, 0x90, 0x84, 0x91, 0x84, 0x92, 0x84, 0x93, /* 0x38-0x3B */ + 0xB2, 0xC4, 0xB2, 0xC5, 0x84, 0x94, 0xB2, 0xC6, /* 0x3C-0x3F */ + 0x84, 0x95, 0xB2, 0xC7, 0xB2, 0xC8, 0xB2, 0xC9, /* 0x40-0x43 */ + 0x84, 0x96, 0x84, 0x97, 0x84, 0x98, 0x84, 0x99, /* 0x44-0x47 */ + 0xB2, 0xCA, 0xB2, 0xCB, 0x84, 0x9A, 0x84, 0x9B, /* 0x48-0x4B */ + 0x84, 0x9C, 0x84, 0x9D, 0x84, 0x9E, 0x84, 0x9F, /* 0x4C-0x4F */ + 0xB2, 0xCC, 0x84, 0xA0, 0x84, 0xA1, 0x84, 0xA2, /* 0x50-0x53 */ + 0x84, 0xA3, 0x84, 0xA4, 0x84, 0xA5, 0x84, 0xA6, /* 0x54-0x57 */ + 0x84, 0xA7, 0x84, 0xA8, 0x84, 0xA9, 0x84, 0xAA, /* 0x58-0x5B */ + 0xB2, 0xCD, 0xB2, 0xCE, 0x84, 0xAB, 0x84, 0xAC, /* 0x5C-0x5F */ + 0x84, 0xAD, 0x84, 0xAE, 0x84, 0xAF, 0x84, 0xB0, /* 0x60-0x63 */ + 0xB2, 0xCF, 0xB2, 0xD0, 0x84, 0xB1, 0x84, 0xB2, /* 0x64-0x67 */ + 0x84, 0xB3, 0x84, 0xB4, 0x84, 0xB5, 0x84, 0xB6, /* 0x68-0x6B */ + 0x84, 0xB7, 0x84, 0xB8, 0x84, 0xB9, 0x84, 0xBA, /* 0x6C-0x6F */ + 0x84, 0xBB, 0x84, 0xBC, 0x84, 0xBD, 0x84, 0xBE, /* 0x70-0x73 */ + 0x84, 0xBF, 0x84, 0xC0, 0x84, 0xC1, 0x84, 0xC2, /* 0x74-0x77 */ + 0x84, 0xC3, 0xB2, 0xD1, 0x84, 0xC4, 0x84, 0xC5, /* 0x78-0x7B */ + 0x84, 0xC6, 0x84, 0xC7, 0x84, 0xC8, 0x84, 0xC9, /* 0x7C-0x7F */ + + 0xB2, 0xD2, 0x84, 0xCA, 0x84, 0xCB, 0x84, 0xCC, /* 0x80-0x83 */ + 0xB2, 0xD3, 0x84, 0xCD, 0x84, 0xCE, 0x84, 0xCF, /* 0x84-0x87 */ + 0xB2, 0xD4, 0x84, 0xD0, 0x84, 0xD1, 0x84, 0xD2, /* 0x88-0x8B */ + 0x84, 0xD3, 0x84, 0xD4, 0x84, 0xD5, 0x84, 0xD6, /* 0x8C-0x8F */ + 0xB2, 0xD5, 0xB2, 0xD6, 0x84, 0xD7, 0x84, 0xD8, /* 0x90-0x93 */ + 0x84, 0xD9, 0xB2, 0xD7, 0x84, 0xDA, 0x84, 0xDB, /* 0x94-0x97 */ + 0x84, 0xDC, 0x84, 0xDD, 0x84, 0xDE, 0x84, 0xDF, /* 0x98-0x9B */ + 0xB2, 0xD8, 0x84, 0xE0, 0x84, 0xE1, 0x84, 0xE2, /* 0x9C-0x9F */ + 0x84, 0xE3, 0x84, 0xE4, 0x84, 0xE5, 0x84, 0xE6, /* 0xA0-0xA3 */ + 0x84, 0xE7, 0x84, 0xE8, 0x84, 0xE9, 0x84, 0xEA, /* 0xA4-0xA7 */ + 0x84, 0xEB, 0x84, 0xEC, 0x84, 0xED, 0x84, 0xEE, /* 0xA8-0xAB */ + 0x84, 0xEF, 0x84, 0xF0, 0x84, 0xF1, 0x84, 0xF2, /* 0xAC-0xAF */ + 0x84, 0xF3, 0x84, 0xF4, 0x84, 0xF5, 0x84, 0xF6, /* 0xB0-0xB3 */ + 0x84, 0xF7, 0x84, 0xF8, 0x84, 0xF9, 0x84, 0xFA, /* 0xB4-0xB7 */ + 0xB2, 0xD9, 0xB2, 0xDA, 0x84, 0xFB, 0x84, 0xFC, /* 0xB8-0xBB */ + 0xB2, 0xDB, 0x84, 0xFD, 0x84, 0xFE, 0x85, 0x41, /* 0xBC-0xBF */ + 0xB2, 0xDC, 0x85, 0x42, 0x85, 0x43, 0x85, 0x44, /* 0xC0-0xC3 */ + 0x85, 0x45, 0x85, 0x46, 0x85, 0x47, 0xB2, 0xDD, /* 0xC4-0xC7 */ + 0xB2, 0xDE, 0xB2, 0xDF, 0x85, 0x48, 0xB2, 0xE0, /* 0xC8-0xCB */ + 0x85, 0x49, 0xB2, 0xE1, 0xB2, 0xE2, 0x85, 0x4A, /* 0xCC-0xCF */ + 0x85, 0x4B, 0x85, 0x4C, 0x85, 0x4D, 0x85, 0x4E, /* 0xD0-0xD3 */ + 0xB2, 0xE3, 0x85, 0x4F, 0x85, 0x50, 0x85, 0x51, /* 0xD4-0xD7 */ + 0x85, 0x52, 0x85, 0x53, 0x85, 0x54, 0x85, 0x55, /* 0xD8-0xDB */ + 0xB2, 0xE4, 0x85, 0x56, 0x85, 0x57, 0x85, 0x58, /* 0xDC-0xDF */ + 0x85, 0x59, 0x85, 0x5A, 0x85, 0x61, 0x85, 0x62, /* 0xE0-0xE3 */ + 0x85, 0x63, 0x85, 0x64, 0x85, 0x65, 0x85, 0x66, /* 0xE4-0xE7 */ + 0xB2, 0xE5, 0xB2, 0xE6, 0x85, 0x67, 0x85, 0x68, /* 0xE8-0xEB */ + 0x85, 0x69, 0x85, 0x6A, 0x85, 0x6B, 0x85, 0x6C, /* 0xEC-0xEF */ + 0xB2, 0xE7, 0xB2, 0xE8, 0x85, 0x6D, 0x85, 0x6E, /* 0xF0-0xF3 */ + 0xB2, 0xE9, 0x85, 0x6F, 0x85, 0x70, 0x85, 0x71, /* 0xF4-0xF7 */ + 0xB2, 0xEA, 0x85, 0x72, 0x85, 0x73, 0x85, 0x74, /* 0xF8-0xFB */ + 0x85, 0x75, 0x85, 0x76, 0x85, 0x77, 0x85, 0x78, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B0[512] = { + 0xB2, 0xEB, 0xB2, 0xEC, 0x85, 0x79, 0x85, 0x7A, /* 0x00-0x03 */ + 0xB2, 0xED, 0x85, 0x81, 0x85, 0x82, 0x85, 0x83, /* 0x04-0x07 */ + 0x85, 0x84, 0x85, 0x85, 0x85, 0x86, 0x85, 0x87, /* 0x08-0x0B */ + 0xB2, 0xEE, 0x85, 0x88, 0x85, 0x89, 0x85, 0x8A, /* 0x0C-0x0F */ + 0xB2, 0xEF, 0x85, 0x8B, 0x85, 0x8C, 0x85, 0x8D, /* 0x10-0x13 */ + 0xB2, 0xF0, 0x85, 0x8E, 0x85, 0x8F, 0x85, 0x90, /* 0x14-0x17 */ + 0x85, 0x91, 0x85, 0x92, 0x85, 0x93, 0x85, 0x94, /* 0x18-0x1B */ + 0xB2, 0xF1, 0xB2, 0xF2, 0x85, 0x95, 0x85, 0x96, /* 0x1C-0x1F */ + 0x85, 0x97, 0x85, 0x98, 0x85, 0x99, 0x85, 0x9A, /* 0x20-0x23 */ + 0x85, 0x9B, 0x85, 0x9C, 0x85, 0x9D, 0x85, 0x9E, /* 0x24-0x27 */ + 0xB2, 0xF3, 0x85, 0x9F, 0x85, 0xA0, 0x85, 0xA1, /* 0x28-0x2B */ + 0x85, 0xA2, 0x85, 0xA3, 0x85, 0xA4, 0x85, 0xA5, /* 0x2C-0x2F */ + 0x85, 0xA6, 0x85, 0xA7, 0x85, 0xA8, 0x85, 0xA9, /* 0x30-0x33 */ + 0x85, 0xAA, 0x85, 0xAB, 0x85, 0xAC, 0x85, 0xAD, /* 0x34-0x37 */ + 0x85, 0xAE, 0x85, 0xAF, 0x85, 0xB0, 0x85, 0xB1, /* 0x38-0x3B */ + 0x85, 0xB2, 0x85, 0xB3, 0x85, 0xB4, 0x85, 0xB5, /* 0x3C-0x3F */ + 0x85, 0xB6, 0x85, 0xB7, 0x85, 0xB8, 0x85, 0xB9, /* 0x40-0x43 */ + 0xB2, 0xF4, 0xB2, 0xF5, 0x85, 0xBA, 0x85, 0xBB, /* 0x44-0x47 */ + 0xB2, 0xF6, 0x85, 0xBC, 0xB2, 0xF7, 0x85, 0xBD, /* 0x48-0x4B */ + 0xB2, 0xF8, 0x85, 0xBE, 0xB2, 0xF9, 0x85, 0xBF, /* 0x4C-0x4F */ + 0x85, 0xC0, 0x85, 0xC1, 0x85, 0xC2, 0xB2, 0xFA, /* 0x50-0x53 */ + 0xB2, 0xFB, 0xB2, 0xFC, 0x85, 0xC3, 0xB2, 0xFD, /* 0x54-0x57 */ + 0x85, 0xC4, 0xB2, 0xFE, 0x85, 0xC5, 0x85, 0xC6, /* 0x58-0x5B */ + 0x85, 0xC7, 0xB3, 0xA1, 0x85, 0xC8, 0x85, 0xC9, /* 0x5C-0x5F */ + 0x85, 0xCA, 0x85, 0xCB, 0x85, 0xCC, 0x85, 0xCD, /* 0x60-0x63 */ + 0x85, 0xCE, 0x85, 0xCF, 0x85, 0xD0, 0x85, 0xD1, /* 0x64-0x67 */ + 0x85, 0xD2, 0x85, 0xD3, 0x85, 0xD4, 0x85, 0xD5, /* 0x68-0x6B */ + 0x85, 0xD6, 0x85, 0xD7, 0x85, 0xD8, 0x85, 0xD9, /* 0x6C-0x6F */ + 0x85, 0xDA, 0x85, 0xDB, 0x85, 0xDC, 0x85, 0xDD, /* 0x70-0x73 */ + 0x85, 0xDE, 0x85, 0xDF, 0x85, 0xE0, 0x85, 0xE1, /* 0x74-0x77 */ + 0x85, 0xE2, 0x85, 0xE3, 0x85, 0xE4, 0x85, 0xE5, /* 0x78-0x7B */ + 0xB3, 0xA2, 0xB3, 0xA3, 0x85, 0xE6, 0x85, 0xE7, /* 0x7C-0x7F */ + + 0xB3, 0xA4, 0x85, 0xE8, 0x85, 0xE9, 0x85, 0xEA, /* 0x80-0x83 */ + 0xB3, 0xA5, 0x85, 0xEB, 0x85, 0xEC, 0x85, 0xED, /* 0x84-0x87 */ + 0x85, 0xEE, 0x85, 0xEF, 0x85, 0xF0, 0x85, 0xF1, /* 0x88-0x8B */ + 0xB3, 0xA6, 0xB3, 0xA7, 0x85, 0xF2, 0xB3, 0xA8, /* 0x8C-0x8F */ + 0x85, 0xF3, 0xB3, 0xA9, 0x85, 0xF4, 0x85, 0xF5, /* 0x90-0x93 */ + 0x85, 0xF6, 0x85, 0xF7, 0x85, 0xF8, 0x85, 0xF9, /* 0x94-0x97 */ + 0xB3, 0xAA, 0xB3, 0xAB, 0xB3, 0xAC, 0x85, 0xFA, /* 0x98-0x9B */ + 0xB3, 0xAD, 0x85, 0xFB, 0x85, 0xFC, 0xB3, 0xAE, /* 0x9C-0x9F */ + 0xB3, 0xAF, 0xB3, 0xB0, 0xB3, 0xB1, 0x85, 0xFD, /* 0xA0-0xA3 */ + 0x85, 0xFE, 0x86, 0x41, 0x86, 0x42, 0x86, 0x43, /* 0xA4-0xA7 */ + 0xB3, 0xB2, 0xB3, 0xB3, 0x86, 0x44, 0xB3, 0xB4, /* 0xA8-0xAB */ + 0xB3, 0xB5, 0xB3, 0xB6, 0xB3, 0xB7, 0xB3, 0xB8, /* 0xAC-0xAF */ + 0x86, 0x45, 0xB3, 0xB9, 0x86, 0x46, 0xB3, 0xBA, /* 0xB0-0xB3 */ + 0xB3, 0xBB, 0xB3, 0xBC, 0x86, 0x47, 0x86, 0x48, /* 0xB4-0xB7 */ + 0xB3, 0xBD, 0x86, 0x49, 0x86, 0x4A, 0x86, 0x4B, /* 0xB8-0xBB */ + 0xB3, 0xBE, 0x86, 0x4C, 0x86, 0x4D, 0x86, 0x4E, /* 0xBC-0xBF */ + 0x86, 0x4F, 0x86, 0x50, 0x86, 0x51, 0x86, 0x52, /* 0xC0-0xC3 */ + 0xB3, 0xBF, 0xB3, 0xC0, 0x86, 0x53, 0xB3, 0xC1, /* 0xC4-0xC7 */ + 0xB3, 0xC2, 0xB3, 0xC3, 0x86, 0x54, 0x86, 0x55, /* 0xC8-0xCB */ + 0x86, 0x56, 0x86, 0x57, 0x86, 0x58, 0x86, 0x59, /* 0xCC-0xCF */ + 0xB3, 0xC4, 0xB3, 0xC5, 0x86, 0x5A, 0x86, 0x61, /* 0xD0-0xD3 */ + 0xB3, 0xC6, 0x86, 0x62, 0x86, 0x63, 0x86, 0x64, /* 0xD4-0xD7 */ + 0xB3, 0xC7, 0x86, 0x65, 0x86, 0x66, 0x86, 0x67, /* 0xD8-0xDB */ + 0x86, 0x68, 0x86, 0x69, 0x86, 0x6A, 0x86, 0x6B, /* 0xDC-0xDF */ + 0xB3, 0xC8, 0x86, 0x6C, 0x86, 0x6D, 0x86, 0x6E, /* 0xE0-0xE3 */ + 0x86, 0x6F, 0xB3, 0xC9, 0x86, 0x70, 0x86, 0x71, /* 0xE4-0xE7 */ + 0x86, 0x72, 0x86, 0x73, 0x86, 0x74, 0x86, 0x75, /* 0xE8-0xEB */ + 0x86, 0x76, 0x86, 0x77, 0x86, 0x78, 0x86, 0x79, /* 0xEC-0xEF */ + 0x86, 0x7A, 0x86, 0x81, 0x86, 0x82, 0x86, 0x83, /* 0xF0-0xF3 */ + 0x86, 0x84, 0x86, 0x85, 0x86, 0x86, 0x86, 0x87, /* 0xF4-0xF7 */ + 0x86, 0x88, 0x86, 0x89, 0x86, 0x8A, 0x86, 0x8B, /* 0xF8-0xFB */ + 0x86, 0x8C, 0x86, 0x8D, 0x86, 0x8E, 0x86, 0x8F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B1[512] = { + 0x86, 0x90, 0x86, 0x91, 0x86, 0x92, 0x86, 0x93, /* 0x00-0x03 */ + 0x86, 0x94, 0x86, 0x95, 0x86, 0x96, 0x86, 0x97, /* 0x04-0x07 */ + 0xB3, 0xCA, 0xB3, 0xCB, 0x86, 0x98, 0xB3, 0xCC, /* 0x08-0x0B */ + 0xB3, 0xCD, 0x86, 0x99, 0x86, 0x9A, 0x86, 0x9B, /* 0x0C-0x0F */ + 0xB3, 0xCE, 0x86, 0x9C, 0xB3, 0xCF, 0xB3, 0xD0, /* 0x10-0x13 */ + 0x86, 0x9D, 0x86, 0x9E, 0x86, 0x9F, 0x86, 0xA0, /* 0x14-0x17 */ + 0xB3, 0xD1, 0xB3, 0xD2, 0x86, 0xA1, 0xB3, 0xD3, /* 0x18-0x1B */ + 0xB3, 0xD4, 0xB3, 0xD5, 0x86, 0xA2, 0x86, 0xA3, /* 0x1C-0x1F */ + 0x86, 0xA4, 0x86, 0xA5, 0x86, 0xA6, 0xB3, 0xD6, /* 0x20-0x23 */ + 0xB3, 0xD7, 0xB3, 0xD8, 0x86, 0xA7, 0x86, 0xA8, /* 0x24-0x27 */ + 0xB3, 0xD9, 0x86, 0xA9, 0x86, 0xAA, 0x86, 0xAB, /* 0x28-0x2B */ + 0xB3, 0xDA, 0x86, 0xAC, 0x86, 0xAD, 0x86, 0xAE, /* 0x2C-0x2F */ + 0x86, 0xAF, 0x86, 0xB0, 0x86, 0xB1, 0x86, 0xB2, /* 0x30-0x33 */ + 0xB3, 0xDB, 0xB3, 0xDC, 0x86, 0xB3, 0xB3, 0xDD, /* 0x34-0x37 */ + 0xB3, 0xDE, 0xB3, 0xDF, 0x86, 0xB4, 0x86, 0xB5, /* 0x38-0x3B */ + 0x86, 0xB6, 0x86, 0xB7, 0x86, 0xB8, 0x86, 0xB9, /* 0x3C-0x3F */ + 0xB3, 0xE0, 0xB3, 0xE1, 0x86, 0xBA, 0x86, 0xBB, /* 0x40-0x43 */ + 0xB3, 0xE2, 0x86, 0xBC, 0x86, 0xBD, 0x86, 0xBE, /* 0x44-0x47 */ + 0xB3, 0xE3, 0x86, 0xBF, 0x86, 0xC0, 0x86, 0xC1, /* 0x48-0x4B */ + 0x86, 0xC2, 0x86, 0xC3, 0x86, 0xC4, 0x86, 0xC5, /* 0x4C-0x4F */ + 0xB3, 0xE4, 0xB3, 0xE5, 0x86, 0xC6, 0x86, 0xC7, /* 0x50-0x53 */ + 0xB3, 0xE6, 0xB3, 0xE7, 0x86, 0xC8, 0x86, 0xC9, /* 0x54-0x57 */ + 0xB3, 0xE8, 0x86, 0xCA, 0x86, 0xCB, 0x86, 0xCC, /* 0x58-0x5B */ + 0xB3, 0xE9, 0x86, 0xCD, 0x86, 0xCE, 0x86, 0xCF, /* 0x5C-0x5F */ + 0xB3, 0xEA, 0x86, 0xD0, 0x86, 0xD1, 0x86, 0xD2, /* 0x60-0x63 */ + 0x86, 0xD3, 0x86, 0xD4, 0x86, 0xD5, 0x86, 0xD6, /* 0x64-0x67 */ + 0x86, 0xD7, 0x86, 0xD8, 0x86, 0xD9, 0x86, 0xDA, /* 0x68-0x6B */ + 0x86, 0xDB, 0x86, 0xDC, 0x86, 0xDD, 0x86, 0xDE, /* 0x6C-0x6F */ + 0x86, 0xDF, 0x86, 0xE0, 0x86, 0xE1, 0x86, 0xE2, /* 0x70-0x73 */ + 0x86, 0xE3, 0x86, 0xE4, 0x86, 0xE5, 0x86, 0xE6, /* 0x74-0x77 */ + 0xB3, 0xEB, 0xB3, 0xEC, 0x86, 0xE7, 0x86, 0xE8, /* 0x78-0x7B */ + 0xB3, 0xED, 0x86, 0xE9, 0x86, 0xEA, 0x86, 0xEB, /* 0x7C-0x7F */ + + 0xB3, 0xEE, 0x86, 0xEC, 0xB3, 0xEF, 0x86, 0xED, /* 0x80-0x83 */ + 0x86, 0xEE, 0x86, 0xEF, 0x86, 0xF0, 0x86, 0xF1, /* 0x84-0x87 */ + 0xB3, 0xF0, 0xB3, 0xF1, 0x86, 0xF2, 0xB3, 0xF2, /* 0x88-0x8B */ + 0x86, 0xF3, 0xB3, 0xF3, 0x86, 0xF4, 0x86, 0xF5, /* 0x8C-0x8F */ + 0x86, 0xF6, 0x86, 0xF7, 0xB3, 0xF4, 0xB3, 0xF5, /* 0x90-0x93 */ + 0xB3, 0xF6, 0x86, 0xF8, 0x86, 0xF9, 0x86, 0xFA, /* 0x94-0x97 */ + 0xB3, 0xF7, 0x86, 0xFB, 0x86, 0xFC, 0x86, 0xFD, /* 0x98-0x9B */ + 0xB3, 0xF8, 0x86, 0xFE, 0x87, 0x41, 0x87, 0x42, /* 0x9C-0x9F */ + 0x87, 0x43, 0x87, 0x44, 0x87, 0x45, 0x87, 0x46, /* 0xA0-0xA3 */ + 0x87, 0x47, 0x87, 0x48, 0x87, 0x49, 0x87, 0x4A, /* 0xA4-0xA7 */ + 0xB3, 0xF9, 0x87, 0x4B, 0x87, 0x4C, 0x87, 0x4D, /* 0xA8-0xAB */ + 0x87, 0x4E, 0x87, 0x4F, 0x87, 0x50, 0x87, 0x51, /* 0xAC-0xAF */ + 0x87, 0x52, 0x87, 0x53, 0x87, 0x54, 0x87, 0x55, /* 0xB0-0xB3 */ + 0x87, 0x56, 0x87, 0x57, 0x87, 0x58, 0x87, 0x59, /* 0xB4-0xB7 */ + 0x87, 0x5A, 0x87, 0x61, 0x87, 0x62, 0x87, 0x63, /* 0xB8-0xBB */ + 0x87, 0x64, 0x87, 0x65, 0x87, 0x66, 0x87, 0x67, /* 0xBC-0xBF */ + 0x87, 0x68, 0x87, 0x69, 0x87, 0x6A, 0x87, 0x6B, /* 0xC0-0xC3 */ + 0x87, 0x6C, 0x87, 0x6D, 0x87, 0x6E, 0x87, 0x6F, /* 0xC4-0xC7 */ + 0x87, 0x70, 0x87, 0x71, 0x87, 0x72, 0x87, 0x73, /* 0xC8-0xCB */ + 0xB3, 0xFA, 0x87, 0x74, 0x87, 0x75, 0x87, 0x76, /* 0xCC-0xCF */ + 0xB3, 0xFB, 0x87, 0x77, 0x87, 0x78, 0x87, 0x79, /* 0xD0-0xD3 */ + 0xB3, 0xFC, 0x87, 0x7A, 0x87, 0x81, 0x87, 0x82, /* 0xD4-0xD7 */ + 0x87, 0x83, 0x87, 0x84, 0x87, 0x85, 0x87, 0x86, /* 0xD8-0xDB */ + 0xB3, 0xFD, 0xB3, 0xFE, 0x87, 0x87, 0xB4, 0xA1, /* 0xDC-0xDF */ + 0x87, 0x88, 0x87, 0x89, 0x87, 0x8A, 0x87, 0x8B, /* 0xE0-0xE3 */ + 0x87, 0x8C, 0x87, 0x8D, 0x87, 0x8E, 0x87, 0x8F, /* 0xE4-0xE7 */ + 0xB4, 0xA2, 0xB4, 0xA3, 0x87, 0x90, 0x87, 0x91, /* 0xE8-0xEB */ + 0xB4, 0xA4, 0x87, 0x92, 0x87, 0x93, 0x87, 0x94, /* 0xEC-0xEF */ + 0xB4, 0xA5, 0x87, 0x95, 0x87, 0x96, 0x87, 0x97, /* 0xF0-0xF3 */ + 0x87, 0x98, 0x87, 0x99, 0x87, 0x9A, 0x87, 0x9B, /* 0xF4-0xF7 */ + 0x87, 0x9C, 0xB4, 0xA6, 0x87, 0x9D, 0xB4, 0xA7, /* 0xF8-0xFB */ + 0x87, 0x9E, 0xB4, 0xA8, 0x87, 0x9F, 0x87, 0xA0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B2[512] = { + 0x87, 0xA1, 0x87, 0xA2, 0x87, 0xA3, 0x87, 0xA4, /* 0x00-0x03 */ + 0xB4, 0xA9, 0xB4, 0xAA, 0x87, 0xA5, 0x87, 0xA6, /* 0x04-0x07 */ + 0xB4, 0xAB, 0x87, 0xA7, 0x87, 0xA8, 0xB4, 0xAC, /* 0x08-0x0B */ + 0xB4, 0xAD, 0x87, 0xA9, 0x87, 0xAA, 0x87, 0xAB, /* 0x0C-0x0F */ + 0x87, 0xAC, 0x87, 0xAD, 0x87, 0xAE, 0x87, 0xAF, /* 0x10-0x13 */ + 0xB4, 0xAE, 0xB4, 0xAF, 0x87, 0xB0, 0xB4, 0xB0, /* 0x14-0x17 */ + 0x87, 0xB1, 0xB4, 0xB1, 0x87, 0xB2, 0x87, 0xB3, /* 0x18-0x1B */ + 0x87, 0xB4, 0x87, 0xB5, 0x87, 0xB6, 0x87, 0xB7, /* 0x1C-0x1F */ + 0xB4, 0xB2, 0x87, 0xB8, 0x87, 0xB9, 0x87, 0xBA, /* 0x20-0x23 */ + 0x87, 0xBB, 0x87, 0xBC, 0x87, 0xBD, 0x87, 0xBE, /* 0x24-0x27 */ + 0x87, 0xBF, 0x87, 0xC0, 0x87, 0xC1, 0x87, 0xC2, /* 0x28-0x2B */ + 0x87, 0xC3, 0x87, 0xC4, 0x87, 0xC5, 0x87, 0xC6, /* 0x2C-0x2F */ + 0x87, 0xC7, 0x87, 0xC8, 0x87, 0xC9, 0x87, 0xCA, /* 0x30-0x33 */ + 0xB4, 0xB3, 0x87, 0xCB, 0x87, 0xCC, 0x87, 0xCD, /* 0x34-0x37 */ + 0x87, 0xCE, 0x87, 0xCF, 0x87, 0xD0, 0x87, 0xD1, /* 0x38-0x3B */ + 0xB4, 0xB4, 0x87, 0xD2, 0x87, 0xD3, 0x87, 0xD4, /* 0x3C-0x3F */ + 0x87, 0xD5, 0x87, 0xD6, 0x87, 0xD7, 0x87, 0xD8, /* 0x40-0x43 */ + 0x87, 0xD9, 0x87, 0xDA, 0x87, 0xDB, 0x87, 0xDC, /* 0x44-0x47 */ + 0x87, 0xDD, 0x87, 0xDE, 0x87, 0xDF, 0x87, 0xE0, /* 0x48-0x4B */ + 0x87, 0xE1, 0x87, 0xE2, 0x87, 0xE3, 0x87, 0xE4, /* 0x4C-0x4F */ + 0x87, 0xE5, 0x87, 0xE6, 0x87, 0xE7, 0x87, 0xE8, /* 0x50-0x53 */ + 0x87, 0xE9, 0x87, 0xEA, 0x87, 0xEB, 0x87, 0xEC, /* 0x54-0x57 */ + 0xB4, 0xB5, 0x87, 0xED, 0x87, 0xEE, 0x87, 0xEF, /* 0x58-0x5B */ + 0xB4, 0xB6, 0x87, 0xF0, 0x87, 0xF1, 0x87, 0xF2, /* 0x5C-0x5F */ + 0xB4, 0xB7, 0x87, 0xF3, 0x87, 0xF4, 0x87, 0xF5, /* 0x60-0x63 */ + 0x87, 0xF6, 0x87, 0xF7, 0x87, 0xF8, 0x87, 0xF9, /* 0x64-0x67 */ + 0xB4, 0xB8, 0xB4, 0xB9, 0x87, 0xFA, 0x87, 0xFB, /* 0x68-0x6B */ + 0x87, 0xFC, 0x87, 0xFD, 0x87, 0xFE, 0x88, 0x41, /* 0x6C-0x6F */ + 0x88, 0x42, 0x88, 0x43, 0x88, 0x44, 0x88, 0x45, /* 0x70-0x73 */ + 0xB4, 0xBA, 0xB4, 0xBB, 0x88, 0x46, 0x88, 0x47, /* 0x74-0x77 */ + 0x88, 0x48, 0x88, 0x49, 0x88, 0x4A, 0x88, 0x4B, /* 0x78-0x7B */ + 0xB4, 0xBC, 0x88, 0x4C, 0x88, 0x4D, 0x88, 0x4E, /* 0x7C-0x7F */ + + 0x88, 0x4F, 0x88, 0x50, 0x88, 0x51, 0x88, 0x52, /* 0x80-0x83 */ + 0xB4, 0xBD, 0xB4, 0xBE, 0x88, 0x53, 0x88, 0x54, /* 0x84-0x87 */ + 0x88, 0x55, 0xB4, 0xBF, 0x88, 0x56, 0x88, 0x57, /* 0x88-0x8B */ + 0x88, 0x58, 0x88, 0x59, 0x88, 0x5A, 0x88, 0x61, /* 0x8C-0x8F */ + 0xB4, 0xC0, 0xB4, 0xC1, 0x88, 0x62, 0x88, 0x63, /* 0x90-0x93 */ + 0xB4, 0xC2, 0x88, 0x64, 0x88, 0x65, 0x88, 0x66, /* 0x94-0x97 */ + 0xB4, 0xC3, 0xB4, 0xC4, 0xB4, 0xC5, 0x88, 0x67, /* 0x98-0x9B */ + 0x88, 0x68, 0x88, 0x69, 0x88, 0x6A, 0x88, 0x6B, /* 0x9C-0x9F */ + 0xB4, 0xC6, 0xB4, 0xC7, 0x88, 0x6C, 0xB4, 0xC8, /* 0xA0-0xA3 */ + 0x88, 0x6D, 0xB4, 0xC9, 0xB4, 0xCA, 0x88, 0x6E, /* 0xA4-0xA7 */ + 0x88, 0x6F, 0x88, 0x70, 0xB4, 0xCB, 0x88, 0x71, /* 0xA8-0xAB */ + 0xB4, 0xCC, 0x88, 0x72, 0x88, 0x73, 0x88, 0x74, /* 0xAC-0xAF */ + 0xB4, 0xCD, 0x88, 0x75, 0x88, 0x76, 0x88, 0x77, /* 0xB0-0xB3 */ + 0xB4, 0xCE, 0x88, 0x78, 0x88, 0x79, 0x88, 0x7A, /* 0xB4-0xB7 */ + 0x88, 0x81, 0x88, 0x82, 0x88, 0x83, 0x88, 0x84, /* 0xB8-0xBB */ + 0x88, 0x85, 0x88, 0x86, 0x88, 0x87, 0x88, 0x88, /* 0xBC-0xBF */ + 0x88, 0x89, 0x88, 0x8A, 0x88, 0x8B, 0x88, 0x8C, /* 0xC0-0xC3 */ + 0x88, 0x8D, 0x88, 0x8E, 0x88, 0x8F, 0x88, 0x90, /* 0xC4-0xC7 */ + 0xB4, 0xCF, 0xB4, 0xD0, 0x88, 0x91, 0x88, 0x92, /* 0xC8-0xCB */ + 0xB4, 0xD1, 0x88, 0x93, 0x88, 0x94, 0x88, 0x95, /* 0xCC-0xCF */ + 0xB4, 0xD2, 0x88, 0x96, 0xB4, 0xD3, 0x88, 0x97, /* 0xD0-0xD3 */ + 0x88, 0x98, 0x88, 0x99, 0x88, 0x9A, 0x88, 0x9B, /* 0xD4-0xD7 */ + 0xB4, 0xD4, 0xB4, 0xD5, 0x88, 0x9C, 0xB4, 0xD6, /* 0xD8-0xDB */ + 0x88, 0x9D, 0xB4, 0xD7, 0x88, 0x9E, 0x88, 0x9F, /* 0xDC-0xDF */ + 0x88, 0xA0, 0x88, 0xA1, 0xB4, 0xD8, 0x88, 0xA2, /* 0xE0-0xE3 */ + 0xB4, 0xD9, 0xB4, 0xDA, 0xB4, 0xDB, 0x88, 0xA3, /* 0xE4-0xE7 */ + 0xB4, 0xDC, 0x88, 0xA4, 0x88, 0xA5, 0xB4, 0xDD, /* 0xE8-0xEB */ + 0xB4, 0xDE, 0xB4, 0xDF, 0xB4, 0xE0, 0xB4, 0xE1, /* 0xEC-0xEF */ + 0x88, 0xA6, 0x88, 0xA7, 0x88, 0xA8, 0xB4, 0xE2, /* 0xF0-0xF3 */ + 0xB4, 0xE3, 0xB4, 0xE4, 0x88, 0xA9, 0xB4, 0xE5, /* 0xF4-0xF7 */ + 0xB4, 0xE6, 0xB4, 0xE7, 0xB4, 0xE8, 0xB4, 0xE9, /* 0xF8-0xFB */ + 0x88, 0xAA, 0x88, 0xAB, 0x88, 0xAC, 0xB4, 0xEA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B3[512] = { + 0xB4, 0xEB, 0xB4, 0xEC, 0x88, 0xAD, 0x88, 0xAE, /* 0x00-0x03 */ + 0xB4, 0xED, 0x88, 0xAF, 0x88, 0xB0, 0x88, 0xB1, /* 0x04-0x07 */ + 0xB4, 0xEE, 0x88, 0xB2, 0x88, 0xB3, 0x88, 0xB4, /* 0x08-0x0B */ + 0x88, 0xB5, 0x88, 0xB6, 0x88, 0xB7, 0x88, 0xB8, /* 0x0C-0x0F */ + 0xB4, 0xEF, 0xB4, 0xF0, 0x88, 0xB9, 0xB4, 0xF1, /* 0x10-0x13 */ + 0xB4, 0xF2, 0xB4, 0xF3, 0x88, 0xBA, 0x88, 0xBB, /* 0x14-0x17 */ + 0x88, 0xBC, 0x88, 0xBD, 0x88, 0xBE, 0x88, 0xBF, /* 0x18-0x1B */ + 0xB4, 0xF4, 0x88, 0xC0, 0x88, 0xC1, 0x88, 0xC2, /* 0x1C-0x1F */ + 0x88, 0xC3, 0x88, 0xC4, 0x88, 0xC5, 0x88, 0xC6, /* 0x20-0x23 */ + 0x88, 0xC7, 0x88, 0xC8, 0x88, 0xC9, 0x88, 0xCA, /* 0x24-0x27 */ + 0x88, 0xCB, 0x88, 0xCC, 0x88, 0xCD, 0x88, 0xCE, /* 0x28-0x2B */ + 0x88, 0xCF, 0x88, 0xD0, 0x88, 0xD1, 0x88, 0xD2, /* 0x2C-0x2F */ + 0x88, 0xD3, 0x88, 0xD4, 0x88, 0xD5, 0x88, 0xD6, /* 0x30-0x33 */ + 0x88, 0xD7, 0x88, 0xD8, 0x88, 0xD9, 0x88, 0xDA, /* 0x34-0x37 */ + 0x88, 0xDB, 0x88, 0xDC, 0x88, 0xDD, 0x88, 0xDE, /* 0x38-0x3B */ + 0x88, 0xDF, 0x88, 0xE0, 0x88, 0xE1, 0x88, 0xE2, /* 0x3C-0x3F */ + 0x88, 0xE3, 0x88, 0xE4, 0x88, 0xE5, 0x88, 0xE6, /* 0x40-0x43 */ + 0x88, 0xE7, 0x88, 0xE8, 0x88, 0xE9, 0x88, 0xEA, /* 0x44-0x47 */ + 0x88, 0xEB, 0x88, 0xEC, 0x88, 0xED, 0x88, 0xEE, /* 0x48-0x4B */ + 0x88, 0xEF, 0x88, 0xF0, 0x88, 0xF1, 0x88, 0xF2, /* 0x4C-0x4F */ + 0x88, 0xF3, 0x88, 0xF4, 0x88, 0xF5, 0x88, 0xF6, /* 0x50-0x53 */ + 0xB4, 0xF5, 0xB4, 0xF6, 0xB4, 0xF7, 0x88, 0xF7, /* 0x54-0x57 */ + 0xB4, 0xF8, 0x88, 0xF8, 0x88, 0xF9, 0xB4, 0xF9, /* 0x58-0x5B */ + 0xB4, 0xFA, 0x88, 0xFA, 0xB4, 0xFB, 0xB4, 0xFC, /* 0x5C-0x5F */ + 0x88, 0xFB, 0x88, 0xFC, 0x88, 0xFD, 0x88, 0xFE, /* 0x60-0x63 */ + 0xB4, 0xFD, 0xB4, 0xFE, 0x89, 0x41, 0xB5, 0xA1, /* 0x64-0x67 */ + 0x89, 0x42, 0xB5, 0xA2, 0x89, 0x43, 0xB5, 0xA3, /* 0x68-0x6B */ + 0x89, 0x44, 0x89, 0x45, 0xB5, 0xA4, 0x89, 0x46, /* 0x6C-0x6F */ + 0xB5, 0xA5, 0xB5, 0xA6, 0x89, 0x47, 0x89, 0x48, /* 0x70-0x73 */ + 0xB5, 0xA7, 0x89, 0x49, 0x89, 0x4A, 0x89, 0x4B, /* 0x74-0x77 */ + 0xB5, 0xA8, 0x89, 0x4C, 0x89, 0x4D, 0x89, 0x4E, /* 0x78-0x7B */ + 0x89, 0x4F, 0x89, 0x50, 0x89, 0x51, 0x89, 0x52, /* 0x7C-0x7F */ + + 0xB5, 0xA9, 0xB5, 0xAA, 0x89, 0x53, 0xB5, 0xAB, /* 0x80-0x83 */ + 0xB5, 0xAC, 0xB5, 0xAD, 0x89, 0x54, 0x89, 0x55, /* 0x84-0x87 */ + 0x89, 0x56, 0x89, 0x57, 0x89, 0x58, 0x89, 0x59, /* 0x88-0x8B */ + 0xB5, 0xAE, 0x89, 0x5A, 0x89, 0x61, 0x89, 0x62, /* 0x8C-0x8F */ + 0xB5, 0xAF, 0x89, 0x63, 0x89, 0x64, 0x89, 0x65, /* 0x90-0x93 */ + 0xB5, 0xB0, 0x89, 0x66, 0x89, 0x67, 0x89, 0x68, /* 0x94-0x97 */ + 0x89, 0x69, 0x89, 0x6A, 0x89, 0x6B, 0x89, 0x6C, /* 0x98-0x9B */ + 0x89, 0x6D, 0x89, 0x6E, 0x89, 0x6F, 0x89, 0x70, /* 0x9C-0x9F */ + 0xB5, 0xB1, 0xB5, 0xB2, 0x89, 0x71, 0x89, 0x72, /* 0xA0-0xA3 */ + 0x89, 0x73, 0x89, 0x74, 0x89, 0x75, 0x89, 0x76, /* 0xA4-0xA7 */ + 0xB5, 0xB3, 0x89, 0x77, 0x89, 0x78, 0x89, 0x79, /* 0xA8-0xAB */ + 0xB5, 0xB4, 0x89, 0x7A, 0x89, 0x81, 0x89, 0x82, /* 0xAC-0xAF */ + 0x89, 0x83, 0x89, 0x84, 0x89, 0x85, 0x89, 0x86, /* 0xB0-0xB3 */ + 0x89, 0x87, 0x89, 0x88, 0x89, 0x89, 0x89, 0x8A, /* 0xB4-0xB7 */ + 0x89, 0x8B, 0x89, 0x8C, 0x89, 0x8D, 0x89, 0x8E, /* 0xB8-0xBB */ + 0x89, 0x8F, 0x89, 0x90, 0x89, 0x91, 0x89, 0x92, /* 0xBC-0xBF */ + 0x89, 0x93, 0x89, 0x94, 0x89, 0x95, 0x89, 0x96, /* 0xC0-0xC3 */ + 0xB5, 0xB5, 0xB5, 0xB6, 0x89, 0x97, 0x89, 0x98, /* 0xC4-0xC7 */ + 0xB5, 0xB7, 0x89, 0x99, 0x89, 0x9A, 0xB5, 0xB8, /* 0xC8-0xCB */ + 0xB5, 0xB9, 0x89, 0x9B, 0xB5, 0xBA, 0x89, 0x9C, /* 0xCC-0xCF */ + 0xB5, 0xBB, 0x89, 0x9D, 0x89, 0x9E, 0x89, 0x9F, /* 0xD0-0xD3 */ + 0xB5, 0xBC, 0xB5, 0xBD, 0x89, 0xA0, 0xB5, 0xBE, /* 0xD4-0xD7 */ + 0x89, 0xA1, 0xB5, 0xBF, 0x89, 0xA2, 0xB5, 0xC0, /* 0xD8-0xDB */ + 0x89, 0xA3, 0xB5, 0xC1, 0x89, 0xA4, 0x89, 0xA5, /* 0xDC-0xDF */ + 0xB5, 0xC2, 0x89, 0xA6, 0x89, 0xA7, 0x89, 0xA8, /* 0xE0-0xE3 */ + 0xB5, 0xC3, 0x89, 0xA9, 0x89, 0xAA, 0x89, 0xAB, /* 0xE4-0xE7 */ + 0xB5, 0xC4, 0x89, 0xAC, 0x89, 0xAD, 0x89, 0xAE, /* 0xE8-0xEB */ + 0x89, 0xAF, 0x89, 0xB0, 0x89, 0xB1, 0x89, 0xB2, /* 0xEC-0xEF */ + 0x89, 0xB3, 0x89, 0xB4, 0x89, 0xB5, 0x89, 0xB6, /* 0xF0-0xF3 */ + 0x89, 0xB7, 0x89, 0xB8, 0x89, 0xB9, 0x89, 0xBA, /* 0xF4-0xF7 */ + 0x89, 0xBB, 0x89, 0xBC, 0x89, 0xBD, 0x89, 0xBE, /* 0xF8-0xFB */ + 0xB5, 0xC5, 0x89, 0xBF, 0x89, 0xC0, 0x89, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B4[512] = { + 0x89, 0xC2, 0x89, 0xC3, 0x89, 0xC4, 0x89, 0xC5, /* 0x00-0x03 */ + 0x89, 0xC6, 0x89, 0xC7, 0x89, 0xC8, 0x89, 0xC9, /* 0x04-0x07 */ + 0x89, 0xCA, 0x89, 0xCB, 0x89, 0xCC, 0x89, 0xCD, /* 0x08-0x0B */ + 0x89, 0xCE, 0x89, 0xCF, 0x89, 0xD0, 0x89, 0xD1, /* 0x0C-0x0F */ + 0xB5, 0xC6, 0x89, 0xD2, 0x89, 0xD3, 0x89, 0xD4, /* 0x10-0x13 */ + 0x89, 0xD5, 0x89, 0xD6, 0x89, 0xD7, 0x89, 0xD8, /* 0x14-0x17 */ + 0xB5, 0xC7, 0x89, 0xD9, 0x89, 0xDA, 0x89, 0xDB, /* 0x18-0x1B */ + 0xB5, 0xC8, 0x89, 0xDC, 0x89, 0xDD, 0x89, 0xDE, /* 0x1C-0x1F */ + 0xB5, 0xC9, 0x89, 0xDF, 0x89, 0xE0, 0x89, 0xE1, /* 0x20-0x23 */ + 0x89, 0xE2, 0x89, 0xE3, 0x89, 0xE4, 0x89, 0xE5, /* 0x24-0x27 */ + 0xB5, 0xCA, 0xB5, 0xCB, 0x89, 0xE6, 0xB5, 0xCC, /* 0x28-0x2B */ + 0x89, 0xE7, 0x89, 0xE8, 0x89, 0xE9, 0x89, 0xEA, /* 0x2C-0x2F */ + 0x89, 0xEB, 0x89, 0xEC, 0x89, 0xED, 0x89, 0xEE, /* 0x30-0x33 */ + 0xB5, 0xCD, 0x89, 0xEF, 0x89, 0xF0, 0x89, 0xF1, /* 0x34-0x37 */ + 0x89, 0xF2, 0x89, 0xF3, 0x89, 0xF4, 0x89, 0xF5, /* 0x38-0x3B */ + 0x89, 0xF6, 0x89, 0xF7, 0x89, 0xF8, 0x89, 0xF9, /* 0x3C-0x3F */ + 0x89, 0xFA, 0x89, 0xFB, 0x89, 0xFC, 0x89, 0xFD, /* 0x40-0x43 */ + 0x89, 0xFE, 0x8A, 0x41, 0x8A, 0x42, 0x8A, 0x43, /* 0x44-0x47 */ + 0x8A, 0x44, 0x8A, 0x45, 0x8A, 0x46, 0x8A, 0x47, /* 0x48-0x4B */ + 0x8A, 0x48, 0x8A, 0x49, 0x8A, 0x4A, 0x8A, 0x4B, /* 0x4C-0x4F */ + 0xB5, 0xCE, 0xB5, 0xCF, 0x8A, 0x4C, 0x8A, 0x4D, /* 0x50-0x53 */ + 0xB5, 0xD0, 0x8A, 0x4E, 0x8A, 0x4F, 0x8A, 0x50, /* 0x54-0x57 */ + 0xB5, 0xD1, 0x8A, 0x51, 0x8A, 0x52, 0x8A, 0x53, /* 0x58-0x5B */ + 0x8A, 0x54, 0x8A, 0x55, 0x8A, 0x56, 0x8A, 0x57, /* 0x5C-0x5F */ + 0xB5, 0xD2, 0xB5, 0xD3, 0x8A, 0x58, 0xB5, 0xD4, /* 0x60-0x63 */ + 0x8A, 0x59, 0xB5, 0xD5, 0x8A, 0x5A, 0x8A, 0x61, /* 0x64-0x67 */ + 0x8A, 0x62, 0x8A, 0x63, 0x8A, 0x64, 0x8A, 0x65, /* 0x68-0x6B */ + 0xB5, 0xD6, 0x8A, 0x66, 0x8A, 0x67, 0x8A, 0x68, /* 0x6C-0x6F */ + 0x8A, 0x69, 0x8A, 0x6A, 0x8A, 0x6B, 0x8A, 0x6C, /* 0x70-0x73 */ + 0x8A, 0x6D, 0x8A, 0x6E, 0x8A, 0x6F, 0x8A, 0x70, /* 0x74-0x77 */ + 0x8A, 0x71, 0x8A, 0x72, 0x8A, 0x73, 0x8A, 0x74, /* 0x78-0x7B */ + 0x8A, 0x75, 0x8A, 0x76, 0x8A, 0x77, 0x8A, 0x78, /* 0x7C-0x7F */ + + 0xB5, 0xD7, 0x8A, 0x79, 0x8A, 0x7A, 0x8A, 0x81, /* 0x80-0x83 */ + 0x8A, 0x82, 0x8A, 0x83, 0x8A, 0x84, 0x8A, 0x85, /* 0x84-0x87 */ + 0xB5, 0xD8, 0x8A, 0x86, 0x8A, 0x87, 0x8A, 0x88, /* 0x88-0x8B */ + 0x8A, 0x89, 0x8A, 0x8A, 0x8A, 0x8B, 0x8A, 0x8C, /* 0x8C-0x8F */ + 0x8A, 0x8D, 0x8A, 0x8E, 0x8A, 0x8F, 0x8A, 0x90, /* 0x90-0x93 */ + 0x8A, 0x91, 0x8A, 0x92, 0x8A, 0x93, 0x8A, 0x94, /* 0x94-0x97 */ + 0x8A, 0x95, 0x8A, 0x96, 0x8A, 0x97, 0x8A, 0x98, /* 0x98-0x9B */ + 0x8A, 0x99, 0xB5, 0xD9, 0x8A, 0x9A, 0x8A, 0x9B, /* 0x9C-0x9F */ + 0x8A, 0x9C, 0x8A, 0x9D, 0x8A, 0x9E, 0x8A, 0x9F, /* 0xA0-0xA3 */ + 0xB5, 0xDA, 0x8A, 0xA0, 0x8A, 0xA1, 0x8A, 0xA2, /* 0xA4-0xA7 */ + 0xB5, 0xDB, 0x8A, 0xA3, 0x8A, 0xA4, 0x8A, 0xA5, /* 0xA8-0xAB */ + 0xB5, 0xDC, 0x8A, 0xA6, 0x8A, 0xA7, 0x8A, 0xA8, /* 0xAC-0xAF */ + 0x8A, 0xA9, 0x8A, 0xAA, 0x8A, 0xAB, 0x8A, 0xAC, /* 0xB0-0xB3 */ + 0x8A, 0xAD, 0xB5, 0xDD, 0x8A, 0xAE, 0xB5, 0xDE, /* 0xB4-0xB7 */ + 0x8A, 0xAF, 0xB5, 0xDF, 0x8A, 0xB0, 0x8A, 0xB1, /* 0xB8-0xBB */ + 0x8A, 0xB2, 0x8A, 0xB3, 0x8A, 0xB4, 0x8A, 0xB5, /* 0xBC-0xBF */ + 0xB5, 0xE0, 0x8A, 0xB6, 0x8A, 0xB7, 0x8A, 0xB8, /* 0xC0-0xC3 */ + 0xB5, 0xE1, 0x8A, 0xB9, 0x8A, 0xBA, 0x8A, 0xBB, /* 0xC4-0xC7 */ + 0xB5, 0xE2, 0x8A, 0xBC, 0x8A, 0xBD, 0x8A, 0xBE, /* 0xC8-0xCB */ + 0x8A, 0xBF, 0x8A, 0xC0, 0x8A, 0xC1, 0x8A, 0xC2, /* 0xCC-0xCF */ + 0xB5, 0xE3, 0x8A, 0xC3, 0x8A, 0xC4, 0x8A, 0xC5, /* 0xD0-0xD3 */ + 0x8A, 0xC6, 0xB5, 0xE4, 0x8A, 0xC7, 0x8A, 0xC8, /* 0xD4-0xD7 */ + 0x8A, 0xC9, 0x8A, 0xCA, 0x8A, 0xCB, 0x8A, 0xCC, /* 0xD8-0xDB */ + 0xB5, 0xE5, 0xB5, 0xE6, 0x8A, 0xCD, 0x8A, 0xCE, /* 0xDC-0xDF */ + 0xB5, 0xE7, 0x8A, 0xCF, 0x8A, 0xD0, 0xB5, 0xE8, /* 0xE0-0xE3 */ + 0xB5, 0xE9, 0x8A, 0xD1, 0xB5, 0xEA, 0x8A, 0xD2, /* 0xE4-0xE7 */ + 0x8A, 0xD3, 0x8A, 0xD4, 0x8A, 0xD5, 0x8A, 0xD6, /* 0xE8-0xEB */ + 0xB5, 0xEB, 0xB5, 0xEC, 0x8A, 0xD7, 0xB5, 0xED, /* 0xEC-0xEF */ + 0x8A, 0xD8, 0xB5, 0xEE, 0x8A, 0xD9, 0x8A, 0xDA, /* 0xF0-0xF3 */ + 0x8A, 0xDB, 0x8A, 0xDC, 0x8A, 0xDD, 0x8A, 0xDE, /* 0xF4-0xF7 */ + 0xB5, 0xEF, 0x8A, 0xDF, 0x8A, 0xE0, 0x8A, 0xE1, /* 0xF8-0xFB */ + 0x8A, 0xE2, 0x8A, 0xE3, 0x8A, 0xE4, 0x8A, 0xE5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B5[512] = { + 0x8A, 0xE6, 0x8A, 0xE7, 0x8A, 0xE8, 0x8A, 0xE9, /* 0x00-0x03 */ + 0x8A, 0xEA, 0x8A, 0xEB, 0x8A, 0xEC, 0x8A, 0xED, /* 0x04-0x07 */ + 0x8A, 0xEE, 0x8A, 0xEF, 0x8A, 0xF0, 0x8A, 0xF1, /* 0x08-0x0B */ + 0x8A, 0xF2, 0x8A, 0xF3, 0x8A, 0xF4, 0x8A, 0xF5, /* 0x0C-0x0F */ + 0x8A, 0xF6, 0x8A, 0xF7, 0x8A, 0xF8, 0x8A, 0xF9, /* 0x10-0x13 */ + 0xB5, 0xF0, 0xB5, 0xF1, 0x8A, 0xFA, 0x8A, 0xFB, /* 0x14-0x17 */ + 0xB5, 0xF2, 0x8A, 0xFC, 0x8A, 0xFD, 0xB5, 0xF3, /* 0x18-0x1B */ + 0xB5, 0xF4, 0x8A, 0xFE, 0x8B, 0x41, 0x8B, 0x42, /* 0x1C-0x1F */ + 0x8B, 0x43, 0x8B, 0x44, 0x8B, 0x45, 0x8B, 0x46, /* 0x20-0x23 */ + 0xB5, 0xF5, 0xB5, 0xF6, 0x8B, 0x47, 0xB5, 0xF7, /* 0x24-0x27 */ + 0xB5, 0xF8, 0xB5, 0xF9, 0xB5, 0xFA, 0x8B, 0x48, /* 0x28-0x2B */ + 0x8B, 0x49, 0x8B, 0x4A, 0x8B, 0x4B, 0x8B, 0x4C, /* 0x2C-0x2F */ + 0xB5, 0xFB, 0xB5, 0xFC, 0x8B, 0x4D, 0x8B, 0x4E, /* 0x30-0x33 */ + 0xB5, 0xFD, 0x8B, 0x4F, 0x8B, 0x50, 0x8B, 0x51, /* 0x34-0x37 */ + 0xB5, 0xFE, 0x8B, 0x52, 0x8B, 0x53, 0x8B, 0x54, /* 0x38-0x3B */ + 0x8B, 0x55, 0x8B, 0x56, 0x8B, 0x57, 0x8B, 0x58, /* 0x3C-0x3F */ + 0xB6, 0xA1, 0xB6, 0xA2, 0x8B, 0x59, 0xB6, 0xA3, /* 0x40-0x43 */ + 0xB6, 0xA4, 0xB6, 0xA5, 0x8B, 0x5A, 0x8B, 0x61, /* 0x44-0x47 */ + 0x8B, 0x62, 0x8B, 0x63, 0x8B, 0x64, 0xB6, 0xA6, /* 0x48-0x4B */ + 0xB6, 0xA7, 0xB6, 0xA8, 0x8B, 0x65, 0x8B, 0x66, /* 0x4C-0x4F */ + 0xB6, 0xA9, 0x8B, 0x67, 0x8B, 0x68, 0x8B, 0x69, /* 0x50-0x53 */ + 0xB6, 0xAA, 0x8B, 0x6A, 0x8B, 0x6B, 0x8B, 0x6C, /* 0x54-0x57 */ + 0x8B, 0x6D, 0x8B, 0x6E, 0x8B, 0x6F, 0x8B, 0x70, /* 0x58-0x5B */ + 0xB6, 0xAB, 0xB6, 0xAC, 0x8B, 0x71, 0xB6, 0xAD, /* 0x5C-0x5F */ + 0xB6, 0xAE, 0xB6, 0xAF, 0x8B, 0x72, 0x8B, 0x73, /* 0x60-0x63 */ + 0x8B, 0x74, 0x8B, 0x75, 0x8B, 0x76, 0x8B, 0x77, /* 0x64-0x67 */ + 0x8B, 0x78, 0x8B, 0x79, 0x8B, 0x7A, 0x8B, 0x81, /* 0x68-0x6B */ + 0x8B, 0x82, 0x8B, 0x83, 0x8B, 0x84, 0x8B, 0x85, /* 0x6C-0x6F */ + 0x8B, 0x86, 0x8B, 0x87, 0x8B, 0x88, 0x8B, 0x89, /* 0x70-0x73 */ + 0x8B, 0x8A, 0x8B, 0x8B, 0x8B, 0x8C, 0x8B, 0x8D, /* 0x74-0x77 */ + 0x8B, 0x8E, 0x8B, 0x8F, 0x8B, 0x90, 0x8B, 0x91, /* 0x78-0x7B */ + 0x8B, 0x92, 0x8B, 0x93, 0x8B, 0x94, 0x8B, 0x95, /* 0x7C-0x7F */ + + 0x8B, 0x96, 0x8B, 0x97, 0x8B, 0x98, 0x8B, 0x99, /* 0x80-0x83 */ + 0x8B, 0x9A, 0x8B, 0x9B, 0x8B, 0x9C, 0x8B, 0x9D, /* 0x84-0x87 */ + 0x8B, 0x9E, 0x8B, 0x9F, 0x8B, 0xA0, 0x8B, 0xA1, /* 0x88-0x8B */ + 0x8B, 0xA2, 0x8B, 0xA3, 0x8B, 0xA4, 0x8B, 0xA5, /* 0x8C-0x8F */ + 0x8B, 0xA6, 0x8B, 0xA7, 0x8B, 0xA8, 0x8B, 0xA9, /* 0x90-0x93 */ + 0x8B, 0xAA, 0x8B, 0xAB, 0x8B, 0xAC, 0x8B, 0xAD, /* 0x94-0x97 */ + 0x8B, 0xAE, 0x8B, 0xAF, 0x8B, 0xB0, 0x8B, 0xB1, /* 0x98-0x9B */ + 0x8B, 0xB2, 0x8B, 0xB3, 0x8B, 0xB4, 0x8B, 0xB5, /* 0x9C-0x9F */ + 0xB6, 0xB0, 0xB6, 0xB1, 0x8B, 0xB6, 0x8B, 0xB7, /* 0xA0-0xA3 */ + 0xB6, 0xB2, 0x8B, 0xB8, 0x8B, 0xB9, 0x8B, 0xBA, /* 0xA4-0xA7 */ + 0xB6, 0xB3, 0x8B, 0xBB, 0xB6, 0xB4, 0xB6, 0xB5, /* 0xA8-0xAB */ + 0x8B, 0xBC, 0x8B, 0xBD, 0x8B, 0xBE, 0x8B, 0xBF, /* 0xAC-0xAF */ + 0xB6, 0xB6, 0xB6, 0xB7, 0x8B, 0xC0, 0xB6, 0xB8, /* 0xB0-0xB3 */ + 0xB6, 0xB9, 0xB6, 0xBA, 0x8B, 0xC1, 0x8B, 0xC2, /* 0xB4-0xB7 */ + 0x8B, 0xC3, 0x8B, 0xC4, 0x8B, 0xC5, 0xB6, 0xBB, /* 0xB8-0xBB */ + 0xB6, 0xBC, 0xB6, 0xBD, 0x8B, 0xC6, 0x8B, 0xC7, /* 0xBC-0xBF */ + 0xB6, 0xBE, 0x8B, 0xC8, 0x8B, 0xC9, 0x8B, 0xCA, /* 0xC0-0xC3 */ + 0xB6, 0xBF, 0x8B, 0xCB, 0x8B, 0xCC, 0x8B, 0xCD, /* 0xC4-0xC7 */ + 0x8B, 0xCE, 0x8B, 0xCF, 0x8B, 0xD0, 0x8B, 0xD1, /* 0xC8-0xCB */ + 0xB6, 0xC0, 0xB6, 0xC1, 0x8B, 0xD2, 0xB6, 0xC2, /* 0xCC-0xCF */ + 0xB6, 0xC3, 0xB6, 0xC4, 0x8B, 0xD3, 0x8B, 0xD4, /* 0xD0-0xD3 */ + 0x8B, 0xD5, 0x8B, 0xD6, 0x8B, 0xD7, 0x8B, 0xD8, /* 0xD4-0xD7 */ + 0xB6, 0xC5, 0x8B, 0xD9, 0x8B, 0xDA, 0x8B, 0xDB, /* 0xD8-0xDB */ + 0x8B, 0xDC, 0x8B, 0xDD, 0x8B, 0xDE, 0x8B, 0xDF, /* 0xDC-0xDF */ + 0x8B, 0xE0, 0x8B, 0xE1, 0x8B, 0xE2, 0x8B, 0xE3, /* 0xE0-0xE3 */ + 0x8B, 0xE4, 0x8B, 0xE5, 0x8B, 0xE6, 0x8B, 0xE7, /* 0xE4-0xE7 */ + 0x8B, 0xE8, 0x8B, 0xE9, 0x8B, 0xEA, 0x8B, 0xEB, /* 0xE8-0xEB */ + 0xB6, 0xC6, 0x8B, 0xEC, 0x8B, 0xED, 0x8B, 0xEE, /* 0xEC-0xEF */ + 0x8B, 0xEF, 0x8B, 0xF0, 0x8B, 0xF1, 0x8B, 0xF2, /* 0xF0-0xF3 */ + 0x8B, 0xF3, 0x8B, 0xF4, 0x8B, 0xF5, 0x8B, 0xF6, /* 0xF4-0xF7 */ + 0x8B, 0xF7, 0x8B, 0xF8, 0x8B, 0xF9, 0x8B, 0xFA, /* 0xF8-0xFB */ + 0x8B, 0xFB, 0x8B, 0xFC, 0x8B, 0xFD, 0x8B, 0xFE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B6[512] = { + 0x8C, 0x41, 0x8C, 0x42, 0x8C, 0x43, 0x8C, 0x44, /* 0x00-0x03 */ + 0x8C, 0x45, 0x8C, 0x46, 0x8C, 0x47, 0x8C, 0x48, /* 0x04-0x07 */ + 0x8C, 0x49, 0x8C, 0x4A, 0x8C, 0x4B, 0x8C, 0x4C, /* 0x08-0x0B */ + 0x8C, 0x4D, 0x8C, 0x4E, 0x8C, 0x4F, 0x8C, 0x50, /* 0x0C-0x0F */ + 0xB6, 0xC7, 0xB6, 0xC8, 0x8C, 0x51, 0x8C, 0x52, /* 0x10-0x13 */ + 0xB6, 0xC9, 0x8C, 0x53, 0x8C, 0x54, 0x8C, 0x55, /* 0x14-0x17 */ + 0xB6, 0xCA, 0x8C, 0x56, 0x8C, 0x57, 0x8C, 0x58, /* 0x18-0x1B */ + 0x8C, 0x59, 0x8C, 0x5A, 0x8C, 0x61, 0x8C, 0x62, /* 0x1C-0x1F */ + 0x8C, 0x63, 0x8C, 0x64, 0x8C, 0x65, 0x8C, 0x66, /* 0x20-0x23 */ + 0x8C, 0x67, 0xB6, 0xCB, 0x8C, 0x68, 0x8C, 0x69, /* 0x24-0x27 */ + 0x8C, 0x6A, 0x8C, 0x6B, 0x8C, 0x6C, 0x8C, 0x6D, /* 0x28-0x2B */ + 0xB6, 0xCC, 0x8C, 0x6E, 0x8C, 0x6F, 0x8C, 0x70, /* 0x2C-0x2F */ + 0x8C, 0x71, 0x8C, 0x72, 0x8C, 0x73, 0x8C, 0x74, /* 0x30-0x33 */ + 0xB6, 0xCD, 0x8C, 0x75, 0x8C, 0x76, 0x8C, 0x77, /* 0x34-0x37 */ + 0x8C, 0x78, 0x8C, 0x79, 0x8C, 0x7A, 0x8C, 0x81, /* 0x38-0x3B */ + 0x8C, 0x82, 0x8C, 0x83, 0x8C, 0x84, 0x8C, 0x85, /* 0x3C-0x3F */ + 0x8C, 0x86, 0x8C, 0x87, 0x8C, 0x88, 0x8C, 0x89, /* 0x40-0x43 */ + 0x8C, 0x8A, 0x8C, 0x8B, 0x8C, 0x8C, 0x8C, 0x8D, /* 0x44-0x47 */ + 0xB6, 0xCE, 0x8C, 0x8E, 0x8C, 0x8F, 0x8C, 0x90, /* 0x48-0x4B */ + 0x8C, 0x91, 0x8C, 0x92, 0x8C, 0x93, 0x8C, 0x94, /* 0x4C-0x4F */ + 0x8C, 0x95, 0x8C, 0x96, 0x8C, 0x97, 0x8C, 0x98, /* 0x50-0x53 */ + 0x8C, 0x99, 0x8C, 0x9A, 0x8C, 0x9B, 0x8C, 0x9C, /* 0x54-0x57 */ + 0x8C, 0x9D, 0x8C, 0x9E, 0x8C, 0x9F, 0x8C, 0xA0, /* 0x58-0x5B */ + 0x8C, 0xA1, 0x8C, 0xA2, 0x8C, 0xA3, 0x8C, 0xA4, /* 0x5C-0x5F */ + 0x8C, 0xA5, 0x8C, 0xA6, 0x8C, 0xA7, 0x8C, 0xA8, /* 0x60-0x63 */ + 0xB6, 0xCF, 0x8C, 0xA9, 0x8C, 0xAA, 0x8C, 0xAB, /* 0x64-0x67 */ + 0xB6, 0xD0, 0x8C, 0xAC, 0x8C, 0xAD, 0x8C, 0xAE, /* 0x68-0x6B */ + 0x8C, 0xAF, 0x8C, 0xB0, 0x8C, 0xB1, 0x8C, 0xB2, /* 0x6C-0x6F */ + 0x8C, 0xB3, 0x8C, 0xB4, 0x8C, 0xB5, 0x8C, 0xB6, /* 0x70-0x73 */ + 0x8C, 0xB7, 0x8C, 0xB8, 0x8C, 0xB9, 0x8C, 0xBA, /* 0x74-0x77 */ + 0x8C, 0xBB, 0x8C, 0xBC, 0x8C, 0xBD, 0x8C, 0xBE, /* 0x78-0x7B */ + 0x8C, 0xBF, 0x8C, 0xC0, 0x8C, 0xC1, 0x8C, 0xC2, /* 0x7C-0x7F */ + + 0x8C, 0xC3, 0x8C, 0xC4, 0x8C, 0xC5, 0x8C, 0xC6, /* 0x80-0x83 */ + 0x8C, 0xC7, 0x8C, 0xC8, 0x8C, 0xC9, 0x8C, 0xCA, /* 0x84-0x87 */ + 0x8C, 0xCB, 0x8C, 0xCC, 0x8C, 0xCD, 0x8C, 0xCE, /* 0x88-0x8B */ + 0x8C, 0xCF, 0x8C, 0xD0, 0x8C, 0xD1, 0x8C, 0xD2, /* 0x8C-0x8F */ + 0x8C, 0xD3, 0x8C, 0xD4, 0x8C, 0xD5, 0x8C, 0xD6, /* 0x90-0x93 */ + 0x8C, 0xD7, 0x8C, 0xD8, 0x8C, 0xD9, 0x8C, 0xDA, /* 0x94-0x97 */ + 0x8C, 0xDB, 0x8C, 0xDC, 0x8C, 0xDD, 0x8C, 0xDE, /* 0x98-0x9B */ + 0xB6, 0xD1, 0xB6, 0xD2, 0x8C, 0xDF, 0x8C, 0xE0, /* 0x9C-0x9F */ + 0xB6, 0xD3, 0x8C, 0xE1, 0x8C, 0xE2, 0x8C, 0xE3, /* 0xA0-0xA3 */ + 0xB6, 0xD4, 0x8C, 0xE4, 0x8C, 0xE5, 0x8C, 0xE6, /* 0xA4-0xA7 */ + 0x8C, 0xE7, 0x8C, 0xE8, 0x8C, 0xE9, 0xB6, 0xD5, /* 0xA8-0xAB */ + 0xB6, 0xD6, 0x8C, 0xEA, 0x8C, 0xEB, 0x8C, 0xEC, /* 0xAC-0xAF */ + 0x8C, 0xED, 0xB6, 0xD7, 0x8C, 0xEE, 0x8C, 0xEF, /* 0xB0-0xB3 */ + 0x8C, 0xF0, 0x8C, 0xF1, 0x8C, 0xF2, 0x8C, 0xF3, /* 0xB4-0xB7 */ + 0x8C, 0xF4, 0x8C, 0xF5, 0x8C, 0xF6, 0x8C, 0xF7, /* 0xB8-0xBB */ + 0x8C, 0xF8, 0x8C, 0xF9, 0x8C, 0xFA, 0x8C, 0xFB, /* 0xBC-0xBF */ + 0x8C, 0xFC, 0x8C, 0xFD, 0x8C, 0xFE, 0x8D, 0x41, /* 0xC0-0xC3 */ + 0x8D, 0x42, 0x8D, 0x43, 0x8D, 0x44, 0x8D, 0x45, /* 0xC4-0xC7 */ + 0x8D, 0x46, 0x8D, 0x47, 0x8D, 0x48, 0x8D, 0x49, /* 0xC8-0xCB */ + 0x8D, 0x4A, 0x8D, 0x4B, 0x8D, 0x4C, 0x8D, 0x4D, /* 0xCC-0xCF */ + 0x8D, 0x4E, 0x8D, 0x4F, 0x8D, 0x50, 0x8D, 0x51, /* 0xD0-0xD3 */ + 0xB6, 0xD8, 0x8D, 0x52, 0x8D, 0x53, 0x8D, 0x54, /* 0xD4-0xD7 */ + 0x8D, 0x55, 0x8D, 0x56, 0x8D, 0x57, 0x8D, 0x58, /* 0xD8-0xDB */ + 0x8D, 0x59, 0x8D, 0x5A, 0x8D, 0x61, 0x8D, 0x62, /* 0xDC-0xDF */ + 0x8D, 0x63, 0x8D, 0x64, 0x8D, 0x65, 0x8D, 0x66, /* 0xE0-0xE3 */ + 0x8D, 0x67, 0x8D, 0x68, 0x8D, 0x69, 0x8D, 0x6A, /* 0xE4-0xE7 */ + 0x8D, 0x6B, 0x8D, 0x6C, 0x8D, 0x6D, 0x8D, 0x6E, /* 0xE8-0xEB */ + 0x8D, 0x6F, 0x8D, 0x70, 0x8D, 0x71, 0x8D, 0x72, /* 0xEC-0xEF */ + 0xB6, 0xD9, 0x8D, 0x73, 0x8D, 0x74, 0x8D, 0x75, /* 0xF0-0xF3 */ + 0xB6, 0xDA, 0x8D, 0x76, 0x8D, 0x77, 0x8D, 0x78, /* 0xF4-0xF7 */ + 0xB6, 0xDB, 0x8D, 0x79, 0x8D, 0x7A, 0x8D, 0x81, /* 0xF8-0xFB */ + 0x8D, 0x82, 0x8D, 0x83, 0x8D, 0x84, 0x8D, 0x85, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B7[512] = { + 0xB6, 0xDC, 0xB6, 0xDD, 0x8D, 0x86, 0x8D, 0x87, /* 0x00-0x03 */ + 0x8D, 0x88, 0xB6, 0xDE, 0x8D, 0x89, 0x8D, 0x8A, /* 0x04-0x07 */ + 0x8D, 0x8B, 0x8D, 0x8C, 0x8D, 0x8D, 0x8D, 0x8E, /* 0x08-0x0B */ + 0x8D, 0x8F, 0x8D, 0x90, 0x8D, 0x91, 0x8D, 0x92, /* 0x0C-0x0F */ + 0x8D, 0x93, 0x8D, 0x94, 0x8D, 0x95, 0x8D, 0x96, /* 0x10-0x13 */ + 0x8D, 0x97, 0x8D, 0x98, 0x8D, 0x99, 0x8D, 0x9A, /* 0x14-0x17 */ + 0x8D, 0x9B, 0x8D, 0x9C, 0x8D, 0x9D, 0x8D, 0x9E, /* 0x18-0x1B */ + 0x8D, 0x9F, 0x8D, 0xA0, 0x8D, 0xA1, 0x8D, 0xA2, /* 0x1C-0x1F */ + 0x8D, 0xA3, 0x8D, 0xA4, 0x8D, 0xA5, 0x8D, 0xA6, /* 0x20-0x23 */ + 0x8D, 0xA7, 0x8D, 0xA8, 0x8D, 0xA9, 0x8D, 0xAA, /* 0x24-0x27 */ + 0xB6, 0xDF, 0xB6, 0xE0, 0x8D, 0xAB, 0x8D, 0xAC, /* 0x28-0x2B */ + 0xB6, 0xE1, 0x8D, 0xAD, 0x8D, 0xAE, 0xB6, 0xE2, /* 0x2C-0x2F */ + 0xB6, 0xE3, 0x8D, 0xAF, 0x8D, 0xB0, 0x8D, 0xB1, /* 0x30-0x33 */ + 0x8D, 0xB2, 0x8D, 0xB3, 0x8D, 0xB4, 0x8D, 0xB5, /* 0x34-0x37 */ + 0xB6, 0xE4, 0xB6, 0xE5, 0x8D, 0xB6, 0xB6, 0xE6, /* 0x38-0x3B */ + 0x8D, 0xB7, 0x8D, 0xB8, 0x8D, 0xB9, 0x8D, 0xBA, /* 0x3C-0x3F */ + 0x8D, 0xBB, 0x8D, 0xBC, 0x8D, 0xBD, 0x8D, 0xBE, /* 0x40-0x43 */ + 0xB6, 0xE7, 0x8D, 0xBF, 0x8D, 0xC0, 0x8D, 0xC1, /* 0x44-0x47 */ + 0xB6, 0xE8, 0x8D, 0xC2, 0x8D, 0xC3, 0x8D, 0xC4, /* 0x48-0x4B */ + 0xB6, 0xE9, 0x8D, 0xC5, 0x8D, 0xC6, 0x8D, 0xC7, /* 0x4C-0x4F */ + 0x8D, 0xC8, 0x8D, 0xC9, 0x8D, 0xCA, 0x8D, 0xCB, /* 0x50-0x53 */ + 0xB6, 0xEA, 0xB6, 0xEB, 0x8D, 0xCC, 0x8D, 0xCD, /* 0x54-0x57 */ + 0x8D, 0xCE, 0x8D, 0xCF, 0x8D, 0xD0, 0x8D, 0xD1, /* 0x58-0x5B */ + 0x8D, 0xD2, 0x8D, 0xD3, 0x8D, 0xD4, 0x8D, 0xD5, /* 0x5C-0x5F */ + 0xB6, 0xEC, 0x8D, 0xD6, 0x8D, 0xD7, 0x8D, 0xD8, /* 0x60-0x63 */ + 0xB6, 0xED, 0x8D, 0xD9, 0x8D, 0xDA, 0x8D, 0xDB, /* 0x64-0x67 */ + 0xB6, 0xEE, 0x8D, 0xDC, 0x8D, 0xDD, 0x8D, 0xDE, /* 0x68-0x6B */ + 0x8D, 0xDF, 0x8D, 0xE0, 0x8D, 0xE1, 0x8D, 0xE2, /* 0x6C-0x6F */ + 0xB6, 0xEF, 0xB6, 0xF0, 0x8D, 0xE3, 0xB6, 0xF1, /* 0x70-0x73 */ + 0x8D, 0xE4, 0xB6, 0xF2, 0x8D, 0xE5, 0x8D, 0xE6, /* 0x74-0x77 */ + 0x8D, 0xE7, 0x8D, 0xE8, 0x8D, 0xE9, 0x8D, 0xEA, /* 0x78-0x7B */ + 0xB6, 0xF3, 0xB6, 0xF4, 0x8D, 0xEB, 0x8D, 0xEC, /* 0x7C-0x7F */ + + 0xB6, 0xF5, 0x8D, 0xED, 0x8D, 0xEE, 0x8D, 0xEF, /* 0x80-0x83 */ + 0xB6, 0xF6, 0x8D, 0xF0, 0x8D, 0xF1, 0x8D, 0xF2, /* 0x84-0x87 */ + 0x8D, 0xF3, 0x8D, 0xF4, 0x8D, 0xF5, 0x8D, 0xF6, /* 0x88-0x8B */ + 0xB6, 0xF7, 0xB6, 0xF8, 0x8D, 0xF7, 0xB6, 0xF9, /* 0x8C-0x8F */ + 0xB6, 0xFA, 0xB6, 0xFB, 0xB6, 0xFC, 0x8D, 0xF8, /* 0x90-0x93 */ + 0x8D, 0xF9, 0x8D, 0xFA, 0xB6, 0xFD, 0xB6, 0xFE, /* 0x94-0x97 */ + 0xB7, 0xA1, 0xB7, 0xA2, 0x8D, 0xFB, 0x8D, 0xFC, /* 0x98-0x9B */ + 0xB7, 0xA3, 0x8D, 0xFD, 0x8D, 0xFE, 0x8E, 0x41, /* 0x9C-0x9F */ + 0xB7, 0xA4, 0x8E, 0x42, 0x8E, 0x43, 0x8E, 0x44, /* 0xA0-0xA3 */ + 0x8E, 0x45, 0x8E, 0x46, 0x8E, 0x47, 0x8E, 0x48, /* 0xA4-0xA7 */ + 0xB7, 0xA5, 0xB7, 0xA6, 0x8E, 0x49, 0xB7, 0xA7, /* 0xA8-0xAB */ + 0xB7, 0xA8, 0xB7, 0xA9, 0x8E, 0x4A, 0x8E, 0x4B, /* 0xAC-0xAF */ + 0x8E, 0x4C, 0x8E, 0x4D, 0x8E, 0x4E, 0x8E, 0x4F, /* 0xB0-0xB3 */ + 0xB7, 0xAA, 0xB7, 0xAB, 0x8E, 0x50, 0x8E, 0x51, /* 0xB4-0xB7 */ + 0xB7, 0xAC, 0x8E, 0x52, 0x8E, 0x53, 0x8E, 0x54, /* 0xB8-0xBB */ + 0x8E, 0x55, 0x8E, 0x56, 0x8E, 0x57, 0x8E, 0x58, /* 0xBC-0xBF */ + 0x8E, 0x59, 0x8E, 0x5A, 0x8E, 0x61, 0x8E, 0x62, /* 0xC0-0xC3 */ + 0x8E, 0x63, 0x8E, 0x64, 0x8E, 0x65, 0xB7, 0xAD, /* 0xC4-0xC7 */ + 0x8E, 0x66, 0xB7, 0xAE, 0x8E, 0x67, 0x8E, 0x68, /* 0xC8-0xCB */ + 0x8E, 0x69, 0x8E, 0x6A, 0x8E, 0x6B, 0x8E, 0x6C, /* 0xCC-0xCF */ + 0x8E, 0x6D, 0x8E, 0x6E, 0x8E, 0x6F, 0x8E, 0x70, /* 0xD0-0xD3 */ + 0x8E, 0x71, 0x8E, 0x72, 0x8E, 0x73, 0x8E, 0x74, /* 0xD4-0xD7 */ + 0x8E, 0x75, 0x8E, 0x76, 0x8E, 0x77, 0x8E, 0x78, /* 0xD8-0xDB */ + 0x8E, 0x79, 0x8E, 0x7A, 0x8E, 0x81, 0x8E, 0x82, /* 0xDC-0xDF */ + 0x8E, 0x83, 0x8E, 0x84, 0x8E, 0x85, 0x8E, 0x86, /* 0xE0-0xE3 */ + 0x8E, 0x87, 0x8E, 0x88, 0x8E, 0x89, 0x8E, 0x8A, /* 0xE4-0xE7 */ + 0x8E, 0x8B, 0x8E, 0x8C, 0x8E, 0x8D, 0x8E, 0x8E, /* 0xE8-0xEB */ + 0xB7, 0xAF, 0xB7, 0xB0, 0x8E, 0x8F, 0x8E, 0x90, /* 0xEC-0xEF */ + 0xB7, 0xB1, 0x8E, 0x91, 0x8E, 0x92, 0x8E, 0x93, /* 0xF0-0xF3 */ + 0xB7, 0xB2, 0x8E, 0x94, 0x8E, 0x95, 0x8E, 0x96, /* 0xF4-0xF7 */ + 0x8E, 0x97, 0x8E, 0x98, 0x8E, 0x99, 0x8E, 0x9A, /* 0xF8-0xFB */ + 0xB7, 0xB3, 0xB7, 0xB4, 0x8E, 0x9B, 0xB7, 0xB5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B8[512] = { + 0xB7, 0xB6, 0xB7, 0xB7, 0x8E, 0x9C, 0x8E, 0x9D, /* 0x00-0x03 */ + 0x8E, 0x9E, 0x8E, 0x9F, 0x8E, 0xA0, 0xB7, 0xB8, /* 0x04-0x07 */ + 0xB7, 0xB9, 0xB7, 0xBA, 0x8E, 0xA1, 0x8E, 0xA2, /* 0x08-0x0B */ + 0xB7, 0xBB, 0x8E, 0xA3, 0x8E, 0xA4, 0x8E, 0xA5, /* 0x0C-0x0F */ + 0xB7, 0xBC, 0x8E, 0xA6, 0x8E, 0xA7, 0x8E, 0xA8, /* 0x10-0x13 */ + 0x8E, 0xA9, 0x8E, 0xAA, 0x8E, 0xAB, 0x8E, 0xAC, /* 0x14-0x17 */ + 0xB7, 0xBD, 0xB7, 0xBE, 0x8E, 0xAD, 0xB7, 0xBF, /* 0x18-0x1B */ + 0x8E, 0xAE, 0xB7, 0xC0, 0x8E, 0xAF, 0x8E, 0xB0, /* 0x1C-0x1F */ + 0x8E, 0xB1, 0x8E, 0xB2, 0x8E, 0xB3, 0x8E, 0xB4, /* 0x20-0x23 */ + 0xB7, 0xC1, 0xB7, 0xC2, 0x8E, 0xB5, 0x8E, 0xB6, /* 0x24-0x27 */ + 0xB7, 0xC3, 0x8E, 0xB7, 0x8E, 0xB8, 0x8E, 0xB9, /* 0x28-0x2B */ + 0xB7, 0xC4, 0x8E, 0xBA, 0x8E, 0xBB, 0x8E, 0xBC, /* 0x2C-0x2F */ + 0x8E, 0xBD, 0x8E, 0xBE, 0x8E, 0xBF, 0x8E, 0xC0, /* 0x30-0x33 */ + 0xB7, 0xC5, 0xB7, 0xC6, 0x8E, 0xC1, 0xB7, 0xC7, /* 0x34-0x37 */ + 0xB7, 0xC8, 0xB7, 0xC9, 0x8E, 0xC2, 0x8E, 0xC3, /* 0x38-0x3B */ + 0x8E, 0xC4, 0x8E, 0xC5, 0x8E, 0xC6, 0x8E, 0xC7, /* 0x3C-0x3F */ + 0xB7, 0xCA, 0x8E, 0xC8, 0x8E, 0xC9, 0x8E, 0xCA, /* 0x40-0x43 */ + 0xB7, 0xCB, 0x8E, 0xCB, 0x8E, 0xCC, 0x8E, 0xCD, /* 0x44-0x47 */ + 0x8E, 0xCE, 0x8E, 0xCF, 0x8E, 0xD0, 0x8E, 0xD1, /* 0x48-0x4B */ + 0x8E, 0xD2, 0x8E, 0xD3, 0x8E, 0xD4, 0x8E, 0xD5, /* 0x4C-0x4F */ + 0x8E, 0xD6, 0xB7, 0xCC, 0x8E, 0xD7, 0xB7, 0xCD, /* 0x50-0x53 */ + 0x8E, 0xD8, 0x8E, 0xD9, 0x8E, 0xDA, 0x8E, 0xDB, /* 0x54-0x57 */ + 0x8E, 0xDC, 0x8E, 0xDD, 0x8E, 0xDE, 0x8E, 0xDF, /* 0x58-0x5B */ + 0xB7, 0xCE, 0xB7, 0xCF, 0x8E, 0xE0, 0x8E, 0xE1, /* 0x5C-0x5F */ + 0xB7, 0xD0, 0x8E, 0xE2, 0x8E, 0xE3, 0x8E, 0xE4, /* 0x60-0x63 */ + 0xB7, 0xD1, 0x8E, 0xE5, 0x8E, 0xE6, 0x8E, 0xE7, /* 0x64-0x67 */ + 0x8E, 0xE8, 0x8E, 0xE9, 0x8E, 0xEA, 0x8E, 0xEB, /* 0x68-0x6B */ + 0xB7, 0xD2, 0xB7, 0xD3, 0x8E, 0xEC, 0xB7, 0xD4, /* 0x6C-0x6F */ + 0x8E, 0xED, 0xB7, 0xD5, 0x8E, 0xEE, 0x8E, 0xEF, /* 0x70-0x73 */ + 0x8E, 0xF0, 0x8E, 0xF1, 0x8E, 0xF2, 0x8E, 0xF3, /* 0x74-0x77 */ + 0xB7, 0xD6, 0x8E, 0xF4, 0x8E, 0xF5, 0x8E, 0xF6, /* 0x78-0x7B */ + 0xB7, 0xD7, 0x8E, 0xF7, 0x8E, 0xF8, 0x8E, 0xF9, /* 0x7C-0x7F */ + + 0x8E, 0xFA, 0x8E, 0xFB, 0x8E, 0xFC, 0x8E, 0xFD, /* 0x80-0x83 */ + 0x8E, 0xFE, 0x8F, 0x41, 0x8F, 0x42, 0x8F, 0x43, /* 0x84-0x87 */ + 0x8F, 0x44, 0x8F, 0x45, 0x8F, 0x46, 0x8F, 0x47, /* 0x88-0x8B */ + 0x8F, 0x48, 0xB7, 0xD8, 0x8F, 0x49, 0x8F, 0x4A, /* 0x8C-0x8F */ + 0x8F, 0x4B, 0x8F, 0x4C, 0x8F, 0x4D, 0x8F, 0x4E, /* 0x90-0x93 */ + 0x8F, 0x4F, 0x8F, 0x50, 0x8F, 0x51, 0x8F, 0x52, /* 0x94-0x97 */ + 0x8F, 0x53, 0x8F, 0x54, 0x8F, 0x55, 0x8F, 0x56, /* 0x98-0x9B */ + 0x8F, 0x57, 0x8F, 0x58, 0x8F, 0x59, 0x8F, 0x5A, /* 0x9C-0x9F */ + 0x8F, 0x61, 0x8F, 0x62, 0x8F, 0x63, 0x8F, 0x64, /* 0xA0-0xA3 */ + 0x8F, 0x65, 0x8F, 0x66, 0x8F, 0x67, 0x8F, 0x68, /* 0xA4-0xA7 */ + 0xB7, 0xD9, 0x8F, 0x69, 0x8F, 0x6A, 0x8F, 0x6B, /* 0xA8-0xAB */ + 0x8F, 0x6C, 0x8F, 0x6D, 0x8F, 0x6E, 0x8F, 0x6F, /* 0xAC-0xAF */ + 0xB7, 0xDA, 0x8F, 0x70, 0x8F, 0x71, 0x8F, 0x72, /* 0xB0-0xB3 */ + 0xB7, 0xDB, 0x8F, 0x73, 0x8F, 0x74, 0x8F, 0x75, /* 0xB4-0xB7 */ + 0xB7, 0xDC, 0x8F, 0x76, 0x8F, 0x77, 0x8F, 0x78, /* 0xB8-0xBB */ + 0x8F, 0x79, 0x8F, 0x7A, 0x8F, 0x81, 0x8F, 0x82, /* 0xBC-0xBF */ + 0xB7, 0xDD, 0xB7, 0xDE, 0x8F, 0x83, 0xB7, 0xDF, /* 0xC0-0xC3 */ + 0x8F, 0x84, 0xB7, 0xE0, 0x8F, 0x85, 0x8F, 0x86, /* 0xC4-0xC7 */ + 0x8F, 0x87, 0x8F, 0x88, 0x8F, 0x89, 0x8F, 0x8A, /* 0xC8-0xCB */ + 0xB7, 0xE1, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8D, /* 0xCC-0xCF */ + 0xB7, 0xE2, 0x8F, 0x8E, 0x8F, 0x8F, 0x8F, 0x90, /* 0xD0-0xD3 */ + 0xB7, 0xE3, 0x8F, 0x91, 0x8F, 0x92, 0x8F, 0x93, /* 0xD4-0xD7 */ + 0x8F, 0x94, 0x8F, 0x95, 0x8F, 0x96, 0x8F, 0x97, /* 0xD8-0xDB */ + 0x8F, 0x98, 0xB7, 0xE4, 0x8F, 0x99, 0xB7, 0xE5, /* 0xDC-0xDF */ + 0x8F, 0x9A, 0xB7, 0xE6, 0x8F, 0x9B, 0x8F, 0x9C, /* 0xE0-0xE3 */ + 0x8F, 0x9D, 0x8F, 0x9E, 0x8F, 0x9F, 0x8F, 0xA0, /* 0xE4-0xE7 */ + 0xB7, 0xE7, 0xB7, 0xE8, 0x8F, 0xA1, 0x8F, 0xA2, /* 0xE8-0xEB */ + 0xB7, 0xE9, 0x8F, 0xA3, 0x8F, 0xA4, 0x8F, 0xA5, /* 0xEC-0xEF */ + 0xB7, 0xEA, 0x8F, 0xA6, 0x8F, 0xA7, 0x8F, 0xA8, /* 0xF0-0xF3 */ + 0x8F, 0xA9, 0x8F, 0xAA, 0x8F, 0xAB, 0x8F, 0xAC, /* 0xF4-0xF7 */ + 0xB7, 0xEB, 0xB7, 0xEC, 0x8F, 0xAD, 0xB7, 0xED, /* 0xF8-0xFB */ + 0x8F, 0xAE, 0xB7, 0xEE, 0x8F, 0xAF, 0x8F, 0xB0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B9[512] = { + 0x8F, 0xB1, 0x8F, 0xB2, 0x8F, 0xB3, 0x8F, 0xB4, /* 0x00-0x03 */ + 0xB7, 0xEF, 0x8F, 0xB5, 0x8F, 0xB6, 0x8F, 0xB7, /* 0x04-0x07 */ + 0x8F, 0xB8, 0x8F, 0xB9, 0x8F, 0xBA, 0x8F, 0xBB, /* 0x08-0x0B */ + 0x8F, 0xBC, 0x8F, 0xBD, 0x8F, 0xBE, 0x8F, 0xBF, /* 0x0C-0x0F */ + 0x8F, 0xC0, 0x8F, 0xC1, 0x8F, 0xC2, 0x8F, 0xC3, /* 0x10-0x13 */ + 0x8F, 0xC4, 0x8F, 0xC5, 0x8F, 0xC6, 0x8F, 0xC7, /* 0x14-0x17 */ + 0xB7, 0xF0, 0x8F, 0xC8, 0x8F, 0xC9, 0x8F, 0xCA, /* 0x18-0x1B */ + 0x8F, 0xCB, 0x8F, 0xCC, 0x8F, 0xCD, 0x8F, 0xCE, /* 0x1C-0x1F */ + 0xB7, 0xF1, 0x8F, 0xCF, 0x8F, 0xD0, 0x8F, 0xD1, /* 0x20-0x23 */ + 0x8F, 0xD2, 0x8F, 0xD3, 0x8F, 0xD4, 0x8F, 0xD5, /* 0x24-0x27 */ + 0x8F, 0xD6, 0x8F, 0xD7, 0x8F, 0xD8, 0x8F, 0xD9, /* 0x28-0x2B */ + 0x8F, 0xDA, 0x8F, 0xDB, 0x8F, 0xDC, 0x8F, 0xDD, /* 0x2C-0x2F */ + 0x8F, 0xDE, 0x8F, 0xDF, 0x8F, 0xE0, 0x8F, 0xE1, /* 0x30-0x33 */ + 0x8F, 0xE2, 0x8F, 0xE3, 0x8F, 0xE4, 0x8F, 0xE5, /* 0x34-0x37 */ + 0x8F, 0xE6, 0x8F, 0xE7, 0x8F, 0xE8, 0x8F, 0xE9, /* 0x38-0x3B */ + 0xB7, 0xF2, 0xB7, 0xF3, 0x8F, 0xEA, 0x8F, 0xEB, /* 0x3C-0x3F */ + 0xB7, 0xF4, 0x8F, 0xEC, 0x8F, 0xED, 0x8F, 0xEE, /* 0x40-0x43 */ + 0xB7, 0xF5, 0x8F, 0xEF, 0x8F, 0xF0, 0x8F, 0xF1, /* 0x44-0x47 */ + 0x8F, 0xF2, 0x8F, 0xF3, 0x8F, 0xF4, 0x8F, 0xF5, /* 0x48-0x4B */ + 0xB7, 0xF6, 0x8F, 0xF6, 0x8F, 0xF7, 0xB7, 0xF7, /* 0x4C-0x4F */ + 0x8F, 0xF8, 0xB7, 0xF8, 0x8F, 0xF9, 0x8F, 0xFA, /* 0x50-0x53 */ + 0x8F, 0xFB, 0x8F, 0xFC, 0x8F, 0xFD, 0x8F, 0xFE, /* 0x54-0x57 */ + 0xB7, 0xF9, 0xB7, 0xFA, 0x90, 0x41, 0x90, 0x42, /* 0x58-0x5B */ + 0xB7, 0xFB, 0x90, 0x43, 0x90, 0x44, 0x90, 0x45, /* 0x5C-0x5F */ + 0xB7, 0xFC, 0x90, 0x46, 0x90, 0x47, 0x90, 0x48, /* 0x60-0x63 */ + 0x90, 0x49, 0x90, 0x4A, 0x90, 0x4B, 0x90, 0x4C, /* 0x64-0x67 */ + 0xB7, 0xFD, 0xB7, 0xFE, 0x90, 0x4D, 0xB8, 0xA1, /* 0x68-0x6B */ + 0x90, 0x4E, 0xB8, 0xA2, 0x90, 0x4F, 0x90, 0x50, /* 0x6C-0x6F */ + 0x90, 0x51, 0x90, 0x52, 0x90, 0x53, 0x90, 0x54, /* 0x70-0x73 */ + 0xB8, 0xA3, 0xB8, 0xA4, 0x90, 0x55, 0x90, 0x56, /* 0x74-0x77 */ + 0xB8, 0xA5, 0x90, 0x57, 0x90, 0x58, 0x90, 0x59, /* 0x78-0x7B */ + 0xB8, 0xA6, 0x90, 0x5A, 0x90, 0x61, 0x90, 0x62, /* 0x7C-0x7F */ + + 0x90, 0x63, 0x90, 0x64, 0x90, 0x65, 0x90, 0x66, /* 0x80-0x83 */ + 0xB8, 0xA7, 0xB8, 0xA8, 0x90, 0x67, 0xB8, 0xA9, /* 0x84-0x87 */ + 0x90, 0x68, 0xB8, 0xAA, 0xB8, 0xAB, 0x90, 0x69, /* 0x88-0x8B */ + 0x90, 0x6A, 0xB8, 0xAC, 0xB8, 0xAD, 0x90, 0x6B, /* 0x8C-0x8F */ + 0x90, 0x6C, 0x90, 0x6D, 0x90, 0x6E, 0x90, 0x6F, /* 0x90-0x93 */ + 0x90, 0x70, 0x90, 0x71, 0x90, 0x72, 0x90, 0x73, /* 0x94-0x97 */ + 0x90, 0x74, 0x90, 0x75, 0x90, 0x76, 0x90, 0x77, /* 0x98-0x9B */ + 0x90, 0x78, 0x90, 0x79, 0x90, 0x7A, 0x90, 0x81, /* 0x9C-0x9F */ + 0x90, 0x82, 0x90, 0x83, 0x90, 0x84, 0x90, 0x85, /* 0xA0-0xA3 */ + 0x90, 0x86, 0x90, 0x87, 0x90, 0x88, 0x90, 0x89, /* 0xA4-0xA7 */ + 0x90, 0x8A, 0x90, 0x8B, 0x90, 0x8C, 0x90, 0x8D, /* 0xA8-0xAB */ + 0xB8, 0xAE, 0xB8, 0xAF, 0x90, 0x8E, 0x90, 0x8F, /* 0xAC-0xAF */ + 0xB8, 0xB0, 0x90, 0x90, 0x90, 0x91, 0x90, 0x92, /* 0xB0-0xB3 */ + 0xB8, 0xB1, 0x90, 0x93, 0x90, 0x94, 0x90, 0x95, /* 0xB4-0xB7 */ + 0x90, 0x96, 0x90, 0x97, 0x90, 0x98, 0x90, 0x99, /* 0xB8-0xBB */ + 0xB8, 0xB2, 0xB8, 0xB3, 0x90, 0x9A, 0xB8, 0xB4, /* 0xBC-0xBF */ + 0x90, 0x9B, 0xB8, 0xB5, 0x90, 0x9C, 0x90, 0x9D, /* 0xC0-0xC3 */ + 0x90, 0x9E, 0x90, 0x9F, 0x90, 0xA0, 0x90, 0xA1, /* 0xC4-0xC7 */ + 0xB8, 0xB6, 0xB8, 0xB7, 0x90, 0xA2, 0x90, 0xA3, /* 0xC8-0xCB */ + 0xB8, 0xB8, 0x90, 0xA4, 0xB8, 0xB9, 0xB8, 0xBA, /* 0xCC-0xCF */ + 0xB8, 0xBB, 0xB8, 0xBC, 0xB8, 0xBD, 0x90, 0xA5, /* 0xD0-0xD3 */ + 0x90, 0xA6, 0x90, 0xA7, 0x90, 0xA8, 0x90, 0xA9, /* 0xD4-0xD7 */ + 0xB8, 0xBE, 0xB8, 0xBF, 0x90, 0xAA, 0xB8, 0xC0, /* 0xD8-0xDB */ + 0x90, 0xAB, 0xB8, 0xC1, 0xB8, 0xC2, 0x90, 0xAC, /* 0xDC-0xDF */ + 0x90, 0xAD, 0xB8, 0xC3, 0x90, 0xAE, 0xB8, 0xC4, /* 0xE0-0xE3 */ + 0xB8, 0xC5, 0xB8, 0xC6, 0x90, 0xAF, 0x90, 0xB0, /* 0xE4-0xE7 */ + 0xB8, 0xC7, 0x90, 0xB1, 0x90, 0xB2, 0x90, 0xB3, /* 0xE8-0xEB */ + 0xB8, 0xC8, 0x90, 0xB4, 0x90, 0xB5, 0x90, 0xB6, /* 0xEC-0xEF */ + 0x90, 0xB7, 0x90, 0xB8, 0x90, 0xB9, 0x90, 0xBA, /* 0xF0-0xF3 */ + 0xB8, 0xC9, 0xB8, 0xCA, 0x90, 0xBB, 0xB8, 0xCB, /* 0xF4-0xF7 */ + 0xB8, 0xCC, 0xB8, 0xCD, 0xB8, 0xCE, 0x90, 0xBC, /* 0xF8-0xFB */ + 0x90, 0xBD, 0x90, 0xBE, 0x90, 0xBF, 0x90, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BA[512] = { + 0xB8, 0xCF, 0xB8, 0xD0, 0x90, 0xC1, 0x90, 0xC2, /* 0x00-0x03 */ + 0x90, 0xC3, 0x90, 0xC4, 0x90, 0xC5, 0x90, 0xC6, /* 0x04-0x07 */ + 0xB8, 0xD1, 0x90, 0xC7, 0x90, 0xC8, 0x90, 0xC9, /* 0x08-0x0B */ + 0x90, 0xCA, 0x90, 0xCB, 0x90, 0xCC, 0x90, 0xCD, /* 0x0C-0x0F */ + 0x90, 0xCE, 0x90, 0xCF, 0x90, 0xD0, 0x90, 0xD1, /* 0x10-0x13 */ + 0x90, 0xD2, 0xB8, 0xD2, 0x90, 0xD3, 0x90, 0xD4, /* 0x14-0x17 */ + 0x90, 0xD5, 0x90, 0xD6, 0x90, 0xD7, 0x90, 0xD8, /* 0x18-0x1B */ + 0x90, 0xD9, 0x90, 0xDA, 0x90, 0xDB, 0x90, 0xDC, /* 0x1C-0x1F */ + 0x90, 0xDD, 0x90, 0xDE, 0x90, 0xDF, 0x90, 0xE0, /* 0x20-0x23 */ + 0x90, 0xE1, 0x90, 0xE2, 0x90, 0xE3, 0x90, 0xE4, /* 0x24-0x27 */ + 0x90, 0xE5, 0x90, 0xE6, 0x90, 0xE7, 0x90, 0xE8, /* 0x28-0x2B */ + 0x90, 0xE9, 0x90, 0xEA, 0x90, 0xEB, 0x90, 0xEC, /* 0x2C-0x2F */ + 0x90, 0xED, 0x90, 0xEE, 0x90, 0xEF, 0x90, 0xF0, /* 0x30-0x33 */ + 0x90, 0xF1, 0x90, 0xF2, 0x90, 0xF3, 0x90, 0xF4, /* 0x34-0x37 */ + 0xB8, 0xD3, 0xB8, 0xD4, 0x90, 0xF5, 0x90, 0xF6, /* 0x38-0x3B */ + 0xB8, 0xD5, 0x90, 0xF7, 0x90, 0xF8, 0x90, 0xF9, /* 0x3C-0x3F */ + 0xB8, 0xD6, 0x90, 0xFA, 0xB8, 0xD7, 0x90, 0xFB, /* 0x40-0x43 */ + 0x90, 0xFC, 0x90, 0xFD, 0x90, 0xFE, 0x91, 0x41, /* 0x44-0x47 */ + 0xB8, 0xD8, 0xB8, 0xD9, 0x91, 0x42, 0xB8, 0xDA, /* 0x48-0x4B */ + 0x91, 0x43, 0xB8, 0xDB, 0xB8, 0xDC, 0x91, 0x44, /* 0x4C-0x4F */ + 0x91, 0x45, 0x91, 0x46, 0x91, 0x47, 0xB8, 0xDD, /* 0x50-0x53 */ + 0xB8, 0xDE, 0xB8, 0xDF, 0x91, 0x48, 0x91, 0x49, /* 0x54-0x57 */ + 0xB8, 0xE0, 0x91, 0x4A, 0x91, 0x4B, 0x91, 0x4C, /* 0x58-0x5B */ + 0xB8, 0xE1, 0x91, 0x4D, 0x91, 0x4E, 0x91, 0x4F, /* 0x5C-0x5F */ + 0x91, 0x50, 0x91, 0x51, 0x91, 0x52, 0x91, 0x53, /* 0x60-0x63 */ + 0xB8, 0xE2, 0xB8, 0xE3, 0x91, 0x54, 0xB8, 0xE4, /* 0x64-0x67 */ + 0xB8, 0xE5, 0xB8, 0xE6, 0x91, 0x55, 0x91, 0x56, /* 0x68-0x6B */ + 0x91, 0x57, 0x91, 0x58, 0x91, 0x59, 0x91, 0x5A, /* 0x6C-0x6F */ + 0xB8, 0xE7, 0xB8, 0xE8, 0x91, 0x61, 0x91, 0x62, /* 0x70-0x73 */ + 0xB8, 0xE9, 0x91, 0x63, 0x91, 0x64, 0x91, 0x65, /* 0x74-0x77 */ + 0xB8, 0xEA, 0x91, 0x66, 0x91, 0x67, 0x91, 0x68, /* 0x78-0x7B */ + 0x91, 0x69, 0x91, 0x6A, 0x91, 0x6B, 0x91, 0x6C, /* 0x7C-0x7F */ + + 0x91, 0x6D, 0x91, 0x6E, 0x91, 0x6F, 0xB8, 0xEB, /* 0x80-0x83 */ + 0xB8, 0xEC, 0xB8, 0xED, 0x91, 0x70, 0xB8, 0xEE, /* 0x84-0x87 */ + 0x91, 0x71, 0x91, 0x72, 0x91, 0x73, 0x91, 0x74, /* 0x88-0x8B */ + 0xB8, 0xEF, 0x91, 0x75, 0x91, 0x76, 0x91, 0x77, /* 0x8C-0x8F */ + 0x91, 0x78, 0x91, 0x79, 0x91, 0x7A, 0x91, 0x81, /* 0x90-0x93 */ + 0x91, 0x82, 0x91, 0x83, 0x91, 0x84, 0x91, 0x85, /* 0x94-0x97 */ + 0x91, 0x86, 0x91, 0x87, 0x91, 0x88, 0x91, 0x89, /* 0x98-0x9B */ + 0x91, 0x8A, 0x91, 0x8B, 0x91, 0x8C, 0x91, 0x8D, /* 0x9C-0x9F */ + 0x91, 0x8E, 0x91, 0x8F, 0x91, 0x90, 0x91, 0x91, /* 0xA0-0xA3 */ + 0x91, 0x92, 0x91, 0x93, 0x91, 0x94, 0x91, 0x95, /* 0xA4-0xA7 */ + 0xB8, 0xF0, 0xB8, 0xF1, 0x91, 0x96, 0xB8, 0xF2, /* 0xA8-0xAB */ + 0xB8, 0xF3, 0x91, 0x97, 0x91, 0x98, 0x91, 0x99, /* 0xAC-0xAF */ + 0xB8, 0xF4, 0x91, 0x9A, 0xB8, 0xF5, 0x91, 0x9B, /* 0xB0-0xB3 */ + 0x91, 0x9C, 0x91, 0x9D, 0x91, 0x9E, 0x91, 0x9F, /* 0xB4-0xB7 */ + 0xB8, 0xF6, 0xB8, 0xF7, 0x91, 0xA0, 0xB8, 0xF8, /* 0xB8-0xBB */ + 0x91, 0xA1, 0xB8, 0xF9, 0x91, 0xA2, 0x91, 0xA3, /* 0xBC-0xBF */ + 0x91, 0xA4, 0x91, 0xA5, 0x91, 0xA6, 0x91, 0xA7, /* 0xC0-0xC3 */ + 0xB8, 0xFA, 0x91, 0xA8, 0x91, 0xA9, 0x91, 0xAA, /* 0xC4-0xC7 */ + 0xB8, 0xFB, 0x91, 0xAB, 0x91, 0xAC, 0x91, 0xAD, /* 0xC8-0xCB */ + 0x91, 0xAE, 0x91, 0xAF, 0x91, 0xB0, 0x91, 0xB1, /* 0xCC-0xCF */ + 0x91, 0xB2, 0x91, 0xB3, 0x91, 0xB4, 0x91, 0xB5, /* 0xD0-0xD3 */ + 0x91, 0xB6, 0x91, 0xB7, 0x91, 0xB8, 0x91, 0xB9, /* 0xD4-0xD7 */ + 0xB8, 0xFC, 0xB8, 0xFD, 0x91, 0xBA, 0x91, 0xBB, /* 0xD8-0xDB */ + 0x91, 0xBC, 0x91, 0xBD, 0x91, 0xBE, 0x91, 0xBF, /* 0xDC-0xDF */ + 0x91, 0xC0, 0x91, 0xC1, 0x91, 0xC2, 0x91, 0xC3, /* 0xE0-0xE3 */ + 0x91, 0xC4, 0x91, 0xC5, 0x91, 0xC6, 0x91, 0xC7, /* 0xE4-0xE7 */ + 0x91, 0xC8, 0x91, 0xC9, 0x91, 0xCA, 0x91, 0xCB, /* 0xE8-0xEB */ + 0x91, 0xCC, 0x91, 0xCD, 0x91, 0xCE, 0x91, 0xCF, /* 0xEC-0xEF */ + 0x91, 0xD0, 0x91, 0xD1, 0x91, 0xD2, 0x91, 0xD3, /* 0xF0-0xF3 */ + 0x91, 0xD4, 0x91, 0xD5, 0x91, 0xD6, 0x91, 0xD7, /* 0xF4-0xF7 */ + 0x91, 0xD8, 0x91, 0xD9, 0x91, 0xDA, 0x91, 0xDB, /* 0xF8-0xFB */ + 0xB8, 0xFE, 0x91, 0xDC, 0x91, 0xDD, 0x91, 0xDE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BB[512] = { + 0xB9, 0xA1, 0x91, 0xDF, 0x91, 0xE0, 0x91, 0xE1, /* 0x00-0x03 */ + 0xB9, 0xA2, 0x91, 0xE2, 0x91, 0xE3, 0x91, 0xE4, /* 0x04-0x07 */ + 0x91, 0xE5, 0x91, 0xE6, 0x91, 0xE7, 0x91, 0xE8, /* 0x08-0x0B */ + 0x91, 0xE9, 0xB9, 0xA3, 0x91, 0xEA, 0xB9, 0xA4, /* 0x0C-0x0F */ + 0x91, 0xEB, 0xB9, 0xA5, 0x91, 0xEC, 0x91, 0xED, /* 0x10-0x13 */ + 0x91, 0xEE, 0x91, 0xEF, 0x91, 0xF0, 0x91, 0xF1, /* 0x14-0x17 */ + 0xB9, 0xA6, 0x91, 0xF2, 0x91, 0xF3, 0x91, 0xF4, /* 0x18-0x1B */ + 0xB9, 0xA7, 0x91, 0xF5, 0x91, 0xF6, 0x91, 0xF7, /* 0x1C-0x1F */ + 0xB9, 0xA8, 0x91, 0xF8, 0x91, 0xF9, 0x91, 0xFA, /* 0x20-0x23 */ + 0x91, 0xFB, 0x91, 0xFC, 0x91, 0xFD, 0x91, 0xFE, /* 0x24-0x27 */ + 0x92, 0x41, 0xB9, 0xA9, 0x92, 0x42, 0xB9, 0xAA, /* 0x28-0x2B */ + 0x92, 0x43, 0x92, 0x44, 0x92, 0x45, 0x92, 0x46, /* 0x2C-0x2F */ + 0x92, 0x47, 0x92, 0x48, 0x92, 0x49, 0x92, 0x4A, /* 0x30-0x33 */ + 0xB9, 0xAB, 0xB9, 0xAC, 0xB9, 0xAD, 0x92, 0x4B, /* 0x34-0x37 */ + 0xB9, 0xAE, 0x92, 0x4C, 0x92, 0x4D, 0xB9, 0xAF, /* 0x38-0x3B */ + 0xB9, 0xB0, 0xB9, 0xB1, 0xB9, 0xB2, 0x92, 0x4E, /* 0x3C-0x3F */ + 0x92, 0x4F, 0x92, 0x50, 0x92, 0x51, 0x92, 0x52, /* 0x40-0x43 */ + 0xB9, 0xB3, 0xB9, 0xB4, 0x92, 0x53, 0xB9, 0xB5, /* 0x44-0x47 */ + 0x92, 0x54, 0xB9, 0xB6, 0x92, 0x55, 0x92, 0x56, /* 0x48-0x4B */ + 0x92, 0x57, 0xB9, 0xB7, 0x92, 0x58, 0xB9, 0xB8, /* 0x4C-0x4F */ + 0xB9, 0xB9, 0x92, 0x59, 0x92, 0x5A, 0x92, 0x61, /* 0x50-0x53 */ + 0xB9, 0xBA, 0x92, 0x62, 0x92, 0x63, 0x92, 0x64, /* 0x54-0x57 */ + 0xB9, 0xBB, 0x92, 0x65, 0x92, 0x66, 0x92, 0x67, /* 0x58-0x5B */ + 0x92, 0x68, 0x92, 0x69, 0x92, 0x6A, 0x92, 0x6B, /* 0x5C-0x5F */ + 0x92, 0x6C, 0xB9, 0xBC, 0x92, 0x6D, 0xB9, 0xBD, /* 0x60-0x63 */ + 0x92, 0x6E, 0x92, 0x6F, 0x92, 0x70, 0x92, 0x71, /* 0x64-0x67 */ + 0x92, 0x72, 0x92, 0x73, 0x92, 0x74, 0x92, 0x75, /* 0x68-0x6B */ + 0xB9, 0xBE, 0x92, 0x76, 0x92, 0x77, 0x92, 0x78, /* 0x6C-0x6F */ + 0x92, 0x79, 0x92, 0x7A, 0x92, 0x81, 0x92, 0x82, /* 0x70-0x73 */ + 0x92, 0x83, 0x92, 0x84, 0x92, 0x85, 0x92, 0x86, /* 0x74-0x77 */ + 0x92, 0x87, 0x92, 0x88, 0x92, 0x89, 0x92, 0x8A, /* 0x78-0x7B */ + 0x92, 0x8B, 0x92, 0x8C, 0x92, 0x8D, 0x92, 0x8E, /* 0x7C-0x7F */ + + 0x92, 0x8F, 0x92, 0x90, 0x92, 0x91, 0x92, 0x92, /* 0x80-0x83 */ + 0x92, 0x93, 0x92, 0x94, 0x92, 0x95, 0x92, 0x96, /* 0x84-0x87 */ + 0xB9, 0xBF, 0x92, 0x97, 0x92, 0x98, 0x92, 0x99, /* 0x88-0x8B */ + 0xB9, 0xC0, 0x92, 0x9A, 0x92, 0x9B, 0x92, 0x9C, /* 0x8C-0x8F */ + 0xB9, 0xC1, 0x92, 0x9D, 0x92, 0x9E, 0x92, 0x9F, /* 0x90-0x93 */ + 0x92, 0xA0, 0x92, 0xA1, 0x92, 0xA2, 0x92, 0xA3, /* 0x94-0x97 */ + 0x92, 0xA4, 0x92, 0xA5, 0x92, 0xA6, 0x92, 0xA7, /* 0x98-0x9B */ + 0x92, 0xA8, 0x92, 0xA9, 0x92, 0xAA, 0x92, 0xAB, /* 0x9C-0x9F */ + 0x92, 0xAC, 0x92, 0xAD, 0x92, 0xAE, 0x92, 0xAF, /* 0xA0-0xA3 */ + 0xB9, 0xC2, 0x92, 0xB0, 0x92, 0xB1, 0x92, 0xB2, /* 0xA4-0xA7 */ + 0xB9, 0xC3, 0x92, 0xB3, 0x92, 0xB4, 0x92, 0xB5, /* 0xA8-0xAB */ + 0xB9, 0xC4, 0x92, 0xB6, 0x92, 0xB7, 0x92, 0xB8, /* 0xAC-0xAF */ + 0x92, 0xB9, 0x92, 0xBA, 0x92, 0xBB, 0x92, 0xBC, /* 0xB0-0xB3 */ + 0xB9, 0xC5, 0x92, 0xBD, 0x92, 0xBE, 0xB9, 0xC6, /* 0xB4-0xB7 */ + 0x92, 0xBF, 0x92, 0xC0, 0x92, 0xC1, 0x92, 0xC2, /* 0xB8-0xBB */ + 0x92, 0xC3, 0x92, 0xC4, 0x92, 0xC5, 0x92, 0xC6, /* 0xBC-0xBF */ + 0xB9, 0xC7, 0x92, 0xC7, 0x92, 0xC8, 0x92, 0xC9, /* 0xC0-0xC3 */ + 0xB9, 0xC8, 0x92, 0xCA, 0x92, 0xCB, 0x92, 0xCC, /* 0xC4-0xC7 */ + 0xB9, 0xC9, 0x92, 0xCD, 0x92, 0xCE, 0x92, 0xCF, /* 0xC8-0xCB */ + 0x92, 0xD0, 0x92, 0xD1, 0x92, 0xD2, 0x92, 0xD3, /* 0xCC-0xCF */ + 0xB9, 0xCA, 0x92, 0xD4, 0x92, 0xD5, 0xB9, 0xCB, /* 0xD0-0xD3 */ + 0x92, 0xD6, 0x92, 0xD7, 0x92, 0xD8, 0x92, 0xD9, /* 0xD4-0xD7 */ + 0x92, 0xDA, 0x92, 0xDB, 0x92, 0xDC, 0x92, 0xDD, /* 0xD8-0xDB */ + 0x92, 0xDE, 0x92, 0xDF, 0x92, 0xE0, 0x92, 0xE1, /* 0xDC-0xDF */ + 0x92, 0xE2, 0x92, 0xE3, 0x92, 0xE4, 0x92, 0xE5, /* 0xE0-0xE3 */ + 0x92, 0xE6, 0x92, 0xE7, 0x92, 0xE8, 0x92, 0xE9, /* 0xE4-0xE7 */ + 0x92, 0xEA, 0x92, 0xEB, 0x92, 0xEC, 0x92, 0xED, /* 0xE8-0xEB */ + 0x92, 0xEE, 0x92, 0xEF, 0x92, 0xF0, 0x92, 0xF1, /* 0xEC-0xEF */ + 0x92, 0xF2, 0x92, 0xF3, 0x92, 0xF4, 0x92, 0xF5, /* 0xF0-0xF3 */ + 0x92, 0xF6, 0x92, 0xF7, 0x92, 0xF8, 0x92, 0xF9, /* 0xF4-0xF7 */ + 0xB9, 0xCC, 0xB9, 0xCD, 0x92, 0xFA, 0x92, 0xFB, /* 0xF8-0xFB */ + 0xB9, 0xCE, 0x92, 0xFC, 0x92, 0xFD, 0xB9, 0xCF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BC[512] = { + 0xB9, 0xD0, 0x92, 0xFE, 0xB9, 0xD1, 0x93, 0x41, /* 0x00-0x03 */ + 0x93, 0x42, 0x93, 0x43, 0x93, 0x44, 0x93, 0x45, /* 0x04-0x07 */ + 0xB9, 0xD2, 0xB9, 0xD3, 0x93, 0x46, 0xB9, 0xD4, /* 0x08-0x0B */ + 0xB9, 0xD5, 0xB9, 0xD6, 0x93, 0x47, 0xB9, 0xD7, /* 0x0C-0x0F */ + 0x93, 0x48, 0xB9, 0xD8, 0x93, 0x49, 0x93, 0x4A, /* 0x10-0x13 */ + 0xB9, 0xD9, 0xB9, 0xDA, 0xB9, 0xDB, 0xB9, 0xDC, /* 0x14-0x17 */ + 0xB9, 0xDD, 0x93, 0x4B, 0x93, 0x4C, 0xB9, 0xDE, /* 0x18-0x1B */ + 0xB9, 0xDF, 0xB9, 0xE0, 0xB9, 0xE1, 0xB9, 0xE2, /* 0x1C-0x1F */ + 0x93, 0x4D, 0x93, 0x4E, 0x93, 0x4F, 0x93, 0x50, /* 0x20-0x23 */ + 0xB9, 0xE3, 0xB9, 0xE4, 0x93, 0x51, 0xB9, 0xE5, /* 0x24-0x27 */ + 0x93, 0x52, 0xB9, 0xE6, 0x93, 0x53, 0x93, 0x54, /* 0x28-0x2B */ + 0x93, 0x55, 0xB9, 0xE7, 0x93, 0x56, 0x93, 0x57, /* 0x2C-0x2F */ + 0xB9, 0xE8, 0xB9, 0xE9, 0x93, 0x58, 0x93, 0x59, /* 0x30-0x33 */ + 0xB9, 0xEA, 0x93, 0x5A, 0x93, 0x61, 0x93, 0x62, /* 0x34-0x37 */ + 0xB9, 0xEB, 0x93, 0x63, 0x93, 0x64, 0x93, 0x65, /* 0x38-0x3B */ + 0x93, 0x66, 0x93, 0x67, 0x93, 0x68, 0x93, 0x69, /* 0x3C-0x3F */ + 0xB9, 0xEC, 0xB9, 0xED, 0x93, 0x6A, 0xB9, 0xEE, /* 0x40-0x43 */ + 0xB9, 0xEF, 0xB9, 0xF0, 0x93, 0x6B, 0x93, 0x6C, /* 0x44-0x47 */ + 0x93, 0x6D, 0xB9, 0xF1, 0x93, 0x6E, 0x93, 0x6F, /* 0x48-0x4B */ + 0xB9, 0xF2, 0xB9, 0xF3, 0x93, 0x70, 0x93, 0x71, /* 0x4C-0x4F */ + 0xB9, 0xF4, 0x93, 0x72, 0x93, 0x73, 0x93, 0x74, /* 0x50-0x53 */ + 0x93, 0x75, 0x93, 0x76, 0x93, 0x77, 0x93, 0x78, /* 0x54-0x57 */ + 0x93, 0x79, 0x93, 0x7A, 0x93, 0x81, 0x93, 0x82, /* 0x58-0x5B */ + 0x93, 0x83, 0xB9, 0xF5, 0x93, 0x84, 0x93, 0x85, /* 0x5C-0x5F */ + 0x93, 0x86, 0x93, 0x87, 0x93, 0x88, 0x93, 0x89, /* 0x60-0x63 */ + 0x93, 0x8A, 0x93, 0x8B, 0x93, 0x8C, 0x93, 0x8D, /* 0x64-0x67 */ + 0x93, 0x8E, 0x93, 0x8F, 0x93, 0x90, 0x93, 0x91, /* 0x68-0x6B */ + 0x93, 0x92, 0x93, 0x93, 0x93, 0x94, 0x93, 0x95, /* 0x6C-0x6F */ + 0x93, 0x96, 0x93, 0x97, 0x93, 0x98, 0x93, 0x99, /* 0x70-0x73 */ + 0x93, 0x9A, 0x93, 0x9B, 0x93, 0x9C, 0x93, 0x9D, /* 0x74-0x77 */ + 0x93, 0x9E, 0x93, 0x9F, 0x93, 0xA0, 0x93, 0xA1, /* 0x78-0x7B */ + 0x93, 0xA2, 0x93, 0xA3, 0x93, 0xA4, 0x93, 0xA5, /* 0x7C-0x7F */ + + 0x93, 0xA6, 0x93, 0xA7, 0x93, 0xA8, 0x93, 0xA9, /* 0x80-0x83 */ + 0xB9, 0xF6, 0xB9, 0xF7, 0x93, 0xAA, 0x93, 0xAB, /* 0x84-0x87 */ + 0xB9, 0xF8, 0x93, 0xAC, 0x93, 0xAD, 0xB9, 0xF9, /* 0x88-0x8B */ + 0xB9, 0xFA, 0x93, 0xAE, 0xB9, 0xFB, 0x93, 0xAF, /* 0x8C-0x8F */ + 0x93, 0xB0, 0x93, 0xB1, 0x93, 0xB2, 0x93, 0xB3, /* 0x90-0x93 */ + 0xB9, 0xFC, 0xB9, 0xFD, 0x93, 0xB4, 0xB9, 0xFE, /* 0x94-0x97 */ + 0x93, 0xB5, 0xBA, 0xA1, 0xBA, 0xA2, 0x93, 0xB6, /* 0x98-0x9B */ + 0x93, 0xB7, 0x93, 0xB8, 0x93, 0xB9, 0x93, 0xBA, /* 0x9C-0x9F */ + 0xBA, 0xA3, 0xBA, 0xA4, 0x93, 0xBB, 0x93, 0xBC, /* 0xA0-0xA3 */ + 0xBA, 0xA5, 0x93, 0xBD, 0x93, 0xBE, 0xBA, 0xA6, /* 0xA4-0xA7 */ + 0xBA, 0xA7, 0x93, 0xBF, 0x93, 0xC0, 0x93, 0xC1, /* 0xA8-0xAB */ + 0x93, 0xC2, 0x93, 0xC3, 0x93, 0xC4, 0x93, 0xC5, /* 0xAC-0xAF */ + 0xBA, 0xA8, 0xBA, 0xA9, 0x93, 0xC6, 0xBA, 0xAA, /* 0xB0-0xB3 */ + 0xBA, 0xAB, 0xBA, 0xAC, 0x93, 0xC7, 0x93, 0xC8, /* 0xB4-0xB7 */ + 0x93, 0xC9, 0x93, 0xCA, 0x93, 0xCB, 0x93, 0xCC, /* 0xB8-0xBB */ + 0xBA, 0xAD, 0xBA, 0xAE, 0x93, 0xCD, 0x93, 0xCE, /* 0xBC-0xBF */ + 0xBA, 0xAF, 0x93, 0xCF, 0x93, 0xD0, 0x93, 0xD1, /* 0xC0-0xC3 */ + 0xBA, 0xB0, 0x93, 0xD2, 0x93, 0xD3, 0x93, 0xD4, /* 0xC4-0xC7 */ + 0x93, 0xD5, 0x93, 0xD6, 0x93, 0xD7, 0x93, 0xD8, /* 0xC8-0xCB */ + 0x93, 0xD9, 0xBA, 0xB1, 0x93, 0xDA, 0xBA, 0xB2, /* 0xCC-0xCF */ + 0xBA, 0xB3, 0xBA, 0xB4, 0x93, 0xDB, 0x93, 0xDC, /* 0xD0-0xD3 */ + 0x93, 0xDD, 0xBA, 0xB5, 0x93, 0xDE, 0x93, 0xDF, /* 0xD4-0xD7 */ + 0xBA, 0xB6, 0x93, 0xE0, 0x93, 0xE1, 0x93, 0xE2, /* 0xD8-0xDB */ + 0xBA, 0xB7, 0x93, 0xE3, 0x93, 0xE4, 0x93, 0xE5, /* 0xDC-0xDF */ + 0x93, 0xE6, 0x93, 0xE7, 0x93, 0xE8, 0x93, 0xE9, /* 0xE0-0xE3 */ + 0x93, 0xEA, 0x93, 0xEB, 0x93, 0xEC, 0x93, 0xED, /* 0xE4-0xE7 */ + 0x93, 0xEE, 0x93, 0xEF, 0x93, 0xF0, 0x93, 0xF1, /* 0xE8-0xEB */ + 0x93, 0xF2, 0x93, 0xF3, 0x93, 0xF4, 0x93, 0xF5, /* 0xEC-0xEF */ + 0x93, 0xF6, 0x93, 0xF7, 0x93, 0xF8, 0x93, 0xF9, /* 0xF0-0xF3 */ + 0xBA, 0xB8, 0xBA, 0xB9, 0xBA, 0xBA, 0x93, 0xFA, /* 0xF4-0xF7 */ + 0xBA, 0xBB, 0x93, 0xFB, 0x93, 0xFC, 0x93, 0xFD, /* 0xF8-0xFB */ + 0xBA, 0xBC, 0x93, 0xFE, 0x94, 0x41, 0x94, 0x42, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BD[512] = { + 0x94, 0x43, 0x94, 0x44, 0x94, 0x45, 0x94, 0x46, /* 0x00-0x03 */ + 0xBA, 0xBD, 0xBA, 0xBE, 0x94, 0x47, 0xBA, 0xBF, /* 0x04-0x07 */ + 0x94, 0x48, 0xBA, 0xC0, 0x94, 0x49, 0x94, 0x4A, /* 0x08-0x0B */ + 0x94, 0x4B, 0x94, 0x4C, 0x94, 0x4D, 0x94, 0x4E, /* 0x0C-0x0F */ + 0xBA, 0xC1, 0x94, 0x4F, 0x94, 0x50, 0x94, 0x51, /* 0x10-0x13 */ + 0xBA, 0xC2, 0x94, 0x52, 0x94, 0x53, 0x94, 0x54, /* 0x14-0x17 */ + 0x94, 0x55, 0x94, 0x56, 0x94, 0x57, 0x94, 0x58, /* 0x18-0x1B */ + 0x94, 0x59, 0x94, 0x5A, 0x94, 0x61, 0x94, 0x62, /* 0x1C-0x1F */ + 0x94, 0x63, 0x94, 0x64, 0x94, 0x65, 0x94, 0x66, /* 0x20-0x23 */ + 0xBA, 0xC3, 0x94, 0x67, 0x94, 0x68, 0x94, 0x69, /* 0x24-0x27 */ + 0x94, 0x6A, 0x94, 0x6B, 0x94, 0x6C, 0x94, 0x6D, /* 0x28-0x2B */ + 0xBA, 0xC4, 0x94, 0x6E, 0x94, 0x6F, 0x94, 0x70, /* 0x2C-0x2F */ + 0x94, 0x71, 0x94, 0x72, 0x94, 0x73, 0x94, 0x74, /* 0x30-0x33 */ + 0x94, 0x75, 0x94, 0x76, 0x94, 0x77, 0x94, 0x78, /* 0x34-0x37 */ + 0x94, 0x79, 0x94, 0x7A, 0x94, 0x81, 0x94, 0x82, /* 0x38-0x3B */ + 0x94, 0x83, 0x94, 0x84, 0x94, 0x85, 0x94, 0x86, /* 0x3C-0x3F */ + 0xBA, 0xC5, 0x94, 0x87, 0x94, 0x88, 0x94, 0x89, /* 0x40-0x43 */ + 0x94, 0x8A, 0x94, 0x8B, 0x94, 0x8C, 0x94, 0x8D, /* 0x44-0x47 */ + 0xBA, 0xC6, 0xBA, 0xC7, 0x94, 0x8E, 0x94, 0x8F, /* 0x48-0x4B */ + 0xBA, 0xC8, 0x94, 0x90, 0x94, 0x91, 0x94, 0x92, /* 0x4C-0x4F */ + 0xBA, 0xC9, 0x94, 0x93, 0x94, 0x94, 0x94, 0x95, /* 0x50-0x53 */ + 0x94, 0x96, 0x94, 0x97, 0x94, 0x98, 0x94, 0x99, /* 0x54-0x57 */ + 0xBA, 0xCA, 0xBA, 0xCB, 0x94, 0x9A, 0x94, 0x9B, /* 0x58-0x5B */ + 0x94, 0x9C, 0x94, 0x9D, 0x94, 0x9E, 0x94, 0x9F, /* 0x5C-0x5F */ + 0x94, 0xA0, 0x94, 0xA1, 0x94, 0xA2, 0x94, 0xA3, /* 0x60-0x63 */ + 0xBA, 0xCC, 0x94, 0xA4, 0x94, 0xA5, 0x94, 0xA6, /* 0x64-0x67 */ + 0xBA, 0xCD, 0x94, 0xA7, 0x94, 0xA8, 0x94, 0xA9, /* 0x68-0x6B */ + 0x94, 0xAA, 0x94, 0xAB, 0x94, 0xAC, 0x94, 0xAD, /* 0x6C-0x6F */ + 0x94, 0xAE, 0x94, 0xAF, 0x94, 0xB0, 0x94, 0xB1, /* 0x70-0x73 */ + 0x94, 0xB2, 0x94, 0xB3, 0x94, 0xB4, 0x94, 0xB5, /* 0x74-0x77 */ + 0x94, 0xB6, 0x94, 0xB7, 0x94, 0xB8, 0x94, 0xB9, /* 0x78-0x7B */ + 0x94, 0xBA, 0x94, 0xBB, 0x94, 0xBC, 0x94, 0xBD, /* 0x7C-0x7F */ + + 0xBA, 0xCE, 0xBA, 0xCF, 0x94, 0xBE, 0x94, 0xBF, /* 0x80-0x83 */ + 0xBA, 0xD0, 0x94, 0xC0, 0x94, 0xC1, 0xBA, 0xD1, /* 0x84-0x87 */ + 0xBA, 0xD2, 0xBA, 0xD3, 0xBA, 0xD4, 0x94, 0xC2, /* 0x88-0x8B */ + 0x94, 0xC3, 0x94, 0xC4, 0x94, 0xC5, 0x94, 0xC6, /* 0x8C-0x8F */ + 0xBA, 0xD5, 0xBA, 0xD6, 0x94, 0xC7, 0xBA, 0xD7, /* 0x90-0x93 */ + 0x94, 0xC8, 0xBA, 0xD8, 0x94, 0xC9, 0x94, 0xCA, /* 0x94-0x97 */ + 0x94, 0xCB, 0xBA, 0xD9, 0xBA, 0xDA, 0x94, 0xCC, /* 0x98-0x9B */ + 0xBA, 0xDB, 0x94, 0xCD, 0x94, 0xCE, 0x94, 0xCF, /* 0x9C-0x9F */ + 0x94, 0xD0, 0x94, 0xD1, 0x94, 0xD2, 0x94, 0xD3, /* 0xA0-0xA3 */ + 0xBA, 0xDC, 0x94, 0xD4, 0x94, 0xD5, 0x94, 0xD6, /* 0xA4-0xA7 */ + 0x94, 0xD7, 0x94, 0xD8, 0x94, 0xD9, 0x94, 0xDA, /* 0xA8-0xAB */ + 0x94, 0xDB, 0x94, 0xDC, 0x94, 0xDD, 0x94, 0xDE, /* 0xAC-0xAF */ + 0xBA, 0xDD, 0x94, 0xDF, 0x94, 0xE0, 0x94, 0xE1, /* 0xB0-0xB3 */ + 0x94, 0xE2, 0x94, 0xE3, 0x94, 0xE4, 0x94, 0xE5, /* 0xB4-0xB7 */ + 0xBA, 0xDE, 0x94, 0xE6, 0x94, 0xE7, 0x94, 0xE8, /* 0xB8-0xBB */ + 0x94, 0xE9, 0x94, 0xEA, 0x94, 0xEB, 0x94, 0xEC, /* 0xBC-0xBF */ + 0x94, 0xED, 0x94, 0xEE, 0x94, 0xEF, 0x94, 0xF0, /* 0xC0-0xC3 */ + 0x94, 0xF1, 0x94, 0xF2, 0x94, 0xF3, 0x94, 0xF4, /* 0xC4-0xC7 */ + 0x94, 0xF5, 0x94, 0xF6, 0x94, 0xF7, 0x94, 0xF8, /* 0xC8-0xCB */ + 0x94, 0xF9, 0x94, 0xFA, 0x94, 0xFB, 0x94, 0xFC, /* 0xCC-0xCF */ + 0x94, 0xFD, 0x94, 0xFE, 0x95, 0x41, 0x95, 0x42, /* 0xD0-0xD3 */ + 0xBA, 0xDF, 0xBA, 0xE0, 0x95, 0x43, 0x95, 0x44, /* 0xD4-0xD7 */ + 0xBA, 0xE1, 0x95, 0x45, 0x95, 0x46, 0x95, 0x47, /* 0xD8-0xDB */ + 0xBA, 0xE2, 0x95, 0x48, 0x95, 0x49, 0x95, 0x4A, /* 0xDC-0xDF */ + 0x95, 0x4B, 0x95, 0x4C, 0x95, 0x4D, 0x95, 0x4E, /* 0xE0-0xE3 */ + 0x95, 0x4F, 0x95, 0x50, 0x95, 0x51, 0x95, 0x52, /* 0xE4-0xE7 */ + 0x95, 0x53, 0xBA, 0xE3, 0x95, 0x54, 0x95, 0x55, /* 0xE8-0xEB */ + 0x95, 0x56, 0x95, 0x57, 0x95, 0x58, 0x95, 0x59, /* 0xEC-0xEF */ + 0xBA, 0xE4, 0x95, 0x5A, 0x95, 0x61, 0x95, 0x62, /* 0xF0-0xF3 */ + 0xBA, 0xE5, 0x95, 0x63, 0x95, 0x64, 0x95, 0x65, /* 0xF4-0xF7 */ + 0xBA, 0xE6, 0x95, 0x66, 0x95, 0x67, 0x95, 0x68, /* 0xF8-0xFB */ + 0x95, 0x69, 0x95, 0x6A, 0x95, 0x6B, 0x95, 0x6C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BE[512] = { + 0xBA, 0xE7, 0x95, 0x6D, 0x95, 0x6E, 0xBA, 0xE8, /* 0x00-0x03 */ + 0x95, 0x6F, 0xBA, 0xE9, 0x95, 0x70, 0x95, 0x71, /* 0x04-0x07 */ + 0x95, 0x72, 0x95, 0x73, 0x95, 0x74, 0x95, 0x75, /* 0x08-0x0B */ + 0xBA, 0xEA, 0xBA, 0xEB, 0x95, 0x76, 0x95, 0x77, /* 0x0C-0x0F */ + 0xBA, 0xEC, 0x95, 0x78, 0x95, 0x79, 0x95, 0x7A, /* 0x10-0x13 */ + 0xBA, 0xED, 0x95, 0x81, 0x95, 0x82, 0x95, 0x83, /* 0x14-0x17 */ + 0x95, 0x84, 0x95, 0x85, 0x95, 0x86, 0x95, 0x87, /* 0x18-0x1B */ + 0xBA, 0xEE, 0xBA, 0xEF, 0x95, 0x88, 0xBA, 0xF0, /* 0x1C-0x1F */ + 0x95, 0x89, 0x95, 0x8A, 0x95, 0x8B, 0x95, 0x8C, /* 0x20-0x23 */ + 0x95, 0x8D, 0x95, 0x8E, 0x95, 0x8F, 0x95, 0x90, /* 0x24-0x27 */ + 0x95, 0x91, 0x95, 0x92, 0x95, 0x93, 0x95, 0x94, /* 0x28-0x2B */ + 0x95, 0x95, 0x95, 0x96, 0x95, 0x97, 0x95, 0x98, /* 0x2C-0x2F */ + 0x95, 0x99, 0x95, 0x9A, 0x95, 0x9B, 0x95, 0x9C, /* 0x30-0x33 */ + 0x95, 0x9D, 0x95, 0x9E, 0x95, 0x9F, 0x95, 0xA0, /* 0x34-0x37 */ + 0x95, 0xA1, 0x95, 0xA2, 0x95, 0xA3, 0x95, 0xA4, /* 0x38-0x3B */ + 0x95, 0xA5, 0x95, 0xA6, 0x95, 0xA7, 0x95, 0xA8, /* 0x3C-0x3F */ + 0x95, 0xA9, 0x95, 0xAA, 0x95, 0xAB, 0x95, 0xAC, /* 0x40-0x43 */ + 0xBA, 0xF1, 0xBA, 0xF2, 0x95, 0xAD, 0x95, 0xAE, /* 0x44-0x47 */ + 0xBA, 0xF3, 0x95, 0xAF, 0x95, 0xB0, 0x95, 0xB1, /* 0x48-0x4B */ + 0xBA, 0xF4, 0x95, 0xB2, 0xBA, 0xF5, 0x95, 0xB3, /* 0x4C-0x4F */ + 0x95, 0xB4, 0x95, 0xB5, 0x95, 0xB6, 0x95, 0xB7, /* 0x50-0x53 */ + 0xBA, 0xF6, 0xBA, 0xF7, 0x95, 0xB8, 0xBA, 0xF8, /* 0x54-0x57 */ + 0x95, 0xB9, 0xBA, 0xF9, 0xBA, 0xFA, 0xBA, 0xFB, /* 0x58-0x5B */ + 0x95, 0xBA, 0x95, 0xBB, 0x95, 0xBC, 0x95, 0xBD, /* 0x5C-0x5F */ + 0xBA, 0xFC, 0xBA, 0xFD, 0x95, 0xBE, 0x95, 0xBF, /* 0x60-0x63 */ + 0xBA, 0xFE, 0x95, 0xC0, 0x95, 0xC1, 0x95, 0xC2, /* 0x64-0x67 */ + 0xBB, 0xA1, 0x95, 0xC3, 0xBB, 0xA2, 0x95, 0xC4, /* 0x68-0x6B */ + 0x95, 0xC5, 0x95, 0xC6, 0x95, 0xC7, 0x95, 0xC8, /* 0x6C-0x6F */ + 0xBB, 0xA3, 0xBB, 0xA4, 0x95, 0xC9, 0xBB, 0xA5, /* 0x70-0x73 */ + 0xBB, 0xA6, 0xBB, 0xA7, 0x95, 0xCA, 0x95, 0xCB, /* 0x74-0x77 */ + 0x95, 0xCC, 0x95, 0xCD, 0x95, 0xCE, 0xBB, 0xA8, /* 0x78-0x7B */ + 0xBB, 0xA9, 0xBB, 0xAA, 0x95, 0xCF, 0x95, 0xD0, /* 0x7C-0x7F */ + + 0xBB, 0xAB, 0x95, 0xD1, 0x95, 0xD2, 0x95, 0xD3, /* 0x80-0x83 */ + 0xBB, 0xAC, 0x95, 0xD4, 0x95, 0xD5, 0x95, 0xD6, /* 0x84-0x87 */ + 0x95, 0xD7, 0x95, 0xD8, 0x95, 0xD9, 0x95, 0xDA, /* 0x88-0x8B */ + 0xBB, 0xAD, 0xBB, 0xAE, 0x95, 0xDB, 0xBB, 0xAF, /* 0x8C-0x8F */ + 0xBB, 0xB0, 0xBB, 0xB1, 0x95, 0xDC, 0x95, 0xDD, /* 0x90-0x93 */ + 0x95, 0xDE, 0x95, 0xDF, 0x95, 0xE0, 0x95, 0xE1, /* 0x94-0x97 */ + 0xBB, 0xB2, 0xBB, 0xB3, 0x95, 0xE2, 0x95, 0xE3, /* 0x98-0x9B */ + 0x95, 0xE4, 0x95, 0xE5, 0x95, 0xE6, 0x95, 0xE7, /* 0x9C-0x9F */ + 0x95, 0xE8, 0x95, 0xE9, 0x95, 0xEA, 0x95, 0xEB, /* 0xA0-0xA3 */ + 0x95, 0xEC, 0x95, 0xED, 0x95, 0xEE, 0x95, 0xEF, /* 0xA4-0xA7 */ + 0xBB, 0xB4, 0x95, 0xF0, 0x95, 0xF1, 0x95, 0xF2, /* 0xA8-0xAB */ + 0x95, 0xF3, 0x95, 0xF4, 0x95, 0xF5, 0x95, 0xF6, /* 0xAC-0xAF */ + 0x95, 0xF7, 0x95, 0xF8, 0x95, 0xF9, 0x95, 0xFA, /* 0xB0-0xB3 */ + 0x95, 0xFB, 0x95, 0xFC, 0x95, 0xFD, 0x95, 0xFE, /* 0xB4-0xB7 */ + 0x96, 0x41, 0x96, 0x42, 0x96, 0x43, 0x96, 0x44, /* 0xB8-0xBB */ + 0x96, 0x45, 0x96, 0x46, 0x96, 0x47, 0x96, 0x48, /* 0xBC-0xBF */ + 0x96, 0x49, 0x96, 0x4A, 0x96, 0x4B, 0x96, 0x4C, /* 0xC0-0xC3 */ + 0x96, 0x4D, 0x96, 0x4E, 0x96, 0x4F, 0x96, 0x50, /* 0xC4-0xC7 */ + 0x96, 0x51, 0x96, 0x52, 0x96, 0x53, 0x96, 0x54, /* 0xC8-0xCB */ + 0x96, 0x55, 0x96, 0x56, 0x96, 0x57, 0x96, 0x58, /* 0xCC-0xCF */ + 0xBB, 0xB5, 0xBB, 0xB6, 0x96, 0x59, 0x96, 0x5A, /* 0xD0-0xD3 */ + 0xBB, 0xB7, 0x96, 0x61, 0x96, 0x62, 0xBB, 0xB8, /* 0xD4-0xD7 */ + 0xBB, 0xB9, 0x96, 0x63, 0x96, 0x64, 0x96, 0x65, /* 0xD8-0xDB */ + 0x96, 0x66, 0x96, 0x67, 0x96, 0x68, 0x96, 0x69, /* 0xDC-0xDF */ + 0xBB, 0xBA, 0x96, 0x6A, 0x96, 0x6B, 0xBB, 0xBB, /* 0xE0-0xE3 */ + 0xBB, 0xBC, 0xBB, 0xBD, 0x96, 0x6C, 0x96, 0x6D, /* 0xE4-0xE7 */ + 0x96, 0x6E, 0x96, 0x6F, 0x96, 0x70, 0x96, 0x71, /* 0xE8-0xEB */ + 0xBB, 0xBE, 0x96, 0x72, 0x96, 0x73, 0x96, 0x74, /* 0xEC-0xEF */ + 0x96, 0x75, 0x96, 0x76, 0x96, 0x77, 0x96, 0x78, /* 0xF0-0xF3 */ + 0x96, 0x79, 0x96, 0x7A, 0x96, 0x81, 0x96, 0x82, /* 0xF4-0xF7 */ + 0x96, 0x83, 0x96, 0x84, 0x96, 0x85, 0x96, 0x86, /* 0xF8-0xFB */ + 0x96, 0x87, 0x96, 0x88, 0x96, 0x89, 0x96, 0x8A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BF[512] = { + 0x96, 0x8B, 0xBB, 0xBF, 0x96, 0x8C, 0x96, 0x8D, /* 0x00-0x03 */ + 0x96, 0x8E, 0x96, 0x8F, 0x96, 0x90, 0x96, 0x91, /* 0x04-0x07 */ + 0xBB, 0xC0, 0xBB, 0xC1, 0x96, 0x92, 0x96, 0x93, /* 0x08-0x0B */ + 0x96, 0x94, 0x96, 0x95, 0x96, 0x96, 0x96, 0x97, /* 0x0C-0x0F */ + 0x96, 0x98, 0x96, 0x99, 0x96, 0x9A, 0x96, 0x9B, /* 0x10-0x13 */ + 0x96, 0x9C, 0x96, 0x9D, 0x96, 0x9E, 0x96, 0x9F, /* 0x14-0x17 */ + 0xBB, 0xC2, 0xBB, 0xC3, 0x96, 0xA0, 0xBB, 0xC4, /* 0x18-0x1B */ + 0xBB, 0xC5, 0xBB, 0xC6, 0x96, 0xA1, 0x96, 0xA2, /* 0x1C-0x1F */ + 0x96, 0xA3, 0x96, 0xA4, 0x96, 0xA5, 0x96, 0xA6, /* 0x20-0x23 */ + 0x96, 0xA7, 0x96, 0xA8, 0x96, 0xA9, 0x96, 0xAA, /* 0x24-0x27 */ + 0x96, 0xAB, 0x96, 0xAC, 0x96, 0xAD, 0x96, 0xAE, /* 0x28-0x2B */ + 0x96, 0xAF, 0x96, 0xB0, 0x96, 0xB1, 0x96, 0xB2, /* 0x2C-0x2F */ + 0x96, 0xB3, 0x96, 0xB4, 0x96, 0xB5, 0x96, 0xB6, /* 0x30-0x33 */ + 0x96, 0xB7, 0x96, 0xB8, 0x96, 0xB9, 0x96, 0xBA, /* 0x34-0x37 */ + 0x96, 0xBB, 0x96, 0xBC, 0x96, 0xBD, 0x96, 0xBE, /* 0x38-0x3B */ + 0x96, 0xBF, 0x96, 0xC0, 0x96, 0xC1, 0x96, 0xC2, /* 0x3C-0x3F */ + 0xBB, 0xC7, 0xBB, 0xC8, 0x96, 0xC3, 0x96, 0xC4, /* 0x40-0x43 */ + 0xBB, 0xC9, 0x96, 0xC5, 0x96, 0xC6, 0x96, 0xC7, /* 0x44-0x47 */ + 0xBB, 0xCA, 0x96, 0xC8, 0x96, 0xC9, 0x96, 0xCA, /* 0x48-0x4B */ + 0x96, 0xCB, 0x96, 0xCC, 0x96, 0xCD, 0x96, 0xCE, /* 0x4C-0x4F */ + 0xBB, 0xCB, 0xBB, 0xCC, 0x96, 0xCF, 0x96, 0xD0, /* 0x50-0x53 */ + 0x96, 0xD1, 0xBB, 0xCD, 0x96, 0xD2, 0x96, 0xD3, /* 0x54-0x57 */ + 0x96, 0xD4, 0x96, 0xD5, 0x96, 0xD6, 0x96, 0xD7, /* 0x58-0x5B */ + 0x96, 0xD8, 0x96, 0xD9, 0x96, 0xDA, 0x96, 0xDB, /* 0x5C-0x5F */ + 0x96, 0xDC, 0x96, 0xDD, 0x96, 0xDE, 0x96, 0xDF, /* 0x60-0x63 */ + 0x96, 0xE0, 0x96, 0xE1, 0x96, 0xE2, 0x96, 0xE3, /* 0x64-0x67 */ + 0x96, 0xE4, 0x96, 0xE5, 0x96, 0xE6, 0x96, 0xE7, /* 0x68-0x6B */ + 0x96, 0xE8, 0x96, 0xE9, 0x96, 0xEA, 0x96, 0xEB, /* 0x6C-0x6F */ + 0x96, 0xEC, 0x96, 0xED, 0x96, 0xEE, 0x96, 0xEF, /* 0x70-0x73 */ + 0x96, 0xF0, 0x96, 0xF1, 0x96, 0xF2, 0x96, 0xF3, /* 0x74-0x77 */ + 0x96, 0xF4, 0x96, 0xF5, 0x96, 0xF6, 0x96, 0xF7, /* 0x78-0x7B */ + 0x96, 0xF8, 0x96, 0xF9, 0x96, 0xFA, 0x96, 0xFB, /* 0x7C-0x7F */ + + 0x96, 0xFC, 0x96, 0xFD, 0x96, 0xFE, 0x97, 0x41, /* 0x80-0x83 */ + 0x97, 0x42, 0x97, 0x43, 0x97, 0x44, 0x97, 0x45, /* 0x84-0x87 */ + 0x97, 0x46, 0x97, 0x47, 0x97, 0x48, 0x97, 0x49, /* 0x88-0x8B */ + 0x97, 0x4A, 0x97, 0x4B, 0x97, 0x4C, 0x97, 0x4D, /* 0x8C-0x8F */ + 0x97, 0x4E, 0x97, 0x4F, 0x97, 0x50, 0x97, 0x51, /* 0x90-0x93 */ + 0xBB, 0xCE, 0x97, 0x52, 0x97, 0x53, 0x97, 0x54, /* 0x94-0x97 */ + 0x97, 0x55, 0x97, 0x56, 0x97, 0x57, 0x97, 0x58, /* 0x98-0x9B */ + 0x97, 0x59, 0x97, 0x5A, 0x97, 0x61, 0x97, 0x62, /* 0x9C-0x9F */ + 0x97, 0x63, 0x97, 0x64, 0x97, 0x65, 0x97, 0x66, /* 0xA0-0xA3 */ + 0x97, 0x67, 0x97, 0x68, 0x97, 0x69, 0x97, 0x6A, /* 0xA4-0xA7 */ + 0x97, 0x6B, 0x97, 0x6C, 0x97, 0x6D, 0x97, 0x6E, /* 0xA8-0xAB */ + 0x97, 0x6F, 0x97, 0x70, 0x97, 0x71, 0x97, 0x72, /* 0xAC-0xAF */ + 0xBB, 0xCF, 0x97, 0x73, 0x97, 0x74, 0x97, 0x75, /* 0xB0-0xB3 */ + 0x97, 0x76, 0x97, 0x77, 0x97, 0x78, 0x97, 0x79, /* 0xB4-0xB7 */ + 0x97, 0x7A, 0x97, 0x81, 0x97, 0x82, 0x97, 0x83, /* 0xB8-0xBB */ + 0x97, 0x84, 0x97, 0x85, 0x97, 0x86, 0x97, 0x87, /* 0xBC-0xBF */ + 0x97, 0x88, 0x97, 0x89, 0x97, 0x8A, 0x97, 0x8B, /* 0xC0-0xC3 */ + 0x97, 0x8C, 0xBB, 0xD0, 0x97, 0x8D, 0x97, 0x8E, /* 0xC4-0xC7 */ + 0x97, 0x8F, 0x97, 0x90, 0x97, 0x91, 0x97, 0x92, /* 0xC8-0xCB */ + 0xBB, 0xD1, 0xBB, 0xD2, 0x97, 0x93, 0x97, 0x94, /* 0xCC-0xCF */ + 0xBB, 0xD3, 0x97, 0x95, 0x97, 0x96, 0x97, 0x97, /* 0xD0-0xD3 */ + 0xBB, 0xD4, 0x97, 0x98, 0x97, 0x99, 0x97, 0x9A, /* 0xD4-0xD7 */ + 0x97, 0x9B, 0x97, 0x9C, 0x97, 0x9D, 0x97, 0x9E, /* 0xD8-0xDB */ + 0xBB, 0xD5, 0x97, 0x9F, 0x97, 0xA0, 0xBB, 0xD6, /* 0xDC-0xDF */ + 0x97, 0xA1, 0xBB, 0xD7, 0x97, 0xA2, 0x97, 0xA3, /* 0xE0-0xE3 */ + 0x97, 0xA4, 0x97, 0xA5, 0x97, 0xA6, 0x97, 0xA7, /* 0xE4-0xE7 */ + 0x97, 0xA8, 0x97, 0xA9, 0x97, 0xAA, 0x97, 0xAB, /* 0xE8-0xEB */ + 0x97, 0xAC, 0x97, 0xAD, 0x97, 0xAE, 0x97, 0xAF, /* 0xEC-0xEF */ + 0x97, 0xB0, 0x97, 0xB1, 0x97, 0xB2, 0x97, 0xB3, /* 0xF0-0xF3 */ + 0x97, 0xB4, 0x97, 0xB5, 0x97, 0xB6, 0x97, 0xB7, /* 0xF4-0xF7 */ + 0x97, 0xB8, 0x97, 0xB9, 0x97, 0xBA, 0x97, 0xBB, /* 0xF8-0xFB */ + 0x97, 0xBC, 0x97, 0xBD, 0x97, 0xBE, 0x97, 0xBF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C0[512] = { + 0x97, 0xC0, 0x97, 0xC1, 0x97, 0xC2, 0x97, 0xC3, /* 0x00-0x03 */ + 0x97, 0xC4, 0x97, 0xC5, 0x97, 0xC6, 0x97, 0xC7, /* 0x04-0x07 */ + 0x97, 0xC8, 0x97, 0xC9, 0x97, 0xCA, 0x97, 0xCB, /* 0x08-0x0B */ + 0x97, 0xCC, 0x97, 0xCD, 0x97, 0xCE, 0x97, 0xCF, /* 0x0C-0x0F */ + 0x97, 0xD0, 0x97, 0xD1, 0x97, 0xD2, 0x97, 0xD3, /* 0x10-0x13 */ + 0x97, 0xD4, 0x97, 0xD5, 0x97, 0xD6, 0x97, 0xD7, /* 0x14-0x17 */ + 0x97, 0xD8, 0x97, 0xD9, 0x97, 0xDA, 0x97, 0xDB, /* 0x18-0x1B */ + 0x97, 0xDC, 0x97, 0xDD, 0x97, 0xDE, 0x97, 0xDF, /* 0x1C-0x1F */ + 0x97, 0xE0, 0x97, 0xE1, 0x97, 0xE2, 0x97, 0xE3, /* 0x20-0x23 */ + 0x97, 0xE4, 0x97, 0xE5, 0x97, 0xE6, 0x97, 0xE7, /* 0x24-0x27 */ + 0x97, 0xE8, 0x97, 0xE9, 0x97, 0xEA, 0x97, 0xEB, /* 0x28-0x2B */ + 0x97, 0xEC, 0x97, 0xED, 0x97, 0xEE, 0x97, 0xEF, /* 0x2C-0x2F */ + 0x97, 0xF0, 0x97, 0xF1, 0x97, 0xF2, 0x97, 0xF3, /* 0x30-0x33 */ + 0x97, 0xF4, 0x97, 0xF5, 0x97, 0xF6, 0x97, 0xF7, /* 0x34-0x37 */ + 0x97, 0xF8, 0x97, 0xF9, 0x97, 0xFA, 0x97, 0xFB, /* 0x38-0x3B */ + 0xBB, 0xD8, 0x97, 0xFC, 0x97, 0xFD, 0x97, 0xFE, /* 0x3C-0x3F */ + 0x98, 0x41, 0x98, 0x42, 0x98, 0x43, 0x98, 0x44, /* 0x40-0x43 */ + 0x98, 0x45, 0x98, 0x46, 0x98, 0x47, 0x98, 0x48, /* 0x44-0x47 */ + 0x98, 0x49, 0x98, 0x4A, 0x98, 0x4B, 0x98, 0x4C, /* 0x48-0x4B */ + 0x98, 0x4D, 0x98, 0x4E, 0x98, 0x4F, 0x98, 0x50, /* 0x4C-0x4F */ + 0x98, 0x51, 0xBB, 0xD9, 0x98, 0x52, 0x98, 0x53, /* 0x50-0x53 */ + 0x98, 0x54, 0x98, 0x55, 0x98, 0x56, 0x98, 0x57, /* 0x54-0x57 */ + 0xBB, 0xDA, 0x98, 0x58, 0x98, 0x59, 0x98, 0x5A, /* 0x58-0x5B */ + 0xBB, 0xDB, 0x98, 0x61, 0x98, 0x62, 0x98, 0x63, /* 0x5C-0x5F */ + 0xBB, 0xDC, 0x98, 0x64, 0x98, 0x65, 0x98, 0x66, /* 0x60-0x63 */ + 0x98, 0x67, 0x98, 0x68, 0x98, 0x69, 0x98, 0x6A, /* 0x64-0x67 */ + 0xBB, 0xDD, 0xBB, 0xDE, 0x98, 0x6B, 0x98, 0x6C, /* 0x68-0x6B */ + 0x98, 0x6D, 0x98, 0x6E, 0x98, 0x6F, 0x98, 0x70, /* 0x6C-0x6F */ + 0x98, 0x71, 0x98, 0x72, 0x98, 0x73, 0x98, 0x74, /* 0x70-0x73 */ + 0x98, 0x75, 0x98, 0x76, 0x98, 0x77, 0x98, 0x78, /* 0x74-0x77 */ + 0x98, 0x79, 0x98, 0x7A, 0x98, 0x81, 0x98, 0x82, /* 0x78-0x7B */ + 0x98, 0x83, 0x98, 0x84, 0x98, 0x85, 0x98, 0x86, /* 0x7C-0x7F */ + + 0x98, 0x87, 0x98, 0x88, 0x98, 0x89, 0x98, 0x8A, /* 0x80-0x83 */ + 0x98, 0x8B, 0x98, 0x8C, 0x98, 0x8D, 0x98, 0x8E, /* 0x84-0x87 */ + 0x98, 0x8F, 0x98, 0x90, 0x98, 0x91, 0x98, 0x92, /* 0x88-0x8B */ + 0x98, 0x93, 0x98, 0x94, 0x98, 0x95, 0x98, 0x96, /* 0x8C-0x8F */ + 0xBB, 0xDF, 0xBB, 0xE0, 0x98, 0x97, 0x98, 0x98, /* 0x90-0x93 */ + 0xBB, 0xE1, 0x98, 0x99, 0x98, 0x9A, 0x98, 0x9B, /* 0x94-0x97 */ + 0xBB, 0xE2, 0x98, 0x9C, 0x98, 0x9D, 0x98, 0x9E, /* 0x98-0x9B */ + 0x98, 0x9F, 0x98, 0xA0, 0x98, 0xA1, 0x98, 0xA2, /* 0x9C-0x9F */ + 0xBB, 0xE3, 0xBB, 0xE4, 0x98, 0xA3, 0xBB, 0xE5, /* 0xA0-0xA3 */ + 0x98, 0xA4, 0xBB, 0xE6, 0x98, 0xA5, 0x98, 0xA6, /* 0xA4-0xA7 */ + 0x98, 0xA7, 0x98, 0xA8, 0x98, 0xA9, 0x98, 0xAA, /* 0xA8-0xAB */ + 0xBB, 0xE7, 0xBB, 0xE8, 0x98, 0xAB, 0xBB, 0xE9, /* 0xAC-0xAF */ + 0xBB, 0xEA, 0x98, 0xAC, 0x98, 0xAD, 0xBB, 0xEB, /* 0xB0-0xB3 */ + 0xBB, 0xEC, 0xBB, 0xED, 0xBB, 0xEE, 0x98, 0xAE, /* 0xB4-0xB7 */ + 0x98, 0xAF, 0x98, 0xB0, 0x98, 0xB1, 0x98, 0xB2, /* 0xB8-0xBB */ + 0xBB, 0xEF, 0xBB, 0xF0, 0x98, 0xB3, 0xBB, 0xF1, /* 0xBC-0xBF */ + 0xBB, 0xF2, 0xBB, 0xF3, 0x98, 0xB4, 0x98, 0xB5, /* 0xC0-0xC3 */ + 0x98, 0xB6, 0xBB, 0xF4, 0x98, 0xB7, 0x98, 0xB8, /* 0xC4-0xC7 */ + 0xBB, 0xF5, 0xBB, 0xF6, 0x98, 0xB9, 0x98, 0xBA, /* 0xC8-0xCB */ + 0xBB, 0xF7, 0x98, 0xBB, 0x98, 0xBC, 0x98, 0xBD, /* 0xCC-0xCF */ + 0xBB, 0xF8, 0x98, 0xBE, 0x98, 0xBF, 0x98, 0xC0, /* 0xD0-0xD3 */ + 0x98, 0xC1, 0x98, 0xC2, 0x98, 0xC3, 0x98, 0xC4, /* 0xD4-0xD7 */ + 0xBB, 0xF9, 0xBB, 0xFA, 0x98, 0xC5, 0xBB, 0xFB, /* 0xD8-0xDB */ + 0xBB, 0xFC, 0xBB, 0xFD, 0x98, 0xC6, 0x98, 0xC7, /* 0xDC-0xDF */ + 0x98, 0xC8, 0x98, 0xC9, 0x98, 0xCA, 0x98, 0xCB, /* 0xE0-0xE3 */ + 0xBB, 0xFE, 0xBC, 0xA1, 0x98, 0xCC, 0x98, 0xCD, /* 0xE4-0xE7 */ + 0xBC, 0xA2, 0x98, 0xCE, 0x98, 0xCF, 0x98, 0xD0, /* 0xE8-0xEB */ + 0xBC, 0xA3, 0x98, 0xD1, 0x98, 0xD2, 0x98, 0xD3, /* 0xEC-0xEF */ + 0x98, 0xD4, 0x98, 0xD5, 0x98, 0xD6, 0x98, 0xD7, /* 0xF0-0xF3 */ + 0xBC, 0xA4, 0xBC, 0xA5, 0x98, 0xD8, 0xBC, 0xA6, /* 0xF4-0xF7 */ + 0x98, 0xD9, 0xBC, 0xA7, 0x98, 0xDA, 0x98, 0xDB, /* 0xF8-0xFB */ + 0x98, 0xDC, 0x98, 0xDD, 0x98, 0xDE, 0x98, 0xDF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C1[512] = { + 0xBC, 0xA8, 0x98, 0xE0, 0x98, 0xE1, 0x98, 0xE2, /* 0x00-0x03 */ + 0xBC, 0xA9, 0x98, 0xE3, 0x98, 0xE4, 0x98, 0xE5, /* 0x04-0x07 */ + 0xBC, 0xAA, 0x98, 0xE6, 0x98, 0xE7, 0x98, 0xE8, /* 0x08-0x0B */ + 0x98, 0xE9, 0x98, 0xEA, 0x98, 0xEB, 0x98, 0xEC, /* 0x0C-0x0F */ + 0xBC, 0xAB, 0x98, 0xED, 0x98, 0xEE, 0x98, 0xEF, /* 0x10-0x13 */ + 0x98, 0xF0, 0xBC, 0xAC, 0x98, 0xF1, 0x98, 0xF2, /* 0x14-0x17 */ + 0x98, 0xF3, 0x98, 0xF4, 0x98, 0xF5, 0x98, 0xF6, /* 0x18-0x1B */ + 0xBC, 0xAD, 0xBC, 0xAE, 0xBC, 0xAF, 0xBC, 0xB0, /* 0x1C-0x1F */ + 0xBC, 0xB1, 0x98, 0xF7, 0x98, 0xF8, 0xBC, 0xB2, /* 0x20-0x23 */ + 0xBC, 0xB3, 0x98, 0xF9, 0xBC, 0xB4, 0xBC, 0xB5, /* 0x24-0x27 */ + 0x98, 0xFA, 0x98, 0xFB, 0x98, 0xFC, 0x98, 0xFD, /* 0x28-0x2B */ + 0xBC, 0xB6, 0xBC, 0xB7, 0x98, 0xFE, 0xBC, 0xB8, /* 0x2C-0x2F */ + 0xBC, 0xB9, 0xBC, 0xBA, 0x99, 0x41, 0x99, 0x42, /* 0x30-0x33 */ + 0x99, 0x43, 0x99, 0x44, 0xBC, 0xBB, 0x99, 0x45, /* 0x34-0x37 */ + 0xBC, 0xBC, 0xBC, 0xBD, 0x99, 0x46, 0x99, 0x47, /* 0x38-0x3B */ + 0xBC, 0xBE, 0x99, 0x48, 0x99, 0x49, 0x99, 0x4A, /* 0x3C-0x3F */ + 0xBC, 0xBF, 0x99, 0x4B, 0x99, 0x4C, 0x99, 0x4D, /* 0x40-0x43 */ + 0x99, 0x4E, 0x99, 0x4F, 0x99, 0x50, 0x99, 0x51, /* 0x44-0x47 */ + 0xBC, 0xC0, 0xBC, 0xC1, 0x99, 0x52, 0xBC, 0xC2, /* 0x48-0x4B */ + 0xBC, 0xC3, 0xBC, 0xC4, 0x99, 0x53, 0x99, 0x54, /* 0x4C-0x4F */ + 0x99, 0x55, 0x99, 0x56, 0x99, 0x57, 0x99, 0x58, /* 0x50-0x53 */ + 0xBC, 0xC5, 0xBC, 0xC6, 0x99, 0x59, 0x99, 0x5A, /* 0x54-0x57 */ + 0xBC, 0xC7, 0x99, 0x61, 0x99, 0x62, 0x99, 0x63, /* 0x58-0x5B */ + 0xBC, 0xC8, 0x99, 0x64, 0x99, 0x65, 0x99, 0x66, /* 0x5C-0x5F */ + 0x99, 0x67, 0x99, 0x68, 0x99, 0x69, 0x99, 0x6A, /* 0x60-0x63 */ + 0xBC, 0xC9, 0xBC, 0xCA, 0x99, 0x6B, 0xBC, 0xCB, /* 0x64-0x67 */ + 0xBC, 0xCC, 0xBC, 0xCD, 0x99, 0x6C, 0x99, 0x6D, /* 0x68-0x6B */ + 0x99, 0x6E, 0x99, 0x6F, 0x99, 0x70, 0x99, 0x71, /* 0x6C-0x6F */ + 0xBC, 0xCE, 0x99, 0x72, 0x99, 0x73, 0x99, 0x74, /* 0x70-0x73 */ + 0xBC, 0xCF, 0x99, 0x75, 0x99, 0x76, 0x99, 0x77, /* 0x74-0x77 */ + 0xBC, 0xD0, 0x99, 0x78, 0x99, 0x79, 0x99, 0x7A, /* 0x78-0x7B */ + 0x99, 0x81, 0x99, 0x82, 0x99, 0x83, 0x99, 0x84, /* 0x7C-0x7F */ + + 0x99, 0x85, 0x99, 0x86, 0x99, 0x87, 0x99, 0x88, /* 0x80-0x83 */ + 0x99, 0x89, 0xBC, 0xD1, 0x99, 0x8A, 0x99, 0x8B, /* 0x84-0x87 */ + 0x99, 0x8C, 0x99, 0x8D, 0x99, 0x8E, 0x99, 0x8F, /* 0x88-0x8B */ + 0xBC, 0xD2, 0xBC, 0xD3, 0xBC, 0xD4, 0x99, 0x90, /* 0x8C-0x8F */ + 0xBC, 0xD5, 0x99, 0x91, 0x99, 0x92, 0x99, 0x93, /* 0x90-0x93 */ + 0xBC, 0xD6, 0x99, 0x94, 0xBC, 0xD7, 0x99, 0x95, /* 0x94-0x97 */ + 0x99, 0x96, 0x99, 0x97, 0x99, 0x98, 0x99, 0x99, /* 0x98-0x9B */ + 0xBC, 0xD8, 0xBC, 0xD9, 0x99, 0x9A, 0xBC, 0xDA, /* 0x9C-0x9F */ + 0x99, 0x9B, 0xBC, 0xDB, 0x99, 0x9C, 0x99, 0x9D, /* 0xA0-0xA3 */ + 0x99, 0x9E, 0xBC, 0xDC, 0x99, 0x9F, 0x99, 0xA0, /* 0xA4-0xA7 */ + 0xBC, 0xDD, 0xBC, 0xDE, 0x99, 0xA1, 0x99, 0xA2, /* 0xA8-0xAB */ + 0xBC, 0xDF, 0x99, 0xA3, 0x99, 0xA4, 0x99, 0xA5, /* 0xAC-0xAF */ + 0xBC, 0xE0, 0x99, 0xA6, 0x99, 0xA7, 0x99, 0xA8, /* 0xB0-0xB3 */ + 0x99, 0xA9, 0x99, 0xAA, 0x99, 0xAB, 0x99, 0xAC, /* 0xB4-0xB7 */ + 0x99, 0xAD, 0x99, 0xAE, 0x99, 0xAF, 0x99, 0xB0, /* 0xB8-0xBB */ + 0x99, 0xB1, 0xBC, 0xE1, 0x99, 0xB2, 0x99, 0xB3, /* 0xBC-0xBF */ + 0x99, 0xB4, 0x99, 0xB5, 0x99, 0xB6, 0x99, 0xB7, /* 0xC0-0xC3 */ + 0xBC, 0xE2, 0x99, 0xB8, 0x99, 0xB9, 0x99, 0xBA, /* 0xC4-0xC7 */ + 0xBC, 0xE3, 0x99, 0xBB, 0x99, 0xBC, 0x99, 0xBD, /* 0xC8-0xCB */ + 0xBC, 0xE4, 0x99, 0xBE, 0x99, 0xBF, 0x99, 0xC0, /* 0xCC-0xCF */ + 0x99, 0xC1, 0x99, 0xC2, 0x99, 0xC3, 0x99, 0xC4, /* 0xD0-0xD3 */ + 0xBC, 0xE5, 0x99, 0xC5, 0x99, 0xC6, 0xBC, 0xE6, /* 0xD4-0xD7 */ + 0xBC, 0xE7, 0x99, 0xC7, 0x99, 0xC8, 0x99, 0xC9, /* 0xD8-0xDB */ + 0x99, 0xCA, 0x99, 0xCB, 0x99, 0xCC, 0x99, 0xCD, /* 0xDC-0xDF */ + 0xBC, 0xE8, 0x99, 0xCE, 0x99, 0xCF, 0x99, 0xD0, /* 0xE0-0xE3 */ + 0xBC, 0xE9, 0x99, 0xD1, 0x99, 0xD2, 0x99, 0xD3, /* 0xE4-0xE7 */ + 0xBC, 0xEA, 0x99, 0xD4, 0x99, 0xD5, 0x99, 0xD6, /* 0xE8-0xEB */ + 0x99, 0xD7, 0x99, 0xD8, 0x99, 0xD9, 0x99, 0xDA, /* 0xEC-0xEF */ + 0xBC, 0xEB, 0xBC, 0xEC, 0x99, 0xDB, 0xBC, 0xED, /* 0xF0-0xF3 */ + 0x99, 0xDC, 0x99, 0xDD, 0x99, 0xDE, 0x99, 0xDF, /* 0xF4-0xF7 */ + 0x99, 0xE0, 0x99, 0xE1, 0x99, 0xE2, 0x99, 0xE3, /* 0xF8-0xFB */ + 0xBC, 0xEE, 0xBC, 0xEF, 0x99, 0xE4, 0x99, 0xE5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C2[512] = { + 0xBC, 0xF0, 0x99, 0xE6, 0x99, 0xE7, 0x99, 0xE8, /* 0x00-0x03 */ + 0xBC, 0xF1, 0x99, 0xE9, 0x99, 0xEA, 0x99, 0xEB, /* 0x04-0x07 */ + 0x99, 0xEC, 0x99, 0xED, 0x99, 0xEE, 0x99, 0xEF, /* 0x08-0x0B */ + 0xBC, 0xF2, 0xBC, 0xF3, 0x99, 0xF0, 0xBC, 0xF4, /* 0x0C-0x0F */ + 0x99, 0xF1, 0xBC, 0xF5, 0x99, 0xF2, 0x99, 0xF3, /* 0x10-0x13 */ + 0x99, 0xF4, 0x99, 0xF5, 0x99, 0xF6, 0x99, 0xF7, /* 0x14-0x17 */ + 0xBC, 0xF6, 0xBC, 0xF7, 0x99, 0xF8, 0x99, 0xF9, /* 0x18-0x1B */ + 0xBC, 0xF8, 0x99, 0xFA, 0x99, 0xFB, 0xBC, 0xF9, /* 0x1C-0x1F */ + 0xBC, 0xFA, 0x99, 0xFC, 0x99, 0xFD, 0x99, 0xFE, /* 0x20-0x23 */ + 0x9A, 0x41, 0x9A, 0x42, 0x9A, 0x43, 0x9A, 0x44, /* 0x24-0x27 */ + 0xBC, 0xFB, 0xBC, 0xFC, 0x9A, 0x45, 0xBC, 0xFD, /* 0x28-0x2B */ + 0x9A, 0x46, 0xBC, 0xFE, 0x9A, 0x47, 0xBD, 0xA1, /* 0x2C-0x2F */ + 0x9A, 0x48, 0xBD, 0xA2, 0xBD, 0xA3, 0x9A, 0x49, /* 0x30-0x33 */ + 0xBD, 0xA4, 0x9A, 0x4A, 0x9A, 0x4B, 0x9A, 0x4C, /* 0x34-0x37 */ + 0x9A, 0x4D, 0x9A, 0x4E, 0x9A, 0x4F, 0x9A, 0x50, /* 0x38-0x3B */ + 0x9A, 0x51, 0x9A, 0x52, 0x9A, 0x53, 0x9A, 0x54, /* 0x3C-0x3F */ + 0x9A, 0x55, 0x9A, 0x56, 0x9A, 0x57, 0x9A, 0x58, /* 0x40-0x43 */ + 0x9A, 0x59, 0x9A, 0x5A, 0x9A, 0x61, 0x9A, 0x62, /* 0x44-0x47 */ + 0xBD, 0xA5, 0x9A, 0x63, 0x9A, 0x64, 0x9A, 0x65, /* 0x48-0x4B */ + 0x9A, 0x66, 0x9A, 0x67, 0x9A, 0x68, 0x9A, 0x69, /* 0x4C-0x4F */ + 0xBD, 0xA6, 0xBD, 0xA7, 0x9A, 0x6A, 0x9A, 0x6B, /* 0x50-0x53 */ + 0xBD, 0xA8, 0x9A, 0x6C, 0x9A, 0x6D, 0x9A, 0x6E, /* 0x54-0x57 */ + 0xBD, 0xA9, 0x9A, 0x6F, 0x9A, 0x70, 0x9A, 0x71, /* 0x58-0x5B */ + 0x9A, 0x72, 0x9A, 0x73, 0x9A, 0x74, 0x9A, 0x75, /* 0x5C-0x5F */ + 0xBD, 0xAA, 0x9A, 0x76, 0x9A, 0x77, 0x9A, 0x78, /* 0x60-0x63 */ + 0x9A, 0x79, 0xBD, 0xAB, 0x9A, 0x7A, 0x9A, 0x81, /* 0x64-0x67 */ + 0x9A, 0x82, 0x9A, 0x83, 0x9A, 0x84, 0x9A, 0x85, /* 0x68-0x6B */ + 0xBD, 0xAC, 0xBD, 0xAD, 0x9A, 0x86, 0x9A, 0x87, /* 0x6C-0x6F */ + 0xBD, 0xAE, 0x9A, 0x88, 0x9A, 0x89, 0x9A, 0x8A, /* 0x70-0x73 */ + 0xBD, 0xAF, 0x9A, 0x8B, 0x9A, 0x8C, 0x9A, 0x8D, /* 0x74-0x77 */ + 0x9A, 0x8E, 0x9A, 0x8F, 0x9A, 0x90, 0x9A, 0x91, /* 0x78-0x7B */ + 0xBD, 0xB0, 0xBD, 0xB1, 0x9A, 0x92, 0xBD, 0xB2, /* 0x7C-0x7F */ + + 0x9A, 0x93, 0xBD, 0xB3, 0x9A, 0x94, 0x9A, 0x95, /* 0x80-0x83 */ + 0x9A, 0x96, 0x9A, 0x97, 0x9A, 0x98, 0x9A, 0x99, /* 0x84-0x87 */ + 0xBD, 0xB4, 0xBD, 0xB5, 0x9A, 0x9A, 0x9A, 0x9B, /* 0x88-0x8B */ + 0x9A, 0x9C, 0x9A, 0x9D, 0x9A, 0x9E, 0x9A, 0x9F, /* 0x8C-0x8F */ + 0xBD, 0xB6, 0x9A, 0xA0, 0x9A, 0xA1, 0x9A, 0xA2, /* 0x90-0x93 */ + 0x9A, 0xA3, 0x9A, 0xA4, 0x9A, 0xA5, 0x9A, 0xA6, /* 0x94-0x97 */ + 0xBD, 0xB7, 0x9A, 0xA7, 0x9A, 0xA8, 0xBD, 0xB8, /* 0x98-0x9B */ + 0x9A, 0xA9, 0xBD, 0xB9, 0x9A, 0xAA, 0x9A, 0xAB, /* 0x9C-0x9F */ + 0x9A, 0xAC, 0x9A, 0xAD, 0x9A, 0xAE, 0x9A, 0xAF, /* 0xA0-0xA3 */ + 0xBD, 0xBA, 0xBD, 0xBB, 0x9A, 0xB0, 0x9A, 0xB1, /* 0xA4-0xA7 */ + 0xBD, 0xBC, 0x9A, 0xB2, 0x9A, 0xB3, 0x9A, 0xB4, /* 0xA8-0xAB */ + 0xBD, 0xBD, 0xBD, 0xBE, 0x9A, 0xB5, 0x9A, 0xB6, /* 0xAC-0xAF */ + 0x9A, 0xB7, 0x9A, 0xB8, 0x9A, 0xB9, 0x9A, 0xBA, /* 0xB0-0xB3 */ + 0xBD, 0xBF, 0xBD, 0xC0, 0x9A, 0xBB, 0xBD, 0xC1, /* 0xB4-0xB7 */ + 0x9A, 0xBC, 0xBD, 0xC2, 0x9A, 0xBD, 0x9A, 0xBE, /* 0xB8-0xBB */ + 0x9A, 0xBF, 0x9A, 0xC0, 0x9A, 0xC1, 0x9A, 0xC2, /* 0xBC-0xBF */ + 0x9A, 0xC3, 0x9A, 0xC4, 0x9A, 0xC5, 0x9A, 0xC6, /* 0xC0-0xC3 */ + 0x9A, 0xC7, 0x9A, 0xC8, 0x9A, 0xC9, 0x9A, 0xCA, /* 0xC4-0xC7 */ + 0x9A, 0xCB, 0x9A, 0xCC, 0x9A, 0xCD, 0x9A, 0xCE, /* 0xC8-0xCB */ + 0x9A, 0xCF, 0x9A, 0xD0, 0x9A, 0xD1, 0x9A, 0xD2, /* 0xCC-0xCF */ + 0x9A, 0xD3, 0x9A, 0xD4, 0x9A, 0xD5, 0x9A, 0xD6, /* 0xD0-0xD3 */ + 0x9A, 0xD7, 0x9A, 0xD8, 0x9A, 0xD9, 0x9A, 0xDA, /* 0xD4-0xD7 */ + 0x9A, 0xDB, 0x9A, 0xDC, 0x9A, 0xDD, 0x9A, 0xDE, /* 0xD8-0xDB */ + 0xBD, 0xC3, 0xBD, 0xC4, 0x9A, 0xDF, 0x9A, 0xE0, /* 0xDC-0xDF */ + 0xBD, 0xC5, 0x9A, 0xE1, 0x9A, 0xE2, 0xBD, 0xC6, /* 0xE0-0xE3 */ + 0xBD, 0xC7, 0x9A, 0xE3, 0x9A, 0xE4, 0x9A, 0xE5, /* 0xE4-0xE7 */ + 0x9A, 0xE6, 0x9A, 0xE7, 0x9A, 0xE8, 0xBD, 0xC8, /* 0xE8-0xEB */ + 0xBD, 0xC9, 0xBD, 0xCA, 0x9A, 0xE9, 0xBD, 0xCB, /* 0xEC-0xEF */ + 0x9A, 0xEA, 0xBD, 0xCC, 0x9A, 0xEB, 0x9A, 0xEC, /* 0xF0-0xF3 */ + 0x9A, 0xED, 0x9A, 0xEE, 0xBD, 0xCD, 0x9A, 0xEF, /* 0xF4-0xF7 */ + 0xBD, 0xCE, 0xBD, 0xCF, 0x9A, 0xF0, 0xBD, 0xD0, /* 0xF8-0xFB */ + 0xBD, 0xD1, 0x9A, 0xF1, 0x9A, 0xF2, 0x9A, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C3[512] = { + 0xBD, 0xD2, 0x9A, 0xF4, 0x9A, 0xF5, 0x9A, 0xF6, /* 0x00-0x03 */ + 0x9A, 0xF7, 0x9A, 0xF8, 0x9A, 0xF9, 0x9A, 0xFA, /* 0x04-0x07 */ + 0xBD, 0xD3, 0xBD, 0xD4, 0x9A, 0xFB, 0x9A, 0xFC, /* 0x08-0x0B */ + 0xBD, 0xD5, 0xBD, 0xD6, 0x9A, 0xFD, 0x9A, 0xFE, /* 0x0C-0x0F */ + 0x9B, 0x41, 0x9B, 0x42, 0x9B, 0x43, 0xBD, 0xD7, /* 0x10-0x13 */ + 0xBD, 0xD8, 0xBD, 0xD9, 0x9B, 0x44, 0x9B, 0x45, /* 0x14-0x17 */ + 0xBD, 0xDA, 0x9B, 0x46, 0x9B, 0x47, 0x9B, 0x48, /* 0x18-0x1B */ + 0xBD, 0xDB, 0x9B, 0x49, 0x9B, 0x4A, 0x9B, 0x4B, /* 0x1C-0x1F */ + 0x9B, 0x4C, 0x9B, 0x4D, 0x9B, 0x4E, 0x9B, 0x4F, /* 0x20-0x23 */ + 0xBD, 0xDC, 0xBD, 0xDD, 0x9B, 0x50, 0x9B, 0x51, /* 0x24-0x27 */ + 0xBD, 0xDE, 0xBD, 0xDF, 0x9B, 0x52, 0x9B, 0x53, /* 0x28-0x2B */ + 0x9B, 0x54, 0x9B, 0x55, 0x9B, 0x56, 0x9B, 0x57, /* 0x2C-0x2F */ + 0x9B, 0x58, 0x9B, 0x59, 0x9B, 0x5A, 0x9B, 0x61, /* 0x30-0x33 */ + 0x9B, 0x62, 0x9B, 0x63, 0x9B, 0x64, 0x9B, 0x65, /* 0x34-0x37 */ + 0x9B, 0x66, 0x9B, 0x67, 0x9B, 0x68, 0x9B, 0x69, /* 0x38-0x3B */ + 0x9B, 0x6A, 0x9B, 0x6B, 0x9B, 0x6C, 0x9B, 0x6D, /* 0x3C-0x3F */ + 0x9B, 0x6E, 0x9B, 0x6F, 0x9B, 0x70, 0x9B, 0x71, /* 0x40-0x43 */ + 0x9B, 0x72, 0xBD, 0xE0, 0x9B, 0x73, 0x9B, 0x74, /* 0x44-0x47 */ + 0x9B, 0x75, 0x9B, 0x76, 0x9B, 0x77, 0x9B, 0x78, /* 0x48-0x4B */ + 0x9B, 0x79, 0x9B, 0x7A, 0x9B, 0x81, 0x9B, 0x82, /* 0x4C-0x4F */ + 0x9B, 0x83, 0x9B, 0x84, 0x9B, 0x85, 0x9B, 0x86, /* 0x50-0x53 */ + 0x9B, 0x87, 0x9B, 0x88, 0x9B, 0x89, 0x9B, 0x8A, /* 0x54-0x57 */ + 0x9B, 0x8B, 0x9B, 0x8C, 0x9B, 0x8D, 0x9B, 0x8E, /* 0x58-0x5B */ + 0x9B, 0x8F, 0x9B, 0x90, 0x9B, 0x91, 0x9B, 0x92, /* 0x5C-0x5F */ + 0x9B, 0x93, 0x9B, 0x94, 0x9B, 0x95, 0x9B, 0x96, /* 0x60-0x63 */ + 0x9B, 0x97, 0x9B, 0x98, 0x9B, 0x99, 0x9B, 0x9A, /* 0x64-0x67 */ + 0xBD, 0xE1, 0xBD, 0xE2, 0x9B, 0x9B, 0x9B, 0x9C, /* 0x68-0x6B */ + 0xBD, 0xE3, 0x9B, 0x9D, 0x9B, 0x9E, 0x9B, 0x9F, /* 0x6C-0x6F */ + 0xBD, 0xE4, 0x9B, 0xA0, 0xBD, 0xE5, 0x9B, 0xA1, /* 0x70-0x73 */ + 0x9B, 0xA2, 0x9B, 0xA3, 0x9B, 0xA4, 0x9B, 0xA5, /* 0x74-0x77 */ + 0xBD, 0xE6, 0xBD, 0xE7, 0x9B, 0xA6, 0x9B, 0xA7, /* 0x78-0x7B */ + 0xBD, 0xE8, 0xBD, 0xE9, 0x9B, 0xA8, 0x9B, 0xA9, /* 0x7C-0x7F */ + + 0x9B, 0xAA, 0x9B, 0xAB, 0x9B, 0xAC, 0x9B, 0xAD, /* 0x80-0x83 */ + 0xBD, 0xEA, 0x9B, 0xAE, 0x9B, 0xAF, 0x9B, 0xB0, /* 0x84-0x87 */ + 0xBD, 0xEB, 0x9B, 0xB1, 0x9B, 0xB2, 0x9B, 0xB3, /* 0x88-0x8B */ + 0xBD, 0xEC, 0x9B, 0xB4, 0x9B, 0xB5, 0x9B, 0xB6, /* 0x8C-0x8F */ + 0x9B, 0xB7, 0x9B, 0xB8, 0x9B, 0xB9, 0x9B, 0xBA, /* 0x90-0x93 */ + 0x9B, 0xBB, 0x9B, 0xBC, 0x9B, 0xBD, 0x9B, 0xBE, /* 0x94-0x97 */ + 0x9B, 0xBF, 0x9B, 0xC0, 0x9B, 0xC1, 0x9B, 0xC2, /* 0x98-0x9B */ + 0x9B, 0xC3, 0x9B, 0xC4, 0x9B, 0xC5, 0x9B, 0xC6, /* 0x9C-0x9F */ + 0x9B, 0xC7, 0x9B, 0xC8, 0x9B, 0xC9, 0x9B, 0xCA, /* 0xA0-0xA3 */ + 0x9B, 0xCB, 0x9B, 0xCC, 0x9B, 0xCD, 0x9B, 0xCE, /* 0xA4-0xA7 */ + 0x9B, 0xCF, 0x9B, 0xD0, 0x9B, 0xD1, 0x9B, 0xD2, /* 0xA8-0xAB */ + 0x9B, 0xD3, 0x9B, 0xD4, 0x9B, 0xD5, 0x9B, 0xD6, /* 0xAC-0xAF */ + 0x9B, 0xD7, 0x9B, 0xD8, 0x9B, 0xD9, 0x9B, 0xDA, /* 0xB0-0xB3 */ + 0x9B, 0xDB, 0x9B, 0xDC, 0x9B, 0xDD, 0x9B, 0xDE, /* 0xB4-0xB7 */ + 0x9B, 0xDF, 0x9B, 0xE0, 0x9B, 0xE1, 0x9B, 0xE2, /* 0xB8-0xBB */ + 0x9B, 0xE3, 0x9B, 0xE4, 0x9B, 0xE5, 0x9B, 0xE6, /* 0xBC-0xBF */ + 0xBD, 0xED, 0x9B, 0xE7, 0x9B, 0xE8, 0x9B, 0xE9, /* 0xC0-0xC3 */ + 0x9B, 0xEA, 0x9B, 0xEB, 0x9B, 0xEC, 0x9B, 0xED, /* 0xC4-0xC7 */ + 0x9B, 0xEE, 0x9B, 0xEF, 0x9B, 0xF0, 0x9B, 0xF1, /* 0xC8-0xCB */ + 0x9B, 0xF2, 0x9B, 0xF3, 0x9B, 0xF4, 0x9B, 0xF5, /* 0xCC-0xCF */ + 0x9B, 0xF6, 0x9B, 0xF7, 0x9B, 0xF8, 0x9B, 0xF9, /* 0xD0-0xD3 */ + 0x9B, 0xFA, 0x9B, 0xFB, 0x9B, 0xFC, 0x9B, 0xFD, /* 0xD4-0xD7 */ + 0xBD, 0xEE, 0xBD, 0xEF, 0x9B, 0xFE, 0x9C, 0x41, /* 0xD8-0xDB */ + 0xBD, 0xF0, 0x9C, 0x42, 0x9C, 0x43, 0xBD, 0xF1, /* 0xDC-0xDF */ + 0xBD, 0xF2, 0x9C, 0x44, 0xBD, 0xF3, 0x9C, 0x45, /* 0xE0-0xE3 */ + 0x9C, 0x46, 0x9C, 0x47, 0x9C, 0x48, 0x9C, 0x49, /* 0xE4-0xE7 */ + 0xBD, 0xF4, 0xBD, 0xF5, 0x9C, 0x4A, 0x9C, 0x4B, /* 0xE8-0xEB */ + 0x9C, 0x4C, 0xBD, 0xF6, 0x9C, 0x4D, 0x9C, 0x4E, /* 0xEC-0xEF */ + 0x9C, 0x4F, 0x9C, 0x50, 0x9C, 0x51, 0x9C, 0x52, /* 0xF0-0xF3 */ + 0xBD, 0xF7, 0xBD, 0xF8, 0x9C, 0x53, 0x9C, 0x54, /* 0xF4-0xF7 */ + 0xBD, 0xF9, 0x9C, 0x55, 0x9C, 0x56, 0x9C, 0x57, /* 0xF8-0xFB */ + 0x9C, 0x58, 0x9C, 0x59, 0x9C, 0x5A, 0x9C, 0x61, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C4[512] = { + 0x9C, 0x62, 0x9C, 0x63, 0x9C, 0x64, 0x9C, 0x65, /* 0x00-0x03 */ + 0x9C, 0x66, 0x9C, 0x67, 0x9C, 0x68, 0x9C, 0x69, /* 0x04-0x07 */ + 0xBD, 0xFA, 0x9C, 0x6A, 0x9C, 0x6B, 0x9C, 0x6C, /* 0x08-0x0B */ + 0x9C, 0x6D, 0x9C, 0x6E, 0x9C, 0x6F, 0x9C, 0x70, /* 0x0C-0x0F */ + 0xBD, 0xFB, 0x9C, 0x71, 0x9C, 0x72, 0x9C, 0x73, /* 0x10-0x13 */ + 0x9C, 0x74, 0x9C, 0x75, 0x9C, 0x76, 0x9C, 0x77, /* 0x14-0x17 */ + 0x9C, 0x78, 0x9C, 0x79, 0x9C, 0x7A, 0x9C, 0x81, /* 0x18-0x1B */ + 0x9C, 0x82, 0x9C, 0x83, 0x9C, 0x84, 0x9C, 0x85, /* 0x1C-0x1F */ + 0x9C, 0x86, 0x9C, 0x87, 0x9C, 0x88, 0x9C, 0x89, /* 0x20-0x23 */ + 0xBD, 0xFC, 0x9C, 0x8A, 0x9C, 0x8B, 0x9C, 0x8C, /* 0x24-0x27 */ + 0x9C, 0x8D, 0x9C, 0x8E, 0x9C, 0x8F, 0x9C, 0x90, /* 0x28-0x2B */ + 0xBD, 0xFD, 0x9C, 0x91, 0x9C, 0x92, 0x9C, 0x93, /* 0x2C-0x2F */ + 0xBD, 0xFE, 0x9C, 0x94, 0x9C, 0x95, 0x9C, 0x96, /* 0x30-0x33 */ + 0xBE, 0xA1, 0x9C, 0x97, 0x9C, 0x98, 0x9C, 0x99, /* 0x34-0x37 */ + 0x9C, 0x9A, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9D, /* 0x38-0x3B */ + 0xBE, 0xA2, 0xBE, 0xA3, 0x9C, 0x9E, 0x9C, 0x9F, /* 0x3C-0x3F */ + 0x9C, 0xA0, 0x9C, 0xA1, 0x9C, 0xA2, 0x9C, 0xA3, /* 0x40-0x43 */ + 0x9C, 0xA4, 0x9C, 0xA5, 0x9C, 0xA6, 0x9C, 0xA7, /* 0x44-0x47 */ + 0xBE, 0xA4, 0x9C, 0xA8, 0x9C, 0xA9, 0x9C, 0xAA, /* 0x48-0x4B */ + 0x9C, 0xAB, 0x9C, 0xAC, 0x9C, 0xAD, 0x9C, 0xAE, /* 0x4C-0x4F */ + 0x9C, 0xAF, 0x9C, 0xB0, 0x9C, 0xB1, 0x9C, 0xB2, /* 0x50-0x53 */ + 0x9C, 0xB3, 0x9C, 0xB4, 0x9C, 0xB5, 0x9C, 0xB6, /* 0x54-0x57 */ + 0x9C, 0xB7, 0x9C, 0xB8, 0x9C, 0xB9, 0x9C, 0xBA, /* 0x58-0x5B */ + 0x9C, 0xBB, 0x9C, 0xBC, 0x9C, 0xBD, 0x9C, 0xBE, /* 0x5C-0x5F */ + 0x9C, 0xBF, 0x9C, 0xC0, 0x9C, 0xC1, 0x9C, 0xC2, /* 0x60-0x63 */ + 0xBE, 0xA5, 0xBE, 0xA6, 0x9C, 0xC3, 0x9C, 0xC4, /* 0x64-0x67 */ + 0xBE, 0xA7, 0x9C, 0xC5, 0x9C, 0xC6, 0x9C, 0xC7, /* 0x68-0x6B */ + 0xBE, 0xA8, 0x9C, 0xC8, 0x9C, 0xC9, 0x9C, 0xCA, /* 0x6C-0x6F */ + 0x9C, 0xCB, 0x9C, 0xCC, 0x9C, 0xCD, 0x9C, 0xCE, /* 0x70-0x73 */ + 0xBE, 0xA9, 0xBE, 0xAA, 0x9C, 0xCF, 0x9C, 0xD0, /* 0x74-0x77 */ + 0x9C, 0xD1, 0xBE, 0xAB, 0x9C, 0xD2, 0x9C, 0xD3, /* 0x78-0x7B */ + 0x9C, 0xD4, 0x9C, 0xD5, 0x9C, 0xD6, 0x9C, 0xD7, /* 0x7C-0x7F */ + + 0xBE, 0xAC, 0x9C, 0xD8, 0x9C, 0xD9, 0x9C, 0xDA, /* 0x80-0x83 */ + 0x9C, 0xDB, 0x9C, 0xDC, 0x9C, 0xDD, 0x9C, 0xDE, /* 0x84-0x87 */ + 0x9C, 0xDF, 0x9C, 0xE0, 0x9C, 0xE1, 0x9C, 0xE2, /* 0x88-0x8B */ + 0x9C, 0xE3, 0x9C, 0xE4, 0x9C, 0xE5, 0x9C, 0xE6, /* 0x8C-0x8F */ + 0x9C, 0xE7, 0x9C, 0xE8, 0x9C, 0xE9, 0x9C, 0xEA, /* 0x90-0x93 */ + 0xBE, 0xAD, 0x9C, 0xEB, 0x9C, 0xEC, 0x9C, 0xED, /* 0x94-0x97 */ + 0x9C, 0xEE, 0x9C, 0xEF, 0x9C, 0xF0, 0x9C, 0xF1, /* 0x98-0x9B */ + 0xBE, 0xAE, 0x9C, 0xF2, 0x9C, 0xF3, 0x9C, 0xF4, /* 0x9C-0x9F */ + 0x9C, 0xF5, 0x9C, 0xF6, 0x9C, 0xF7, 0x9C, 0xF8, /* 0xA0-0xA3 */ + 0x9C, 0xF9, 0x9C, 0xFA, 0x9C, 0xFB, 0x9C, 0xFC, /* 0xA4-0xA7 */ + 0x9C, 0xFD, 0x9C, 0xFE, 0x9D, 0x41, 0x9D, 0x42, /* 0xA8-0xAB */ + 0x9D, 0x43, 0x9D, 0x44, 0x9D, 0x45, 0x9D, 0x46, /* 0xAC-0xAF */ + 0x9D, 0x47, 0x9D, 0x48, 0x9D, 0x49, 0x9D, 0x4A, /* 0xB0-0xB3 */ + 0x9D, 0x4B, 0x9D, 0x4C, 0x9D, 0x4D, 0x9D, 0x4E, /* 0xB4-0xB7 */ + 0xBE, 0xAF, 0x9D, 0x4F, 0x9D, 0x50, 0x9D, 0x51, /* 0xB8-0xBB */ + 0xBE, 0xB0, 0x9D, 0x52, 0x9D, 0x53, 0x9D, 0x54, /* 0xBC-0xBF */ + 0x9D, 0x55, 0x9D, 0x56, 0x9D, 0x57, 0x9D, 0x58, /* 0xC0-0xC3 */ + 0x9D, 0x59, 0x9D, 0x5A, 0x9D, 0x61, 0x9D, 0x62, /* 0xC4-0xC7 */ + 0x9D, 0x63, 0x9D, 0x64, 0x9D, 0x65, 0x9D, 0x66, /* 0xC8-0xCB */ + 0x9D, 0x67, 0x9D, 0x68, 0x9D, 0x69, 0x9D, 0x6A, /* 0xCC-0xCF */ + 0x9D, 0x6B, 0x9D, 0x6C, 0x9D, 0x6D, 0x9D, 0x6E, /* 0xD0-0xD3 */ + 0x9D, 0x6F, 0x9D, 0x70, 0x9D, 0x71, 0x9D, 0x72, /* 0xD4-0xD7 */ + 0x9D, 0x73, 0x9D, 0x74, 0x9D, 0x75, 0x9D, 0x76, /* 0xD8-0xDB */ + 0x9D, 0x77, 0x9D, 0x78, 0x9D, 0x79, 0x9D, 0x7A, /* 0xDC-0xDF */ + 0x9D, 0x81, 0x9D, 0x82, 0x9D, 0x83, 0x9D, 0x84, /* 0xE0-0xE3 */ + 0x9D, 0x85, 0x9D, 0x86, 0x9D, 0x87, 0x9D, 0x88, /* 0xE4-0xE7 */ + 0x9D, 0x89, 0xBE, 0xB1, 0x9D, 0x8A, 0x9D, 0x8B, /* 0xE8-0xEB */ + 0x9D, 0x8C, 0x9D, 0x8D, 0x9D, 0x8E, 0x9D, 0x8F, /* 0xEC-0xEF */ + 0xBE, 0xB2, 0xBE, 0xB3, 0x9D, 0x90, 0x9D, 0x91, /* 0xF0-0xF3 */ + 0xBE, 0xB4, 0x9D, 0x92, 0x9D, 0x93, 0x9D, 0x94, /* 0xF4-0xF7 */ + 0xBE, 0xB5, 0x9D, 0x95, 0xBE, 0xB6, 0x9D, 0x96, /* 0xF8-0xFB */ + 0x9D, 0x97, 0x9D, 0x98, 0x9D, 0x99, 0xBE, 0xB7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C5[512] = { + 0xBE, 0xB8, 0xBE, 0xB9, 0x9D, 0x9A, 0x9D, 0x9B, /* 0x00-0x03 */ + 0x9D, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9D, 0x9F, /* 0x04-0x07 */ + 0x9D, 0xA0, 0x9D, 0xA1, 0x9D, 0xA2, 0x9D, 0xA3, /* 0x08-0x0B */ + 0xBE, 0xBA, 0x9D, 0xA4, 0x9D, 0xA5, 0x9D, 0xA6, /* 0x0C-0x0F */ + 0xBE, 0xBB, 0x9D, 0xA7, 0x9D, 0xA8, 0x9D, 0xA9, /* 0x10-0x13 */ + 0xBE, 0xBC, 0x9D, 0xAA, 0x9D, 0xAB, 0x9D, 0xAC, /* 0x14-0x17 */ + 0x9D, 0xAD, 0x9D, 0xAE, 0x9D, 0xAF, 0x9D, 0xB0, /* 0x18-0x1B */ + 0xBE, 0xBD, 0x9D, 0xB1, 0x9D, 0xB2, 0x9D, 0xB3, /* 0x1C-0x1F */ + 0x9D, 0xB4, 0x9D, 0xB5, 0x9D, 0xB6, 0x9D, 0xB7, /* 0x20-0x23 */ + 0x9D, 0xB8, 0x9D, 0xB9, 0x9D, 0xBA, 0x9D, 0xBB, /* 0x24-0x27 */ + 0xBE, 0xBE, 0xBE, 0xBF, 0x9D, 0xBC, 0x9D, 0xBD, /* 0x28-0x2B */ + 0xBE, 0xC0, 0x9D, 0xBE, 0x9D, 0xBF, 0x9D, 0xC0, /* 0x2C-0x2F */ + 0xBE, 0xC1, 0x9D, 0xC1, 0x9D, 0xC2, 0x9D, 0xC3, /* 0x30-0x33 */ + 0x9D, 0xC4, 0x9D, 0xC5, 0x9D, 0xC6, 0x9D, 0xC7, /* 0x34-0x37 */ + 0xBE, 0xC2, 0xBE, 0xC3, 0x9D, 0xC8, 0xBE, 0xC4, /* 0x38-0x3B */ + 0x9D, 0xC9, 0xBE, 0xC5, 0x9D, 0xCA, 0x9D, 0xCB, /* 0x3C-0x3F */ + 0x9D, 0xCC, 0x9D, 0xCD, 0x9D, 0xCE, 0x9D, 0xCF, /* 0x40-0x43 */ + 0xBE, 0xC6, 0xBE, 0xC7, 0x9D, 0xD0, 0x9D, 0xD1, /* 0x44-0x47 */ + 0xBE, 0xC8, 0xBE, 0xC9, 0xBE, 0xCA, 0x9D, 0xD2, /* 0x48-0x4B */ + 0xBE, 0xCB, 0xBE, 0xCC, 0xBE, 0xCD, 0x9D, 0xD3, /* 0x4C-0x4F */ + 0x9D, 0xD4, 0x9D, 0xD5, 0x9D, 0xD6, 0xBE, 0xCE, /* 0x50-0x53 */ + 0xBE, 0xCF, 0xBE, 0xD0, 0x9D, 0xD7, 0xBE, 0xD1, /* 0x54-0x57 */ + 0xBE, 0xD2, 0xBE, 0xD3, 0x9D, 0xD8, 0x9D, 0xD9, /* 0x58-0x5B */ + 0x9D, 0xDA, 0xBE, 0xD4, 0xBE, 0xD5, 0x9D, 0xDB, /* 0x5C-0x5F */ + 0xBE, 0xD6, 0xBE, 0xD7, 0x9D, 0xDC, 0x9D, 0xDD, /* 0x60-0x63 */ + 0xBE, 0xD8, 0x9D, 0xDE, 0x9D, 0xDF, 0x9D, 0xE0, /* 0x64-0x67 */ + 0xBE, 0xD9, 0x9D, 0xE1, 0x9D, 0xE2, 0x9D, 0xE3, /* 0x68-0x6B */ + 0x9D, 0xE4, 0x9D, 0xE5, 0x9D, 0xE6, 0x9D, 0xE7, /* 0x6C-0x6F */ + 0xBE, 0xDA, 0xBE, 0xDB, 0x9D, 0xE8, 0xBE, 0xDC, /* 0x70-0x73 */ + 0xBE, 0xDD, 0xBE, 0xDE, 0x9D, 0xE9, 0x9D, 0xEA, /* 0x74-0x77 */ + 0x9D, 0xEB, 0x9D, 0xEC, 0x9D, 0xED, 0x9D, 0xEE, /* 0x78-0x7B */ + 0xBE, 0xDF, 0xBE, 0xE0, 0x9D, 0xEF, 0x9D, 0xF0, /* 0x7C-0x7F */ + + 0xBE, 0xE1, 0x9D, 0xF1, 0x9D, 0xF2, 0x9D, 0xF3, /* 0x80-0x83 */ + 0xBE, 0xE2, 0x9D, 0xF4, 0x9D, 0xF5, 0xBE, 0xE3, /* 0x84-0x87 */ + 0x9D, 0xF6, 0x9D, 0xF7, 0x9D, 0xF8, 0x9D, 0xF9, /* 0x88-0x8B */ + 0xBE, 0xE4, 0xBE, 0xE5, 0x9D, 0xFA, 0xBE, 0xE6, /* 0x8C-0x8F */ + 0x9D, 0xFB, 0xBE, 0xE7, 0x9D, 0xFC, 0x9D, 0xFD, /* 0x90-0x93 */ + 0x9D, 0xFE, 0xBE, 0xE8, 0x9E, 0x41, 0xBE, 0xE9, /* 0x94-0x97 */ + 0xBE, 0xEA, 0x9E, 0x42, 0x9E, 0x43, 0x9E, 0x44, /* 0x98-0x9B */ + 0xBE, 0xEB, 0x9E, 0x45, 0x9E, 0x46, 0x9E, 0x47, /* 0x9C-0x9F */ + 0xBE, 0xEC, 0x9E, 0x48, 0x9E, 0x49, 0x9E, 0x4A, /* 0xA0-0xA3 */ + 0x9E, 0x4B, 0x9E, 0x4C, 0x9E, 0x4D, 0x9E, 0x4E, /* 0xA4-0xA7 */ + 0x9E, 0x4F, 0xBE, 0xED, 0x9E, 0x50, 0x9E, 0x51, /* 0xA8-0xAB */ + 0x9E, 0x52, 0x9E, 0x53, 0x9E, 0x54, 0x9E, 0x55, /* 0xAC-0xAF */ + 0x9E, 0x56, 0x9E, 0x57, 0x9E, 0x58, 0x9E, 0x59, /* 0xB0-0xB3 */ + 0xBE, 0xEE, 0xBE, 0xEF, 0x9E, 0x5A, 0x9E, 0x61, /* 0xB4-0xB7 */ + 0xBE, 0xF0, 0xBE, 0xF1, 0x9E, 0x62, 0xBE, 0xF2, /* 0xB8-0xBB */ + 0xBE, 0xF3, 0xBE, 0xF4, 0xBE, 0xF5, 0x9E, 0x63, /* 0xBC-0xBF */ + 0x9E, 0x64, 0x9E, 0x65, 0x9E, 0x66, 0x9E, 0x67, /* 0xC0-0xC3 */ + 0xBE, 0xF6, 0xBE, 0xF7, 0xBE, 0xF8, 0xBE, 0xF9, /* 0xC4-0xC7 */ + 0xBE, 0xFA, 0xBE, 0xFB, 0xBE, 0xFC, 0x9E, 0x68, /* 0xC8-0xCB */ + 0xBE, 0xFD, 0x9E, 0x69, 0xBE, 0xFE, 0x9E, 0x6A, /* 0xCC-0xCF */ + 0xBF, 0xA1, 0xBF, 0xA2, 0x9E, 0x6B, 0x9E, 0x6C, /* 0xD0-0xD3 */ + 0xBF, 0xA3, 0x9E, 0x6D, 0x9E, 0x6E, 0x9E, 0x6F, /* 0xD4-0xD7 */ + 0xBF, 0xA4, 0x9E, 0x70, 0x9E, 0x71, 0x9E, 0x72, /* 0xD8-0xDB */ + 0x9E, 0x73, 0x9E, 0x74, 0x9E, 0x75, 0x9E, 0x76, /* 0xDC-0xDF */ + 0xBF, 0xA5, 0xBF, 0xA6, 0x9E, 0x77, 0xBF, 0xA7, /* 0xE0-0xE3 */ + 0x9E, 0x78, 0xBF, 0xA8, 0x9E, 0x79, 0x9E, 0x7A, /* 0xE4-0xE7 */ + 0x9E, 0x81, 0x9E, 0x82, 0x9E, 0x83, 0x9E, 0x84, /* 0xE8-0xEB */ + 0xBF, 0xA9, 0xBF, 0xAA, 0xBF, 0xAB, 0x9E, 0x85, /* 0xEC-0xEF */ + 0xBF, 0xAC, 0x9E, 0x86, 0x9E, 0x87, 0x9E, 0x88, /* 0xF0-0xF3 */ + 0xBF, 0xAD, 0x9E, 0x89, 0xBF, 0xAE, 0xBF, 0xAF, /* 0xF4-0xF7 */ + 0x9E, 0x8A, 0x9E, 0x8B, 0x9E, 0x8C, 0x9E, 0x8D, /* 0xF8-0xFB */ + 0xBF, 0xB0, 0xBF, 0xB1, 0xBF, 0xB2, 0xBF, 0xB3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C6[512] = { + 0xBF, 0xB4, 0xBF, 0xB5, 0x9E, 0x8E, 0x9E, 0x8F, /* 0x00-0x03 */ + 0x9E, 0x90, 0xBF, 0xB6, 0xBF, 0xB7, 0xBF, 0xB8, /* 0x04-0x07 */ + 0xBF, 0xB9, 0x9E, 0x91, 0x9E, 0x92, 0x9E, 0x93, /* 0x08-0x0B */ + 0xBF, 0xBA, 0x9E, 0x94, 0x9E, 0x95, 0x9E, 0x96, /* 0x0C-0x0F */ + 0xBF, 0xBB, 0x9E, 0x97, 0x9E, 0x98, 0x9E, 0x99, /* 0x10-0x13 */ + 0x9E, 0x9A, 0x9E, 0x9B, 0x9E, 0x9C, 0x9E, 0x9D, /* 0x14-0x17 */ + 0xBF, 0xBC, 0xBF, 0xBD, 0x9E, 0x9E, 0xBF, 0xBE, /* 0x18-0x1B */ + 0xBF, 0xBF, 0x9E, 0x9F, 0x9E, 0xA0, 0x9E, 0xA1, /* 0x1C-0x1F */ + 0x9E, 0xA2, 0x9E, 0xA3, 0x9E, 0xA4, 0x9E, 0xA5, /* 0x20-0x23 */ + 0xBF, 0xC0, 0xBF, 0xC1, 0x9E, 0xA6, 0x9E, 0xA7, /* 0x24-0x27 */ + 0xBF, 0xC2, 0x9E, 0xA8, 0x9E, 0xA9, 0x9E, 0xAA, /* 0x28-0x2B */ + 0xBF, 0xC3, 0xBF, 0xC4, 0xBF, 0xC5, 0x9E, 0xAB, /* 0x2C-0x2F */ + 0xBF, 0xC6, 0x9E, 0xAC, 0x9E, 0xAD, 0xBF, 0xC7, /* 0x30-0x33 */ + 0xBF, 0xC8, 0xBF, 0xC9, 0x9E, 0xAE, 0xBF, 0xCA, /* 0x34-0x37 */ + 0x9E, 0xAF, 0xBF, 0xCB, 0x9E, 0xB0, 0xBF, 0xCC, /* 0x38-0x3B */ + 0x9E, 0xB1, 0x9E, 0xB2, 0x9E, 0xB3, 0x9E, 0xB4, /* 0x3C-0x3F */ + 0xBF, 0xCD, 0xBF, 0xCE, 0x9E, 0xB5, 0x9E, 0xB6, /* 0x40-0x43 */ + 0xBF, 0xCF, 0x9E, 0xB7, 0x9E, 0xB8, 0x9E, 0xB9, /* 0x44-0x47 */ + 0xBF, 0xD0, 0x9E, 0xBA, 0x9E, 0xBB, 0x9E, 0xBC, /* 0x48-0x4B */ + 0x9E, 0xBD, 0x9E, 0xBE, 0x9E, 0xBF, 0x9E, 0xC0, /* 0x4C-0x4F */ + 0xBF, 0xD1, 0xBF, 0xD2, 0x9E, 0xC1, 0xBF, 0xD3, /* 0x50-0x53 */ + 0xBF, 0xD4, 0xBF, 0xD5, 0x9E, 0xC2, 0x9E, 0xC3, /* 0x54-0x57 */ + 0x9E, 0xC4, 0x9E, 0xC5, 0x9E, 0xC6, 0x9E, 0xC7, /* 0x58-0x5B */ + 0xBF, 0xD6, 0xBF, 0xD7, 0x9E, 0xC8, 0x9E, 0xC9, /* 0x5C-0x5F */ + 0xBF, 0xD8, 0x9E, 0xCA, 0x9E, 0xCB, 0x9E, 0xCC, /* 0x60-0x63 */ + 0x9E, 0xCD, 0x9E, 0xCE, 0x9E, 0xCF, 0x9E, 0xD0, /* 0x64-0x67 */ + 0x9E, 0xD1, 0x9E, 0xD2, 0x9E, 0xD3, 0x9E, 0xD4, /* 0x68-0x6B */ + 0xBF, 0xD9, 0x9E, 0xD5, 0x9E, 0xD6, 0xBF, 0xDA, /* 0x6C-0x6F */ + 0x9E, 0xD7, 0xBF, 0xDB, 0x9E, 0xD8, 0x9E, 0xD9, /* 0x70-0x73 */ + 0x9E, 0xDA, 0x9E, 0xDB, 0x9E, 0xDC, 0x9E, 0xDD, /* 0x74-0x77 */ + 0xBF, 0xDC, 0xBF, 0xDD, 0x9E, 0xDE, 0x9E, 0xDF, /* 0x78-0x7B */ + 0xBF, 0xDE, 0x9E, 0xE0, 0x9E, 0xE1, 0x9E, 0xE2, /* 0x7C-0x7F */ + + 0xBF, 0xDF, 0x9E, 0xE3, 0x9E, 0xE4, 0x9E, 0xE5, /* 0x80-0x83 */ + 0x9E, 0xE6, 0x9E, 0xE7, 0x9E, 0xE8, 0x9E, 0xE9, /* 0x84-0x87 */ + 0xBF, 0xE0, 0xBF, 0xE1, 0x9E, 0xEA, 0xBF, 0xE2, /* 0x88-0x8B */ + 0x9E, 0xEB, 0xBF, 0xE3, 0x9E, 0xEC, 0x9E, 0xED, /* 0x8C-0x8F */ + 0x9E, 0xEE, 0x9E, 0xEF, 0x9E, 0xF0, 0x9E, 0xF1, /* 0x90-0x93 */ + 0xBF, 0xE4, 0xBF, 0xE5, 0x9E, 0xF2, 0x9E, 0xF3, /* 0x94-0x97 */ + 0xBF, 0xE6, 0x9E, 0xF4, 0x9E, 0xF5, 0x9E, 0xF6, /* 0x98-0x9B */ + 0xBF, 0xE7, 0x9E, 0xF7, 0x9E, 0xF8, 0x9E, 0xF9, /* 0x9C-0x9F */ + 0x9E, 0xFA, 0x9E, 0xFB, 0x9E, 0xFC, 0x9E, 0xFD, /* 0xA0-0xA3 */ + 0xBF, 0xE8, 0xBF, 0xE9, 0x9E, 0xFE, 0xBF, 0xEA, /* 0xA4-0xA7 */ + 0x9F, 0x41, 0xBF, 0xEB, 0x9F, 0x42, 0x9F, 0x43, /* 0xA8-0xAB */ + 0x9F, 0x44, 0x9F, 0x45, 0x9F, 0x46, 0x9F, 0x47, /* 0xAC-0xAF */ + 0xBF, 0xEC, 0xBF, 0xED, 0x9F, 0x48, 0x9F, 0x49, /* 0xB0-0xB3 */ + 0xBF, 0xEE, 0x9F, 0x4A, 0x9F, 0x4B, 0x9F, 0x4C, /* 0xB4-0xB7 */ + 0xBF, 0xEF, 0xBF, 0xF0, 0xBF, 0xF1, 0x9F, 0x4D, /* 0xB8-0xBB */ + 0x9F, 0x4E, 0x9F, 0x4F, 0x9F, 0x50, 0x9F, 0x51, /* 0xBC-0xBF */ + 0xBF, 0xF2, 0xBF, 0xF3, 0x9F, 0x52, 0xBF, 0xF4, /* 0xC0-0xC3 */ + 0x9F, 0x53, 0xBF, 0xF5, 0x9F, 0x54, 0x9F, 0x55, /* 0xC4-0xC7 */ + 0x9F, 0x56, 0x9F, 0x57, 0x9F, 0x58, 0x9F, 0x59, /* 0xC8-0xCB */ + 0xBF, 0xF6, 0xBF, 0xF7, 0x9F, 0x5A, 0x9F, 0x61, /* 0xCC-0xCF */ + 0xBF, 0xF8, 0x9F, 0x62, 0x9F, 0x63, 0x9F, 0x64, /* 0xD0-0xD3 */ + 0xBF, 0xF9, 0x9F, 0x65, 0x9F, 0x66, 0x9F, 0x67, /* 0xD4-0xD7 */ + 0x9F, 0x68, 0x9F, 0x69, 0x9F, 0x6A, 0x9F, 0x6B, /* 0xD8-0xDB */ + 0xBF, 0xFA, 0xBF, 0xFB, 0x9F, 0x6C, 0x9F, 0x6D, /* 0xDC-0xDF */ + 0xBF, 0xFC, 0xBF, 0xFD, 0x9F, 0x6E, 0x9F, 0x6F, /* 0xE0-0xE3 */ + 0x9F, 0x70, 0x9F, 0x71, 0x9F, 0x72, 0x9F, 0x73, /* 0xE4-0xE7 */ + 0xBF, 0xFE, 0xC0, 0xA1, 0x9F, 0x74, 0x9F, 0x75, /* 0xE8-0xEB */ + 0xC0, 0xA2, 0x9F, 0x76, 0x9F, 0x77, 0x9F, 0x78, /* 0xEC-0xEF */ + 0xC0, 0xA3, 0x9F, 0x79, 0x9F, 0x7A, 0x9F, 0x81, /* 0xF0-0xF3 */ + 0x9F, 0x82, 0x9F, 0x83, 0x9F, 0x84, 0x9F, 0x85, /* 0xF4-0xF7 */ + 0xC0, 0xA4, 0xC0, 0xA5, 0x9F, 0x86, 0x9F, 0x87, /* 0xF8-0xFB */ + 0x9F, 0x88, 0xC0, 0xA6, 0x9F, 0x89, 0x9F, 0x8A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C7[512] = { + 0x9F, 0x8B, 0x9F, 0x8C, 0x9F, 0x8D, 0x9F, 0x8E, /* 0x00-0x03 */ + 0xC0, 0xA7, 0xC0, 0xA8, 0x9F, 0x8F, 0x9F, 0x90, /* 0x04-0x07 */ + 0xC0, 0xA9, 0x9F, 0x91, 0x9F, 0x92, 0x9F, 0x93, /* 0x08-0x0B */ + 0xC0, 0xAA, 0x9F, 0x94, 0x9F, 0x95, 0x9F, 0x96, /* 0x0C-0x0F */ + 0x9F, 0x97, 0x9F, 0x98, 0x9F, 0x99, 0x9F, 0x9A, /* 0x10-0x13 */ + 0xC0, 0xAB, 0xC0, 0xAC, 0x9F, 0x9B, 0xC0, 0xAD, /* 0x14-0x17 */ + 0x9F, 0x9C, 0xC0, 0xAE, 0x9F, 0x9D, 0x9F, 0x9E, /* 0x18-0x1B */ + 0x9F, 0x9F, 0x9F, 0xA0, 0x9F, 0xA1, 0x9F, 0xA2, /* 0x1C-0x1F */ + 0xC0, 0xAF, 0xC0, 0xB0, 0x9F, 0xA3, 0x9F, 0xA4, /* 0x20-0x23 */ + 0xC0, 0xB1, 0x9F, 0xA5, 0x9F, 0xA6, 0x9F, 0xA7, /* 0x24-0x27 */ + 0xC0, 0xB2, 0x9F, 0xA8, 0x9F, 0xA9, 0x9F, 0xAA, /* 0x28-0x2B */ + 0x9F, 0xAB, 0x9F, 0xAC, 0x9F, 0xAD, 0x9F, 0xAE, /* 0x2C-0x2F */ + 0xC0, 0xB3, 0xC0, 0xB4, 0x9F, 0xAF, 0xC0, 0xB5, /* 0x30-0x33 */ + 0x9F, 0xB0, 0xC0, 0xB6, 0x9F, 0xB1, 0xC0, 0xB7, /* 0x34-0x37 */ + 0x9F, 0xB2, 0x9F, 0xB3, 0x9F, 0xB4, 0x9F, 0xB5, /* 0x38-0x3B */ + 0xC0, 0xB8, 0xC0, 0xB9, 0x9F, 0xB6, 0x9F, 0xB7, /* 0x3C-0x3F */ + 0xC0, 0xBA, 0x9F, 0xB8, 0x9F, 0xB9, 0x9F, 0xBA, /* 0x40-0x43 */ + 0xC0, 0xBB, 0x9F, 0xBB, 0x9F, 0xBC, 0x9F, 0xBD, /* 0x44-0x47 */ + 0x9F, 0xBE, 0x9F, 0xBF, 0xC0, 0xBC, 0x9F, 0xC0, /* 0x48-0x4B */ + 0xC0, 0xBD, 0xC0, 0xBE, 0x9F, 0xC1, 0xC0, 0xBF, /* 0x4C-0x4F */ + 0x9F, 0xC2, 0xC0, 0xC0, 0xC0, 0xC1, 0xC0, 0xC2, /* 0x50-0x53 */ + 0xC0, 0xC3, 0xC0, 0xC4, 0xC0, 0xC5, 0xC0, 0xC6, /* 0x54-0x57 */ + 0xC0, 0xC7, 0x9F, 0xC3, 0x9F, 0xC4, 0x9F, 0xC5, /* 0x58-0x5B */ + 0xC0, 0xC8, 0x9F, 0xC6, 0x9F, 0xC7, 0x9F, 0xC8, /* 0x5C-0x5F */ + 0xC0, 0xC9, 0x9F, 0xC9, 0x9F, 0xCA, 0x9F, 0xCB, /* 0x60-0x63 */ + 0x9F, 0xCC, 0x9F, 0xCD, 0x9F, 0xCE, 0x9F, 0xCF, /* 0x64-0x67 */ + 0xC0, 0xCA, 0x9F, 0xD0, 0x9F, 0xD1, 0xC0, 0xCB, /* 0x68-0x6B */ + 0x9F, 0xD2, 0x9F, 0xD3, 0x9F, 0xD4, 0x9F, 0xD5, /* 0x6C-0x6F */ + 0x9F, 0xD6, 0x9F, 0xD7, 0x9F, 0xD8, 0x9F, 0xD9, /* 0x70-0x73 */ + 0xC0, 0xCC, 0xC0, 0xCD, 0x9F, 0xDA, 0x9F, 0xDB, /* 0x74-0x77 */ + 0xC0, 0xCE, 0x9F, 0xDC, 0x9F, 0xDD, 0x9F, 0xDE, /* 0x78-0x7B */ + 0xC0, 0xCF, 0xC0, 0xD0, 0xC0, 0xD1, 0x9F, 0xDF, /* 0x7C-0x7F */ + + 0x9F, 0xE0, 0x9F, 0xE1, 0x9F, 0xE2, 0xC0, 0xD2, /* 0x80-0x83 */ + 0xC0, 0xD3, 0xC0, 0xD4, 0x9F, 0xE3, 0xC0, 0xD5, /* 0x84-0x87 */ + 0xC0, 0xD6, 0xC0, 0xD7, 0xC0, 0xD8, 0x9F, 0xE4, /* 0x88-0x8B */ + 0x9F, 0xE5, 0x9F, 0xE6, 0xC0, 0xD9, 0x9F, 0xE7, /* 0x8C-0x8F */ + 0xC0, 0xDA, 0xC0, 0xDB, 0x9F, 0xE8, 0x9F, 0xE9, /* 0x90-0x93 */ + 0xC0, 0xDC, 0x9F, 0xEA, 0xC0, 0xDD, 0xC0, 0xDE, /* 0x94-0x97 */ + 0xC0, 0xDF, 0x9F, 0xEB, 0xC0, 0xE0, 0x9F, 0xEC, /* 0x98-0x9B */ + 0x9F, 0xED, 0x9F, 0xEE, 0x9F, 0xEF, 0x9F, 0xF0, /* 0x9C-0x9F */ + 0xC0, 0xE1, 0xC0, 0xE2, 0x9F, 0xF1, 0xC0, 0xE3, /* 0xA0-0xA3 */ + 0xC0, 0xE4, 0xC0, 0xE5, 0xC0, 0xE6, 0x9F, 0xF2, /* 0xA4-0xA7 */ + 0x9F, 0xF3, 0x9F, 0xF4, 0x9F, 0xF5, 0x9F, 0xF6, /* 0xA8-0xAB */ + 0xC0, 0xE7, 0xC0, 0xE8, 0x9F, 0xF7, 0x9F, 0xF8, /* 0xAC-0xAF */ + 0xC0, 0xE9, 0x9F, 0xF9, 0x9F, 0xFA, 0x9F, 0xFB, /* 0xB0-0xB3 */ + 0xC0, 0xEA, 0x9F, 0xFC, 0x9F, 0xFD, 0x9F, 0xFE, /* 0xB4-0xB7 */ + 0xA0, 0x41, 0xA0, 0x42, 0xA0, 0x43, 0xA0, 0x44, /* 0xB8-0xBB */ + 0xC0, 0xEB, 0xC0, 0xEC, 0xA0, 0x45, 0xC0, 0xED, /* 0xBC-0xBF */ + 0xC0, 0xEE, 0xC0, 0xEF, 0xA0, 0x46, 0xA0, 0x47, /* 0xC0-0xC3 */ + 0xA0, 0x48, 0xA0, 0x49, 0xA0, 0x4A, 0xA0, 0x4B, /* 0xC4-0xC7 */ + 0xC0, 0xF0, 0xC0, 0xF1, 0xA0, 0x4C, 0xA0, 0x4D, /* 0xC8-0xCB */ + 0xC0, 0xF2, 0xA0, 0x4E, 0xC0, 0xF3, 0xA0, 0x4F, /* 0xCC-0xCF */ + 0xC0, 0xF4, 0xA0, 0x50, 0xA0, 0x51, 0xA0, 0x52, /* 0xD0-0xD3 */ + 0xA0, 0x53, 0xA0, 0x54, 0xA0, 0x55, 0xA0, 0x56, /* 0xD4-0xD7 */ + 0xC0, 0xF5, 0xA0, 0x57, 0xA0, 0x58, 0xA0, 0x59, /* 0xD8-0xDB */ + 0xA0, 0x5A, 0xC0, 0xF6, 0xA0, 0x61, 0xA0, 0x62, /* 0xDC-0xDF */ + 0xA0, 0x63, 0xA0, 0x64, 0xA0, 0x65, 0xA0, 0x66, /* 0xE0-0xE3 */ + 0xC0, 0xF7, 0xA0, 0x67, 0xA0, 0x68, 0xA0, 0x69, /* 0xE4-0xE7 */ + 0xC0, 0xF8, 0xA0, 0x6A, 0xA0, 0x6B, 0xA0, 0x6C, /* 0xE8-0xEB */ + 0xC0, 0xF9, 0xA0, 0x6D, 0xA0, 0x6E, 0xA0, 0x6F, /* 0xEC-0xEF */ + 0xA0, 0x70, 0xA0, 0x71, 0xA0, 0x72, 0xA0, 0x73, /* 0xF0-0xF3 */ + 0xA0, 0x74, 0xA0, 0x75, 0xA0, 0x76, 0xA0, 0x77, /* 0xF4-0xF7 */ + 0xA0, 0x78, 0xA0, 0x79, 0xA0, 0x7A, 0xA0, 0x81, /* 0xF8-0xFB */ + 0xA0, 0x82, 0xA0, 0x83, 0xA0, 0x84, 0xA0, 0x85, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C8[512] = { + 0xC0, 0xFA, 0xC0, 0xFB, 0xA0, 0x86, 0xA0, 0x87, /* 0x00-0x03 */ + 0xC0, 0xFC, 0xA0, 0x88, 0xA0, 0x89, 0xA0, 0x8A, /* 0x04-0x07 */ + 0xC0, 0xFD, 0xA0, 0x8B, 0xC0, 0xFE, 0xA0, 0x8C, /* 0x08-0x0B */ + 0xA0, 0x8D, 0xA0, 0x8E, 0xA0, 0x8F, 0xA0, 0x90, /* 0x0C-0x0F */ + 0xC1, 0xA1, 0xC1, 0xA2, 0xA0, 0x91, 0xC1, 0xA3, /* 0x10-0x13 */ + 0xA0, 0x92, 0xC1, 0xA4, 0xC1, 0xA5, 0xA0, 0x93, /* 0x14-0x17 */ + 0xA0, 0x94, 0xA0, 0x95, 0xA0, 0x96, 0xA0, 0x97, /* 0x18-0x1B */ + 0xC1, 0xA6, 0xC1, 0xA7, 0xA0, 0x98, 0xA0, 0x99, /* 0x1C-0x1F */ + 0xC1, 0xA8, 0xA0, 0x9A, 0xA0, 0x9B, 0xA0, 0x9C, /* 0x20-0x23 */ + 0xC1, 0xA9, 0xA0, 0x9D, 0xA0, 0x9E, 0xA0, 0x9F, /* 0x24-0x27 */ + 0xA0, 0xA0, 0xA0, 0xA1, 0xA0, 0xA2, 0xA0, 0xA3, /* 0x28-0x2B */ + 0xC1, 0xAA, 0xC1, 0xAB, 0xA0, 0xA4, 0xC1, 0xAC, /* 0x2C-0x2F */ + 0xA0, 0xA5, 0xC1, 0xAD, 0xA0, 0xA6, 0xA0, 0xA7, /* 0x30-0x33 */ + 0xA0, 0xA8, 0xA0, 0xA9, 0xA0, 0xAA, 0xA0, 0xAB, /* 0x34-0x37 */ + 0xC1, 0xAE, 0xA0, 0xAC, 0xA0, 0xAD, 0xA0, 0xAE, /* 0x38-0x3B */ + 0xC1, 0xAF, 0xA0, 0xAF, 0xA0, 0xB0, 0xA0, 0xB1, /* 0x3C-0x3F */ + 0xC1, 0xB0, 0xA0, 0xB2, 0xA0, 0xB3, 0xA0, 0xB4, /* 0x40-0x43 */ + 0xA0, 0xB5, 0xA0, 0xB6, 0xA0, 0xB7, 0xA0, 0xB8, /* 0x44-0x47 */ + 0xC1, 0xB1, 0xC1, 0xB2, 0xA0, 0xB9, 0xA0, 0xBA, /* 0x48-0x4B */ + 0xC1, 0xB3, 0xC1, 0xB4, 0xA0, 0xBB, 0xA0, 0xBC, /* 0x4C-0x4F */ + 0xA0, 0xBD, 0xA0, 0xBE, 0xA0, 0xBF, 0xA0, 0xC0, /* 0x50-0x53 */ + 0xC1, 0xB5, 0xA0, 0xC1, 0xA0, 0xC2, 0xA0, 0xC3, /* 0x54-0x57 */ + 0xA0, 0xC4, 0xA0, 0xC5, 0xA0, 0xC6, 0xA0, 0xC7, /* 0x58-0x5B */ + 0xA0, 0xC8, 0xA0, 0xC9, 0xA0, 0xCA, 0xA0, 0xCB, /* 0x5C-0x5F */ + 0xA0, 0xCC, 0xA0, 0xCD, 0xA0, 0xCE, 0xA0, 0xCF, /* 0x60-0x63 */ + 0xA0, 0xD0, 0xA0, 0xD1, 0xA0, 0xD2, 0xA0, 0xD3, /* 0x64-0x67 */ + 0xA0, 0xD4, 0xA0, 0xD5, 0xA0, 0xD6, 0xA0, 0xD7, /* 0x68-0x6B */ + 0xA0, 0xD8, 0xA0, 0xD9, 0xA0, 0xDA, 0xA0, 0xDB, /* 0x6C-0x6F */ + 0xC1, 0xB6, 0xC1, 0xB7, 0xA0, 0xDC, 0xA0, 0xDD, /* 0x70-0x73 */ + 0xC1, 0xB8, 0xA0, 0xDE, 0xA0, 0xDF, 0xA0, 0xE0, /* 0x74-0x77 */ + 0xC1, 0xB9, 0xA0, 0xE1, 0xC1, 0xBA, 0xA0, 0xE2, /* 0x78-0x7B */ + 0xA0, 0xE3, 0xA0, 0xE4, 0xA0, 0xE5, 0xA0, 0xE6, /* 0x7C-0x7F */ + + 0xC1, 0xBB, 0xC1, 0xBC, 0xA0, 0xE7, 0xC1, 0xBD, /* 0x80-0x83 */ + 0xA0, 0xE8, 0xC1, 0xBE, 0xC1, 0xBF, 0xC1, 0xC0, /* 0x84-0x87 */ + 0xA0, 0xE9, 0xA0, 0xEA, 0xA0, 0xEB, 0xC1, 0xC1, /* 0x88-0x8B */ + 0xC1, 0xC2, 0xC1, 0xC3, 0xA0, 0xEC, 0xA0, 0xED, /* 0x8C-0x8F */ + 0xA0, 0xEE, 0xA0, 0xEF, 0xA0, 0xF0, 0xA0, 0xF1, /* 0x90-0x93 */ + 0xC1, 0xC4, 0xA0, 0xF2, 0xA0, 0xF3, 0xA0, 0xF4, /* 0x94-0x97 */ + 0xA0, 0xF5, 0xA0, 0xF6, 0xA0, 0xF7, 0xA0, 0xF8, /* 0x98-0x9B */ + 0xA0, 0xF9, 0xC1, 0xC5, 0xA0, 0xFA, 0xC1, 0xC6, /* 0x9C-0x9F */ + 0xA0, 0xFB, 0xC1, 0xC7, 0xA0, 0xFC, 0xA0, 0xFD, /* 0xA0-0xA3 */ + 0xA0, 0xFE, 0xA1, 0x41, 0xA1, 0x42, 0xA1, 0x43, /* 0xA4-0xA7 */ + 0xC1, 0xC8, 0xA1, 0x44, 0xA1, 0x45, 0xA1, 0x46, /* 0xA8-0xAB */ + 0xA1, 0x47, 0xA1, 0x48, 0xA1, 0x49, 0xA1, 0x4A, /* 0xAC-0xAF */ + 0xA1, 0x4B, 0xA1, 0x4C, 0xA1, 0x4D, 0xA1, 0x4E, /* 0xB0-0xB3 */ + 0xA1, 0x4F, 0xA1, 0x50, 0xA1, 0x51, 0xA1, 0x52, /* 0xB4-0xB7 */ + 0xA1, 0x53, 0xA1, 0x54, 0xA1, 0x55, 0xA1, 0x56, /* 0xB8-0xBB */ + 0xC1, 0xC9, 0xC1, 0xCA, 0xA1, 0x57, 0xA1, 0x58, /* 0xBC-0xBF */ + 0xA1, 0x59, 0xA1, 0x5A, 0xA1, 0x61, 0xA1, 0x62, /* 0xC0-0xC3 */ + 0xC1, 0xCB, 0xA1, 0x63, 0xA1, 0x64, 0xA1, 0x65, /* 0xC4-0xC7 */ + 0xC1, 0xCC, 0xA1, 0x66, 0xA1, 0x67, 0xA1, 0x68, /* 0xC8-0xCB */ + 0xC1, 0xCD, 0xA1, 0x69, 0xA1, 0x6A, 0xA1, 0x6B, /* 0xCC-0xCF */ + 0xA1, 0x6C, 0xA1, 0x6D, 0xA1, 0x6E, 0xA1, 0x6F, /* 0xD0-0xD3 */ + 0xC1, 0xCE, 0xC1, 0xCF, 0xA1, 0x70, 0xC1, 0xD0, /* 0xD4-0xD7 */ + 0xA1, 0x71, 0xC1, 0xD1, 0xA1, 0x72, 0xA1, 0x73, /* 0xD8-0xDB */ + 0xA1, 0x74, 0xA1, 0x75, 0xA1, 0x76, 0xA1, 0x77, /* 0xDC-0xDF */ + 0xC1, 0xD2, 0xC1, 0xD3, 0xA1, 0x78, 0xA1, 0x79, /* 0xE0-0xE3 */ + 0xC1, 0xD4, 0xA1, 0x7A, 0xA1, 0x81, 0xA1, 0x82, /* 0xE4-0xE7 */ + 0xA1, 0x83, 0xA1, 0x84, 0xA1, 0x85, 0xA1, 0x86, /* 0xE8-0xEB */ + 0xA1, 0x87, 0xA1, 0x88, 0xA1, 0x89, 0xA1, 0x8A, /* 0xEC-0xEF */ + 0xA1, 0x8B, 0xA1, 0x8C, 0xA1, 0x8D, 0xA1, 0x8E, /* 0xF0-0xF3 */ + 0xA1, 0x8F, 0xC1, 0xD5, 0xA1, 0x90, 0xA1, 0x91, /* 0xF4-0xF7 */ + 0xA1, 0x92, 0xA1, 0x93, 0xA1, 0x94, 0xA1, 0x95, /* 0xF8-0xFB */ + 0xC1, 0xD6, 0xC1, 0xD7, 0xA1, 0x96, 0xA1, 0x97, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C9[512] = { + 0xC1, 0xD8, 0xA1, 0x98, 0xA1, 0x99, 0xA1, 0x9A, /* 0x00-0x03 */ + 0xC1, 0xD9, 0xC1, 0xDA, 0xC1, 0xDB, 0xA1, 0x9B, /* 0x04-0x07 */ + 0xA1, 0x9C, 0xA1, 0x9D, 0xA1, 0x9E, 0xA1, 0x9F, /* 0x08-0x0B */ + 0xC1, 0xDC, 0xC1, 0xDD, 0xA1, 0xA0, 0xC1, 0xDE, /* 0x0C-0x0F */ + 0xA2, 0x41, 0xC1, 0xDF, 0xA2, 0x42, 0xA2, 0x43, /* 0x10-0x13 */ + 0xA2, 0x44, 0xA2, 0x45, 0xA2, 0x46, 0xA2, 0x47, /* 0x14-0x17 */ + 0xC1, 0xE0, 0xA2, 0x48, 0xA2, 0x49, 0xA2, 0x4A, /* 0x18-0x1B */ + 0xA2, 0x4B, 0xA2, 0x4C, 0xA2, 0x4D, 0xA2, 0x4E, /* 0x1C-0x1F */ + 0xA2, 0x4F, 0xA2, 0x50, 0xA2, 0x51, 0xA2, 0x52, /* 0x20-0x23 */ + 0xA2, 0x53, 0xA2, 0x54, 0xA2, 0x55, 0xA2, 0x56, /* 0x24-0x27 */ + 0xA2, 0x57, 0xA2, 0x58, 0xA2, 0x59, 0xA2, 0x5A, /* 0x28-0x2B */ + 0xC1, 0xE1, 0xA2, 0x61, 0xA2, 0x62, 0xA2, 0x63, /* 0x2C-0x2F */ + 0xA2, 0x64, 0xA2, 0x65, 0xA2, 0x66, 0xA2, 0x67, /* 0x30-0x33 */ + 0xC1, 0xE2, 0xA2, 0x68, 0xA2, 0x69, 0xA2, 0x6A, /* 0x34-0x37 */ + 0xA2, 0x6B, 0xA2, 0x6C, 0xA2, 0x6D, 0xA2, 0x6E, /* 0x38-0x3B */ + 0xA2, 0x6F, 0xA2, 0x70, 0xA2, 0x71, 0xA2, 0x72, /* 0x3C-0x3F */ + 0xA2, 0x73, 0xA2, 0x74, 0xA2, 0x75, 0xA2, 0x76, /* 0x40-0x43 */ + 0xA2, 0x77, 0xA2, 0x78, 0xA2, 0x79, 0xA2, 0x7A, /* 0x44-0x47 */ + 0xA2, 0x81, 0xA2, 0x82, 0xA2, 0x83, 0xA2, 0x84, /* 0x48-0x4B */ + 0xA2, 0x85, 0xA2, 0x86, 0xA2, 0x87, 0xA2, 0x88, /* 0x4C-0x4F */ + 0xC1, 0xE3, 0xC1, 0xE4, 0xA2, 0x89, 0xA2, 0x8A, /* 0x50-0x53 */ + 0xC1, 0xE5, 0xA2, 0x8B, 0xA2, 0x8C, 0xA2, 0x8D, /* 0x54-0x57 */ + 0xC1, 0xE6, 0xA2, 0x8E, 0xA2, 0x8F, 0xA2, 0x90, /* 0x58-0x5B */ + 0xA2, 0x91, 0xA2, 0x92, 0xA2, 0x93, 0xA2, 0x94, /* 0x5C-0x5F */ + 0xC1, 0xE7, 0xC1, 0xE8, 0xA2, 0x95, 0xC1, 0xE9, /* 0x60-0x63 */ + 0xA2, 0x96, 0xA2, 0x97, 0xA2, 0x98, 0xA2, 0x99, /* 0x64-0x67 */ + 0xA2, 0x9A, 0xA2, 0x9B, 0xA2, 0x9C, 0xA2, 0x9D, /* 0x68-0x6B */ + 0xC1, 0xEA, 0xA2, 0x9E, 0xA2, 0x9F, 0xA2, 0xA0, /* 0x6C-0x6F */ + 0xC1, 0xEB, 0xA3, 0x41, 0xA3, 0x42, 0xA3, 0x43, /* 0x70-0x73 */ + 0xC1, 0xEC, 0xA3, 0x44, 0xA3, 0x45, 0xA3, 0x46, /* 0x74-0x77 */ + 0xA3, 0x47, 0xA3, 0x48, 0xA3, 0x49, 0xA3, 0x4A, /* 0x78-0x7B */ + 0xC1, 0xED, 0xA3, 0x4B, 0xA3, 0x4C, 0xA3, 0x4D, /* 0x7C-0x7F */ + + 0xA3, 0x4E, 0xA3, 0x4F, 0xA3, 0x50, 0xA3, 0x51, /* 0x80-0x83 */ + 0xA3, 0x52, 0xA3, 0x53, 0xA3, 0x54, 0xA3, 0x55, /* 0x84-0x87 */ + 0xC1, 0xEE, 0xC1, 0xEF, 0xA3, 0x56, 0xA3, 0x57, /* 0x88-0x8B */ + 0xC1, 0xF0, 0xA3, 0x58, 0xA3, 0x59, 0xA3, 0x5A, /* 0x8C-0x8F */ + 0xC1, 0xF1, 0xA3, 0x61, 0xA3, 0x62, 0xA3, 0x63, /* 0x90-0x93 */ + 0xA3, 0x64, 0xA3, 0x65, 0xA3, 0x66, 0xA3, 0x67, /* 0x94-0x97 */ + 0xC1, 0xF2, 0xC1, 0xF3, 0xA3, 0x68, 0xC1, 0xF4, /* 0x98-0x9B */ + 0xA3, 0x69, 0xC1, 0xF5, 0xA3, 0x6A, 0xA3, 0x6B, /* 0x9C-0x9F */ + 0xA3, 0x6C, 0xA3, 0x6D, 0xA3, 0x6E, 0xA3, 0x6F, /* 0xA0-0xA3 */ + 0xA3, 0x70, 0xA3, 0x71, 0xA3, 0x72, 0xA3, 0x73, /* 0xA4-0xA7 */ + 0xA3, 0x74, 0xA3, 0x75, 0xA3, 0x76, 0xA3, 0x77, /* 0xA8-0xAB */ + 0xA3, 0x78, 0xA3, 0x79, 0xA3, 0x7A, 0xA3, 0x81, /* 0xAC-0xAF */ + 0xA3, 0x82, 0xA3, 0x83, 0xA3, 0x84, 0xA3, 0x85, /* 0xB0-0xB3 */ + 0xA3, 0x86, 0xA3, 0x87, 0xA3, 0x88, 0xA3, 0x89, /* 0xB4-0xB7 */ + 0xA3, 0x8A, 0xA3, 0x8B, 0xA3, 0x8C, 0xA3, 0x8D, /* 0xB8-0xBB */ + 0xA3, 0x8E, 0xA3, 0x8F, 0xA3, 0x90, 0xA3, 0x91, /* 0xBC-0xBF */ + 0xC1, 0xF6, 0xC1, 0xF7, 0xA3, 0x92, 0xA3, 0x93, /* 0xC0-0xC3 */ + 0xC1, 0xF8, 0xA3, 0x94, 0xA3, 0x95, 0xC1, 0xF9, /* 0xC4-0xC7 */ + 0xC1, 0xFA, 0xA3, 0x96, 0xC1, 0xFB, 0xA3, 0x97, /* 0xC8-0xCB */ + 0xA3, 0x98, 0xA3, 0x99, 0xA3, 0x9A, 0xA3, 0x9B, /* 0xCC-0xCF */ + 0xC1, 0xFC, 0xC1, 0xFD, 0xA3, 0x9C, 0xC1, 0xFE, /* 0xD0-0xD3 */ + 0xA3, 0x9D, 0xC2, 0xA1, 0xC2, 0xA2, 0xA3, 0x9E, /* 0xD4-0xD7 */ + 0xA3, 0x9F, 0xC2, 0xA3, 0xC2, 0xA4, 0xA3, 0xA0, /* 0xD8-0xDB */ + 0xC2, 0xA5, 0xC2, 0xA6, 0xA4, 0x41, 0xA4, 0x42, /* 0xDC-0xDF */ + 0xC2, 0xA7, 0xA4, 0x43, 0xC2, 0xA8, 0xA4, 0x44, /* 0xE0-0xE3 */ + 0xC2, 0xA9, 0xA4, 0x45, 0xA4, 0x46, 0xC2, 0xAA, /* 0xE4-0xE7 */ + 0xA4, 0x47, 0xA4, 0x48, 0xA4, 0x49, 0xA4, 0x4A, /* 0xE8-0xEB */ + 0xC2, 0xAB, 0xC2, 0xAC, 0xA4, 0x4B, 0xC2, 0xAD, /* 0xEC-0xEF */ + 0xC2, 0xAE, 0xC2, 0xAF, 0xA4, 0x4C, 0xA4, 0x4D, /* 0xF0-0xF3 */ + 0xA4, 0x4E, 0xA4, 0x4F, 0xA4, 0x50, 0xA4, 0x51, /* 0xF4-0xF7 */ + 0xC2, 0xB0, 0xC2, 0xB1, 0xA4, 0x52, 0xA4, 0x53, /* 0xF8-0xFB */ + 0xC2, 0xB2, 0xA4, 0x54, 0xA4, 0x55, 0xA4, 0x56, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CA[512] = { + 0xC2, 0xB3, 0xA4, 0x57, 0xA4, 0x58, 0xA4, 0x59, /* 0x00-0x03 */ + 0xA4, 0x5A, 0xA4, 0x61, 0xA4, 0x62, 0xA4, 0x63, /* 0x04-0x07 */ + 0xC2, 0xB4, 0xC2, 0xB5, 0xA4, 0x64, 0xC2, 0xB6, /* 0x08-0x0B */ + 0xC2, 0xB7, 0xC2, 0xB8, 0xA4, 0x65, 0xA4, 0x66, /* 0x0C-0x0F */ + 0xA4, 0x67, 0xA4, 0x68, 0xA4, 0x69, 0xA4, 0x6A, /* 0x10-0x13 */ + 0xC2, 0xB9, 0xA4, 0x6B, 0xA4, 0x6C, 0xA4, 0x6D, /* 0x14-0x17 */ + 0xC2, 0xBA, 0xA4, 0x6E, 0xA4, 0x6F, 0xA4, 0x70, /* 0x18-0x1B */ + 0xA4, 0x71, 0xA4, 0x72, 0xA4, 0x73, 0xA4, 0x74, /* 0x1C-0x1F */ + 0xA4, 0x75, 0xA4, 0x76, 0xA4, 0x77, 0xA4, 0x78, /* 0x20-0x23 */ + 0xA4, 0x79, 0xA4, 0x7A, 0xA4, 0x81, 0xA4, 0x82, /* 0x24-0x27 */ + 0xA4, 0x83, 0xC2, 0xBB, 0xA4, 0x84, 0xA4, 0x85, /* 0x28-0x2B */ + 0xA4, 0x86, 0xA4, 0x87, 0xA4, 0x88, 0xA4, 0x89, /* 0x2C-0x2F */ + 0xA4, 0x8A, 0xA4, 0x8B, 0xA4, 0x8C, 0xA4, 0x8D, /* 0x30-0x33 */ + 0xA4, 0x8E, 0xA4, 0x8F, 0xA4, 0x90, 0xA4, 0x91, /* 0x34-0x37 */ + 0xA4, 0x92, 0xA4, 0x93, 0xA4, 0x94, 0xA4, 0x95, /* 0x38-0x3B */ + 0xA4, 0x96, 0xA4, 0x97, 0xA4, 0x98, 0xA4, 0x99, /* 0x3C-0x3F */ + 0xA4, 0x9A, 0xA4, 0x9B, 0xA4, 0x9C, 0xA4, 0x9D, /* 0x40-0x43 */ + 0xA4, 0x9E, 0xA4, 0x9F, 0xA4, 0xA0, 0xA5, 0x41, /* 0x44-0x47 */ + 0xA5, 0x42, 0xA5, 0x43, 0xA5, 0x44, 0xA5, 0x45, /* 0x48-0x4B */ + 0xC2, 0xBC, 0xC2, 0xBD, 0xA5, 0x46, 0xA5, 0x47, /* 0x4C-0x4F */ + 0xC2, 0xBE, 0xA5, 0x48, 0xA5, 0x49, 0xA5, 0x4A, /* 0x50-0x53 */ + 0xC2, 0xBF, 0xA5, 0x4B, 0xA5, 0x4C, 0xA5, 0x4D, /* 0x54-0x57 */ + 0xA5, 0x4E, 0xA5, 0x4F, 0xA5, 0x50, 0xA5, 0x51, /* 0x58-0x5B */ + 0xC2, 0xC0, 0xC2, 0xC1, 0xA5, 0x52, 0xC2, 0xC2, /* 0x5C-0x5F */ + 0xC2, 0xC3, 0xC2, 0xC4, 0xA5, 0x53, 0xA5, 0x54, /* 0x60-0x63 */ + 0xA5, 0x55, 0xA5, 0x56, 0xA5, 0x57, 0xA5, 0x58, /* 0x64-0x67 */ + 0xC2, 0xC5, 0xA5, 0x59, 0xA5, 0x5A, 0xA5, 0x61, /* 0x68-0x6B */ + 0xA5, 0x62, 0xA5, 0x63, 0xA5, 0x64, 0xA5, 0x65, /* 0x6C-0x6F */ + 0xA5, 0x66, 0xA5, 0x67, 0xA5, 0x68, 0xA5, 0x69, /* 0x70-0x73 */ + 0xA5, 0x6A, 0xA5, 0x6B, 0xA5, 0x6C, 0xA5, 0x6D, /* 0x74-0x77 */ + 0xA5, 0x6E, 0xA5, 0x6F, 0xA5, 0x70, 0xA5, 0x71, /* 0x78-0x7B */ + 0xA5, 0x72, 0xC2, 0xC6, 0xA5, 0x73, 0xA5, 0x74, /* 0x7C-0x7F */ + + 0xA5, 0x75, 0xA5, 0x76, 0xA5, 0x77, 0xA5, 0x78, /* 0x80-0x83 */ + 0xC2, 0xC7, 0xA5, 0x79, 0xA5, 0x7A, 0xA5, 0x81, /* 0x84-0x87 */ + 0xA5, 0x82, 0xA5, 0x83, 0xA5, 0x84, 0xA5, 0x85, /* 0x88-0x8B */ + 0xA5, 0x86, 0xA5, 0x87, 0xA5, 0x88, 0xA5, 0x89, /* 0x8C-0x8F */ + 0xA5, 0x8A, 0xA5, 0x8B, 0xA5, 0x8C, 0xA5, 0x8D, /* 0x90-0x93 */ + 0xA5, 0x8E, 0xA5, 0x8F, 0xA5, 0x90, 0xA5, 0x91, /* 0x94-0x97 */ + 0xC2, 0xC8, 0xA5, 0x92, 0xA5, 0x93, 0xA5, 0x94, /* 0x98-0x9B */ + 0xA5, 0x95, 0xA5, 0x96, 0xA5, 0x97, 0xA5, 0x98, /* 0x9C-0x9F */ + 0xA5, 0x99, 0xA5, 0x9A, 0xA5, 0x9B, 0xA5, 0x9C, /* 0xA0-0xA3 */ + 0xA5, 0x9D, 0xA5, 0x9E, 0xA5, 0x9F, 0xA5, 0xA0, /* 0xA4-0xA7 */ + 0xA6, 0x41, 0xA6, 0x42, 0xA6, 0x43, 0xA6, 0x44, /* 0xA8-0xAB */ + 0xA6, 0x45, 0xA6, 0x46, 0xA6, 0x47, 0xA6, 0x48, /* 0xAC-0xAF */ + 0xA6, 0x49, 0xA6, 0x4A, 0xA6, 0x4B, 0xA6, 0x4C, /* 0xB0-0xB3 */ + 0xA6, 0x4D, 0xA6, 0x4E, 0xA6, 0x4F, 0xA6, 0x50, /* 0xB4-0xB7 */ + 0xA6, 0x51, 0xA6, 0x52, 0xA6, 0x53, 0xA6, 0x54, /* 0xB8-0xBB */ + 0xC2, 0xC9, 0xC2, 0xCA, 0xA6, 0x55, 0xA6, 0x56, /* 0xBC-0xBF */ + 0xC2, 0xCB, 0xA6, 0x57, 0xA6, 0x58, 0xA6, 0x59, /* 0xC0-0xC3 */ + 0xC2, 0xCC, 0xA6, 0x5A, 0xA6, 0x61, 0xA6, 0x62, /* 0xC4-0xC7 */ + 0xA6, 0x63, 0xA6, 0x64, 0xA6, 0x65, 0xA6, 0x66, /* 0xC8-0xCB */ + 0xC2, 0xCD, 0xC2, 0xCE, 0xA6, 0x67, 0xC2, 0xCF, /* 0xCC-0xCF */ + 0xA6, 0x68, 0xC2, 0xD0, 0xA6, 0x69, 0xC2, 0xD1, /* 0xD0-0xD3 */ + 0xA6, 0x6A, 0xA6, 0x6B, 0xA6, 0x6C, 0xA6, 0x6D, /* 0xD4-0xD7 */ + 0xC2, 0xD2, 0xC2, 0xD3, 0xA6, 0x6E, 0xA6, 0x6F, /* 0xD8-0xDB */ + 0xA6, 0x70, 0xA6, 0x71, 0xA6, 0x72, 0xA6, 0x73, /* 0xDC-0xDF */ + 0xC2, 0xD4, 0xA6, 0x74, 0xA6, 0x75, 0xA6, 0x76, /* 0xE0-0xE3 */ + 0xA6, 0x77, 0xA6, 0x78, 0xA6, 0x79, 0xA6, 0x7A, /* 0xE4-0xE7 */ + 0xA6, 0x81, 0xA6, 0x82, 0xA6, 0x83, 0xA6, 0x84, /* 0xE8-0xEB */ + 0xC2, 0xD5, 0xA6, 0x85, 0xA6, 0x86, 0xA6, 0x87, /* 0xEC-0xEF */ + 0xA6, 0x88, 0xA6, 0x89, 0xA6, 0x8A, 0xA6, 0x8B, /* 0xF0-0xF3 */ + 0xC2, 0xD6, 0xA6, 0x8C, 0xA6, 0x8D, 0xA6, 0x8E, /* 0xF4-0xF7 */ + 0xA6, 0x8F, 0xA6, 0x90, 0xA6, 0x91, 0xA6, 0x92, /* 0xF8-0xFB */ + 0xA6, 0x93, 0xA6, 0x94, 0xA6, 0x95, 0xA6, 0x96, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CB[512] = { + 0xA6, 0x97, 0xA6, 0x98, 0xA6, 0x99, 0xA6, 0x9A, /* 0x00-0x03 */ + 0xA6, 0x9B, 0xA6, 0x9C, 0xA6, 0x9D, 0xA6, 0x9E, /* 0x04-0x07 */ + 0xC2, 0xD7, 0xA6, 0x9F, 0xA6, 0xA0, 0xA7, 0x41, /* 0x08-0x0B */ + 0xA7, 0x42, 0xA7, 0x43, 0xA7, 0x44, 0xA7, 0x45, /* 0x0C-0x0F */ + 0xC2, 0xD8, 0xA7, 0x46, 0xA7, 0x47, 0xA7, 0x48, /* 0x10-0x13 */ + 0xC2, 0xD9, 0xA7, 0x49, 0xA7, 0x4A, 0xA7, 0x4B, /* 0x14-0x17 */ + 0xC2, 0xDA, 0xA7, 0x4C, 0xA7, 0x4D, 0xA7, 0x4E, /* 0x18-0x1B */ + 0xA7, 0x4F, 0xA7, 0x50, 0xA7, 0x51, 0xA7, 0x52, /* 0x1C-0x1F */ + 0xC2, 0xDB, 0xC2, 0xDC, 0xA7, 0x53, 0xA7, 0x54, /* 0x20-0x23 */ + 0xA7, 0x55, 0xA7, 0x56, 0xA7, 0x57, 0xA7, 0x58, /* 0x24-0x27 */ + 0xA7, 0x59, 0xA7, 0x5A, 0xA7, 0x61, 0xA7, 0x62, /* 0x28-0x2B */ + 0xA7, 0x63, 0xA7, 0x64, 0xA7, 0x65, 0xA7, 0x66, /* 0x2C-0x2F */ + 0xA7, 0x67, 0xA7, 0x68, 0xA7, 0x69, 0xA7, 0x6A, /* 0x30-0x33 */ + 0xA7, 0x6B, 0xA7, 0x6C, 0xA7, 0x6D, 0xA7, 0x6E, /* 0x34-0x37 */ + 0xA7, 0x6F, 0xA7, 0x70, 0xA7, 0x71, 0xA7, 0x72, /* 0x38-0x3B */ + 0xA7, 0x73, 0xA7, 0x74, 0xA7, 0x75, 0xA7, 0x76, /* 0x3C-0x3F */ + 0xA7, 0x77, 0xC2, 0xDD, 0xA7, 0x78, 0xA7, 0x79, /* 0x40-0x43 */ + 0xA7, 0x7A, 0xA7, 0x81, 0xA7, 0x82, 0xA7, 0x83, /* 0x44-0x47 */ + 0xC2, 0xDE, 0xC2, 0xDF, 0xA7, 0x84, 0xA7, 0x85, /* 0x48-0x4B */ + 0xC2, 0xE0, 0xA7, 0x86, 0xA7, 0x87, 0xA7, 0x88, /* 0x4C-0x4F */ + 0xC2, 0xE1, 0xA7, 0x89, 0xA7, 0x8A, 0xA7, 0x8B, /* 0x50-0x53 */ + 0xA7, 0x8C, 0xA7, 0x8D, 0xA7, 0x8E, 0xA7, 0x8F, /* 0x54-0x57 */ + 0xC2, 0xE2, 0xC2, 0xE3, 0xA7, 0x90, 0xA7, 0x91, /* 0x58-0x5B */ + 0xA7, 0x92, 0xC2, 0xE4, 0xA7, 0x93, 0xA7, 0x94, /* 0x5C-0x5F */ + 0xA7, 0x95, 0xA7, 0x96, 0xA7, 0x97, 0xA7, 0x98, /* 0x60-0x63 */ + 0xC2, 0xE5, 0xA7, 0x99, 0xA7, 0x9A, 0xA7, 0x9B, /* 0x64-0x67 */ + 0xA7, 0x9C, 0xA7, 0x9D, 0xA7, 0x9E, 0xA7, 0x9F, /* 0x68-0x6B */ + 0xA7, 0xA0, 0xA8, 0x41, 0xA8, 0x42, 0xA8, 0x43, /* 0x6C-0x6F */ + 0xA8, 0x44, 0xA8, 0x45, 0xA8, 0x46, 0xA8, 0x47, /* 0x70-0x73 */ + 0xA8, 0x48, 0xA8, 0x49, 0xA8, 0x4A, 0xA8, 0x4B, /* 0x74-0x77 */ + 0xC2, 0xE6, 0xC2, 0xE7, 0xA8, 0x4C, 0xA8, 0x4D, /* 0x78-0x7B */ + 0xA8, 0x4E, 0xA8, 0x4F, 0xA8, 0x50, 0xA8, 0x51, /* 0x7C-0x7F */ + + 0xA8, 0x52, 0xA8, 0x53, 0xA8, 0x54, 0xA8, 0x55, /* 0x80-0x83 */ + 0xA8, 0x56, 0xA8, 0x57, 0xA8, 0x58, 0xA8, 0x59, /* 0x84-0x87 */ + 0xA8, 0x5A, 0xA8, 0x61, 0xA8, 0x62, 0xA8, 0x63, /* 0x88-0x8B */ + 0xA8, 0x64, 0xA8, 0x65, 0xA8, 0x66, 0xA8, 0x67, /* 0x8C-0x8F */ + 0xA8, 0x68, 0xA8, 0x69, 0xA8, 0x6A, 0xA8, 0x6B, /* 0x90-0x93 */ + 0xA8, 0x6C, 0xA8, 0x6D, 0xA8, 0x6E, 0xA8, 0x6F, /* 0x94-0x97 */ + 0xA8, 0x70, 0xA8, 0x71, 0xA8, 0x72, 0xA8, 0x73, /* 0x98-0x9B */ + 0xC2, 0xE8, 0xA8, 0x74, 0xA8, 0x75, 0xA8, 0x76, /* 0x9C-0x9F */ + 0xA8, 0x77, 0xA8, 0x78, 0xA8, 0x79, 0xA8, 0x7A, /* 0xA0-0xA3 */ + 0xA8, 0x81, 0xA8, 0x82, 0xA8, 0x83, 0xA8, 0x84, /* 0xA4-0xA7 */ + 0xA8, 0x85, 0xA8, 0x86, 0xA8, 0x87, 0xA8, 0x88, /* 0xA8-0xAB */ + 0xA8, 0x89, 0xA8, 0x8A, 0xA8, 0x8B, 0xA8, 0x8C, /* 0xAC-0xAF */ + 0xA8, 0x8D, 0xA8, 0x8E, 0xA8, 0x8F, 0xA8, 0x90, /* 0xB0-0xB3 */ + 0xA8, 0x91, 0xA8, 0x92, 0xA8, 0x93, 0xA8, 0x94, /* 0xB4-0xB7 */ + 0xC2, 0xE9, 0xA8, 0x95, 0xA8, 0x96, 0xA8, 0x97, /* 0xB8-0xBB */ + 0xA8, 0x98, 0xA8, 0x99, 0xA8, 0x9A, 0xA8, 0x9B, /* 0xBC-0xBF */ + 0xA8, 0x9C, 0xA8, 0x9D, 0xA8, 0x9E, 0xA8, 0x9F, /* 0xC0-0xC3 */ + 0xA8, 0xA0, 0xA9, 0x41, 0xA9, 0x42, 0xA9, 0x43, /* 0xC4-0xC7 */ + 0xA9, 0x44, 0xA9, 0x45, 0xA9, 0x46, 0xA9, 0x47, /* 0xC8-0xCB */ + 0xA9, 0x48, 0xA9, 0x49, 0xA9, 0x4A, 0xA9, 0x4B, /* 0xCC-0xCF */ + 0xA9, 0x4C, 0xA9, 0x4D, 0xA9, 0x4E, 0xA9, 0x4F, /* 0xD0-0xD3 */ + 0xC2, 0xEA, 0xA9, 0x50, 0xA9, 0x51, 0xA9, 0x52, /* 0xD4-0xD7 */ + 0xA9, 0x53, 0xA9, 0x54, 0xA9, 0x55, 0xA9, 0x56, /* 0xD8-0xDB */ + 0xA9, 0x57, 0xA9, 0x58, 0xA9, 0x59, 0xA9, 0x5A, /* 0xDC-0xDF */ + 0xA9, 0x61, 0xA9, 0x62, 0xA9, 0x63, 0xA9, 0x64, /* 0xE0-0xE3 */ + 0xC2, 0xEB, 0xA9, 0x65, 0xA9, 0x66, 0xC2, 0xEC, /* 0xE4-0xE7 */ + 0xA9, 0x67, 0xC2, 0xED, 0xA9, 0x68, 0xA9, 0x69, /* 0xE8-0xEB */ + 0xA9, 0x6A, 0xA9, 0x6B, 0xA9, 0x6C, 0xA9, 0x6D, /* 0xEC-0xEF */ + 0xA9, 0x6E, 0xA9, 0x6F, 0xA9, 0x70, 0xA9, 0x71, /* 0xF0-0xF3 */ + 0xA9, 0x72, 0xA9, 0x73, 0xA9, 0x74, 0xA9, 0x75, /* 0xF4-0xF7 */ + 0xA9, 0x76, 0xA9, 0x77, 0xA9, 0x78, 0xA9, 0x79, /* 0xF8-0xFB */ + 0xA9, 0x7A, 0xA9, 0x81, 0xA9, 0x82, 0xA9, 0x83, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CC[512] = { + 0xA9, 0x84, 0xA9, 0x85, 0xA9, 0x86, 0xA9, 0x87, /* 0x00-0x03 */ + 0xA9, 0x88, 0xA9, 0x89, 0xA9, 0x8A, 0xA9, 0x8B, /* 0x04-0x07 */ + 0xA9, 0x8C, 0xA9, 0x8D, 0xA9, 0x8E, 0xA9, 0x8F, /* 0x08-0x0B */ + 0xC2, 0xEE, 0xC2, 0xEF, 0xA9, 0x90, 0xA9, 0x91, /* 0x0C-0x0F */ + 0xC2, 0xF0, 0xA9, 0x92, 0xA9, 0x93, 0xA9, 0x94, /* 0x10-0x13 */ + 0xC2, 0xF1, 0xA9, 0x95, 0xA9, 0x96, 0xA9, 0x97, /* 0x14-0x17 */ + 0xA9, 0x98, 0xA9, 0x99, 0xA9, 0x9A, 0xA9, 0x9B, /* 0x18-0x1B */ + 0xC2, 0xF2, 0xC2, 0xF3, 0xA9, 0x9C, 0xA9, 0x9D, /* 0x1C-0x1F */ + 0xA9, 0x9E, 0xC2, 0xF4, 0xC2, 0xF5, 0xA9, 0x9F, /* 0x20-0x23 */ + 0xA9, 0xA0, 0xAA, 0x41, 0xAA, 0x42, 0xC2, 0xF6, /* 0x24-0x27 */ + 0xC2, 0xF7, 0xC2, 0xF8, 0xAA, 0x43, 0xAA, 0x44, /* 0x28-0x2B */ + 0xC2, 0xF9, 0xAA, 0x45, 0xC2, 0xFA, 0xAA, 0x46, /* 0x2C-0x2F */ + 0xC2, 0xFB, 0xAA, 0x47, 0xAA, 0x48, 0xAA, 0x49, /* 0x30-0x33 */ + 0xAA, 0x4A, 0xAA, 0x4B, 0xAA, 0x4C, 0xAA, 0x4D, /* 0x34-0x37 */ + 0xC2, 0xFC, 0xC2, 0xFD, 0xAA, 0x4E, 0xC2, 0xFE, /* 0x38-0x3B */ + 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3, 0xAA, 0x4F, /* 0x3C-0x3F */ + 0xAA, 0x50, 0xAA, 0x51, 0xAA, 0x52, 0xAA, 0x53, /* 0x40-0x43 */ + 0xC3, 0xA4, 0xC3, 0xA5, 0xAA, 0x54, 0xAA, 0x55, /* 0x44-0x47 */ + 0xC3, 0xA6, 0xAA, 0x56, 0xAA, 0x57, 0xAA, 0x58, /* 0x48-0x4B */ + 0xC3, 0xA7, 0xAA, 0x59, 0xAA, 0x5A, 0xAA, 0x61, /* 0x4C-0x4F */ + 0xAA, 0x62, 0xAA, 0x63, 0xAA, 0x64, 0xAA, 0x65, /* 0x50-0x53 */ + 0xC3, 0xA8, 0xC3, 0xA9, 0xAA, 0x66, 0xC3, 0xAA, /* 0x54-0x57 */ + 0xC3, 0xAB, 0xC3, 0xAC, 0xAA, 0x67, 0xAA, 0x68, /* 0x58-0x5B */ + 0xAA, 0x69, 0xAA, 0x6A, 0xAA, 0x6B, 0xAA, 0x6C, /* 0x5C-0x5F */ + 0xC3, 0xAD, 0xAA, 0x6D, 0xAA, 0x6E, 0xAA, 0x6F, /* 0x60-0x63 */ + 0xC3, 0xAE, 0xAA, 0x70, 0xC3, 0xAF, 0xAA, 0x71, /* 0x64-0x67 */ + 0xC3, 0xB0, 0xAA, 0x72, 0xAA, 0x73, 0xAA, 0x74, /* 0x68-0x6B */ + 0xAA, 0x75, 0xAA, 0x76, 0xAA, 0x77, 0xAA, 0x78, /* 0x6C-0x6F */ + 0xC3, 0xB1, 0xAA, 0x79, 0xAA, 0x7A, 0xAA, 0x81, /* 0x70-0x73 */ + 0xAA, 0x82, 0xC3, 0xB2, 0xAA, 0x83, 0xAA, 0x84, /* 0x74-0x77 */ + 0xAA, 0x85, 0xAA, 0x86, 0xAA, 0x87, 0xAA, 0x88, /* 0x78-0x7B */ + 0xAA, 0x89, 0xAA, 0x8A, 0xAA, 0x8B, 0xAA, 0x8C, /* 0x7C-0x7F */ + + 0xAA, 0x8D, 0xAA, 0x8E, 0xAA, 0x8F, 0xAA, 0x90, /* 0x80-0x83 */ + 0xAA, 0x91, 0xAA, 0x92, 0xAA, 0x93, 0xAA, 0x94, /* 0x84-0x87 */ + 0xAA, 0x95, 0xAA, 0x96, 0xAA, 0x97, 0xAA, 0x98, /* 0x88-0x8B */ + 0xAA, 0x99, 0xAA, 0x9A, 0xAA, 0x9B, 0xAA, 0x9C, /* 0x8C-0x8F */ + 0xAA, 0x9D, 0xAA, 0x9E, 0xAA, 0x9F, 0xAA, 0xA0, /* 0x90-0x93 */ + 0xAB, 0x41, 0xAB, 0x42, 0xAB, 0x43, 0xAB, 0x44, /* 0x94-0x97 */ + 0xC3, 0xB3, 0xC3, 0xB4, 0xAB, 0x45, 0xAB, 0x46, /* 0x98-0x9B */ + 0xC3, 0xB5, 0xAB, 0x47, 0xAB, 0x48, 0xAB, 0x49, /* 0x9C-0x9F */ + 0xC3, 0xB6, 0xAB, 0x4A, 0xAB, 0x4B, 0xAB, 0x4C, /* 0xA0-0xA3 */ + 0xAB, 0x4D, 0xAB, 0x4E, 0xAB, 0x4F, 0xAB, 0x50, /* 0xA4-0xA7 */ + 0xC3, 0xB7, 0xC3, 0xB8, 0xAB, 0x51, 0xC3, 0xB9, /* 0xA8-0xAB */ + 0xC3, 0xBA, 0xC3, 0xBB, 0xAB, 0x52, 0xAB, 0x53, /* 0xAC-0xAF */ + 0xAB, 0x54, 0xAB, 0x55, 0xAB, 0x56, 0xAB, 0x57, /* 0xB0-0xB3 */ + 0xC3, 0xBC, 0xC3, 0xBD, 0xAB, 0x58, 0xAB, 0x59, /* 0xB4-0xB7 */ + 0xC3, 0xBE, 0xAB, 0x5A, 0xAB, 0x61, 0xAB, 0x62, /* 0xB8-0xBB */ + 0xC3, 0xBF, 0xAB, 0x63, 0xAB, 0x64, 0xAB, 0x65, /* 0xBC-0xBF */ + 0xAB, 0x66, 0xAB, 0x67, 0xAB, 0x68, 0xAB, 0x69, /* 0xC0-0xC3 */ + 0xC3, 0xC0, 0xC3, 0xC1, 0xAB, 0x6A, 0xC3, 0xC2, /* 0xC4-0xC7 */ + 0xAB, 0x6B, 0xC3, 0xC3, 0xAB, 0x6C, 0xAB, 0x6D, /* 0xC8-0xCB */ + 0xAB, 0x6E, 0xAB, 0x6F, 0xAB, 0x70, 0xAB, 0x71, /* 0xCC-0xCF */ + 0xC3, 0xC4, 0xAB, 0x72, 0xAB, 0x73, 0xAB, 0x74, /* 0xD0-0xD3 */ + 0xC3, 0xC5, 0xAB, 0x75, 0xAB, 0x76, 0xAB, 0x77, /* 0xD4-0xD7 */ + 0xAB, 0x78, 0xAB, 0x79, 0xAB, 0x7A, 0xAB, 0x81, /* 0xD8-0xDB */ + 0xAB, 0x82, 0xAB, 0x83, 0xAB, 0x84, 0xAB, 0x85, /* 0xDC-0xDF */ + 0xAB, 0x86, 0xAB, 0x87, 0xAB, 0x88, 0xAB, 0x89, /* 0xE0-0xE3 */ + 0xC3, 0xC6, 0xAB, 0x8A, 0xAB, 0x8B, 0xAB, 0x8C, /* 0xE4-0xE7 */ + 0xAB, 0x8D, 0xAB, 0x8E, 0xAB, 0x8F, 0xAB, 0x90, /* 0xE8-0xEB */ + 0xC3, 0xC7, 0xAB, 0x91, 0xAB, 0x92, 0xAB, 0x93, /* 0xEC-0xEF */ + 0xC3, 0xC8, 0xAB, 0x94, 0xAB, 0x95, 0xAB, 0x96, /* 0xF0-0xF3 */ + 0xAB, 0x97, 0xAB, 0x98, 0xAB, 0x99, 0xAB, 0x9A, /* 0xF4-0xF7 */ + 0xAB, 0x9B, 0xAB, 0x9C, 0xAB, 0x9D, 0xAB, 0x9E, /* 0xF8-0xFB */ + 0xAB, 0x9F, 0xAB, 0xA0, 0xAC, 0x41, 0xAC, 0x42, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CD[512] = { + 0xAC, 0x43, 0xC3, 0xC9, 0xAC, 0x44, 0xAC, 0x45, /* 0x00-0x03 */ + 0xAC, 0x46, 0xAC, 0x47, 0xAC, 0x48, 0xAC, 0x49, /* 0x04-0x07 */ + 0xC3, 0xCA, 0xC3, 0xCB, 0xAC, 0x4A, 0xAC, 0x4B, /* 0x08-0x0B */ + 0xC3, 0xCC, 0xAC, 0x4C, 0xAC, 0x4D, 0xAC, 0x4E, /* 0x0C-0x0F */ + 0xC3, 0xCD, 0xAC, 0x4F, 0xAC, 0x50, 0xAC, 0x51, /* 0x10-0x13 */ + 0xAC, 0x52, 0xAC, 0x53, 0xAC, 0x54, 0xAC, 0x55, /* 0x14-0x17 */ + 0xC3, 0xCE, 0xC3, 0xCF, 0xAC, 0x56, 0xC3, 0xD0, /* 0x18-0x1B */ + 0xAC, 0x57, 0xC3, 0xD1, 0xAC, 0x58, 0xAC, 0x59, /* 0x1C-0x1F */ + 0xAC, 0x5A, 0xAC, 0x61, 0xAC, 0x62, 0xAC, 0x63, /* 0x20-0x23 */ + 0xC3, 0xD2, 0xAC, 0x64, 0xAC, 0x65, 0xAC, 0x66, /* 0x24-0x27 */ + 0xC3, 0xD3, 0xAC, 0x67, 0xAC, 0x68, 0xAC, 0x69, /* 0x28-0x2B */ + 0xC3, 0xD4, 0xAC, 0x6A, 0xAC, 0x6B, 0xAC, 0x6C, /* 0x2C-0x2F */ + 0xAC, 0x6D, 0xAC, 0x6E, 0xAC, 0x6F, 0xAC, 0x70, /* 0x30-0x33 */ + 0xAC, 0x71, 0xAC, 0x72, 0xAC, 0x73, 0xAC, 0x74, /* 0x34-0x37 */ + 0xAC, 0x75, 0xC3, 0xD5, 0xAC, 0x76, 0xAC, 0x77, /* 0x38-0x3B */ + 0xAC, 0x78, 0xAC, 0x79, 0xAC, 0x7A, 0xAC, 0x81, /* 0x3C-0x3F */ + 0xAC, 0x82, 0xAC, 0x83, 0xAC, 0x84, 0xAC, 0x85, /* 0x40-0x43 */ + 0xAC, 0x86, 0xAC, 0x87, 0xAC, 0x88, 0xAC, 0x89, /* 0x44-0x47 */ + 0xAC, 0x8A, 0xAC, 0x8B, 0xAC, 0x8C, 0xAC, 0x8D, /* 0x48-0x4B */ + 0xAC, 0x8E, 0xAC, 0x8F, 0xAC, 0x90, 0xAC, 0x91, /* 0x4C-0x4F */ + 0xAC, 0x92, 0xAC, 0x93, 0xAC, 0x94, 0xAC, 0x95, /* 0x50-0x53 */ + 0xAC, 0x96, 0xAC, 0x97, 0xAC, 0x98, 0xAC, 0x99, /* 0x54-0x57 */ + 0xAC, 0x9A, 0xAC, 0x9B, 0xAC, 0x9C, 0xAC, 0x9D, /* 0x58-0x5B */ + 0xC3, 0xD6, 0xAC, 0x9E, 0xAC, 0x9F, 0xAC, 0xA0, /* 0x5C-0x5F */ + 0xC3, 0xD7, 0xAD, 0x41, 0xAD, 0x42, 0xAD, 0x43, /* 0x60-0x63 */ + 0xC3, 0xD8, 0xAD, 0x44, 0xAD, 0x45, 0xAD, 0x46, /* 0x64-0x67 */ + 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x49, 0xAD, 0x4A, /* 0x68-0x6B */ + 0xC3, 0xD9, 0xC3, 0xDA, 0xAD, 0x4B, 0xC3, 0xDB, /* 0x6C-0x6F */ + 0xAD, 0x4C, 0xC3, 0xDC, 0xAD, 0x4D, 0xAD, 0x4E, /* 0x70-0x73 */ + 0xAD, 0x4F, 0xAD, 0x50, 0xAD, 0x51, 0xAD, 0x52, /* 0x74-0x77 */ + 0xC3, 0xDD, 0xAD, 0x53, 0xAD, 0x54, 0xAD, 0x55, /* 0x78-0x7B */ + 0xAD, 0x56, 0xAD, 0x57, 0xAD, 0x58, 0xAD, 0x59, /* 0x7C-0x7F */ + + 0xAD, 0x5A, 0xAD, 0x61, 0xAD, 0x62, 0xAD, 0x63, /* 0x80-0x83 */ + 0xAD, 0x64, 0xAD, 0x65, 0xAD, 0x66, 0xAD, 0x67, /* 0x84-0x87 */ + 0xC3, 0xDE, 0xAD, 0x68, 0xAD, 0x69, 0xAD, 0x6A, /* 0x88-0x8B */ + 0xAD, 0x6B, 0xAD, 0x6C, 0xAD, 0x6D, 0xAD, 0x6E, /* 0x8C-0x8F */ + 0xAD, 0x6F, 0xAD, 0x70, 0xAD, 0x71, 0xAD, 0x72, /* 0x90-0x93 */ + 0xC3, 0xDF, 0xC3, 0xE0, 0xAD, 0x73, 0xAD, 0x74, /* 0x94-0x97 */ + 0xC3, 0xE1, 0xAD, 0x75, 0xAD, 0x76, 0xAD, 0x77, /* 0x98-0x9B */ + 0xC3, 0xE2, 0xAD, 0x78, 0xAD, 0x79, 0xAD, 0x7A, /* 0x9C-0x9F */ + 0xAD, 0x81, 0xAD, 0x82, 0xAD, 0x83, 0xAD, 0x84, /* 0xA0-0xA3 */ + 0xC3, 0xE3, 0xC3, 0xE4, 0xAD, 0x85, 0xC3, 0xE5, /* 0xA4-0xA7 */ + 0xAD, 0x86, 0xC3, 0xE6, 0xAD, 0x87, 0xAD, 0x88, /* 0xA8-0xAB */ + 0xAD, 0x89, 0xAD, 0x8A, 0xAD, 0x8B, 0xAD, 0x8C, /* 0xAC-0xAF */ + 0xC3, 0xE7, 0xAD, 0x8D, 0xAD, 0x8E, 0xAD, 0x8F, /* 0xB0-0xB3 */ + 0xAD, 0x90, 0xAD, 0x91, 0xAD, 0x92, 0xAD, 0x93, /* 0xB4-0xB7 */ + 0xAD, 0x94, 0xAD, 0x95, 0xAD, 0x96, 0xAD, 0x97, /* 0xB8-0xBB */ + 0xAD, 0x98, 0xAD, 0x99, 0xAD, 0x9A, 0xAD, 0x9B, /* 0xBC-0xBF */ + 0xAD, 0x9C, 0xAD, 0x9D, 0xAD, 0x9E, 0xAD, 0x9F, /* 0xC0-0xC3 */ + 0xC3, 0xE8, 0xAD, 0xA0, 0xAE, 0x41, 0xAE, 0x42, /* 0xC4-0xC7 */ + 0xAE, 0x43, 0xAE, 0x44, 0xAE, 0x45, 0xAE, 0x46, /* 0xC8-0xCB */ + 0xC3, 0xE9, 0xAE, 0x47, 0xAE, 0x48, 0xAE, 0x49, /* 0xCC-0xCF */ + 0xC3, 0xEA, 0xAE, 0x4A, 0xAE, 0x4B, 0xAE, 0x4C, /* 0xD0-0xD3 */ + 0xAE, 0x4D, 0xAE, 0x4E, 0xAE, 0x4F, 0xAE, 0x50, /* 0xD4-0xD7 */ + 0xAE, 0x51, 0xAE, 0x52, 0xAE, 0x53, 0xAE, 0x54, /* 0xD8-0xDB */ + 0xAE, 0x55, 0xAE, 0x56, 0xAE, 0x57, 0xAE, 0x58, /* 0xDC-0xDF */ + 0xAE, 0x59, 0xAE, 0x5A, 0xAE, 0x61, 0xAE, 0x62, /* 0xE0-0xE3 */ + 0xAE, 0x63, 0xAE, 0x64, 0xAE, 0x65, 0xAE, 0x66, /* 0xE4-0xE7 */ + 0xC3, 0xEB, 0xAE, 0x67, 0xAE, 0x68, 0xAE, 0x69, /* 0xE8-0xEB */ + 0xC3, 0xEC, 0xAE, 0x6A, 0xAE, 0x6B, 0xAE, 0x6C, /* 0xEC-0xEF */ + 0xC3, 0xED, 0xAE, 0x6D, 0xAE, 0x6E, 0xAE, 0x6F, /* 0xF0-0xF3 */ + 0xAE, 0x70, 0xAE, 0x71, 0xAE, 0x72, 0xAE, 0x73, /* 0xF4-0xF7 */ + 0xC3, 0xEE, 0xC3, 0xEF, 0xAE, 0x74, 0xC3, 0xF0, /* 0xF8-0xFB */ + 0xAE, 0x75, 0xC3, 0xF1, 0xAE, 0x76, 0xAE, 0x77, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CE[512] = { + 0xAE, 0x78, 0xAE, 0x79, 0xAE, 0x7A, 0xAE, 0x81, /* 0x00-0x03 */ + 0xC3, 0xF2, 0xAE, 0x82, 0xAE, 0x83, 0xAE, 0x84, /* 0x04-0x07 */ + 0xC3, 0xF3, 0xAE, 0x85, 0xAE, 0x86, 0xAE, 0x87, /* 0x08-0x0B */ + 0xC3, 0xF4, 0xAE, 0x88, 0xAE, 0x89, 0xAE, 0x8A, /* 0x0C-0x0F */ + 0xAE, 0x8B, 0xAE, 0x8C, 0xAE, 0x8D, 0xAE, 0x8E, /* 0x10-0x13 */ + 0xC3, 0xF5, 0xAE, 0x8F, 0xAE, 0x90, 0xAE, 0x91, /* 0x14-0x17 */ + 0xAE, 0x92, 0xC3, 0xF6, 0xAE, 0x93, 0xAE, 0x94, /* 0x18-0x1B */ + 0xAE, 0x95, 0xAE, 0x96, 0xAE, 0x97, 0xAE, 0x98, /* 0x1C-0x1F */ + 0xC3, 0xF7, 0xC3, 0xF8, 0xAE, 0x99, 0xAE, 0x9A, /* 0x20-0x23 */ + 0xC3, 0xF9, 0xAE, 0x9B, 0xAE, 0x9C, 0xAE, 0x9D, /* 0x24-0x27 */ + 0xC3, 0xFA, 0xAE, 0x9E, 0xAE, 0x9F, 0xAE, 0xA0, /* 0x28-0x2B */ + 0xAF, 0x41, 0xAF, 0x42, 0xAF, 0x43, 0xAF, 0x44, /* 0x2C-0x2F */ + 0xC3, 0xFB, 0xC3, 0xFC, 0xAF, 0x45, 0xC3, 0xFD, /* 0x30-0x33 */ + 0xAF, 0x46, 0xC3, 0xFE, 0xAF, 0x47, 0xAF, 0x48, /* 0x34-0x37 */ + 0xAF, 0x49, 0xAF, 0x4A, 0xAF, 0x4B, 0xAF, 0x4C, /* 0x38-0x3B */ + 0xAF, 0x4D, 0xAF, 0x4E, 0xAF, 0x4F, 0xAF, 0x50, /* 0x3C-0x3F */ + 0xAF, 0x51, 0xAF, 0x52, 0xAF, 0x53, 0xAF, 0x54, /* 0x40-0x43 */ + 0xAF, 0x55, 0xAF, 0x56, 0xAF, 0x57, 0xAF, 0x58, /* 0x44-0x47 */ + 0xAF, 0x59, 0xAF, 0x5A, 0xAF, 0x61, 0xAF, 0x62, /* 0x48-0x4B */ + 0xAF, 0x63, 0xAF, 0x64, 0xAF, 0x65, 0xAF, 0x66, /* 0x4C-0x4F */ + 0xAF, 0x67, 0xAF, 0x68, 0xAF, 0x69, 0xAF, 0x6A, /* 0x50-0x53 */ + 0xAF, 0x6B, 0xAF, 0x6C, 0xAF, 0x6D, 0xAF, 0x6E, /* 0x54-0x57 */ + 0xC4, 0xA1, 0xC4, 0xA2, 0xAF, 0x6F, 0xAF, 0x70, /* 0x58-0x5B */ + 0xC4, 0xA3, 0xAF, 0x71, 0xAF, 0x72, 0xC4, 0xA4, /* 0x5C-0x5F */ + 0xC4, 0xA5, 0xC4, 0xA6, 0xAF, 0x73, 0xAF, 0x74, /* 0x60-0x63 */ + 0xAF, 0x75, 0xAF, 0x76, 0xAF, 0x77, 0xAF, 0x78, /* 0x64-0x67 */ + 0xC4, 0xA7, 0xC4, 0xA8, 0xAF, 0x79, 0xC4, 0xA9, /* 0x68-0x6B */ + 0xAF, 0x7A, 0xC4, 0xAA, 0xAF, 0x81, 0xAF, 0x82, /* 0x6C-0x6F */ + 0xAF, 0x83, 0xAF, 0x84, 0xAF, 0x85, 0xAF, 0x86, /* 0x70-0x73 */ + 0xC4, 0xAB, 0xC4, 0xAC, 0xAF, 0x87, 0xAF, 0x88, /* 0x74-0x77 */ + 0xC4, 0xAD, 0xAF, 0x89, 0xAF, 0x8A, 0xAF, 0x8B, /* 0x78-0x7B */ + 0xC4, 0xAE, 0xAF, 0x8C, 0xAF, 0x8D, 0xAF, 0x8E, /* 0x7C-0x7F */ + + 0xAF, 0x8F, 0xAF, 0x90, 0xAF, 0x91, 0xAF, 0x92, /* 0x80-0x83 */ + 0xC4, 0xAF, 0xC4, 0xB0, 0xAF, 0x93, 0xC4, 0xB1, /* 0x84-0x87 */ + 0xAF, 0x94, 0xC4, 0xB2, 0xAF, 0x95, 0xAF, 0x96, /* 0x88-0x8B */ + 0xAF, 0x97, 0xAF, 0x98, 0xAF, 0x99, 0xAF, 0x9A, /* 0x8C-0x8F */ + 0xC4, 0xB3, 0xC4, 0xB4, 0xAF, 0x9B, 0xAF, 0x9C, /* 0x90-0x93 */ + 0xC4, 0xB5, 0xAF, 0x9D, 0xAF, 0x9E, 0xAF, 0x9F, /* 0x94-0x97 */ + 0xC4, 0xB6, 0xAF, 0xA0, 0xB0, 0x41, 0xB0, 0x42, /* 0x98-0x9B */ + 0xB0, 0x43, 0xB0, 0x44, 0xB0, 0x45, 0xB0, 0x46, /* 0x9C-0x9F */ + 0xC4, 0xB7, 0xC4, 0xB8, 0xB0, 0x47, 0xC4, 0xB9, /* 0xA0-0xA3 */ + 0xC4, 0xBA, 0xC4, 0xBB, 0xB0, 0x48, 0xB0, 0x49, /* 0xA4-0xA7 */ + 0xB0, 0x4A, 0xB0, 0x4B, 0xB0, 0x4C, 0xB0, 0x4D, /* 0xA8-0xAB */ + 0xC4, 0xBC, 0xC4, 0xBD, 0xB0, 0x4E, 0xB0, 0x4F, /* 0xAC-0xAF */ + 0xB0, 0x50, 0xB0, 0x51, 0xB0, 0x52, 0xB0, 0x53, /* 0xB0-0xB3 */ + 0xB0, 0x54, 0xB0, 0x55, 0xB0, 0x56, 0xB0, 0x57, /* 0xB4-0xB7 */ + 0xB0, 0x58, 0xB0, 0x59, 0xB0, 0x5A, 0xB0, 0x61, /* 0xB8-0xBB */ + 0xB0, 0x62, 0xB0, 0x63, 0xB0, 0x64, 0xB0, 0x65, /* 0xBC-0xBF */ + 0xB0, 0x66, 0xC4, 0xBE, 0xB0, 0x67, 0xB0, 0x68, /* 0xC0-0xC3 */ + 0xB0, 0x69, 0xB0, 0x6A, 0xB0, 0x6B, 0xB0, 0x6C, /* 0xC4-0xC7 */ + 0xB0, 0x6D, 0xB0, 0x6E, 0xB0, 0x6F, 0xB0, 0x70, /* 0xC8-0xCB */ + 0xB0, 0x71, 0xB0, 0x72, 0xB0, 0x73, 0xB0, 0x74, /* 0xCC-0xCF */ + 0xB0, 0x75, 0xB0, 0x76, 0xB0, 0x77, 0xB0, 0x78, /* 0xD0-0xD3 */ + 0xB0, 0x79, 0xB0, 0x7A, 0xB0, 0x81, 0xB0, 0x82, /* 0xD4-0xD7 */ + 0xB0, 0x83, 0xB0, 0x84, 0xB0, 0x85, 0xB0, 0x86, /* 0xD8-0xDB */ + 0xB0, 0x87, 0xB0, 0x88, 0xB0, 0x89, 0xB0, 0x8A, /* 0xDC-0xDF */ + 0xB0, 0x8B, 0xB0, 0x8C, 0xB0, 0x8D, 0xB0, 0x8E, /* 0xE0-0xE3 */ + 0xC4, 0xBF, 0xC4, 0xC0, 0xB0, 0x8F, 0xB0, 0x90, /* 0xE4-0xE7 */ + 0xC4, 0xC1, 0xB0, 0x91, 0xB0, 0x92, 0xC4, 0xC2, /* 0xE8-0xEB */ + 0xC4, 0xC3, 0xB0, 0x93, 0xB0, 0x94, 0xB0, 0x95, /* 0xEC-0xEF */ + 0xB0, 0x96, 0xB0, 0x97, 0xB0, 0x98, 0xB0, 0x99, /* 0xF0-0xF3 */ + 0xC4, 0xC4, 0xC4, 0xC5, 0xB0, 0x9A, 0xC4, 0xC6, /* 0xF4-0xF7 */ + 0xC4, 0xC7, 0xC4, 0xC8, 0xB0, 0x9B, 0xB0, 0x9C, /* 0xF8-0xFB */ + 0xB0, 0x9D, 0xB0, 0x9E, 0xB0, 0x9F, 0xB0, 0xA0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CF[512] = { + 0xC4, 0xC9, 0xC4, 0xCA, 0xB1, 0x41, 0xB1, 0x42, /* 0x00-0x03 */ + 0xC4, 0xCB, 0xB1, 0x43, 0xB1, 0x44, 0xB1, 0x45, /* 0x04-0x07 */ + 0xC4, 0xCC, 0xB1, 0x46, 0xB1, 0x47, 0xB1, 0x48, /* 0x08-0x0B */ + 0xB1, 0x49, 0xB1, 0x4A, 0xB1, 0x4B, 0xB1, 0x4C, /* 0x0C-0x0F */ + 0xC4, 0xCD, 0xC4, 0xCE, 0xB1, 0x4D, 0xC4, 0xCF, /* 0x10-0x13 */ + 0xB1, 0x4E, 0xC4, 0xD0, 0xB1, 0x4F, 0xB1, 0x50, /* 0x14-0x17 */ + 0xB1, 0x51, 0xB1, 0x52, 0xB1, 0x53, 0xB1, 0x54, /* 0x18-0x1B */ + 0xC4, 0xD1, 0xB1, 0x55, 0xB1, 0x56, 0xB1, 0x57, /* 0x1C-0x1F */ + 0xC4, 0xD2, 0xB1, 0x58, 0xB1, 0x59, 0xB1, 0x5A, /* 0x20-0x23 */ + 0xC4, 0xD3, 0xB1, 0x61, 0xB1, 0x62, 0xB1, 0x63, /* 0x24-0x27 */ + 0xB1, 0x64, 0xB1, 0x65, 0xB1, 0x66, 0xB1, 0x67, /* 0x28-0x2B */ + 0xC4, 0xD4, 0xC4, 0xD5, 0xB1, 0x68, 0xC4, 0xD6, /* 0x2C-0x2F */ + 0xC4, 0xD7, 0xC4, 0xD8, 0xB1, 0x69, 0xB1, 0x6A, /* 0x30-0x33 */ + 0xB1, 0x6B, 0xB1, 0x6C, 0xB1, 0x6D, 0xB1, 0x6E, /* 0x34-0x37 */ + 0xC4, 0xD9, 0xB1, 0x6F, 0xB1, 0x70, 0xB1, 0x71, /* 0x38-0x3B */ + 0xB1, 0x72, 0xB1, 0x73, 0xB1, 0x74, 0xB1, 0x75, /* 0x3C-0x3F */ + 0xB1, 0x76, 0xB1, 0x77, 0xB1, 0x78, 0xB1, 0x79, /* 0x40-0x43 */ + 0xB1, 0x7A, 0xB1, 0x81, 0xB1, 0x82, 0xB1, 0x83, /* 0x44-0x47 */ + 0xB1, 0x84, 0xB1, 0x85, 0xB1, 0x86, 0xB1, 0x87, /* 0x48-0x4B */ + 0xB1, 0x88, 0xB1, 0x89, 0xB1, 0x8A, 0xB1, 0x8B, /* 0x4C-0x4F */ + 0xB1, 0x8C, 0xB1, 0x8D, 0xB1, 0x8E, 0xB1, 0x8F, /* 0x50-0x53 */ + 0xC4, 0xDA, 0xC4, 0xDB, 0xB1, 0x90, 0xB1, 0x91, /* 0x54-0x57 */ + 0xC4, 0xDC, 0xB1, 0x92, 0xB1, 0x93, 0xB1, 0x94, /* 0x58-0x5B */ + 0xC4, 0xDD, 0xB1, 0x95, 0xB1, 0x96, 0xB1, 0x97, /* 0x5C-0x5F */ + 0xB1, 0x98, 0xB1, 0x99, 0xB1, 0x9A, 0xB1, 0x9B, /* 0x60-0x63 */ + 0xC4, 0xDE, 0xC4, 0xDF, 0xB1, 0x9C, 0xC4, 0xE0, /* 0x64-0x67 */ + 0xB1, 0x9D, 0xC4, 0xE1, 0xB1, 0x9E, 0xB1, 0x9F, /* 0x68-0x6B */ + 0xB1, 0xA0, 0xB2, 0x41, 0xB2, 0x42, 0xB2, 0x43, /* 0x6C-0x6F */ + 0xC4, 0xE2, 0xC4, 0xE3, 0xB2, 0x44, 0xB2, 0x45, /* 0x70-0x73 */ + 0xC4, 0xE4, 0xB2, 0x46, 0xB2, 0x47, 0xB2, 0x48, /* 0x74-0x77 */ + 0xC4, 0xE5, 0xB2, 0x49, 0xB2, 0x4A, 0xB2, 0x4B, /* 0x78-0x7B */ + 0xB2, 0x4C, 0xB2, 0x4D, 0xB2, 0x4E, 0xB2, 0x4F, /* 0x7C-0x7F */ + + 0xC4, 0xE6, 0xB2, 0x50, 0xB2, 0x51, 0xB2, 0x52, /* 0x80-0x83 */ + 0xB2, 0x53, 0xC4, 0xE7, 0xB2, 0x54, 0xB2, 0x55, /* 0x84-0x87 */ + 0xB2, 0x56, 0xB2, 0x57, 0xB2, 0x58, 0xB2, 0x59, /* 0x88-0x8B */ + 0xC4, 0xE8, 0xB2, 0x5A, 0xB2, 0x61, 0xB2, 0x62, /* 0x8C-0x8F */ + 0xB2, 0x63, 0xB2, 0x64, 0xB2, 0x65, 0xB2, 0x66, /* 0x90-0x93 */ + 0xB2, 0x67, 0xB2, 0x68, 0xB2, 0x69, 0xB2, 0x6A, /* 0x94-0x97 */ + 0xB2, 0x6B, 0xB2, 0x6C, 0xB2, 0x6D, 0xB2, 0x6E, /* 0x98-0x9B */ + 0xB2, 0x6F, 0xB2, 0x70, 0xB2, 0x71, 0xB2, 0x72, /* 0x9C-0x9F */ + 0xB2, 0x73, 0xC4, 0xE9, 0xB2, 0x74, 0xB2, 0x75, /* 0xA0-0xA3 */ + 0xB2, 0x76, 0xB2, 0x77, 0xB2, 0x78, 0xB2, 0x79, /* 0xA4-0xA7 */ + 0xC4, 0xEA, 0xB2, 0x7A, 0xB2, 0x81, 0xB2, 0x82, /* 0xA8-0xAB */ + 0xB2, 0x83, 0xB2, 0x84, 0xB2, 0x85, 0xB2, 0x86, /* 0xAC-0xAF */ + 0xC4, 0xEB, 0xB2, 0x87, 0xB2, 0x88, 0xB2, 0x89, /* 0xB0-0xB3 */ + 0xB2, 0x8A, 0xB2, 0x8B, 0xB2, 0x8C, 0xB2, 0x8D, /* 0xB4-0xB7 */ + 0xB2, 0x8E, 0xB2, 0x8F, 0xB2, 0x90, 0xB2, 0x91, /* 0xB8-0xBB */ + 0xB2, 0x92, 0xB2, 0x93, 0xB2, 0x94, 0xB2, 0x95, /* 0xBC-0xBF */ + 0xB2, 0x96, 0xB2, 0x97, 0xB2, 0x98, 0xB2, 0x99, /* 0xC0-0xC3 */ + 0xC4, 0xEC, 0xB2, 0x9A, 0xB2, 0x9B, 0xB2, 0x9C, /* 0xC4-0xC7 */ + 0xB2, 0x9D, 0xB2, 0x9E, 0xB2, 0x9F, 0xB2, 0xA0, /* 0xC8-0xCB */ + 0xB3, 0x41, 0xB3, 0x42, 0xB3, 0x43, 0xB3, 0x44, /* 0xCC-0xCF */ + 0xB3, 0x45, 0xB3, 0x46, 0xB3, 0x47, 0xB3, 0x48, /* 0xD0-0xD3 */ + 0xB3, 0x49, 0xB3, 0x4A, 0xB3, 0x4B, 0xB3, 0x4C, /* 0xD4-0xD7 */ + 0xB3, 0x4D, 0xB3, 0x4E, 0xB3, 0x4F, 0xB3, 0x50, /* 0xD8-0xDB */ + 0xB3, 0x51, 0xB3, 0x52, 0xB3, 0x53, 0xB3, 0x54, /* 0xDC-0xDF */ + 0xC4, 0xED, 0xC4, 0xEE, 0xB3, 0x55, 0xB3, 0x56, /* 0xE0-0xE3 */ + 0xC4, 0xEF, 0xB3, 0x57, 0xB3, 0x58, 0xB3, 0x59, /* 0xE4-0xE7 */ + 0xC4, 0xF0, 0xB3, 0x5A, 0xB3, 0x61, 0xB3, 0x62, /* 0xE8-0xEB */ + 0xB3, 0x63, 0xB3, 0x64, 0xB3, 0x65, 0xB3, 0x66, /* 0xEC-0xEF */ + 0xC4, 0xF1, 0xC4, 0xF2, 0xB3, 0x67, 0xC4, 0xF3, /* 0xF0-0xF3 */ + 0xB3, 0x68, 0xC4, 0xF4, 0xB3, 0x69, 0xB3, 0x6A, /* 0xF4-0xF7 */ + 0xB3, 0x6B, 0xB3, 0x6C, 0xB3, 0x6D, 0xB3, 0x6E, /* 0xF8-0xFB */ + 0xC4, 0xF5, 0xB3, 0x6F, 0xB3, 0x70, 0xB3, 0x71, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D0[512] = { + 0xC4, 0xF6, 0xB3, 0x72, 0xB3, 0x73, 0xB3, 0x74, /* 0x00-0x03 */ + 0xC4, 0xF7, 0xB3, 0x75, 0xB3, 0x76, 0xB3, 0x77, /* 0x04-0x07 */ + 0xB3, 0x78, 0xB3, 0x79, 0xB3, 0x7A, 0xB3, 0x81, /* 0x08-0x0B */ + 0xB3, 0x82, 0xB3, 0x83, 0xB3, 0x84, 0xB3, 0x85, /* 0x0C-0x0F */ + 0xB3, 0x86, 0xC4, 0xF8, 0xB3, 0x87, 0xB3, 0x88, /* 0x10-0x13 */ + 0xB3, 0x89, 0xB3, 0x8A, 0xB3, 0x8B, 0xB3, 0x8C, /* 0x14-0x17 */ + 0xC4, 0xF9, 0xB3, 0x8D, 0xB3, 0x8E, 0xB3, 0x8F, /* 0x18-0x1B */ + 0xB3, 0x90, 0xB3, 0x91, 0xB3, 0x92, 0xB3, 0x93, /* 0x1C-0x1F */ + 0xB3, 0x94, 0xB3, 0x95, 0xB3, 0x96, 0xB3, 0x97, /* 0x20-0x23 */ + 0xB3, 0x98, 0xB3, 0x99, 0xB3, 0x9A, 0xB3, 0x9B, /* 0x24-0x27 */ + 0xB3, 0x9C, 0xB3, 0x9D, 0xB3, 0x9E, 0xB3, 0x9F, /* 0x28-0x2B */ + 0xB3, 0xA0, 0xC4, 0xFA, 0xB4, 0x41, 0xB4, 0x42, /* 0x2C-0x2F */ + 0xB4, 0x43, 0xB4, 0x44, 0xB4, 0x45, 0xB4, 0x46, /* 0x30-0x33 */ + 0xC4, 0xFB, 0xC4, 0xFC, 0xB4, 0x47, 0xB4, 0x48, /* 0x34-0x37 */ + 0xC4, 0xFD, 0xB4, 0x49, 0xB4, 0x4A, 0xB4, 0x4B, /* 0x38-0x3B */ + 0xC4, 0xFE, 0xB4, 0x4C, 0xB4, 0x4D, 0xB4, 0x4E, /* 0x3C-0x3F */ + 0xB4, 0x4F, 0xB4, 0x50, 0xB4, 0x51, 0xB4, 0x52, /* 0x40-0x43 */ + 0xC5, 0xA1, 0xC5, 0xA2, 0xB4, 0x53, 0xC5, 0xA3, /* 0x44-0x47 */ + 0xB4, 0x54, 0xC5, 0xA4, 0xB4, 0x55, 0xB4, 0x56, /* 0x48-0x4B */ + 0xB4, 0x57, 0xB4, 0x58, 0xB4, 0x59, 0xB4, 0x5A, /* 0x4C-0x4F */ + 0xC5, 0xA5, 0xB4, 0x61, 0xB4, 0x62, 0xB4, 0x63, /* 0x50-0x53 */ + 0xC5, 0xA6, 0xB4, 0x64, 0xB4, 0x65, 0xB4, 0x66, /* 0x54-0x57 */ + 0xC5, 0xA7, 0xB4, 0x67, 0xB4, 0x68, 0xB4, 0x69, /* 0x58-0x5B */ + 0xB4, 0x6A, 0xB4, 0x6B, 0xB4, 0x6C, 0xB4, 0x6D, /* 0x5C-0x5F */ + 0xC5, 0xA8, 0xB4, 0x6E, 0xB4, 0x6F, 0xB4, 0x70, /* 0x60-0x63 */ + 0xB4, 0x71, 0xB4, 0x72, 0xB4, 0x73, 0xB4, 0x74, /* 0x64-0x67 */ + 0xB4, 0x75, 0xB4, 0x76, 0xB4, 0x77, 0xB4, 0x78, /* 0x68-0x6B */ + 0xC5, 0xA9, 0xC5, 0xAA, 0xB4, 0x79, 0xB4, 0x7A, /* 0x6C-0x6F */ + 0xC5, 0xAB, 0xB4, 0x81, 0xB4, 0x82, 0xB4, 0x83, /* 0x70-0x73 */ + 0xC5, 0xAC, 0xB4, 0x84, 0xB4, 0x85, 0xB4, 0x86, /* 0x74-0x77 */ + 0xB4, 0x87, 0xB4, 0x88, 0xB4, 0x89, 0xB4, 0x8A, /* 0x78-0x7B */ + 0xC5, 0xAD, 0xC5, 0xAE, 0xB4, 0x8B, 0xB4, 0x8C, /* 0x7C-0x7F */ + + 0xB4, 0x8D, 0xC5, 0xAF, 0xB4, 0x8E, 0xB4, 0x8F, /* 0x80-0x83 */ + 0xB4, 0x90, 0xB4, 0x91, 0xB4, 0x92, 0xB4, 0x93, /* 0x84-0x87 */ + 0xB4, 0x94, 0xB4, 0x95, 0xB4, 0x96, 0xB4, 0x97, /* 0x88-0x8B */ + 0xB4, 0x98, 0xB4, 0x99, 0xB4, 0x9A, 0xB4, 0x9B, /* 0x8C-0x8F */ + 0xB4, 0x9C, 0xB4, 0x9D, 0xB4, 0x9E, 0xB4, 0x9F, /* 0x90-0x93 */ + 0xB4, 0xA0, 0xB5, 0x41, 0xB5, 0x42, 0xB5, 0x43, /* 0x94-0x97 */ + 0xB5, 0x44, 0xB5, 0x45, 0xB5, 0x46, 0xB5, 0x47, /* 0x98-0x9B */ + 0xB5, 0x48, 0xB5, 0x49, 0xB5, 0x4A, 0xB5, 0x4B, /* 0x9C-0x9F */ + 0xB5, 0x4C, 0xB5, 0x4D, 0xB5, 0x4E, 0xB5, 0x4F, /* 0xA0-0xA3 */ + 0xC5, 0xB0, 0xC5, 0xB1, 0xB5, 0x50, 0xB5, 0x51, /* 0xA4-0xA7 */ + 0xC5, 0xB2, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x54, /* 0xA8-0xAB */ + 0xC5, 0xB3, 0xB5, 0x55, 0xB5, 0x56, 0xB5, 0x57, /* 0xAC-0xAF */ + 0xB5, 0x58, 0xB5, 0x59, 0xB5, 0x5A, 0xB5, 0x61, /* 0xB0-0xB3 */ + 0xC5, 0xB4, 0xC5, 0xB5, 0xB5, 0x62, 0xC5, 0xB6, /* 0xB4-0xB7 */ + 0xB5, 0x63, 0xC5, 0xB7, 0xB5, 0x64, 0xB5, 0x65, /* 0xB8-0xBB */ + 0xB5, 0x66, 0xB5, 0x67, 0xB5, 0x68, 0xB5, 0x69, /* 0xBC-0xBF */ + 0xC5, 0xB8, 0xC5, 0xB9, 0xB5, 0x6A, 0xB5, 0x6B, /* 0xC0-0xC3 */ + 0xC5, 0xBA, 0xB5, 0x6C, 0xB5, 0x6D, 0xB5, 0x6E, /* 0xC4-0xC7 */ + 0xC5, 0xBB, 0xC5, 0xBC, 0xB5, 0x6F, 0xB5, 0x70, /* 0xC8-0xCB */ + 0xB5, 0x71, 0xB5, 0x72, 0xB5, 0x73, 0xB5, 0x74, /* 0xCC-0xCF */ + 0xC5, 0xBD, 0xC5, 0xBE, 0xB5, 0x75, 0xC5, 0xBF, /* 0xD0-0xD3 */ + 0xC5, 0xC0, 0xC5, 0xC1, 0xB5, 0x76, 0xB5, 0x77, /* 0xD4-0xD7 */ + 0xB5, 0x78, 0xB5, 0x79, 0xB5, 0x7A, 0xB5, 0x81, /* 0xD8-0xDB */ + 0xC5, 0xC2, 0xC5, 0xC3, 0xB5, 0x82, 0xB5, 0x83, /* 0xDC-0xDF */ + 0xC5, 0xC4, 0xB5, 0x84, 0xB5, 0x85, 0xB5, 0x86, /* 0xE0-0xE3 */ + 0xC5, 0xC5, 0xB5, 0x87, 0xB5, 0x88, 0xB5, 0x89, /* 0xE4-0xE7 */ + 0xB5, 0x8A, 0xB5, 0x8B, 0xB5, 0x8C, 0xB5, 0x8D, /* 0xE8-0xEB */ + 0xC5, 0xC6, 0xC5, 0xC7, 0xB5, 0x8E, 0xC5, 0xC8, /* 0xEC-0xEF */ + 0xC5, 0xC9, 0xC5, 0xCA, 0xB5, 0x8F, 0xB5, 0x90, /* 0xF0-0xF3 */ + 0xB5, 0x91, 0xB5, 0x92, 0xB5, 0x93, 0xB5, 0x94, /* 0xF4-0xF7 */ + 0xC5, 0xCB, 0xB5, 0x95, 0xB5, 0x96, 0xB5, 0x97, /* 0xF8-0xFB */ + 0xB5, 0x98, 0xB5, 0x99, 0xB5, 0x9A, 0xB5, 0x9B, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D1[512] = { + 0xB5, 0x9C, 0xB5, 0x9D, 0xB5, 0x9E, 0xB5, 0x9F, /* 0x00-0x03 */ + 0xB5, 0xA0, 0xB6, 0x41, 0xB6, 0x42, 0xB6, 0x43, /* 0x04-0x07 */ + 0xB6, 0x44, 0xB6, 0x45, 0xB6, 0x46, 0xB6, 0x47, /* 0x08-0x0B */ + 0xB6, 0x48, 0xC5, 0xCC, 0xB6, 0x49, 0xB6, 0x4A, /* 0x0C-0x0F */ + 0xB6, 0x4B, 0xB6, 0x4C, 0xB6, 0x4D, 0xB6, 0x4E, /* 0x10-0x13 */ + 0xB6, 0x4F, 0xB6, 0x50, 0xB6, 0x51, 0xB6, 0x52, /* 0x14-0x17 */ + 0xB6, 0x53, 0xB6, 0x54, 0xB6, 0x55, 0xB6, 0x56, /* 0x18-0x1B */ + 0xB6, 0x57, 0xB6, 0x58, 0xB6, 0x59, 0xB6, 0x5A, /* 0x1C-0x1F */ + 0xB6, 0x61, 0xB6, 0x62, 0xB6, 0x63, 0xB6, 0x64, /* 0x20-0x23 */ + 0xB6, 0x65, 0xB6, 0x66, 0xB6, 0x67, 0xB6, 0x68, /* 0x24-0x27 */ + 0xB6, 0x69, 0xB6, 0x6A, 0xB6, 0x6B, 0xB6, 0x6C, /* 0x28-0x2B */ + 0xB6, 0x6D, 0xB6, 0x6E, 0xB6, 0x6F, 0xB6, 0x70, /* 0x2C-0x2F */ + 0xC5, 0xCD, 0xC5, 0xCE, 0xB6, 0x71, 0xB6, 0x72, /* 0x30-0x33 */ + 0xC5, 0xCF, 0xB6, 0x73, 0xB6, 0x74, 0xB6, 0x75, /* 0x34-0x37 */ + 0xC5, 0xD0, 0xB6, 0x76, 0xC5, 0xD1, 0xB6, 0x77, /* 0x38-0x3B */ + 0xB6, 0x78, 0xB6, 0x79, 0xB6, 0x7A, 0xB6, 0x81, /* 0x3C-0x3F */ + 0xC5, 0xD2, 0xC5, 0xD3, 0xB6, 0x82, 0xC5, 0xD4, /* 0x40-0x43 */ + 0xC5, 0xD5, 0xC5, 0xD6, 0xB6, 0x83, 0xB6, 0x84, /* 0x44-0x47 */ + 0xB6, 0x85, 0xB6, 0x86, 0xB6, 0x87, 0xB6, 0x88, /* 0x48-0x4B */ + 0xC5, 0xD7, 0xC5, 0xD8, 0xB6, 0x89, 0xB6, 0x8A, /* 0x4C-0x4F */ + 0xC5, 0xD9, 0xB6, 0x8B, 0xB6, 0x8C, 0xB6, 0x8D, /* 0x50-0x53 */ + 0xC5, 0xDA, 0xB6, 0x8E, 0xB6, 0x8F, 0xB6, 0x90, /* 0x54-0x57 */ + 0xB6, 0x91, 0xB6, 0x92, 0xB6, 0x93, 0xB6, 0x94, /* 0x58-0x5B */ + 0xC5, 0xDB, 0xC5, 0xDC, 0xB6, 0x95, 0xC5, 0xDD, /* 0x5C-0x5F */ + 0xB6, 0x96, 0xC5, 0xDE, 0xB6, 0x97, 0xB6, 0x98, /* 0x60-0x63 */ + 0xB6, 0x99, 0xB6, 0x9A, 0xB6, 0x9B, 0xB6, 0x9C, /* 0x64-0x67 */ + 0xC5, 0xDF, 0xB6, 0x9D, 0xB6, 0x9E, 0xB6, 0x9F, /* 0x68-0x6B */ + 0xC5, 0xE0, 0xB6, 0xA0, 0xB7, 0x41, 0xB7, 0x42, /* 0x6C-0x6F */ + 0xB7, 0x43, 0xB7, 0x44, 0xB7, 0x45, 0xB7, 0x46, /* 0x70-0x73 */ + 0xB7, 0x47, 0xB7, 0x48, 0xB7, 0x49, 0xB7, 0x4A, /* 0x74-0x77 */ + 0xB7, 0x4B, 0xB7, 0x4C, 0xB7, 0x4D, 0xB7, 0x4E, /* 0x78-0x7B */ + 0xC5, 0xE1, 0xB7, 0x4F, 0xB7, 0x50, 0xB7, 0x51, /* 0x7C-0x7F */ + + 0xB7, 0x52, 0xB7, 0x53, 0xB7, 0x54, 0xB7, 0x55, /* 0x80-0x83 */ + 0xC5, 0xE2, 0xB7, 0x56, 0xB7, 0x57, 0xB7, 0x58, /* 0x84-0x87 */ + 0xC5, 0xE3, 0xB7, 0x59, 0xB7, 0x5A, 0xB7, 0x61, /* 0x88-0x8B */ + 0xB7, 0x62, 0xB7, 0x63, 0xB7, 0x64, 0xB7, 0x65, /* 0x8C-0x8F */ + 0xB7, 0x66, 0xB7, 0x67, 0xB7, 0x68, 0xB7, 0x69, /* 0x90-0x93 */ + 0xB7, 0x6A, 0xB7, 0x6B, 0xB7, 0x6C, 0xB7, 0x6D, /* 0x94-0x97 */ + 0xB7, 0x6E, 0xB7, 0x6F, 0xB7, 0x70, 0xB7, 0x71, /* 0x98-0x9B */ + 0xB7, 0x72, 0xB7, 0x73, 0xB7, 0x74, 0xB7, 0x75, /* 0x9C-0x9F */ + 0xC5, 0xE4, 0xC5, 0xE5, 0xB7, 0x76, 0xB7, 0x77, /* 0xA0-0xA3 */ + 0xC5, 0xE6, 0xB7, 0x78, 0xB7, 0x79, 0xB7, 0x7A, /* 0xA4-0xA7 */ + 0xC5, 0xE7, 0xB7, 0x81, 0xB7, 0x82, 0xB7, 0x83, /* 0xA8-0xAB */ + 0xB7, 0x84, 0xB7, 0x85, 0xB7, 0x86, 0xB7, 0x87, /* 0xAC-0xAF */ + 0xC5, 0xE8, 0xC5, 0xE9, 0xB7, 0x88, 0xC5, 0xEA, /* 0xB0-0xB3 */ + 0xB7, 0x89, 0xC5, 0xEB, 0xB7, 0x8A, 0xB7, 0x8B, /* 0xB4-0xB7 */ + 0xB7, 0x8C, 0xB7, 0x8D, 0xC5, 0xEC, 0xB7, 0x8E, /* 0xB8-0xBB */ + 0xC5, 0xED, 0xB7, 0x8F, 0xB7, 0x90, 0xB7, 0x91, /* 0xBC-0xBF */ + 0xC5, 0xEE, 0xB7, 0x92, 0xB7, 0x93, 0xB7, 0x94, /* 0xC0-0xC3 */ + 0xB7, 0x95, 0xB7, 0x96, 0xB7, 0x97, 0xB7, 0x98, /* 0xC4-0xC7 */ + 0xB7, 0x99, 0xB7, 0x9A, 0xB7, 0x9B, 0xB7, 0x9C, /* 0xC8-0xCB */ + 0xB7, 0x9D, 0xB7, 0x9E, 0xB7, 0x9F, 0xB7, 0xA0, /* 0xCC-0xCF */ + 0xB8, 0x41, 0xB8, 0x42, 0xB8, 0x43, 0xB8, 0x44, /* 0xD0-0xD3 */ + 0xB8, 0x45, 0xB8, 0x46, 0xB8, 0x47, 0xB8, 0x48, /* 0xD4-0xD7 */ + 0xC5, 0xEF, 0xB8, 0x49, 0xB8, 0x4A, 0xB8, 0x4B, /* 0xD8-0xDB */ + 0xB8, 0x4C, 0xB8, 0x4D, 0xB8, 0x4E, 0xB8, 0x4F, /* 0xDC-0xDF */ + 0xB8, 0x50, 0xB8, 0x51, 0xB8, 0x52, 0xB8, 0x53, /* 0xE0-0xE3 */ + 0xB8, 0x54, 0xB8, 0x55, 0xB8, 0x56, 0xB8, 0x57, /* 0xE4-0xE7 */ + 0xB8, 0x58, 0xB8, 0x59, 0xB8, 0x5A, 0xB8, 0x61, /* 0xE8-0xEB */ + 0xB8, 0x62, 0xB8, 0x63, 0xB8, 0x64, 0xB8, 0x65, /* 0xEC-0xEF */ + 0xB8, 0x66, 0xB8, 0x67, 0xB8, 0x68, 0xB8, 0x69, /* 0xF0-0xF3 */ + 0xC5, 0xF0, 0xB8, 0x6A, 0xB8, 0x6B, 0xB8, 0x6C, /* 0xF4-0xF7 */ + 0xC5, 0xF1, 0xB8, 0x6D, 0xB8, 0x6E, 0xB8, 0x6F, /* 0xF8-0xFB */ + 0xB8, 0x70, 0xB8, 0x71, 0xB8, 0x72, 0xB8, 0x73, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D2[512] = { + 0xB8, 0x74, 0xB8, 0x75, 0xB8, 0x76, 0xB8, 0x77, /* 0x00-0x03 */ + 0xB8, 0x78, 0xB8, 0x79, 0xB8, 0x7A, 0xC5, 0xF2, /* 0x04-0x07 */ + 0xB8, 0x81, 0xC5, 0xF3, 0xB8, 0x82, 0xB8, 0x83, /* 0x08-0x0B */ + 0xB8, 0x84, 0xB8, 0x85, 0xB8, 0x86, 0xB8, 0x87, /* 0x0C-0x0F */ + 0xC5, 0xF4, 0xB8, 0x88, 0xB8, 0x89, 0xB8, 0x8A, /* 0x10-0x13 */ + 0xB8, 0x8B, 0xB8, 0x8C, 0xB8, 0x8D, 0xB8, 0x8E, /* 0x14-0x17 */ + 0xB8, 0x8F, 0xB8, 0x90, 0xB8, 0x91, 0xB8, 0x92, /* 0x18-0x1B */ + 0xB8, 0x93, 0xB8, 0x94, 0xB8, 0x95, 0xB8, 0x96, /* 0x1C-0x1F */ + 0xB8, 0x97, 0xB8, 0x98, 0xB8, 0x99, 0xB8, 0x9A, /* 0x20-0x23 */ + 0xB8, 0x9B, 0xB8, 0x9C, 0xB8, 0x9D, 0xB8, 0x9E, /* 0x24-0x27 */ + 0xB8, 0x9F, 0xB8, 0xA0, 0xB9, 0x41, 0xB9, 0x42, /* 0x28-0x2B */ + 0xC5, 0xF5, 0xC5, 0xF6, 0xB9, 0x43, 0xB9, 0x44, /* 0x2C-0x2F */ + 0xC5, 0xF7, 0xB9, 0x45, 0xB9, 0x46, 0xB9, 0x47, /* 0x30-0x33 */ + 0xC5, 0xF8, 0xB9, 0x48, 0xB9, 0x49, 0xB9, 0x4A, /* 0x34-0x37 */ + 0xB9, 0x4B, 0xB9, 0x4C, 0xB9, 0x4D, 0xB9, 0x4E, /* 0x38-0x3B */ + 0xC5, 0xF9, 0xC5, 0xFA, 0xB9, 0x4F, 0xC5, 0xFB, /* 0x3C-0x3F */ + 0xB9, 0x50, 0xC5, 0xFC, 0xB9, 0x51, 0xB9, 0x52, /* 0x40-0x43 */ + 0xB9, 0x53, 0xB9, 0x54, 0xB9, 0x55, 0xB9, 0x56, /* 0x44-0x47 */ + 0xC5, 0xFD, 0xB9, 0x57, 0xB9, 0x58, 0xB9, 0x59, /* 0x48-0x4B */ + 0xB9, 0x5A, 0xB9, 0x61, 0xB9, 0x62, 0xB9, 0x63, /* 0x4C-0x4F */ + 0xB9, 0x64, 0xB9, 0x65, 0xB9, 0x66, 0xB9, 0x67, /* 0x50-0x53 */ + 0xB9, 0x68, 0xB9, 0x69, 0xB9, 0x6A, 0xB9, 0x6B, /* 0x54-0x57 */ + 0xB9, 0x6C, 0xB9, 0x6D, 0xB9, 0x6E, 0xB9, 0x6F, /* 0x58-0x5B */ + 0xC5, 0xFE, 0xB9, 0x70, 0xB9, 0x71, 0xB9, 0x72, /* 0x5C-0x5F */ + 0xB9, 0x73, 0xB9, 0x74, 0xB9, 0x75, 0xB9, 0x76, /* 0x60-0x63 */ + 0xC6, 0xA1, 0xB9, 0x77, 0xB9, 0x78, 0xB9, 0x79, /* 0x64-0x67 */ + 0xB9, 0x7A, 0xB9, 0x81, 0xB9, 0x82, 0xB9, 0x83, /* 0x68-0x6B */ + 0xB9, 0x84, 0xB9, 0x85, 0xB9, 0x86, 0xB9, 0x87, /* 0x6C-0x6F */ + 0xB9, 0x88, 0xB9, 0x89, 0xB9, 0x8A, 0xB9, 0x8B, /* 0x70-0x73 */ + 0xB9, 0x8C, 0xB9, 0x8D, 0xB9, 0x8E, 0xB9, 0x8F, /* 0x74-0x77 */ + 0xB9, 0x90, 0xB9, 0x91, 0xB9, 0x92, 0xB9, 0x93, /* 0x78-0x7B */ + 0xB9, 0x94, 0xB9, 0x95, 0xB9, 0x96, 0xB9, 0x97, /* 0x7C-0x7F */ + + 0xC6, 0xA2, 0xC6, 0xA3, 0xB9, 0x98, 0xB9, 0x99, /* 0x80-0x83 */ + 0xC6, 0xA4, 0xB9, 0x9A, 0xB9, 0x9B, 0xB9, 0x9C, /* 0x84-0x87 */ + 0xC6, 0xA5, 0xB9, 0x9D, 0xB9, 0x9E, 0xB9, 0x9F, /* 0x88-0x8B */ + 0xB9, 0xA0, 0xBA, 0x41, 0xBA, 0x42, 0xBA, 0x43, /* 0x8C-0x8F */ + 0xC6, 0xA6, 0xC6, 0xA7, 0xBA, 0x44, 0xBA, 0x45, /* 0x90-0x93 */ + 0xBA, 0x46, 0xC6, 0xA8, 0xBA, 0x47, 0xBA, 0x48, /* 0x94-0x97 */ + 0xBA, 0x49, 0xBA, 0x4A, 0xBA, 0x4B, 0xBA, 0x4C, /* 0x98-0x9B */ + 0xC6, 0xA9, 0xBA, 0x4D, 0xBA, 0x4E, 0xBA, 0x4F, /* 0x9C-0x9F */ + 0xC6, 0xAA, 0xBA, 0x50, 0xBA, 0x51, 0xBA, 0x52, /* 0xA0-0xA3 */ + 0xC6, 0xAB, 0xBA, 0x53, 0xBA, 0x54, 0xBA, 0x55, /* 0xA4-0xA7 */ + 0xBA, 0x56, 0xBA, 0x57, 0xBA, 0x58, 0xBA, 0x59, /* 0xA8-0xAB */ + 0xC6, 0xAC, 0xBA, 0x5A, 0xBA, 0x61, 0xBA, 0x62, /* 0xAC-0xAF */ + 0xBA, 0x63, 0xC6, 0xAD, 0xBA, 0x64, 0xBA, 0x65, /* 0xB0-0xB3 */ + 0xBA, 0x66, 0xBA, 0x67, 0xBA, 0x68, 0xBA, 0x69, /* 0xB4-0xB7 */ + 0xC6, 0xAE, 0xC6, 0xAF, 0xBA, 0x6A, 0xBA, 0x6B, /* 0xB8-0xBB */ + 0xC6, 0xB0, 0xBA, 0x6C, 0xBA, 0x6D, 0xC6, 0xB1, /* 0xBC-0xBF */ + 0xC6, 0xB2, 0xBA, 0x6E, 0xC6, 0xB3, 0xBA, 0x6F, /* 0xC0-0xC3 */ + 0xBA, 0x70, 0xBA, 0x71, 0xBA, 0x72, 0xBA, 0x73, /* 0xC4-0xC7 */ + 0xC6, 0xB4, 0xC6, 0xB5, 0xBA, 0x74, 0xC6, 0xB6, /* 0xC8-0xCB */ + 0xBA, 0x75, 0xBA, 0x76, 0xBA, 0x77, 0xBA, 0x78, /* 0xCC-0xCF */ + 0xBA, 0x79, 0xBA, 0x7A, 0xBA, 0x81, 0xBA, 0x82, /* 0xD0-0xD3 */ + 0xC6, 0xB7, 0xBA, 0x83, 0xBA, 0x84, 0xBA, 0x85, /* 0xD4-0xD7 */ + 0xC6, 0xB8, 0xBA, 0x86, 0xBA, 0x87, 0xBA, 0x88, /* 0xD8-0xDB */ + 0xC6, 0xB9, 0xBA, 0x89, 0xBA, 0x8A, 0xBA, 0x8B, /* 0xDC-0xDF */ + 0xBA, 0x8C, 0xBA, 0x8D, 0xBA, 0x8E, 0xBA, 0x8F, /* 0xE0-0xE3 */ + 0xC6, 0xBA, 0xC6, 0xBB, 0xBA, 0x90, 0xBA, 0x91, /* 0xE4-0xE7 */ + 0xBA, 0x92, 0xBA, 0x93, 0xBA, 0x94, 0xBA, 0x95, /* 0xE8-0xEB */ + 0xBA, 0x96, 0xBA, 0x97, 0xBA, 0x98, 0xBA, 0x99, /* 0xEC-0xEF */ + 0xC6, 0xBC, 0xC6, 0xBD, 0xBA, 0x9A, 0xBA, 0x9B, /* 0xF0-0xF3 */ + 0xC6, 0xBE, 0xBA, 0x9C, 0xBA, 0x9D, 0xBA, 0x9E, /* 0xF4-0xF7 */ + 0xC6, 0xBF, 0xBA, 0x9F, 0xBA, 0xA0, 0xBB, 0x41, /* 0xF8-0xFB */ + 0xBB, 0x42, 0xBB, 0x43, 0xBB, 0x44, 0xBB, 0x45, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D3[512] = { + 0xC6, 0xC0, 0xC6, 0xC1, 0xBB, 0x46, 0xC6, 0xC2, /* 0x00-0x03 */ + 0xBB, 0x47, 0xC6, 0xC3, 0xBB, 0x48, 0xBB, 0x49, /* 0x04-0x07 */ + 0xBB, 0x4A, 0xBB, 0x4B, 0xBB, 0x4C, 0xBB, 0x4D, /* 0x08-0x0B */ + 0xC6, 0xC4, 0xC6, 0xC5, 0xC6, 0xC6, 0xBB, 0x4E, /* 0x0C-0x0F */ + 0xC6, 0xC7, 0xBB, 0x4F, 0xBB, 0x50, 0xBB, 0x51, /* 0x10-0x13 */ + 0xC6, 0xC8, 0xBB, 0x52, 0xC6, 0xC9, 0xBB, 0x53, /* 0x14-0x17 */ + 0xBB, 0x54, 0xBB, 0x55, 0xBB, 0x56, 0xBB, 0x57, /* 0x18-0x1B */ + 0xC6, 0xCA, 0xC6, 0xCB, 0xBB, 0x58, 0xC6, 0xCC, /* 0x1C-0x1F */ + 0xC6, 0xCD, 0xC6, 0xCE, 0xBB, 0x59, 0xBB, 0x5A, /* 0x20-0x23 */ + 0xBB, 0x61, 0xC6, 0xCF, 0xBB, 0x62, 0xBB, 0x63, /* 0x24-0x27 */ + 0xC6, 0xD0, 0xC6, 0xD1, 0xBB, 0x64, 0xBB, 0x65, /* 0x28-0x2B */ + 0xC6, 0xD2, 0xBB, 0x66, 0xBB, 0x67, 0xBB, 0x68, /* 0x2C-0x2F */ + 0xC6, 0xD3, 0xBB, 0x69, 0xBB, 0x6A, 0xBB, 0x6B, /* 0x30-0x33 */ + 0xBB, 0x6C, 0xBB, 0x6D, 0xBB, 0x6E, 0xBB, 0x6F, /* 0x34-0x37 */ + 0xC6, 0xD4, 0xC6, 0xD5, 0xBB, 0x70, 0xC6, 0xD6, /* 0x38-0x3B */ + 0xC6, 0xD7, 0xC6, 0xD8, 0xBB, 0x71, 0xBB, 0x72, /* 0x3C-0x3F */ + 0xBB, 0x73, 0xBB, 0x74, 0xBB, 0x75, 0xBB, 0x76, /* 0x40-0x43 */ + 0xC6, 0xD9, 0xC6, 0xDA, 0xBB, 0x77, 0xBB, 0x78, /* 0x44-0x47 */ + 0xBB, 0x79, 0xBB, 0x7A, 0xBB, 0x81, 0xBB, 0x82, /* 0x48-0x4B */ + 0xBB, 0x83, 0xBB, 0x84, 0xBB, 0x85, 0xBB, 0x86, /* 0x4C-0x4F */ + 0xBB, 0x87, 0xBB, 0x88, 0xBB, 0x89, 0xBB, 0x8A, /* 0x50-0x53 */ + 0xBB, 0x8B, 0xBB, 0x8C, 0xBB, 0x8D, 0xBB, 0x8E, /* 0x54-0x57 */ + 0xBB, 0x8F, 0xBB, 0x90, 0xBB, 0x91, 0xBB, 0x92, /* 0x58-0x5B */ + 0xBB, 0x93, 0xBB, 0x94, 0xBB, 0x95, 0xBB, 0x96, /* 0x5C-0x5F */ + 0xBB, 0x97, 0xBB, 0x98, 0xBB, 0x99, 0xBB, 0x9A, /* 0x60-0x63 */ + 0xBB, 0x9B, 0xBB, 0x9C, 0xBB, 0x9D, 0xBB, 0x9E, /* 0x64-0x67 */ + 0xBB, 0x9F, 0xBB, 0xA0, 0xBC, 0x41, 0xBC, 0x42, /* 0x68-0x6B */ + 0xBC, 0x43, 0xBC, 0x44, 0xBC, 0x45, 0xBC, 0x46, /* 0x6C-0x6F */ + 0xBC, 0x47, 0xBC, 0x48, 0xBC, 0x49, 0xBC, 0x4A, /* 0x70-0x73 */ + 0xBC, 0x4B, 0xBC, 0x4C, 0xBC, 0x4D, 0xBC, 0x4E, /* 0x74-0x77 */ + 0xBC, 0x4F, 0xBC, 0x50, 0xBC, 0x51, 0xBC, 0x52, /* 0x78-0x7B */ + 0xC6, 0xDB, 0xC6, 0xDC, 0xBC, 0x53, 0xBC, 0x54, /* 0x7C-0x7F */ + + 0xC6, 0xDD, 0xBC, 0x55, 0xBC, 0x56, 0xBC, 0x57, /* 0x80-0x83 */ + 0xC6, 0xDE, 0xBC, 0x58, 0xBC, 0x59, 0xBC, 0x5A, /* 0x84-0x87 */ + 0xBC, 0x61, 0xBC, 0x62, 0xBC, 0x63, 0xBC, 0x64, /* 0x88-0x8B */ + 0xC6, 0xDF, 0xC6, 0xE0, 0xBC, 0x65, 0xC6, 0xE1, /* 0x8C-0x8F */ + 0xC6, 0xE2, 0xC6, 0xE3, 0xBC, 0x66, 0xBC, 0x67, /* 0x90-0x93 */ + 0xBC, 0x68, 0xBC, 0x69, 0xBC, 0x6A, 0xBC, 0x6B, /* 0x94-0x97 */ + 0xC6, 0xE4, 0xC6, 0xE5, 0xBC, 0x6C, 0xBC, 0x6D, /* 0x98-0x9B */ + 0xC6, 0xE6, 0xBC, 0x6E, 0xBC, 0x6F, 0xBC, 0x70, /* 0x9C-0x9F */ + 0xC6, 0xE7, 0xBC, 0x71, 0xBC, 0x72, 0xBC, 0x73, /* 0xA0-0xA3 */ + 0xBC, 0x74, 0xBC, 0x75, 0xBC, 0x76, 0xBC, 0x77, /* 0xA4-0xA7 */ + 0xC6, 0xE8, 0xC6, 0xE9, 0xBC, 0x78, 0xC6, 0xEA, /* 0xA8-0xAB */ + 0xBC, 0x79, 0xC6, 0xEB, 0xBC, 0x7A, 0xBC, 0x81, /* 0xAC-0xAF */ + 0xBC, 0x82, 0xBC, 0x83, 0xBC, 0x84, 0xBC, 0x85, /* 0xB0-0xB3 */ + 0xC6, 0xEC, 0xBC, 0x86, 0xBC, 0x87, 0xBC, 0x88, /* 0xB4-0xB7 */ + 0xC6, 0xED, 0xBC, 0x89, 0xBC, 0x8A, 0xBC, 0x8B, /* 0xB8-0xBB */ + 0xC6, 0xEE, 0xBC, 0x8C, 0xBC, 0x8D, 0xBC, 0x8E, /* 0xBC-0xBF */ + 0xBC, 0x8F, 0xBC, 0x90, 0xBC, 0x91, 0xBC, 0x92, /* 0xC0-0xC3 */ + 0xC6, 0xEF, 0xC6, 0xF0, 0xBC, 0x93, 0xBC, 0x94, /* 0xC4-0xC7 */ + 0xC6, 0xF1, 0xC6, 0xF2, 0xBC, 0x95, 0xBC, 0x96, /* 0xC8-0xCB */ + 0xBC, 0x97, 0xBC, 0x98, 0xBC, 0x99, 0xBC, 0x9A, /* 0xCC-0xCF */ + 0xC6, 0xF3, 0xBC, 0x9B, 0xBC, 0x9C, 0xBC, 0x9D, /* 0xD0-0xD3 */ + 0xBC, 0x9E, 0xBC, 0x9F, 0xBC, 0xA0, 0xBD, 0x41, /* 0xD4-0xD7 */ + 0xC6, 0xF4, 0xBD, 0x42, 0xBD, 0x43, 0xBD, 0x44, /* 0xD8-0xDB */ + 0xBD, 0x45, 0xBD, 0x46, 0xBD, 0x47, 0xBD, 0x48, /* 0xDC-0xDF */ + 0xBD, 0x49, 0xC6, 0xF5, 0xBD, 0x4A, 0xC6, 0xF6, /* 0xE0-0xE3 */ + 0xBD, 0x4B, 0xBD, 0x4C, 0xBD, 0x4D, 0xBD, 0x4E, /* 0xE4-0xE7 */ + 0xBD, 0x4F, 0xBD, 0x50, 0xBD, 0x51, 0xBD, 0x52, /* 0xE8-0xEB */ + 0xC6, 0xF7, 0xC6, 0xF8, 0xBD, 0x53, 0xBD, 0x54, /* 0xEC-0xEF */ + 0xC6, 0xF9, 0xBD, 0x55, 0xBD, 0x56, 0xBD, 0x57, /* 0xF0-0xF3 */ + 0xC6, 0xFA, 0xBD, 0x58, 0xBD, 0x59, 0xBD, 0x5A, /* 0xF4-0xF7 */ + 0xBD, 0x61, 0xBD, 0x62, 0xBD, 0x63, 0xBD, 0x64, /* 0xF8-0xFB */ + 0xC6, 0xFB, 0xC6, 0xFC, 0xBD, 0x65, 0xC6, 0xFD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D4[512] = { + 0xBD, 0x66, 0xC6, 0xFE, 0xBD, 0x67, 0xBD, 0x68, /* 0x00-0x03 */ + 0xBD, 0x69, 0xBD, 0x6A, 0xBD, 0x6B, 0xBD, 0x6C, /* 0x04-0x07 */ + 0xC7, 0xA1, 0xBD, 0x6D, 0xBD, 0x6E, 0xBD, 0x6F, /* 0x08-0x0B */ + 0xBD, 0x70, 0xBD, 0x71, 0xBD, 0x72, 0xBD, 0x73, /* 0x0C-0x0F */ + 0xBD, 0x74, 0xBD, 0x75, 0xBD, 0x76, 0xBD, 0x77, /* 0x10-0x13 */ + 0xBD, 0x78, 0xBD, 0x79, 0xBD, 0x7A, 0xBD, 0x81, /* 0x14-0x17 */ + 0xBD, 0x82, 0xBD, 0x83, 0xBD, 0x84, 0xBD, 0x85, /* 0x18-0x1B */ + 0xBD, 0x86, 0xC7, 0xA2, 0xBD, 0x87, 0xBD, 0x88, /* 0x1C-0x1F */ + 0xBD, 0x89, 0xBD, 0x8A, 0xBD, 0x8B, 0xBD, 0x8C, /* 0x20-0x23 */ + 0xBD, 0x8D, 0xBD, 0x8E, 0xBD, 0x8F, 0xBD, 0x90, /* 0x24-0x27 */ + 0xBD, 0x91, 0xBD, 0x92, 0xBD, 0x93, 0xBD, 0x94, /* 0x28-0x2B */ + 0xBD, 0x95, 0xBD, 0x96, 0xBD, 0x97, 0xBD, 0x98, /* 0x2C-0x2F */ + 0xBD, 0x99, 0xBD, 0x9A, 0xBD, 0x9B, 0xBD, 0x9C, /* 0x30-0x33 */ + 0xBD, 0x9D, 0xBD, 0x9E, 0xBD, 0x9F, 0xBD, 0xA0, /* 0x34-0x37 */ + 0xBE, 0x41, 0xBE, 0x42, 0xBE, 0x43, 0xBE, 0x44, /* 0x38-0x3B */ + 0xBE, 0x45, 0xBE, 0x46, 0xBE, 0x47, 0xBE, 0x48, /* 0x3C-0x3F */ + 0xC7, 0xA3, 0xBE, 0x49, 0xBE, 0x4A, 0xBE, 0x4B, /* 0x40-0x43 */ + 0xC7, 0xA4, 0xBE, 0x4C, 0xBE, 0x4D, 0xBE, 0x4E, /* 0x44-0x47 */ + 0xBE, 0x4F, 0xBE, 0x50, 0xBE, 0x51, 0xBE, 0x52, /* 0x48-0x4B */ + 0xBE, 0x53, 0xBE, 0x54, 0xBE, 0x55, 0xBE, 0x56, /* 0x4C-0x4F */ + 0xBE, 0x57, 0xBE, 0x58, 0xBE, 0x59, 0xBE, 0x5A, /* 0x50-0x53 */ + 0xBE, 0x61, 0xBE, 0x62, 0xBE, 0x63, 0xBE, 0x64, /* 0x54-0x57 */ + 0xBE, 0x65, 0xBE, 0x66, 0xBE, 0x67, 0xBE, 0x68, /* 0x58-0x5B */ + 0xC7, 0xA5, 0xBE, 0x69, 0xBE, 0x6A, 0xBE, 0x6B, /* 0x5C-0x5F */ + 0xC7, 0xA6, 0xBE, 0x6C, 0xBE, 0x6D, 0xBE, 0x6E, /* 0x60-0x63 */ + 0xC7, 0xA7, 0xBE, 0x6F, 0xBE, 0x70, 0xBE, 0x71, /* 0x64-0x67 */ + 0xBE, 0x72, 0xBE, 0x73, 0xBE, 0x74, 0xBE, 0x75, /* 0x68-0x6B */ + 0xBE, 0x76, 0xC7, 0xA8, 0xBE, 0x77, 0xC7, 0xA9, /* 0x6C-0x6F */ + 0xBE, 0x78, 0xBE, 0x79, 0xBE, 0x7A, 0xBE, 0x81, /* 0x70-0x73 */ + 0xBE, 0x82, 0xBE, 0x83, 0xBE, 0x84, 0xBE, 0x85, /* 0x74-0x77 */ + 0xC7, 0xAA, 0xC7, 0xAB, 0xBE, 0x86, 0xBE, 0x87, /* 0x78-0x7B */ + 0xC7, 0xAC, 0xBE, 0x88, 0xBE, 0x89, 0xC7, 0xAD, /* 0x7C-0x7F */ + + 0xC7, 0xAE, 0xBE, 0x8A, 0xC7, 0xAF, 0xBE, 0x8B, /* 0x80-0x83 */ + 0xBE, 0x8C, 0xBE, 0x8D, 0xBE, 0x8E, 0xBE, 0x8F, /* 0x84-0x87 */ + 0xC7, 0xB0, 0xC7, 0xB1, 0xBE, 0x90, 0xC7, 0xB2, /* 0x88-0x8B */ + 0xBE, 0x91, 0xC7, 0xB3, 0xBE, 0x92, 0xBE, 0x93, /* 0x8C-0x8F */ + 0xBE, 0x94, 0xBE, 0x95, 0xBE, 0x96, 0xBE, 0x97, /* 0x90-0x93 */ + 0xC7, 0xB4, 0xBE, 0x98, 0xBE, 0x99, 0xBE, 0x9A, /* 0x94-0x97 */ + 0xBE, 0x9B, 0xBE, 0x9C, 0xBE, 0x9D, 0xBE, 0x9E, /* 0x98-0x9B */ + 0xBE, 0x9F, 0xBE, 0xA0, 0xBF, 0x41, 0xBF, 0x42, /* 0x9C-0x9F */ + 0xBF, 0x43, 0xBF, 0x44, 0xBF, 0x45, 0xBF, 0x46, /* 0xA0-0xA3 */ + 0xBF, 0x47, 0xBF, 0x48, 0xBF, 0x49, 0xBF, 0x4A, /* 0xA4-0xA7 */ + 0xBF, 0x4B, 0xC7, 0xB5, 0xBF, 0x4C, 0xBF, 0x4D, /* 0xA8-0xAB */ + 0xBF, 0x4E, 0xBF, 0x4F, 0xBF, 0x50, 0xBF, 0x51, /* 0xAC-0xAF */ + 0xBF, 0x52, 0xBF, 0x53, 0xBF, 0x54, 0xBF, 0x55, /* 0xB0-0xB3 */ + 0xBF, 0x56, 0xBF, 0x57, 0xBF, 0x58, 0xBF, 0x59, /* 0xB4-0xB7 */ + 0xBF, 0x5A, 0xBF, 0x61, 0xBF, 0x62, 0xBF, 0x63, /* 0xB8-0xBB */ + 0xBF, 0x64, 0xBF, 0x65, 0xBF, 0x66, 0xBF, 0x67, /* 0xBC-0xBF */ + 0xBF, 0x68, 0xBF, 0x69, 0xBF, 0x6A, 0xBF, 0x6B, /* 0xC0-0xC3 */ + 0xBF, 0x6C, 0xBF, 0x6D, 0xBF, 0x6E, 0xBF, 0x6F, /* 0xC4-0xC7 */ + 0xBF, 0x70, 0xBF, 0x71, 0xBF, 0x72, 0xBF, 0x73, /* 0xC8-0xCB */ + 0xC7, 0xB6, 0xBF, 0x74, 0xBF, 0x75, 0xBF, 0x76, /* 0xCC-0xCF */ + 0xC7, 0xB7, 0xBF, 0x77, 0xBF, 0x78, 0xBF, 0x79, /* 0xD0-0xD3 */ + 0xC7, 0xB8, 0xBF, 0x7A, 0xBF, 0x81, 0xBF, 0x82, /* 0xD4-0xD7 */ + 0xBF, 0x83, 0xBF, 0x84, 0xBF, 0x85, 0xBF, 0x86, /* 0xD8-0xDB */ + 0xC7, 0xB9, 0xBF, 0x87, 0xBF, 0x88, 0xC7, 0xBA, /* 0xDC-0xDF */ + 0xBF, 0x89, 0xBF, 0x8A, 0xBF, 0x8B, 0xBF, 0x8C, /* 0xE0-0xE3 */ + 0xBF, 0x8D, 0xBF, 0x8E, 0xBF, 0x8F, 0xBF, 0x90, /* 0xE4-0xE7 */ + 0xC7, 0xBB, 0xBF, 0x91, 0xBF, 0x92, 0xBF, 0x93, /* 0xE8-0xEB */ + 0xC7, 0xBC, 0xBF, 0x94, 0xBF, 0x95, 0xBF, 0x96, /* 0xEC-0xEF */ + 0xC7, 0xBD, 0xBF, 0x97, 0xBF, 0x98, 0xBF, 0x99, /* 0xF0-0xF3 */ + 0xBF, 0x9A, 0xBF, 0x9B, 0xBF, 0x9C, 0xBF, 0x9D, /* 0xF4-0xF7 */ + 0xC7, 0xBE, 0xBF, 0x9E, 0xBF, 0x9F, 0xC7, 0xBF, /* 0xF8-0xFB */ + 0xBF, 0xA0, 0xC7, 0xC0, 0xC0, 0x41, 0xC0, 0x42, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D5[512] = { + 0xC0, 0x43, 0xC0, 0x44, 0xC0, 0x45, 0xC0, 0x46, /* 0x00-0x03 */ + 0xC7, 0xC1, 0xC0, 0x47, 0xC0, 0x48, 0xC0, 0x49, /* 0x04-0x07 */ + 0xC7, 0xC2, 0xC0, 0x4A, 0xC0, 0x4B, 0xC0, 0x4C, /* 0x08-0x0B */ + 0xC7, 0xC3, 0xC0, 0x4D, 0xC0, 0x4E, 0xC0, 0x4F, /* 0x0C-0x0F */ + 0xC0, 0x50, 0xC0, 0x51, 0xC0, 0x52, 0xC0, 0x53, /* 0x10-0x13 */ + 0xC7, 0xC4, 0xC7, 0xC5, 0xC0, 0x54, 0xC7, 0xC6, /* 0x14-0x17 */ + 0xC0, 0x55, 0xC0, 0x56, 0xC0, 0x57, 0xC0, 0x58, /* 0x18-0x1B */ + 0xC0, 0x59, 0xC0, 0x5A, 0xC0, 0x61, 0xC0, 0x62, /* 0x1C-0x1F */ + 0xC0, 0x63, 0xC0, 0x64, 0xC0, 0x65, 0xC0, 0x66, /* 0x20-0x23 */ + 0xC0, 0x67, 0xC0, 0x68, 0xC0, 0x69, 0xC0, 0x6A, /* 0x24-0x27 */ + 0xC0, 0x6B, 0xC0, 0x6C, 0xC0, 0x6D, 0xC0, 0x6E, /* 0x28-0x2B */ + 0xC0, 0x6F, 0xC0, 0x70, 0xC0, 0x71, 0xC0, 0x72, /* 0x2C-0x2F */ + 0xC0, 0x73, 0xC0, 0x74, 0xC0, 0x75, 0xC0, 0x76, /* 0x30-0x33 */ + 0xC0, 0x77, 0xC0, 0x78, 0xC0, 0x79, 0xC0, 0x7A, /* 0x34-0x37 */ + 0xC0, 0x81, 0xC0, 0x82, 0xC0, 0x83, 0xC0, 0x84, /* 0x38-0x3B */ + 0xC7, 0xC7, 0xC7, 0xC8, 0xC0, 0x85, 0xC0, 0x86, /* 0x3C-0x3F */ + 0xC7, 0xC9, 0xC0, 0x87, 0xC0, 0x88, 0xC0, 0x89, /* 0x40-0x43 */ + 0xC7, 0xCA, 0xC0, 0x8A, 0xC0, 0x8B, 0xC0, 0x8C, /* 0x44-0x47 */ + 0xC0, 0x8D, 0xC0, 0x8E, 0xC0, 0x8F, 0xC0, 0x90, /* 0x48-0x4B */ + 0xC7, 0xCB, 0xC7, 0xCC, 0xC0, 0x91, 0xC7, 0xCD, /* 0x4C-0x4F */ + 0xC0, 0x92, 0xC7, 0xCE, 0xC0, 0x93, 0xC0, 0x94, /* 0x50-0x53 */ + 0xC0, 0x95, 0xC0, 0x96, 0xC0, 0x97, 0xC0, 0x98, /* 0x54-0x57 */ + 0xC7, 0xCF, 0xC7, 0xD0, 0xC0, 0x99, 0xC0, 0x9A, /* 0x58-0x5B */ + 0xC7, 0xD1, 0xC0, 0x9B, 0xC0, 0x9C, 0xC0, 0x9D, /* 0x5C-0x5F */ + 0xC7, 0xD2, 0xC0, 0x9E, 0xC0, 0x9F, 0xC0, 0xA0, /* 0x60-0x63 */ + 0xC1, 0x41, 0xC7, 0xD3, 0xC1, 0x42, 0xC1, 0x43, /* 0x64-0x67 */ + 0xC7, 0xD4, 0xC7, 0xD5, 0xC1, 0x44, 0xC7, 0xD6, /* 0x68-0x6B */ + 0xC1, 0x45, 0xC7, 0xD7, 0xC1, 0x46, 0xC1, 0x47, /* 0x6C-0x6F */ + 0xC1, 0x48, 0xC1, 0x49, 0xC1, 0x4A, 0xC1, 0x4B, /* 0x70-0x73 */ + 0xC7, 0xD8, 0xC7, 0xD9, 0xC1, 0x4C, 0xC1, 0x4D, /* 0x74-0x77 */ + 0xC7, 0xDA, 0xC1, 0x4E, 0xC1, 0x4F, 0xC1, 0x50, /* 0x78-0x7B */ + 0xC7, 0xDB, 0xC1, 0x51, 0xC1, 0x52, 0xC1, 0x53, /* 0x7C-0x7F */ + + 0xC1, 0x54, 0xC1, 0x55, 0xC1, 0x56, 0xC1, 0x57, /* 0x80-0x83 */ + 0xC7, 0xDC, 0xC7, 0xDD, 0xC1, 0x58, 0xC7, 0xDE, /* 0x84-0x87 */ + 0xC7, 0xDF, 0xC7, 0xE0, 0xC1, 0x59, 0xC1, 0x5A, /* 0x88-0x8B */ + 0xC1, 0x61, 0xC1, 0x62, 0xC1, 0x63, 0xC1, 0x64, /* 0x8C-0x8F */ + 0xC7, 0xE1, 0xC1, 0x65, 0xC1, 0x66, 0xC1, 0x67, /* 0x90-0x93 */ + 0xC1, 0x68, 0xC1, 0x69, 0xC1, 0x6A, 0xC1, 0x6B, /* 0x94-0x97 */ + 0xC1, 0x6C, 0xC1, 0x6D, 0xC1, 0x6E, 0xC1, 0x6F, /* 0x98-0x9B */ + 0xC1, 0x70, 0xC1, 0x71, 0xC1, 0x72, 0xC1, 0x73, /* 0x9C-0x9F */ + 0xC1, 0x74, 0xC1, 0x75, 0xC1, 0x76, 0xC1, 0x77, /* 0xA0-0xA3 */ + 0xC1, 0x78, 0xC7, 0xE2, 0xC1, 0x79, 0xC1, 0x7A, /* 0xA4-0xA7 */ + 0xC1, 0x81, 0xC1, 0x82, 0xC1, 0x83, 0xC1, 0x84, /* 0xA8-0xAB */ + 0xC1, 0x85, 0xC1, 0x86, 0xC1, 0x87, 0xC1, 0x88, /* 0xAC-0xAF */ + 0xC1, 0x89, 0xC1, 0x8A, 0xC1, 0x8B, 0xC1, 0x8C, /* 0xB0-0xB3 */ + 0xC1, 0x8D, 0xC1, 0x8E, 0xC1, 0x8F, 0xC1, 0x90, /* 0xB4-0xB7 */ + 0xC1, 0x91, 0xC1, 0x92, 0xC1, 0x93, 0xC1, 0x94, /* 0xB8-0xBB */ + 0xC1, 0x95, 0xC1, 0x96, 0xC1, 0x97, 0xC1, 0x98, /* 0xBC-0xBF */ + 0xC1, 0x99, 0xC1, 0x9A, 0xC1, 0x9B, 0xC1, 0x9C, /* 0xC0-0xC3 */ + 0xC1, 0x9D, 0xC1, 0x9E, 0xC1, 0x9F, 0xC1, 0xA0, /* 0xC4-0xC7 */ + 0xC7, 0xE3, 0xC7, 0xE4, 0xC2, 0x41, 0xC2, 0x42, /* 0xC8-0xCB */ + 0xC7, 0xE5, 0xC2, 0x43, 0xC2, 0x44, 0xC2, 0x45, /* 0xCC-0xCF */ + 0xC7, 0xE6, 0xC2, 0x46, 0xC7, 0xE7, 0xC2, 0x47, /* 0xD0-0xD3 */ + 0xC2, 0x48, 0xC2, 0x49, 0xC2, 0x4A, 0xC2, 0x4B, /* 0xD4-0xD7 */ + 0xC7, 0xE8, 0xC7, 0xE9, 0xC2, 0x4C, 0xC7, 0xEA, /* 0xD8-0xDB */ + 0xC2, 0x4D, 0xC7, 0xEB, 0xC2, 0x4E, 0xC2, 0x4F, /* 0xDC-0xDF */ + 0xC2, 0x50, 0xC2, 0x51, 0xC2, 0x52, 0xC2, 0x53, /* 0xE0-0xE3 */ + 0xC7, 0xEC, 0xC7, 0xED, 0xC2, 0x54, 0xC2, 0x55, /* 0xE4-0xE7 */ + 0xC7, 0xEE, 0xC2, 0x56, 0xC2, 0x57, 0xC2, 0x58, /* 0xE8-0xEB */ + 0xC7, 0xEF, 0xC2, 0x59, 0xC2, 0x5A, 0xC2, 0x61, /* 0xEC-0xEF */ + 0xC2, 0x62, 0xC2, 0x63, 0xC2, 0x64, 0xC2, 0x65, /* 0xF0-0xF3 */ + 0xC7, 0xF0, 0xC7, 0xF1, 0xC2, 0x66, 0xC7, 0xF2, /* 0xF4-0xF7 */ + 0xC2, 0x67, 0xC7, 0xF3, 0xC2, 0x68, 0xC2, 0x69, /* 0xF8-0xFB */ + 0xC2, 0x6A, 0xC2, 0x6B, 0xC2, 0x6C, 0xC2, 0x6D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D6[512] = { + 0xC7, 0xF4, 0xC7, 0xF5, 0xC2, 0x6E, 0xC2, 0x6F, /* 0x00-0x03 */ + 0xC7, 0xF6, 0xC2, 0x70, 0xC2, 0x71, 0xC2, 0x72, /* 0x04-0x07 */ + 0xC7, 0xF7, 0xC2, 0x73, 0xC2, 0x74, 0xC2, 0x75, /* 0x08-0x0B */ + 0xC2, 0x76, 0xC2, 0x77, 0xC2, 0x78, 0xC2, 0x79, /* 0x0C-0x0F */ + 0xC7, 0xF8, 0xC7, 0xF9, 0xC2, 0x7A, 0xC7, 0xFA, /* 0x10-0x13 */ + 0xC7, 0xFB, 0xC7, 0xFC, 0xC2, 0x81, 0xC2, 0x82, /* 0x14-0x17 */ + 0xC2, 0x83, 0xC2, 0x84, 0xC2, 0x85, 0xC2, 0x86, /* 0x18-0x1B */ + 0xC7, 0xFD, 0xC2, 0x87, 0xC2, 0x88, 0xC2, 0x89, /* 0x1C-0x1F */ + 0xC7, 0xFE, 0xC2, 0x8A, 0xC2, 0x8B, 0xC2, 0x8C, /* 0x20-0x23 */ + 0xC8, 0xA1, 0xC2, 0x8D, 0xC2, 0x8E, 0xC2, 0x8F, /* 0x24-0x27 */ + 0xC2, 0x90, 0xC2, 0x91, 0xC2, 0x92, 0xC2, 0x93, /* 0x28-0x2B */ + 0xC2, 0x94, 0xC8, 0xA2, 0xC2, 0x95, 0xC2, 0x96, /* 0x2C-0x2F */ + 0xC2, 0x97, 0xC2, 0x98, 0xC2, 0x99, 0xC2, 0x9A, /* 0x30-0x33 */ + 0xC2, 0x9B, 0xC2, 0x9C, 0xC2, 0x9D, 0xC2, 0x9E, /* 0x34-0x37 */ + 0xC8, 0xA3, 0xC8, 0xA4, 0xC2, 0x9F, 0xC2, 0xA0, /* 0x38-0x3B */ + 0xC8, 0xA5, 0xC3, 0x41, 0xC3, 0x42, 0xC3, 0x43, /* 0x3C-0x3F */ + 0xC8, 0xA6, 0xC3, 0x44, 0xC3, 0x45, 0xC3, 0x46, /* 0x40-0x43 */ + 0xC3, 0x47, 0xC8, 0xA7, 0xC3, 0x48, 0xC3, 0x49, /* 0x44-0x47 */ + 0xC8, 0xA8, 0xC8, 0xA9, 0xC3, 0x4A, 0xC8, 0xAA, /* 0x48-0x4B */ + 0xC3, 0x4B, 0xC8, 0xAB, 0xC3, 0x4C, 0xC3, 0x4D, /* 0x4C-0x4F */ + 0xC3, 0x4E, 0xC8, 0xAC, 0xC3, 0x4F, 0xC3, 0x50, /* 0x50-0x53 */ + 0xC8, 0xAD, 0xC8, 0xAE, 0xC3, 0x51, 0xC3, 0x52, /* 0x54-0x57 */ + 0xC8, 0xAF, 0xC3, 0x53, 0xC3, 0x54, 0xC3, 0x55, /* 0x58-0x5B */ + 0xC8, 0xB0, 0xC3, 0x56, 0xC3, 0x57, 0xC3, 0x58, /* 0x5C-0x5F */ + 0xC3, 0x59, 0xC3, 0x5A, 0xC3, 0x61, 0xC3, 0x62, /* 0x60-0x63 */ + 0xC3, 0x63, 0xC3, 0x64, 0xC3, 0x65, 0xC8, 0xB1, /* 0x64-0x67 */ + 0xC3, 0x66, 0xC8, 0xB2, 0xC3, 0x67, 0xC3, 0x68, /* 0x68-0x6B */ + 0xC3, 0x69, 0xC3, 0x6A, 0xC3, 0x6B, 0xC3, 0x6C, /* 0x6C-0x6F */ + 0xC8, 0xB3, 0xC8, 0xB4, 0xC3, 0x6D, 0xC3, 0x6E, /* 0x70-0x73 */ + 0xC8, 0xB5, 0xC3, 0x6F, 0xC3, 0x70, 0xC3, 0x71, /* 0x74-0x77 */ + 0xC3, 0x72, 0xC3, 0x73, 0xC3, 0x74, 0xC3, 0x75, /* 0x78-0x7B */ + 0xC3, 0x76, 0xC3, 0x77, 0xC3, 0x78, 0xC3, 0x79, /* 0x7C-0x7F */ + + 0xC3, 0x7A, 0xC3, 0x81, 0xC3, 0x82, 0xC8, 0xB6, /* 0x80-0x83 */ + 0xC3, 0x83, 0xC8, 0xB7, 0xC3, 0x84, 0xC3, 0x85, /* 0x84-0x87 */ + 0xC3, 0x86, 0xC3, 0x87, 0xC3, 0x88, 0xC3, 0x89, /* 0x88-0x8B */ + 0xC8, 0xB8, 0xC8, 0xB9, 0xC3, 0x8A, 0xC3, 0x8B, /* 0x8C-0x8F */ + 0xC8, 0xBA, 0xC3, 0x8C, 0xC3, 0x8D, 0xC3, 0x8E, /* 0x90-0x93 */ + 0xC8, 0xBB, 0xC3, 0x8F, 0xC3, 0x90, 0xC3, 0x91, /* 0x94-0x97 */ + 0xC3, 0x92, 0xC3, 0x93, 0xC3, 0x94, 0xC3, 0x95, /* 0x98-0x9B */ + 0xC3, 0x96, 0xC8, 0xBC, 0xC3, 0x97, 0xC8, 0xBD, /* 0x9C-0x9F */ + 0xC3, 0x98, 0xC8, 0xBE, 0xC3, 0x99, 0xC3, 0x9A, /* 0xA0-0xA3 */ + 0xC3, 0x9B, 0xC3, 0x9C, 0xC3, 0x9D, 0xC3, 0x9E, /* 0xA4-0xA7 */ + 0xC8, 0xBF, 0xC3, 0x9F, 0xC3, 0xA0, 0xC4, 0x41, /* 0xA8-0xAB */ + 0xC8, 0xC0, 0xC4, 0x42, 0xC4, 0x43, 0xC4, 0x44, /* 0xAC-0xAF */ + 0xC8, 0xC1, 0xC4, 0x45, 0xC4, 0x46, 0xC4, 0x47, /* 0xB0-0xB3 */ + 0xC4, 0x48, 0xC4, 0x49, 0xC4, 0x4A, 0xC4, 0x4B, /* 0xB4-0xB7 */ + 0xC4, 0x4C, 0xC8, 0xC2, 0xC4, 0x4D, 0xC8, 0xC3, /* 0xB8-0xBB */ + 0xC4, 0x4E, 0xC4, 0x4F, 0xC4, 0x50, 0xC4, 0x51, /* 0xBC-0xBF */ + 0xC4, 0x52, 0xC4, 0x53, 0xC4, 0x54, 0xC4, 0x55, /* 0xC0-0xC3 */ + 0xC8, 0xC4, 0xC8, 0xC5, 0xC4, 0x56, 0xC4, 0x57, /* 0xC4-0xC7 */ + 0xC8, 0xC6, 0xC4, 0x58, 0xC4, 0x59, 0xC4, 0x5A, /* 0xC8-0xCB */ + 0xC8, 0xC7, 0xC4, 0x61, 0xC4, 0x62, 0xC4, 0x63, /* 0xCC-0xCF */ + 0xC4, 0x64, 0xC8, 0xC8, 0xC4, 0x65, 0xC4, 0x66, /* 0xD0-0xD3 */ + 0xC8, 0xC9, 0xC4, 0x67, 0xC4, 0x68, 0xC8, 0xCA, /* 0xD4-0xD7 */ + 0xC4, 0x69, 0xC8, 0xCB, 0xC4, 0x6A, 0xC4, 0x6B, /* 0xD8-0xDB */ + 0xC4, 0x6C, 0xC4, 0x6D, 0xC4, 0x6E, 0xC4, 0x6F, /* 0xDC-0xDF */ + 0xC8, 0xCC, 0xC4, 0x70, 0xC4, 0x71, 0xC4, 0x72, /* 0xE0-0xE3 */ + 0xC8, 0xCD, 0xC4, 0x73, 0xC4, 0x74, 0xC4, 0x75, /* 0xE4-0xE7 */ + 0xC8, 0xCE, 0xC4, 0x76, 0xC4, 0x77, 0xC4, 0x78, /* 0xE8-0xEB */ + 0xC4, 0x79, 0xC4, 0x7A, 0xC4, 0x81, 0xC4, 0x82, /* 0xEC-0xEF */ + 0xC8, 0xCF, 0xC4, 0x83, 0xC4, 0x84, 0xC4, 0x85, /* 0xF0-0xF3 */ + 0xC4, 0x86, 0xC8, 0xD0, 0xC4, 0x87, 0xC4, 0x88, /* 0xF4-0xF7 */ + 0xC4, 0x89, 0xC4, 0x8A, 0xC4, 0x8B, 0xC4, 0x8C, /* 0xF8-0xFB */ + 0xC8, 0xD1, 0xC8, 0xD2, 0xC4, 0x8D, 0xC4, 0x8E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D7[512] = { + 0xC8, 0xD3, 0xC4, 0x8F, 0xC4, 0x90, 0xC4, 0x91, /* 0x00-0x03 */ + 0xC8, 0xD4, 0xC4, 0x92, 0xC4, 0x93, 0xC4, 0x94, /* 0x04-0x07 */ + 0xC4, 0x95, 0xC4, 0x96, 0xC4, 0x97, 0xC4, 0x98, /* 0x08-0x0B */ + 0xC4, 0x99, 0xC4, 0x9A, 0xC4, 0x9B, 0xC4, 0x9C, /* 0x0C-0x0F */ + 0xC4, 0x9D, 0xC8, 0xD5, 0xC4, 0x9E, 0xC4, 0x9F, /* 0x10-0x13 */ + 0xC4, 0xA0, 0xC5, 0x41, 0xC5, 0x42, 0xC5, 0x43, /* 0x14-0x17 */ + 0xC8, 0xD6, 0xC8, 0xD7, 0xC5, 0x44, 0xC5, 0x45, /* 0x18-0x1B */ + 0xC8, 0xD8, 0xC5, 0x46, 0xC5, 0x47, 0xC5, 0x48, /* 0x1C-0x1F */ + 0xC8, 0xD9, 0xC5, 0x49, 0xC5, 0x4A, 0xC5, 0x4B, /* 0x20-0x23 */ + 0xC5, 0x4C, 0xC5, 0x4D, 0xC5, 0x4E, 0xC5, 0x4F, /* 0x24-0x27 */ + 0xC8, 0xDA, 0xC8, 0xDB, 0xC5, 0x50, 0xC8, 0xDC, /* 0x28-0x2B */ + 0xC5, 0x51, 0xC8, 0xDD, 0xC5, 0x52, 0xC5, 0x53, /* 0x2C-0x2F */ + 0xC5, 0x54, 0xC5, 0x55, 0xC5, 0x56, 0xC5, 0x57, /* 0x30-0x33 */ + 0xC8, 0xDE, 0xC8, 0xDF, 0xC5, 0x58, 0xC5, 0x59, /* 0x34-0x37 */ + 0xC8, 0xE0, 0xC5, 0x5A, 0xC5, 0x61, 0xC5, 0x62, /* 0x38-0x3B */ + 0xC8, 0xE1, 0xC5, 0x63, 0xC5, 0x64, 0xC5, 0x65, /* 0x3C-0x3F */ + 0xC5, 0x66, 0xC5, 0x67, 0xC5, 0x68, 0xC5, 0x69, /* 0x40-0x43 */ + 0xC8, 0xE2, 0xC5, 0x6A, 0xC5, 0x6B, 0xC8, 0xE3, /* 0x44-0x47 */ + 0xC5, 0x6C, 0xC8, 0xE4, 0xC5, 0x6D, 0xC5, 0x6E, /* 0x48-0x4B */ + 0xC5, 0x6F, 0xC5, 0x70, 0xC5, 0x71, 0xC5, 0x72, /* 0x4C-0x4F */ + 0xC8, 0xE5, 0xC8, 0xE6, 0xC5, 0x73, 0xC5, 0x74, /* 0x50-0x53 */ + 0xC8, 0xE7, 0xC5, 0x75, 0xC8, 0xE8, 0xC8, 0xE9, /* 0x54-0x57 */ + 0xC8, 0xEA, 0xC8, 0xEB, 0xC5, 0x76, 0xC5, 0x77, /* 0x58-0x5B */ + 0xC5, 0x78, 0xC5, 0x79, 0xC5, 0x7A, 0xC5, 0x81, /* 0x5C-0x5F */ + 0xC8, 0xEC, 0xC8, 0xED, 0xC5, 0x82, 0xC8, 0xEE, /* 0x60-0x63 */ + 0xC5, 0x83, 0xC8, 0xEF, 0xC5, 0x84, 0xC5, 0x85, /* 0x64-0x67 */ + 0xC5, 0x86, 0xC8, 0xF0, 0xC5, 0x87, 0xC5, 0x88, /* 0x68-0x6B */ + 0xC8, 0xF1, 0xC5, 0x89, 0xC5, 0x8A, 0xC5, 0x8B, /* 0x6C-0x6F */ + 0xC8, 0xF2, 0xC5, 0x8C, 0xC5, 0x8D, 0xC5, 0x8E, /* 0x70-0x73 */ + 0xC8, 0xF3, 0xC5, 0x8F, 0xC5, 0x90, 0xC5, 0x91, /* 0x74-0x77 */ + 0xC5, 0x92, 0xC5, 0x93, 0xC5, 0x94, 0xC5, 0x95, /* 0x78-0x7B */ + 0xC8, 0xF4, 0xC8, 0xF5, 0xC5, 0x96, 0xC5, 0x97, /* 0x7C-0x7F */ + + 0xC5, 0x98, 0xC8, 0xF6, 0xC5, 0x99, 0xC5, 0x9A, /* 0x80-0x83 */ + 0xC5, 0x9B, 0xC5, 0x9C, 0xC5, 0x9D, 0xC5, 0x9E, /* 0x84-0x87 */ + 0xC8, 0xF7, 0xC8, 0xF8, 0xC5, 0x9F, 0xC5, 0xA0, /* 0x88-0x8B */ + 0xC8, 0xF9, 0xC6, 0x41, 0xC6, 0x42, 0xC6, 0x43, /* 0x8C-0x8F */ + 0xC8, 0xFA, 0xC6, 0x44, 0xC6, 0x45, 0xC6, 0x46, /* 0x90-0x93 */ + 0xC6, 0x47, 0xC6, 0x48, 0xC6, 0x49, 0xC6, 0x4A, /* 0x94-0x97 */ + 0xC8, 0xFB, 0xC8, 0xFC, 0xC6, 0x4B, 0xC8, 0xFD, /* 0x98-0x9B */ + 0xC6, 0x4C, 0xC8, 0xFE, 0xC6, 0x4D, 0xC6, 0x4E, /* 0x9C-0x9F */ + 0xC6, 0x4F, 0xC6, 0x50, 0xC6, 0x51, 0xC6, 0x52, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_F9[512] = { + 0xCB, 0xD0, 0xCB, 0xD6, 0xCB, 0xE7, 0xCD, 0xCF, /* 0x00-0x03 */ + 0xCD, 0xE8, 0xCE, 0xAD, 0xCF, 0xFB, 0xD0, 0xA2, /* 0x04-0x07 */ + 0xD0, 0xB8, 0xD0, 0xD0, 0xD0, 0xDD, 0xD1, 0xD4, /* 0x08-0x0B */ + 0xD1, 0xD5, 0xD1, 0xD8, 0xD1, 0xDB, 0xD1, 0xDC, /* 0x0C-0x0F */ + 0xD1, 0xDD, 0xD1, 0xDE, 0xD1, 0xDF, 0xD1, 0xE0, /* 0x10-0x13 */ + 0xD1, 0xE2, 0xD1, 0xE3, 0xD1, 0xE4, 0xD1, 0xE5, /* 0x14-0x17 */ + 0xD1, 0xE6, 0xD1, 0xE8, 0xD1, 0xE9, 0xD1, 0xEA, /* 0x18-0x1B */ + 0xD1, 0xEB, 0xD1, 0xED, 0xD1, 0xEF, 0xD1, 0xF0, /* 0x1C-0x1F */ + 0xD1, 0xF2, 0xD1, 0xF6, 0xD1, 0xFA, 0xD1, 0xFC, /* 0x20-0x23 */ + 0xD1, 0xFD, 0xD1, 0xFE, 0xD2, 0xA2, 0xD2, 0xA3, /* 0x24-0x27 */ + 0xD2, 0xA7, 0xD2, 0xA8, 0xD2, 0xA9, 0xD2, 0xAA, /* 0x28-0x2B */ + 0xD2, 0xAB, 0xD2, 0xAD, 0xD2, 0xB2, 0xD2, 0xBE, /* 0x2C-0x2F */ + 0xD2, 0xC2, 0xD2, 0xC3, 0xD2, 0xC4, 0xD2, 0xC6, /* 0x30-0x33 */ + 0xD2, 0xC7, 0xD2, 0xC8, 0xD2, 0xC9, 0xD2, 0xCA, /* 0x34-0x37 */ + 0xD2, 0xCB, 0xD2, 0xCD, 0xD2, 0xCE, 0xD2, 0xCF, /* 0x38-0x3B */ + 0xD2, 0xD0, 0xD2, 0xD1, 0xD2, 0xD2, 0xD2, 0xD3, /* 0x3C-0x3F */ + 0xD2, 0xD4, 0xD2, 0xD5, 0xD2, 0xD6, 0xD2, 0xD7, /* 0x40-0x43 */ + 0xD2, 0xD9, 0xD2, 0xDA, 0xD2, 0xDE, 0xD2, 0xDF, /* 0x44-0x47 */ + 0xD2, 0xE1, 0xD2, 0xE2, 0xD2, 0xE4, 0xD2, 0xE5, /* 0x48-0x4B */ + 0xD2, 0xE6, 0xD2, 0xE7, 0xD2, 0xE8, 0xD2, 0xE9, /* 0x4C-0x4F */ + 0xD2, 0xEA, 0xD2, 0xEB, 0xD2, 0xF0, 0xD2, 0xF1, /* 0x50-0x53 */ + 0xD2, 0xF2, 0xD2, 0xF3, 0xD2, 0xF4, 0xD2, 0xF5, /* 0x54-0x57 */ + 0xD2, 0xF7, 0xD2, 0xF8, 0xD4, 0xE6, 0xD4, 0xFC, /* 0x58-0x5B */ + 0xD5, 0xA5, 0xD5, 0xAB, 0xD5, 0xAE, 0xD6, 0xB8, /* 0x5C-0x5F */ + 0xD6, 0xCD, 0xD7, 0xCB, 0xD7, 0xE4, 0xDB, 0xC5, /* 0x60-0x63 */ + 0xDB, 0xE4, 0xDC, 0xA5, 0xDD, 0xA5, 0xDD, 0xD5, /* 0x64-0x67 */ + 0xDD, 0xF4, 0xDE, 0xFC, 0xDE, 0xFE, 0xDF, 0xB3, /* 0x68-0x6B */ + 0xDF, 0xE1, 0xDF, 0xE8, 0xE0, 0xF1, 0xE1, 0xAD, /* 0x6C-0x6F */ + 0xE1, 0xED, 0xE3, 0xF5, 0xE4, 0xA1, 0xE4, 0xA9, /* 0x70-0x73 */ + 0xE5, 0xAE, 0xE5, 0xB1, 0xE5, 0xB2, 0xE5, 0xB9, /* 0x74-0x77 */ + 0xE5, 0xBB, 0xE5, 0xBC, 0xE5, 0xC4, 0xE5, 0xCE, /* 0x78-0x7B */ + 0xE5, 0xD0, 0xE5, 0xD2, 0xE5, 0xD6, 0xE5, 0xFA, /* 0x7C-0x7F */ + + 0xE5, 0xFB, 0xE5, 0xFC, 0xE5, 0xFE, 0xE6, 0xA1, /* 0x80-0x83 */ + 0xE6, 0xA4, 0xE6, 0xA7, 0xE6, 0xAD, 0xE6, 0xAF, /* 0x84-0x87 */ + 0xE6, 0xB0, 0xE6, 0xB1, 0xE6, 0xB3, 0xE6, 0xB7, /* 0x88-0x8B */ + 0xE6, 0xB8, 0xE6, 0xBC, 0xE6, 0xC4, 0xE6, 0xC6, /* 0x8C-0x8F */ + 0xE6, 0xC7, 0xE6, 0xCA, 0xE6, 0xD2, 0xE6, 0xD6, /* 0x90-0x93 */ + 0xE6, 0xD9, 0xE6, 0xDC, 0xE6, 0xDF, 0xE6, 0xE1, /* 0x94-0x97 */ + 0xE6, 0xE4, 0xE6, 0xE5, 0xE6, 0xE6, 0xE6, 0xE8, /* 0x98-0x9B */ + 0xE6, 0xEA, 0xE6, 0xEB, 0xE6, 0xEC, 0xE6, 0xEF, /* 0x9C-0x9F */ + 0xE6, 0xF1, 0xE6, 0xF2, 0xE6, 0xF5, 0xE6, 0xF6, /* 0xA0-0xA3 */ + 0xE6, 0xF7, 0xE6, 0xF9, 0xE7, 0xA1, 0xE7, 0xA6, /* 0xA4-0xA7 */ + 0xE7, 0xA9, 0xE7, 0xAA, 0xE7, 0xAC, 0xE7, 0xAD, /* 0xA8-0xAB */ + 0xE7, 0xB0, 0xE7, 0xBF, 0xE7, 0xC1, 0xE7, 0xC6, /* 0xAC-0xAF */ + 0xE7, 0xC7, 0xE7, 0xCB, 0xE7, 0xCD, 0xE7, 0xCF, /* 0xB0-0xB3 */ + 0xE7, 0xD0, 0xE7, 0xD3, 0xE7, 0xDF, 0xE7, 0xE4, /* 0xB4-0xB7 */ + 0xE7, 0xE6, 0xE7, 0xF7, 0xE8, 0xE7, 0xE8, 0xE8, /* 0xB8-0xBB */ + 0xE8, 0xF0, 0xE8, 0xF1, 0xE8, 0xF7, 0xE8, 0xF9, /* 0xBC-0xBF */ + 0xE8, 0xFB, 0xE8, 0xFE, 0xE9, 0xA7, 0xE9, 0xAC, /* 0xC0-0xC3 */ + 0xE9, 0xCC, 0xE9, 0xF7, 0xEA, 0xC1, 0xEA, 0xE5, /* 0xC4-0xC7 */ + 0xEA, 0xF4, 0xEA, 0xF7, 0xEA, 0xFC, 0xEA, 0xFE, /* 0xC8-0xCB */ + 0xEB, 0xA4, 0xEB, 0xA7, 0xEB, 0xA9, 0xEB, 0xAA, /* 0xCC-0xCF */ + 0xEB, 0xBA, 0xEB, 0xBB, 0xEB, 0xBD, 0xEB, 0xC1, /* 0xD0-0xD3 */ + 0xEB, 0xC2, 0xEB, 0xC6, 0xEB, 0xC7, 0xEB, 0xCC, /* 0xD4-0xD7 */ + 0xEB, 0xCF, 0xEB, 0xD0, 0xEB, 0xD1, 0xEB, 0xD2, /* 0xD8-0xDB */ + 0xEB, 0xD8, 0xEC, 0xA6, 0xEC, 0xA7, 0xEC, 0xAA, /* 0xDC-0xDF */ + 0xEC, 0xAF, 0xEC, 0xB0, 0xEC, 0xB1, 0xEC, 0xB2, /* 0xE0-0xE3 */ + 0xEC, 0xB5, 0xEC, 0xB8, 0xEC, 0xBA, 0xEC, 0xC0, /* 0xE4-0xE7 */ + 0xEC, 0xC1, 0xEC, 0xC5, 0xEC, 0xC6, 0xEC, 0xC9, /* 0xE8-0xEB */ + 0xEC, 0xCA, 0xEC, 0xD5, 0xEC, 0xDD, 0xEC, 0xDE, /* 0xEC-0xEF */ + 0xEC, 0xE1, 0xEC, 0xE4, 0xEC, 0xE7, 0xEC, 0xE8, /* 0xF0-0xF3 */ + 0xEC, 0xF7, 0xEC, 0xF8, 0xEC, 0xFA, 0xED, 0xA1, /* 0xF4-0xF7 */ + 0xED, 0xA2, 0xED, 0xA3, 0xED, 0xEE, 0xEE, 0xDB, /* 0xF8-0xFB */ + 0xF2, 0xBD, 0xF2, 0xFA, 0xF3, 0xB1, 0xF4, 0xA7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0xF4, 0xEE, 0xF6, 0xF4, 0xF6, 0xF6, 0xF7, 0xB8, /* 0x00-0x03 */ + 0xF7, 0xC8, 0xF7, 0xD3, 0xF8, 0xDB, 0xF8, 0xF0, /* 0x04-0x07 */ + 0xFA, 0xA1, 0xFA, 0xA2, 0xFA, 0xE6, 0xFC, 0xA9, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FF[512] = { + 0x3F, 0x3F, 0xA3, 0xA1, 0xA3, 0xA2, 0xA3, 0xA3, /* 0x00-0x03 */ + 0xA3, 0xA4, 0xA3, 0xA5, 0xA3, 0xA6, 0xA3, 0xA7, /* 0x04-0x07 */ + 0xA3, 0xA8, 0xA3, 0xA9, 0xA3, 0xAA, 0xA3, 0xAB, /* 0x08-0x0B */ + 0xA3, 0xAC, 0xA3, 0xAD, 0xA3, 0xAE, 0xA3, 0xAF, /* 0x0C-0x0F */ + 0xA3, 0xB0, 0xA3, 0xB1, 0xA3, 0xB2, 0xA3, 0xB3, /* 0x10-0x13 */ + 0xA3, 0xB4, 0xA3, 0xB5, 0xA3, 0xB6, 0xA3, 0xB7, /* 0x14-0x17 */ + 0xA3, 0xB8, 0xA3, 0xB9, 0xA3, 0xBA, 0xA3, 0xBB, /* 0x18-0x1B */ + 0xA3, 0xBC, 0xA3, 0xBD, 0xA3, 0xBE, 0xA3, 0xBF, /* 0x1C-0x1F */ + 0xA3, 0xC0, 0xA3, 0xC1, 0xA3, 0xC2, 0xA3, 0xC3, /* 0x20-0x23 */ + 0xA3, 0xC4, 0xA3, 0xC5, 0xA3, 0xC6, 0xA3, 0xC7, /* 0x24-0x27 */ + 0xA3, 0xC8, 0xA3, 0xC9, 0xA3, 0xCA, 0xA3, 0xCB, /* 0x28-0x2B */ + 0xA3, 0xCC, 0xA3, 0xCD, 0xA3, 0xCE, 0xA3, 0xCF, /* 0x2C-0x2F */ + 0xA3, 0xD0, 0xA3, 0xD1, 0xA3, 0xD2, 0xA3, 0xD3, /* 0x30-0x33 */ + 0xA3, 0xD4, 0xA3, 0xD5, 0xA3, 0xD6, 0xA3, 0xD7, /* 0x34-0x37 */ + 0xA3, 0xD8, 0xA3, 0xD9, 0xA3, 0xDA, 0xA3, 0xDB, /* 0x38-0x3B */ + 0xA1, 0xAC, 0xA3, 0xDD, 0xA3, 0xDE, 0xA3, 0xDF, /* 0x3C-0x3F */ + 0xA3, 0xE0, 0xA3, 0xE1, 0xA3, 0xE2, 0xA3, 0xE3, /* 0x40-0x43 */ + 0xA3, 0xE4, 0xA3, 0xE5, 0xA3, 0xE6, 0xA3, 0xE7, /* 0x44-0x47 */ + 0xA3, 0xE8, 0xA3, 0xE9, 0xA3, 0xEA, 0xA3, 0xEB, /* 0x48-0x4B */ + 0xA3, 0xEC, 0xA3, 0xED, 0xA3, 0xEE, 0xA3, 0xEF, /* 0x4C-0x4F */ + 0xA3, 0xF0, 0xA3, 0xF1, 0xA3, 0xF2, 0xA3, 0xF3, /* 0x50-0x53 */ + 0xA3, 0xF4, 0xA3, 0xF5, 0xA3, 0xF6, 0xA3, 0xF7, /* 0x54-0x57 */ + 0xA3, 0xF8, 0xA3, 0xF9, 0xA3, 0xFA, 0xA3, 0xFB, /* 0x58-0x5B */ + 0xA3, 0xFC, 0xA3, 0xFD, 0xA2, 0xA6, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xA1, 0xCB, 0xA1, 0xCC, 0xA1, 0xFE, 0xA3, 0xFE, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xA1, 0xCD, 0xA3, 0xDC, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, u2c_01, u2c_02, u2c_03, u2c_04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, u2c_24, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, u2c_31, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u2c_AC, u2c_AD, u2c_AE, u2c_AF, + u2c_B0, u2c_B1, u2c_B2, u2c_B3, u2c_B4, u2c_B5, u2c_B6, u2c_B7, + u2c_B8, u2c_B9, u2c_BA, u2c_BB, u2c_BC, u2c_BD, u2c_BE, u2c_BF, + u2c_C0, u2c_C1, u2c_C2, u2c_C3, u2c_C4, u2c_C5, u2c_C6, u2c_C7, + u2c_C8, u2c_C9, u2c_CA, u2c_CB, u2c_CC, u2c_CD, u2c_CE, u2c_CF, + u2c_D0, u2c_D1, u2c_D2, u2c_D3, u2c_D4, u2c_D5, u2c_D6, u2c_D7, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, NULL, u2c_FF, }; + +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + uni2charset = page_uni2charset[ch]; + *outlen = 0; + if (uni2charset){ + if (boundlen <= 1) + return; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + *outlen = 1; + } else if (ch==0 && cl) + out[0] = cl; + else + out[0] = '?'; + (*outlen)++; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + unsigned char ch, cl; + struct nls_unicode *charset2uni; + + ch = rawstring[0]; + cl = rawstring[1]; + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl){ + *uni1 = charset2uni[cl].uni2; + *uni2 = charset2uni[cl].uni1; + *offset = 2; + } else{ + *uni1 = ch; + *uni2 = 0x00; + *offset = 1; + } + return; +} + +static void inc_use_count(void) +{ + MOD_INC_USE_COUNT; +} + +static void dec_use_count(void) +{ + MOD_DEC_USE_COUNT; +} + +static struct nls_table table = { + "cp949", + uni2char, + char2uni, + inc_use_count, + dec_use_count, + NULL +}; + +int init_nls_cp949(void) +{ + return register_nls(&table); +} + +#ifdef MODULE +int init_module(void) +{ + return init_nls_cp949(); +} + + +void cleanup_module(void) +{ + unregister_nls(&table); + return; +} +#endif + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_cp950.c linux.16p3/fs/nls/nls_cp950.c --- linux.vanilla/fs/nls/nls_cp950.c Thu Jan 1 01:00:00 1970 +++ linux.16p3/fs/nls/nls_cp950.c Wed Apr 19 13:58:56 2000 @@ -0,0 +1,12622 @@ +/* + * linux/fs/nls_cp950.c + * + * Charset cp950 translation tables. + * Generated automatically from the Microsoft + */ + +#include +#include +#include +#include + +static struct nls_unicode c2u_A1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x30, 0x00}, {0xFF, 0x0C}, {0x30, 0x01}, {0x30, 0x02}, /* 0x40-0x43 */ + {0xFF, 0x0E}, {0x20, 0x27}, {0xFF, 0x1B}, {0xFF, 0x1A}, /* 0x44-0x47 */ + {0xFF, 0x1F}, {0xFF, 0x01}, {0xFE, 0x30}, {0x20, 0x26}, /* 0x48-0x4B */ + {0x20, 0x25}, {0xFE, 0x50}, {0xFE, 0x51}, {0xFE, 0x52}, /* 0x4C-0x4F */ + {0x00, 0xB7}, {0xFE, 0x54}, {0xFE, 0x55}, {0xFE, 0x56}, /* 0x50-0x53 */ + {0xFE, 0x57}, {0xFF, 0x5C}, {0x20, 0x13}, {0xFE, 0x31}, /* 0x54-0x57 */ + {0x20, 0x14}, {0xFE, 0x33}, {0x25, 0x74}, {0xFE, 0x34}, /* 0x58-0x5B */ + {0xFE, 0x4F}, {0xFF, 0x08}, {0xFF, 0x09}, {0xFE, 0x35}, /* 0x5C-0x5F */ + {0xFE, 0x36}, {0xFF, 0x5B}, {0xFF, 0x5D}, {0xFE, 0x37}, /* 0x60-0x63 */ + {0xFE, 0x38}, {0x30, 0x14}, {0x30, 0x15}, {0xFE, 0x39}, /* 0x64-0x67 */ + {0xFE, 0x3A}, {0x30, 0x10}, {0x30, 0x11}, {0xFE, 0x3B}, /* 0x68-0x6B */ + {0xFE, 0x3C}, {0x30, 0x0A}, {0x30, 0x0B}, {0xFE, 0x3D}, /* 0x6C-0x6F */ + {0xFE, 0x3E}, {0x30, 0x08}, {0x30, 0x09}, {0xFE, 0x3F}, /* 0x70-0x73 */ + {0xFE, 0x40}, {0x30, 0x0C}, {0x30, 0x0D}, {0xFE, 0x41}, /* 0x74-0x77 */ + {0xFE, 0x42}, {0x30, 0x0E}, {0x30, 0x0F}, {0xFE, 0x43}, /* 0x78-0x7B */ + {0xFE, 0x44}, {0xFE, 0x59}, {0xFE, 0x5A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0xFE, 0x5B}, {0xFE, 0x5C}, {0xFE, 0x5D}, /* 0xA0-0xA3 */ + {0xFE, 0x5E}, {0x20, 0x18}, {0x20, 0x19}, {0x20, 0x1C}, /* 0xA4-0xA7 */ + {0x20, 0x1D}, {0x30, 0x1D}, {0x30, 0x1E}, {0x20, 0x35}, /* 0xA8-0xAB */ + {0x20, 0x32}, {0xFF, 0x03}, {0xFF, 0x06}, {0xFF, 0x0A}, /* 0xAC-0xAF */ + {0x20, 0x3B}, {0x00, 0xA7}, {0x30, 0x03}, {0x25, 0xCB}, /* 0xB0-0xB3 */ + {0x25, 0xCF}, {0x25, 0xB3}, {0x25, 0xB2}, {0x25, 0xCE}, /* 0xB4-0xB7 */ + {0x26, 0x06}, {0x26, 0x05}, {0x25, 0xC7}, {0x25, 0xC6}, /* 0xB8-0xBB */ + {0x25, 0xA1}, {0x25, 0xA0}, {0x25, 0xBD}, {0x25, 0xBC}, /* 0xBC-0xBF */ + {0x32, 0xA3}, {0x21, 0x05}, {0x00, 0xAF}, {0xFF, 0xE3}, /* 0xC0-0xC3 */ + {0xFF, 0x3F}, {0x02, 0xCD}, {0xFE, 0x49}, {0xFE, 0x4A}, /* 0xC4-0xC7 */ + {0xFE, 0x4D}, {0xFE, 0x4E}, {0xFE, 0x4B}, {0xFE, 0x4C}, /* 0xC8-0xCB */ + {0xFE, 0x5F}, {0xFE, 0x60}, {0xFE, 0x61}, {0xFF, 0x0B}, /* 0xCC-0xCF */ + {0xFF, 0x0D}, {0x00, 0xD7}, {0x00, 0xF7}, {0x00, 0xB1}, /* 0xD0-0xD3 */ + {0x22, 0x1A}, {0xFF, 0x1C}, {0xFF, 0x1E}, {0xFF, 0x1D}, /* 0xD4-0xD7 */ + {0x22, 0x66}, {0x22, 0x67}, {0x22, 0x60}, {0x22, 0x1E}, /* 0xD8-0xDB */ + {0x22, 0x52}, {0x22, 0x61}, {0xFE, 0x62}, {0xFE, 0x63}, /* 0xDC-0xDF */ + {0xFE, 0x64}, {0xFE, 0x65}, {0xFE, 0x66}, {0xFF, 0x5E}, /* 0xE0-0xE3 */ + {0x22, 0x29}, {0x22, 0x2A}, {0x22, 0xA5}, {0x22, 0x20}, /* 0xE4-0xE7 */ + {0x22, 0x1F}, {0x22, 0xBF}, {0x33, 0xD2}, {0x33, 0xD1}, /* 0xE8-0xEB */ + {0x22, 0x2B}, {0x22, 0x2E}, {0x22, 0x35}, {0x22, 0x34}, /* 0xEC-0xEF */ + {0x26, 0x40}, {0x26, 0x42}, {0x22, 0x95}, {0x22, 0x99}, /* 0xF0-0xF3 */ + {0x21, 0x91}, {0x21, 0x93}, {0x21, 0x90}, {0x21, 0x92}, /* 0xF4-0xF7 */ + {0x21, 0x96}, {0x21, 0x97}, {0x21, 0x99}, {0x21, 0x98}, /* 0xF8-0xFB */ + {0x22, 0x25}, {0x22, 0x23}, {0xFF, 0x0F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0xFF, 0x3C}, {0x22, 0x15}, {0xFE, 0x68}, {0xFF, 0x04}, /* 0x40-0x43 */ + {0xFF, 0xE5}, {0x30, 0x12}, {0xFF, 0xE0}, {0xFF, 0xE1}, /* 0x44-0x47 */ + {0xFF, 0x05}, {0xFF, 0x20}, {0x21, 0x03}, {0x21, 0x09}, /* 0x48-0x4B */ + {0xFE, 0x69}, {0xFE, 0x6A}, {0xFE, 0x6B}, {0x33, 0xD5}, /* 0x4C-0x4F */ + {0x33, 0x9C}, {0x33, 0x9D}, {0x33, 0x9E}, {0x33, 0xCE}, /* 0x50-0x53 */ + {0x33, 0xA1}, {0x33, 0x8E}, {0x33, 0x8F}, {0x33, 0xC4}, /* 0x54-0x57 */ + {0x00, 0xB0}, {0x51, 0x59}, {0x51, 0x5B}, {0x51, 0x5E}, /* 0x58-0x5B */ + {0x51, 0x5D}, {0x51, 0x61}, {0x51, 0x63}, {0x55, 0xE7}, /* 0x5C-0x5F */ + {0x74, 0xE9}, {0x7C, 0xCE}, {0x25, 0x81}, {0x25, 0x82}, /* 0x60-0x63 */ + {0x25, 0x83}, {0x25, 0x84}, {0x25, 0x85}, {0x25, 0x86}, /* 0x64-0x67 */ + {0x25, 0x87}, {0x25, 0x88}, {0x25, 0x8F}, {0x25, 0x8E}, /* 0x68-0x6B */ + {0x25, 0x8D}, {0x25, 0x8C}, {0x25, 0x8B}, {0x25, 0x8A}, /* 0x6C-0x6F */ + {0x25, 0x89}, {0x25, 0x3C}, {0x25, 0x34}, {0x25, 0x2C}, /* 0x70-0x73 */ + {0x25, 0x24}, {0x25, 0x1C}, {0x25, 0x94}, {0x25, 0x00}, /* 0x74-0x77 */ + {0x25, 0x02}, {0x25, 0x95}, {0x25, 0x0C}, {0x25, 0x10}, /* 0x78-0x7B */ + {0x25, 0x14}, {0x25, 0x18}, {0x25, 0x6D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x25, 0x6E}, {0x25, 0x70}, {0x25, 0x6F}, /* 0xA0-0xA3 */ + {0x25, 0x50}, {0x25, 0x5E}, {0x25, 0x6A}, {0x25, 0x61}, /* 0xA4-0xA7 */ + {0x25, 0xE2}, {0x25, 0xE3}, {0x25, 0xE5}, {0x25, 0xE4}, /* 0xA8-0xAB */ + {0x25, 0x71}, {0x25, 0x72}, {0x25, 0x73}, {0xFF, 0x10}, /* 0xAC-0xAF */ + {0xFF, 0x11}, {0xFF, 0x12}, {0xFF, 0x13}, {0xFF, 0x14}, /* 0xB0-0xB3 */ + {0xFF, 0x15}, {0xFF, 0x16}, {0xFF, 0x17}, {0xFF, 0x18}, /* 0xB4-0xB7 */ + {0xFF, 0x19}, {0x21, 0x60}, {0x21, 0x61}, {0x21, 0x62}, /* 0xB8-0xBB */ + {0x21, 0x63}, {0x21, 0x64}, {0x21, 0x65}, {0x21, 0x66}, /* 0xBC-0xBF */ + {0x21, 0x67}, {0x21, 0x68}, {0x21, 0x69}, {0x30, 0x21}, /* 0xC0-0xC3 */ + {0x30, 0x22}, {0x30, 0x23}, {0x30, 0x24}, {0x30, 0x25}, /* 0xC4-0xC7 */ + {0x30, 0x26}, {0x30, 0x27}, {0x30, 0x28}, {0x30, 0x29}, /* 0xC8-0xCB */ + {0x53, 0x41}, {0x53, 0x44}, {0x53, 0x45}, {0xFF, 0x21}, /* 0xCC-0xCF */ + {0xFF, 0x22}, {0xFF, 0x23}, {0xFF, 0x24}, {0xFF, 0x25}, /* 0xD0-0xD3 */ + {0xFF, 0x26}, {0xFF, 0x27}, {0xFF, 0x28}, {0xFF, 0x29}, /* 0xD4-0xD7 */ + {0xFF, 0x2A}, {0xFF, 0x2B}, {0xFF, 0x2C}, {0xFF, 0x2D}, /* 0xD8-0xDB */ + {0xFF, 0x2E}, {0xFF, 0x2F}, {0xFF, 0x30}, {0xFF, 0x31}, /* 0xDC-0xDF */ + {0xFF, 0x32}, {0xFF, 0x33}, {0xFF, 0x34}, {0xFF, 0x35}, /* 0xE0-0xE3 */ + {0xFF, 0x36}, {0xFF, 0x37}, {0xFF, 0x38}, {0xFF, 0x39}, /* 0xE4-0xE7 */ + {0xFF, 0x3A}, {0xFF, 0x41}, {0xFF, 0x42}, {0xFF, 0x43}, /* 0xE8-0xEB */ + {0xFF, 0x44}, {0xFF, 0x45}, {0xFF, 0x46}, {0xFF, 0x47}, /* 0xEC-0xEF */ + {0xFF, 0x48}, {0xFF, 0x49}, {0xFF, 0x4A}, {0xFF, 0x4B}, /* 0xF0-0xF3 */ + {0xFF, 0x4C}, {0xFF, 0x4D}, {0xFF, 0x4E}, {0xFF, 0x4F}, /* 0xF4-0xF7 */ + {0xFF, 0x50}, {0xFF, 0x51}, {0xFF, 0x52}, {0xFF, 0x53}, /* 0xF8-0xFB */ + {0xFF, 0x54}, {0xFF, 0x55}, {0xFF, 0x56}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0xFF, 0x57}, {0xFF, 0x58}, {0xFF, 0x59}, {0xFF, 0x5A}, /* 0x40-0x43 */ + {0x03, 0x91}, {0x03, 0x92}, {0x03, 0x93}, {0x03, 0x94}, /* 0x44-0x47 */ + {0x03, 0x95}, {0x03, 0x96}, {0x03, 0x97}, {0x03, 0x98}, /* 0x48-0x4B */ + {0x03, 0x99}, {0x03, 0x9A}, {0x03, 0x9B}, {0x03, 0x9C}, /* 0x4C-0x4F */ + {0x03, 0x9D}, {0x03, 0x9E}, {0x03, 0x9F}, {0x03, 0xA0}, /* 0x50-0x53 */ + {0x03, 0xA1}, {0x03, 0xA3}, {0x03, 0xA4}, {0x03, 0xA5}, /* 0x54-0x57 */ + {0x03, 0xA6}, {0x03, 0xA7}, {0x03, 0xA8}, {0x03, 0xA9}, /* 0x58-0x5B */ + {0x03, 0xB1}, {0x03, 0xB2}, {0x03, 0xB3}, {0x03, 0xB4}, /* 0x5C-0x5F */ + {0x03, 0xB5}, {0x03, 0xB6}, {0x03, 0xB7}, {0x03, 0xB8}, /* 0x60-0x63 */ + {0x03, 0xB9}, {0x03, 0xBA}, {0x03, 0xBB}, {0x03, 0xBC}, /* 0x64-0x67 */ + {0x03, 0xBD}, {0x03, 0xBE}, {0x03, 0xBF}, {0x03, 0xC0}, /* 0x68-0x6B */ + {0x03, 0xC1}, {0x03, 0xC3}, {0x03, 0xC4}, {0x03, 0xC5}, /* 0x6C-0x6F */ + {0x03, 0xC6}, {0x03, 0xC7}, {0x03, 0xC8}, {0x03, 0xC9}, /* 0x70-0x73 */ + {0x31, 0x05}, {0x31, 0x06}, {0x31, 0x07}, {0x31, 0x08}, /* 0x74-0x77 */ + {0x31, 0x09}, {0x31, 0x0A}, {0x31, 0x0B}, {0x31, 0x0C}, /* 0x78-0x7B */ + {0x31, 0x0D}, {0x31, 0x0E}, {0x31, 0x0F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x31, 0x10}, {0x31, 0x11}, {0x31, 0x12}, /* 0xA0-0xA3 */ + {0x31, 0x13}, {0x31, 0x14}, {0x31, 0x15}, {0x31, 0x16}, /* 0xA4-0xA7 */ + {0x31, 0x17}, {0x31, 0x18}, {0x31, 0x19}, {0x31, 0x1A}, /* 0xA8-0xAB */ + {0x31, 0x1B}, {0x31, 0x1C}, {0x31, 0x1D}, {0x31, 0x1E}, /* 0xAC-0xAF */ + {0x31, 0x1F}, {0x31, 0x20}, {0x31, 0x21}, {0x31, 0x22}, /* 0xB0-0xB3 */ + {0x31, 0x23}, {0x31, 0x24}, {0x31, 0x25}, {0x31, 0x26}, /* 0xB4-0xB7 */ + {0x31, 0x27}, {0x31, 0x28}, {0x31, 0x29}, {0x02, 0xD9}, /* 0xB8-0xBB */ + {0x02, 0xC9}, {0x02, 0xCA}, {0x02, 0xC7}, {0x02, 0xCB}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x4E, 0x00}, {0x4E, 0x59}, {0x4E, 0x01}, {0x4E, 0x03}, /* 0x40-0x43 */ + {0x4E, 0x43}, {0x4E, 0x5D}, {0x4E, 0x86}, {0x4E, 0x8C}, /* 0x44-0x47 */ + {0x4E, 0xBA}, {0x51, 0x3F}, {0x51, 0x65}, {0x51, 0x6B}, /* 0x48-0x4B */ + {0x51, 0xE0}, {0x52, 0x00}, {0x52, 0x01}, {0x52, 0x9B}, /* 0x4C-0x4F */ + {0x53, 0x15}, {0x53, 0x41}, {0x53, 0x5C}, {0x53, 0xC8}, /* 0x50-0x53 */ + {0x4E, 0x09}, {0x4E, 0x0B}, {0x4E, 0x08}, {0x4E, 0x0A}, /* 0x54-0x57 */ + {0x4E, 0x2B}, {0x4E, 0x38}, {0x51, 0xE1}, {0x4E, 0x45}, /* 0x58-0x5B */ + {0x4E, 0x48}, {0x4E, 0x5F}, {0x4E, 0x5E}, {0x4E, 0x8E}, /* 0x5C-0x5F */ + {0x4E, 0xA1}, {0x51, 0x40}, {0x52, 0x03}, {0x52, 0xFA}, /* 0x60-0x63 */ + {0x53, 0x43}, {0x53, 0xC9}, {0x53, 0xE3}, {0x57, 0x1F}, /* 0x64-0x67 */ + {0x58, 0xEB}, {0x59, 0x15}, {0x59, 0x27}, {0x59, 0x73}, /* 0x68-0x6B */ + {0x5B, 0x50}, {0x5B, 0x51}, {0x5B, 0x53}, {0x5B, 0xF8}, /* 0x6C-0x6F */ + {0x5C, 0x0F}, {0x5C, 0x22}, {0x5C, 0x38}, {0x5C, 0x71}, /* 0x70-0x73 */ + {0x5D, 0xDD}, {0x5D, 0xE5}, {0x5D, 0xF1}, {0x5D, 0xF2}, /* 0x74-0x77 */ + {0x5D, 0xF3}, {0x5D, 0xFE}, {0x5E, 0x72}, {0x5E, 0xFE}, /* 0x78-0x7B */ + {0x5F, 0x0B}, {0x5F, 0x13}, {0x62, 0x4D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x4E, 0x11}, {0x4E, 0x10}, {0x4E, 0x0D}, /* 0xA0-0xA3 */ + {0x4E, 0x2D}, {0x4E, 0x30}, {0x4E, 0x39}, {0x4E, 0x4B}, /* 0xA4-0xA7 */ + {0x5C, 0x39}, {0x4E, 0x88}, {0x4E, 0x91}, {0x4E, 0x95}, /* 0xA8-0xAB */ + {0x4E, 0x92}, {0x4E, 0x94}, {0x4E, 0xA2}, {0x4E, 0xC1}, /* 0xAC-0xAF */ + {0x4E, 0xC0}, {0x4E, 0xC3}, {0x4E, 0xC6}, {0x4E, 0xC7}, /* 0xB0-0xB3 */ + {0x4E, 0xCD}, {0x4E, 0xCA}, {0x4E, 0xCB}, {0x4E, 0xC4}, /* 0xB4-0xB7 */ + {0x51, 0x43}, {0x51, 0x41}, {0x51, 0x67}, {0x51, 0x6D}, /* 0xB8-0xBB */ + {0x51, 0x6E}, {0x51, 0x6C}, {0x51, 0x97}, {0x51, 0xF6}, /* 0xBC-0xBF */ + {0x52, 0x06}, {0x52, 0x07}, {0x52, 0x08}, {0x52, 0xFB}, /* 0xC0-0xC3 */ + {0x52, 0xFE}, {0x52, 0xFF}, {0x53, 0x16}, {0x53, 0x39}, /* 0xC4-0xC7 */ + {0x53, 0x48}, {0x53, 0x47}, {0x53, 0x45}, {0x53, 0x5E}, /* 0xC8-0xCB */ + {0x53, 0x84}, {0x53, 0xCB}, {0x53, 0xCA}, {0x53, 0xCD}, /* 0xCC-0xCF */ + {0x58, 0xEC}, {0x59, 0x29}, {0x59, 0x2B}, {0x59, 0x2A}, /* 0xD0-0xD3 */ + {0x59, 0x2D}, {0x5B, 0x54}, {0x5C, 0x11}, {0x5C, 0x24}, /* 0xD4-0xD7 */ + {0x5C, 0x3A}, {0x5C, 0x6F}, {0x5D, 0xF4}, {0x5E, 0x7B}, /* 0xD8-0xDB */ + {0x5E, 0xFF}, {0x5F, 0x14}, {0x5F, 0x15}, {0x5F, 0xC3}, /* 0xDC-0xDF */ + {0x62, 0x08}, {0x62, 0x36}, {0x62, 0x4B}, {0x62, 0x4E}, /* 0xE0-0xE3 */ + {0x65, 0x2F}, {0x65, 0x87}, {0x65, 0x97}, {0x65, 0xA4}, /* 0xE4-0xE7 */ + {0x65, 0xB9}, {0x65, 0xE5}, {0x66, 0xF0}, {0x67, 0x08}, /* 0xE8-0xEB */ + {0x67, 0x28}, {0x6B, 0x20}, {0x6B, 0x62}, {0x6B, 0x79}, /* 0xEC-0xEF */ + {0x6B, 0xCB}, {0x6B, 0xD4}, {0x6B, 0xDB}, {0x6C, 0x0F}, /* 0xF0-0xF3 */ + {0x6C, 0x34}, {0x70, 0x6B}, {0x72, 0x2A}, {0x72, 0x36}, /* 0xF4-0xF7 */ + {0x72, 0x3B}, {0x72, 0x47}, {0x72, 0x59}, {0x72, 0x5B}, /* 0xF8-0xFB */ + {0x72, 0xAC}, {0x73, 0x8B}, {0x4E, 0x19}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x4E, 0x16}, {0x4E, 0x15}, {0x4E, 0x14}, {0x4E, 0x18}, /* 0x40-0x43 */ + {0x4E, 0x3B}, {0x4E, 0x4D}, {0x4E, 0x4F}, {0x4E, 0x4E}, /* 0x44-0x47 */ + {0x4E, 0xE5}, {0x4E, 0xD8}, {0x4E, 0xD4}, {0x4E, 0xD5}, /* 0x48-0x4B */ + {0x4E, 0xD6}, {0x4E, 0xD7}, {0x4E, 0xE3}, {0x4E, 0xE4}, /* 0x4C-0x4F */ + {0x4E, 0xD9}, {0x4E, 0xDE}, {0x51, 0x45}, {0x51, 0x44}, /* 0x50-0x53 */ + {0x51, 0x89}, {0x51, 0x8A}, {0x51, 0xAC}, {0x51, 0xF9}, /* 0x54-0x57 */ + {0x51, 0xFA}, {0x51, 0xF8}, {0x52, 0x0A}, {0x52, 0xA0}, /* 0x58-0x5B */ + {0x52, 0x9F}, {0x53, 0x05}, {0x53, 0x06}, {0x53, 0x17}, /* 0x5C-0x5F */ + {0x53, 0x1D}, {0x4E, 0xDF}, {0x53, 0x4A}, {0x53, 0x49}, /* 0x60-0x63 */ + {0x53, 0x61}, {0x53, 0x60}, {0x53, 0x6F}, {0x53, 0x6E}, /* 0x64-0x67 */ + {0x53, 0xBB}, {0x53, 0xEF}, {0x53, 0xE4}, {0x53, 0xF3}, /* 0x68-0x6B */ + {0x53, 0xEC}, {0x53, 0xEE}, {0x53, 0xE9}, {0x53, 0xE8}, /* 0x6C-0x6F */ + {0x53, 0xFC}, {0x53, 0xF8}, {0x53, 0xF5}, {0x53, 0xEB}, /* 0x70-0x73 */ + {0x53, 0xE6}, {0x53, 0xEA}, {0x53, 0xF2}, {0x53, 0xF1}, /* 0x74-0x77 */ + {0x53, 0xF0}, {0x53, 0xE5}, {0x53, 0xED}, {0x53, 0xFB}, /* 0x78-0x7B */ + {0x56, 0xDB}, {0x56, 0xDA}, {0x59, 0x16}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x59, 0x2E}, {0x59, 0x31}, {0x59, 0x74}, /* 0xA0-0xA3 */ + {0x59, 0x76}, {0x5B, 0x55}, {0x5B, 0x83}, {0x5C, 0x3C}, /* 0xA4-0xA7 */ + {0x5D, 0xE8}, {0x5D, 0xE7}, {0x5D, 0xE6}, {0x5E, 0x02}, /* 0xA8-0xAB */ + {0x5E, 0x03}, {0x5E, 0x73}, {0x5E, 0x7C}, {0x5F, 0x01}, /* 0xAC-0xAF */ + {0x5F, 0x18}, {0x5F, 0x17}, {0x5F, 0xC5}, {0x62, 0x0A}, /* 0xB0-0xB3 */ + {0x62, 0x53}, {0x62, 0x54}, {0x62, 0x52}, {0x62, 0x51}, /* 0xB4-0xB7 */ + {0x65, 0xA5}, {0x65, 0xE6}, {0x67, 0x2E}, {0x67, 0x2C}, /* 0xB8-0xBB */ + {0x67, 0x2A}, {0x67, 0x2B}, {0x67, 0x2D}, {0x6B, 0x63}, /* 0xBC-0xBF */ + {0x6B, 0xCD}, {0x6C, 0x11}, {0x6C, 0x10}, {0x6C, 0x38}, /* 0xC0-0xC3 */ + {0x6C, 0x41}, {0x6C, 0x40}, {0x6C, 0x3E}, {0x72, 0xAF}, /* 0xC4-0xC7 */ + {0x73, 0x84}, {0x73, 0x89}, {0x74, 0xDC}, {0x74, 0xE6}, /* 0xC8-0xCB */ + {0x75, 0x18}, {0x75, 0x1F}, {0x75, 0x28}, {0x75, 0x29}, /* 0xCC-0xCF */ + {0x75, 0x30}, {0x75, 0x31}, {0x75, 0x32}, {0x75, 0x33}, /* 0xD0-0xD3 */ + {0x75, 0x8B}, {0x76, 0x7D}, {0x76, 0xAE}, {0x76, 0xBF}, /* 0xD4-0xD7 */ + {0x76, 0xEE}, {0x77, 0xDB}, {0x77, 0xE2}, {0x77, 0xF3}, /* 0xD8-0xDB */ + {0x79, 0x3A}, {0x79, 0xBE}, {0x7A, 0x74}, {0x7A, 0xCB}, /* 0xDC-0xDF */ + {0x4E, 0x1E}, {0x4E, 0x1F}, {0x4E, 0x52}, {0x4E, 0x53}, /* 0xE0-0xE3 */ + {0x4E, 0x69}, {0x4E, 0x99}, {0x4E, 0xA4}, {0x4E, 0xA6}, /* 0xE4-0xE7 */ + {0x4E, 0xA5}, {0x4E, 0xFF}, {0x4F, 0x09}, {0x4F, 0x19}, /* 0xE8-0xEB */ + {0x4F, 0x0A}, {0x4F, 0x15}, {0x4F, 0x0D}, {0x4F, 0x10}, /* 0xEC-0xEF */ + {0x4F, 0x11}, {0x4F, 0x0F}, {0x4E, 0xF2}, {0x4E, 0xF6}, /* 0xF0-0xF3 */ + {0x4E, 0xFB}, {0x4E, 0xF0}, {0x4E, 0xF3}, {0x4E, 0xFD}, /* 0xF4-0xF7 */ + {0x4F, 0x01}, {0x4F, 0x0B}, {0x51, 0x49}, {0x51, 0x47}, /* 0xF8-0xFB */ + {0x51, 0x46}, {0x51, 0x48}, {0x51, 0x68}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x51, 0x71}, {0x51, 0x8D}, {0x51, 0xB0}, {0x52, 0x17}, /* 0x40-0x43 */ + {0x52, 0x11}, {0x52, 0x12}, {0x52, 0x0E}, {0x52, 0x16}, /* 0x44-0x47 */ + {0x52, 0xA3}, {0x53, 0x08}, {0x53, 0x21}, {0x53, 0x20}, /* 0x48-0x4B */ + {0x53, 0x70}, {0x53, 0x71}, {0x54, 0x09}, {0x54, 0x0F}, /* 0x4C-0x4F */ + {0x54, 0x0C}, {0x54, 0x0A}, {0x54, 0x10}, {0x54, 0x01}, /* 0x50-0x53 */ + {0x54, 0x0B}, {0x54, 0x04}, {0x54, 0x11}, {0x54, 0x0D}, /* 0x54-0x57 */ + {0x54, 0x08}, {0x54, 0x03}, {0x54, 0x0E}, {0x54, 0x06}, /* 0x58-0x5B */ + {0x54, 0x12}, {0x56, 0xE0}, {0x56, 0xDE}, {0x56, 0xDD}, /* 0x5C-0x5F */ + {0x57, 0x33}, {0x57, 0x30}, {0x57, 0x28}, {0x57, 0x2D}, /* 0x60-0x63 */ + {0x57, 0x2C}, {0x57, 0x2F}, {0x57, 0x29}, {0x59, 0x19}, /* 0x64-0x67 */ + {0x59, 0x1A}, {0x59, 0x37}, {0x59, 0x38}, {0x59, 0x84}, /* 0x68-0x6B */ + {0x59, 0x78}, {0x59, 0x83}, {0x59, 0x7D}, {0x59, 0x79}, /* 0x6C-0x6F */ + {0x59, 0x82}, {0x59, 0x81}, {0x5B, 0x57}, {0x5B, 0x58}, /* 0x70-0x73 */ + {0x5B, 0x87}, {0x5B, 0x88}, {0x5B, 0x85}, {0x5B, 0x89}, /* 0x74-0x77 */ + {0x5B, 0xFA}, {0x5C, 0x16}, {0x5C, 0x79}, {0x5D, 0xDE}, /* 0x78-0x7B */ + {0x5E, 0x06}, {0x5E, 0x76}, {0x5E, 0x74}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5F, 0x0F}, {0x5F, 0x1B}, {0x5F, 0xD9}, /* 0xA0-0xA3 */ + {0x5F, 0xD6}, {0x62, 0x0E}, {0x62, 0x0C}, {0x62, 0x0D}, /* 0xA4-0xA7 */ + {0x62, 0x10}, {0x62, 0x63}, {0x62, 0x5B}, {0x62, 0x58}, /* 0xA8-0xAB */ + {0x65, 0x36}, {0x65, 0xE9}, {0x65, 0xE8}, {0x65, 0xEC}, /* 0xAC-0xAF */ + {0x65, 0xED}, {0x66, 0xF2}, {0x66, 0xF3}, {0x67, 0x09}, /* 0xB0-0xB3 */ + {0x67, 0x3D}, {0x67, 0x34}, {0x67, 0x31}, {0x67, 0x35}, /* 0xB4-0xB7 */ + {0x6B, 0x21}, {0x6B, 0x64}, {0x6B, 0x7B}, {0x6C, 0x16}, /* 0xB8-0xBB */ + {0x6C, 0x5D}, {0x6C, 0x57}, {0x6C, 0x59}, {0x6C, 0x5F}, /* 0xBC-0xBF */ + {0x6C, 0x60}, {0x6C, 0x50}, {0x6C, 0x55}, {0x6C, 0x61}, /* 0xC0-0xC3 */ + {0x6C, 0x5B}, {0x6C, 0x4D}, {0x6C, 0x4E}, {0x70, 0x70}, /* 0xC4-0xC7 */ + {0x72, 0x5F}, {0x72, 0x5D}, {0x76, 0x7E}, {0x7A, 0xF9}, /* 0xC8-0xCB */ + {0x7C, 0x73}, {0x7C, 0xF8}, {0x7F, 0x36}, {0x7F, 0x8A}, /* 0xCC-0xCF */ + {0x7F, 0xBD}, {0x80, 0x01}, {0x80, 0x03}, {0x80, 0x0C}, /* 0xD0-0xD3 */ + {0x80, 0x12}, {0x80, 0x33}, {0x80, 0x7F}, {0x80, 0x89}, /* 0xD4-0xD7 */ + {0x80, 0x8B}, {0x80, 0x8C}, {0x81, 0xE3}, {0x81, 0xEA}, /* 0xD8-0xDB */ + {0x81, 0xF3}, {0x81, 0xFC}, {0x82, 0x0C}, {0x82, 0x1B}, /* 0xDC-0xDF */ + {0x82, 0x1F}, {0x82, 0x6E}, {0x82, 0x72}, {0x82, 0x7E}, /* 0xE0-0xE3 */ + {0x86, 0x6B}, {0x88, 0x40}, {0x88, 0x4C}, {0x88, 0x63}, /* 0xE4-0xE7 */ + {0x89, 0x7F}, {0x96, 0x21}, {0x4E, 0x32}, {0x4E, 0xA8}, /* 0xE8-0xEB */ + {0x4F, 0x4D}, {0x4F, 0x4F}, {0x4F, 0x47}, {0x4F, 0x57}, /* 0xEC-0xEF */ + {0x4F, 0x5E}, {0x4F, 0x34}, {0x4F, 0x5B}, {0x4F, 0x55}, /* 0xF0-0xF3 */ + {0x4F, 0x30}, {0x4F, 0x50}, {0x4F, 0x51}, {0x4F, 0x3D}, /* 0xF4-0xF7 */ + {0x4F, 0x3A}, {0x4F, 0x38}, {0x4F, 0x43}, {0x4F, 0x54}, /* 0xF8-0xFB */ + {0x4F, 0x3C}, {0x4F, 0x46}, {0x4F, 0x63}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x4F, 0x5C}, {0x4F, 0x60}, {0x4F, 0x2F}, {0x4F, 0x4E}, /* 0x40-0x43 */ + {0x4F, 0x36}, {0x4F, 0x59}, {0x4F, 0x5D}, {0x4F, 0x48}, /* 0x44-0x47 */ + {0x4F, 0x5A}, {0x51, 0x4C}, {0x51, 0x4B}, {0x51, 0x4D}, /* 0x48-0x4B */ + {0x51, 0x75}, {0x51, 0xB6}, {0x51, 0xB7}, {0x52, 0x25}, /* 0x4C-0x4F */ + {0x52, 0x24}, {0x52, 0x29}, {0x52, 0x2A}, {0x52, 0x28}, /* 0x50-0x53 */ + {0x52, 0xAB}, {0x52, 0xA9}, {0x52, 0xAA}, {0x52, 0xAC}, /* 0x54-0x57 */ + {0x53, 0x23}, {0x53, 0x73}, {0x53, 0x75}, {0x54, 0x1D}, /* 0x58-0x5B */ + {0x54, 0x2D}, {0x54, 0x1E}, {0x54, 0x3E}, {0x54, 0x26}, /* 0x5C-0x5F */ + {0x54, 0x4E}, {0x54, 0x27}, {0x54, 0x46}, {0x54, 0x43}, /* 0x60-0x63 */ + {0x54, 0x33}, {0x54, 0x48}, {0x54, 0x42}, {0x54, 0x1B}, /* 0x64-0x67 */ + {0x54, 0x29}, {0x54, 0x4A}, {0x54, 0x39}, {0x54, 0x3B}, /* 0x68-0x6B */ + {0x54, 0x38}, {0x54, 0x2E}, {0x54, 0x35}, {0x54, 0x36}, /* 0x6C-0x6F */ + {0x54, 0x20}, {0x54, 0x3C}, {0x54, 0x40}, {0x54, 0x31}, /* 0x70-0x73 */ + {0x54, 0x2B}, {0x54, 0x1F}, {0x54, 0x2C}, {0x56, 0xEA}, /* 0x74-0x77 */ + {0x56, 0xF0}, {0x56, 0xE4}, {0x56, 0xEB}, {0x57, 0x4A}, /* 0x78-0x7B */ + {0x57, 0x51}, {0x57, 0x40}, {0x57, 0x4D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x57, 0x47}, {0x57, 0x4E}, {0x57, 0x3E}, /* 0xA0-0xA3 */ + {0x57, 0x50}, {0x57, 0x4F}, {0x57, 0x3B}, {0x58, 0xEF}, /* 0xA4-0xA7 */ + {0x59, 0x3E}, {0x59, 0x9D}, {0x59, 0x92}, {0x59, 0xA8}, /* 0xA8-0xAB */ + {0x59, 0x9E}, {0x59, 0xA3}, {0x59, 0x99}, {0x59, 0x96}, /* 0xAC-0xAF */ + {0x59, 0x8D}, {0x59, 0xA4}, {0x59, 0x93}, {0x59, 0x8A}, /* 0xB0-0xB3 */ + {0x59, 0xA5}, {0x5B, 0x5D}, {0x5B, 0x5C}, {0x5B, 0x5A}, /* 0xB4-0xB7 */ + {0x5B, 0x5B}, {0x5B, 0x8C}, {0x5B, 0x8B}, {0x5B, 0x8F}, /* 0xB8-0xBB */ + {0x5C, 0x2C}, {0x5C, 0x40}, {0x5C, 0x41}, {0x5C, 0x3F}, /* 0xBC-0xBF */ + {0x5C, 0x3E}, {0x5C, 0x90}, {0x5C, 0x91}, {0x5C, 0x94}, /* 0xC0-0xC3 */ + {0x5C, 0x8C}, {0x5D, 0xEB}, {0x5E, 0x0C}, {0x5E, 0x8F}, /* 0xC4-0xC7 */ + {0x5E, 0x87}, {0x5E, 0x8A}, {0x5E, 0xF7}, {0x5F, 0x04}, /* 0xC8-0xCB */ + {0x5F, 0x1F}, {0x5F, 0x64}, {0x5F, 0x62}, {0x5F, 0x77}, /* 0xCC-0xCF */ + {0x5F, 0x79}, {0x5F, 0xD8}, {0x5F, 0xCC}, {0x5F, 0xD7}, /* 0xD0-0xD3 */ + {0x5F, 0xCD}, {0x5F, 0xF1}, {0x5F, 0xEB}, {0x5F, 0xF8}, /* 0xD4-0xD7 */ + {0x5F, 0xEA}, {0x62, 0x12}, {0x62, 0x11}, {0x62, 0x84}, /* 0xD8-0xDB */ + {0x62, 0x97}, {0x62, 0x96}, {0x62, 0x80}, {0x62, 0x76}, /* 0xDC-0xDF */ + {0x62, 0x89}, {0x62, 0x6D}, {0x62, 0x8A}, {0x62, 0x7C}, /* 0xE0-0xE3 */ + {0x62, 0x7E}, {0x62, 0x79}, {0x62, 0x73}, {0x62, 0x92}, /* 0xE4-0xE7 */ + {0x62, 0x6F}, {0x62, 0x98}, {0x62, 0x6E}, {0x62, 0x95}, /* 0xE8-0xEB */ + {0x62, 0x93}, {0x62, 0x91}, {0x62, 0x86}, {0x65, 0x39}, /* 0xEC-0xEF */ + {0x65, 0x3B}, {0x65, 0x38}, {0x65, 0xF1}, {0x66, 0xF4}, /* 0xF0-0xF3 */ + {0x67, 0x5F}, {0x67, 0x4E}, {0x67, 0x4F}, {0x67, 0x50}, /* 0xF4-0xF7 */ + {0x67, 0x51}, {0x67, 0x5C}, {0x67, 0x56}, {0x67, 0x5E}, /* 0xF8-0xFB */ + {0x67, 0x49}, {0x67, 0x46}, {0x67, 0x60}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x67, 0x53}, {0x67, 0x57}, {0x6B, 0x65}, {0x6B, 0xCF}, /* 0x40-0x43 */ + {0x6C, 0x42}, {0x6C, 0x5E}, {0x6C, 0x99}, {0x6C, 0x81}, /* 0x44-0x47 */ + {0x6C, 0x88}, {0x6C, 0x89}, {0x6C, 0x85}, {0x6C, 0x9B}, /* 0x48-0x4B */ + {0x6C, 0x6A}, {0x6C, 0x7A}, {0x6C, 0x90}, {0x6C, 0x70}, /* 0x4C-0x4F */ + {0x6C, 0x8C}, {0x6C, 0x68}, {0x6C, 0x96}, {0x6C, 0x92}, /* 0x50-0x53 */ + {0x6C, 0x7D}, {0x6C, 0x83}, {0x6C, 0x72}, {0x6C, 0x7E}, /* 0x54-0x57 */ + {0x6C, 0x74}, {0x6C, 0x86}, {0x6C, 0x76}, {0x6C, 0x8D}, /* 0x58-0x5B */ + {0x6C, 0x94}, {0x6C, 0x98}, {0x6C, 0x82}, {0x70, 0x76}, /* 0x5C-0x5F */ + {0x70, 0x7C}, {0x70, 0x7D}, {0x70, 0x78}, {0x72, 0x62}, /* 0x60-0x63 */ + {0x72, 0x61}, {0x72, 0x60}, {0x72, 0xC4}, {0x72, 0xC2}, /* 0x64-0x67 */ + {0x73, 0x96}, {0x75, 0x2C}, {0x75, 0x2B}, {0x75, 0x37}, /* 0x68-0x6B */ + {0x75, 0x38}, {0x76, 0x82}, {0x76, 0xEF}, {0x77, 0xE3}, /* 0x6C-0x6F */ + {0x79, 0xC1}, {0x79, 0xC0}, {0x79, 0xBF}, {0x7A, 0x76}, /* 0x70-0x73 */ + {0x7C, 0xFB}, {0x7F, 0x55}, {0x80, 0x96}, {0x80, 0x93}, /* 0x74-0x77 */ + {0x80, 0x9D}, {0x80, 0x98}, {0x80, 0x9B}, {0x80, 0x9A}, /* 0x78-0x7B */ + {0x80, 0xB2}, {0x82, 0x6F}, {0x82, 0x92}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x82, 0x8B}, {0x82, 0x8D}, {0x89, 0x8B}, /* 0xA0-0xA3 */ + {0x89, 0xD2}, {0x8A, 0x00}, {0x8C, 0x37}, {0x8C, 0x46}, /* 0xA4-0xA7 */ + {0x8C, 0x55}, {0x8C, 0x9D}, {0x8D, 0x64}, {0x8D, 0x70}, /* 0xA8-0xAB */ + {0x8D, 0xB3}, {0x8E, 0xAB}, {0x8E, 0xCA}, {0x8F, 0x9B}, /* 0xAC-0xAF */ + {0x8F, 0xB0}, {0x8F, 0xC2}, {0x8F, 0xC6}, {0x8F, 0xC5}, /* 0xB0-0xB3 */ + {0x8F, 0xC4}, {0x5D, 0xE1}, {0x90, 0x91}, {0x90, 0xA2}, /* 0xB4-0xB7 */ + {0x90, 0xAA}, {0x90, 0xA6}, {0x90, 0xA3}, {0x91, 0x49}, /* 0xB8-0xBB */ + {0x91, 0xC6}, {0x91, 0xCC}, {0x96, 0x32}, {0x96, 0x2E}, /* 0xBC-0xBF */ + {0x96, 0x31}, {0x96, 0x2A}, {0x96, 0x2C}, {0x4E, 0x26}, /* 0xC0-0xC3 */ + {0x4E, 0x56}, {0x4E, 0x73}, {0x4E, 0x8B}, {0x4E, 0x9B}, /* 0xC4-0xC7 */ + {0x4E, 0x9E}, {0x4E, 0xAB}, {0x4E, 0xAC}, {0x4F, 0x6F}, /* 0xC8-0xCB */ + {0x4F, 0x9D}, {0x4F, 0x8D}, {0x4F, 0x73}, {0x4F, 0x7F}, /* 0xCC-0xCF */ + {0x4F, 0x6C}, {0x4F, 0x9B}, {0x4F, 0x8B}, {0x4F, 0x86}, /* 0xD0-0xD3 */ + {0x4F, 0x83}, {0x4F, 0x70}, {0x4F, 0x75}, {0x4F, 0x88}, /* 0xD4-0xD7 */ + {0x4F, 0x69}, {0x4F, 0x7B}, {0x4F, 0x96}, {0x4F, 0x7E}, /* 0xD8-0xDB */ + {0x4F, 0x8F}, {0x4F, 0x91}, {0x4F, 0x7A}, {0x51, 0x54}, /* 0xDC-0xDF */ + {0x51, 0x52}, {0x51, 0x55}, {0x51, 0x69}, {0x51, 0x77}, /* 0xE0-0xE3 */ + {0x51, 0x76}, {0x51, 0x78}, {0x51, 0xBD}, {0x51, 0xFD}, /* 0xE4-0xE7 */ + {0x52, 0x3B}, {0x52, 0x38}, {0x52, 0x37}, {0x52, 0x3A}, /* 0xE8-0xEB */ + {0x52, 0x30}, {0x52, 0x2E}, {0x52, 0x36}, {0x52, 0x41}, /* 0xEC-0xEF */ + {0x52, 0xBE}, {0x52, 0xBB}, {0x53, 0x52}, {0x53, 0x54}, /* 0xF0-0xF3 */ + {0x53, 0x53}, {0x53, 0x51}, {0x53, 0x66}, {0x53, 0x77}, /* 0xF4-0xF7 */ + {0x53, 0x78}, {0x53, 0x79}, {0x53, 0xD6}, {0x53, 0xD4}, /* 0xF8-0xFB */ + {0x53, 0xD7}, {0x54, 0x73}, {0x54, 0x75}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_A9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x54, 0x96}, {0x54, 0x78}, {0x54, 0x95}, {0x54, 0x80}, /* 0x40-0x43 */ + {0x54, 0x7B}, {0x54, 0x77}, {0x54, 0x84}, {0x54, 0x92}, /* 0x44-0x47 */ + {0x54, 0x86}, {0x54, 0x7C}, {0x54, 0x90}, {0x54, 0x71}, /* 0x48-0x4B */ + {0x54, 0x76}, {0x54, 0x8C}, {0x54, 0x9A}, {0x54, 0x62}, /* 0x4C-0x4F */ + {0x54, 0x68}, {0x54, 0x8B}, {0x54, 0x7D}, {0x54, 0x8E}, /* 0x50-0x53 */ + {0x56, 0xFA}, {0x57, 0x83}, {0x57, 0x77}, {0x57, 0x6A}, /* 0x54-0x57 */ + {0x57, 0x69}, {0x57, 0x61}, {0x57, 0x66}, {0x57, 0x64}, /* 0x58-0x5B */ + {0x57, 0x7C}, {0x59, 0x1C}, {0x59, 0x49}, {0x59, 0x47}, /* 0x5C-0x5F */ + {0x59, 0x48}, {0x59, 0x44}, {0x59, 0x54}, {0x59, 0xBE}, /* 0x60-0x63 */ + {0x59, 0xBB}, {0x59, 0xD4}, {0x59, 0xB9}, {0x59, 0xAE}, /* 0x64-0x67 */ + {0x59, 0xD1}, {0x59, 0xC6}, {0x59, 0xD0}, {0x59, 0xCD}, /* 0x68-0x6B */ + {0x59, 0xCB}, {0x59, 0xD3}, {0x59, 0xCA}, {0x59, 0xAF}, /* 0x6C-0x6F */ + {0x59, 0xB3}, {0x59, 0xD2}, {0x59, 0xC5}, {0x5B, 0x5F}, /* 0x70-0x73 */ + {0x5B, 0x64}, {0x5B, 0x63}, {0x5B, 0x97}, {0x5B, 0x9A}, /* 0x74-0x77 */ + {0x5B, 0x98}, {0x5B, 0x9C}, {0x5B, 0x99}, {0x5B, 0x9B}, /* 0x78-0x7B */ + {0x5C, 0x1A}, {0x5C, 0x48}, {0x5C, 0x45}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5C, 0x46}, {0x5C, 0xB7}, {0x5C, 0xA1}, /* 0xA0-0xA3 */ + {0x5C, 0xB8}, {0x5C, 0xA9}, {0x5C, 0xAB}, {0x5C, 0xB1}, /* 0xA4-0xA7 */ + {0x5C, 0xB3}, {0x5E, 0x18}, {0x5E, 0x1A}, {0x5E, 0x16}, /* 0xA8-0xAB */ + {0x5E, 0x15}, {0x5E, 0x1B}, {0x5E, 0x11}, {0x5E, 0x78}, /* 0xAC-0xAF */ + {0x5E, 0x9A}, {0x5E, 0x97}, {0x5E, 0x9C}, {0x5E, 0x95}, /* 0xB0-0xB3 */ + {0x5E, 0x96}, {0x5E, 0xF6}, {0x5F, 0x26}, {0x5F, 0x27}, /* 0xB4-0xB7 */ + {0x5F, 0x29}, {0x5F, 0x80}, {0x5F, 0x81}, {0x5F, 0x7F}, /* 0xB8-0xBB */ + {0x5F, 0x7C}, {0x5F, 0xDD}, {0x5F, 0xE0}, {0x5F, 0xFD}, /* 0xBC-0xBF */ + {0x5F, 0xF5}, {0x5F, 0xFF}, {0x60, 0x0F}, {0x60, 0x14}, /* 0xC0-0xC3 */ + {0x60, 0x2F}, {0x60, 0x35}, {0x60, 0x16}, {0x60, 0x2A}, /* 0xC4-0xC7 */ + {0x60, 0x15}, {0x60, 0x21}, {0x60, 0x27}, {0x60, 0x29}, /* 0xC8-0xCB */ + {0x60, 0x2B}, {0x60, 0x1B}, {0x62, 0x16}, {0x62, 0x15}, /* 0xCC-0xCF */ + {0x62, 0x3F}, {0x62, 0x3E}, {0x62, 0x40}, {0x62, 0x7F}, /* 0xD0-0xD3 */ + {0x62, 0xC9}, {0x62, 0xCC}, {0x62, 0xC4}, {0x62, 0xBF}, /* 0xD4-0xD7 */ + {0x62, 0xC2}, {0x62, 0xB9}, {0x62, 0xD2}, {0x62, 0xDB}, /* 0xD8-0xDB */ + {0x62, 0xAB}, {0x62, 0xD3}, {0x62, 0xD4}, {0x62, 0xCB}, /* 0xDC-0xDF */ + {0x62, 0xC8}, {0x62, 0xA8}, {0x62, 0xBD}, {0x62, 0xBC}, /* 0xE0-0xE3 */ + {0x62, 0xD0}, {0x62, 0xD9}, {0x62, 0xC7}, {0x62, 0xCD}, /* 0xE4-0xE7 */ + {0x62, 0xB5}, {0x62, 0xDA}, {0x62, 0xB1}, {0x62, 0xD8}, /* 0xE8-0xEB */ + {0x62, 0xD6}, {0x62, 0xD7}, {0x62, 0xC6}, {0x62, 0xAC}, /* 0xEC-0xEF */ + {0x62, 0xCE}, {0x65, 0x3E}, {0x65, 0xA7}, {0x65, 0xBC}, /* 0xF0-0xF3 */ + {0x65, 0xFA}, {0x66, 0x14}, {0x66, 0x13}, {0x66, 0x0C}, /* 0xF4-0xF7 */ + {0x66, 0x06}, {0x66, 0x02}, {0x66, 0x0E}, {0x66, 0x00}, /* 0xF8-0xFB */ + {0x66, 0x0F}, {0x66, 0x15}, {0x66, 0x0A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x66, 0x07}, {0x67, 0x0D}, {0x67, 0x0B}, {0x67, 0x6D}, /* 0x40-0x43 */ + {0x67, 0x8B}, {0x67, 0x95}, {0x67, 0x71}, {0x67, 0x9C}, /* 0x44-0x47 */ + {0x67, 0x73}, {0x67, 0x77}, {0x67, 0x87}, {0x67, 0x9D}, /* 0x48-0x4B */ + {0x67, 0x97}, {0x67, 0x6F}, {0x67, 0x70}, {0x67, 0x7F}, /* 0x4C-0x4F */ + {0x67, 0x89}, {0x67, 0x7E}, {0x67, 0x90}, {0x67, 0x75}, /* 0x50-0x53 */ + {0x67, 0x9A}, {0x67, 0x93}, {0x67, 0x7C}, {0x67, 0x6A}, /* 0x54-0x57 */ + {0x67, 0x72}, {0x6B, 0x23}, {0x6B, 0x66}, {0x6B, 0x67}, /* 0x58-0x5B */ + {0x6B, 0x7F}, {0x6C, 0x13}, {0x6C, 0x1B}, {0x6C, 0xE3}, /* 0x5C-0x5F */ + {0x6C, 0xE8}, {0x6C, 0xF3}, {0x6C, 0xB1}, {0x6C, 0xCC}, /* 0x60-0x63 */ + {0x6C, 0xE5}, {0x6C, 0xB3}, {0x6C, 0xBD}, {0x6C, 0xBE}, /* 0x64-0x67 */ + {0x6C, 0xBC}, {0x6C, 0xE2}, {0x6C, 0xAB}, {0x6C, 0xD5}, /* 0x68-0x6B */ + {0x6C, 0xD3}, {0x6C, 0xB8}, {0x6C, 0xC4}, {0x6C, 0xB9}, /* 0x6C-0x6F */ + {0x6C, 0xC1}, {0x6C, 0xAE}, {0x6C, 0xD7}, {0x6C, 0xC5}, /* 0x70-0x73 */ + {0x6C, 0xF1}, {0x6C, 0xBF}, {0x6C, 0xBB}, {0x6C, 0xE1}, /* 0x74-0x77 */ + {0x6C, 0xDB}, {0x6C, 0xCA}, {0x6C, 0xAC}, {0x6C, 0xEF}, /* 0x78-0x7B */ + {0x6C, 0xDC}, {0x6C, 0xD6}, {0x6C, 0xE0}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x70, 0x95}, {0x70, 0x8E}, {0x70, 0x92}, /* 0xA0-0xA3 */ + {0x70, 0x8A}, {0x70, 0x99}, {0x72, 0x2C}, {0x72, 0x2D}, /* 0xA4-0xA7 */ + {0x72, 0x38}, {0x72, 0x48}, {0x72, 0x67}, {0x72, 0x69}, /* 0xA8-0xAB */ + {0x72, 0xC0}, {0x72, 0xCE}, {0x72, 0xD9}, {0x72, 0xD7}, /* 0xAC-0xAF */ + {0x72, 0xD0}, {0x73, 0xA9}, {0x73, 0xA8}, {0x73, 0x9F}, /* 0xB0-0xB3 */ + {0x73, 0xAB}, {0x73, 0xA5}, {0x75, 0x3D}, {0x75, 0x9D}, /* 0xB4-0xB7 */ + {0x75, 0x99}, {0x75, 0x9A}, {0x76, 0x84}, {0x76, 0xC2}, /* 0xB8-0xBB */ + {0x76, 0xF2}, {0x76, 0xF4}, {0x77, 0xE5}, {0x77, 0xFD}, /* 0xBC-0xBF */ + {0x79, 0x3E}, {0x79, 0x40}, {0x79, 0x41}, {0x79, 0xC9}, /* 0xC0-0xC3 */ + {0x79, 0xC8}, {0x7A, 0x7A}, {0x7A, 0x79}, {0x7A, 0xFA}, /* 0xC4-0xC7 */ + {0x7C, 0xFE}, {0x7F, 0x54}, {0x7F, 0x8C}, {0x7F, 0x8B}, /* 0xC8-0xCB */ + {0x80, 0x05}, {0x80, 0xBA}, {0x80, 0xA5}, {0x80, 0xA2}, /* 0xCC-0xCF */ + {0x80, 0xB1}, {0x80, 0xA1}, {0x80, 0xAB}, {0x80, 0xA9}, /* 0xD0-0xD3 */ + {0x80, 0xB4}, {0x80, 0xAA}, {0x80, 0xAF}, {0x81, 0xE5}, /* 0xD4-0xD7 */ + {0x81, 0xFE}, {0x82, 0x0D}, {0x82, 0xB3}, {0x82, 0x9D}, /* 0xD8-0xDB */ + {0x82, 0x99}, {0x82, 0xAD}, {0x82, 0xBD}, {0x82, 0x9F}, /* 0xDC-0xDF */ + {0x82, 0xB9}, {0x82, 0xB1}, {0x82, 0xAC}, {0x82, 0xA5}, /* 0xE0-0xE3 */ + {0x82, 0xAF}, {0x82, 0xB8}, {0x82, 0xA3}, {0x82, 0xB0}, /* 0xE4-0xE7 */ + {0x82, 0xBE}, {0x82, 0xB7}, {0x86, 0x4E}, {0x86, 0x71}, /* 0xE8-0xEB */ + {0x52, 0x1D}, {0x88, 0x68}, {0x8E, 0xCB}, {0x8F, 0xCE}, /* 0xEC-0xEF */ + {0x8F, 0xD4}, {0x8F, 0xD1}, {0x90, 0xB5}, {0x90, 0xB8}, /* 0xF0-0xF3 */ + {0x90, 0xB1}, {0x90, 0xB6}, {0x91, 0xC7}, {0x91, 0xD1}, /* 0xF4-0xF7 */ + {0x95, 0x77}, {0x95, 0x80}, {0x96, 0x1C}, {0x96, 0x40}, /* 0xF8-0xFB */ + {0x96, 0x3F}, {0x96, 0x3B}, {0x96, 0x44}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x96, 0x42}, {0x96, 0xB9}, {0x96, 0xE8}, {0x97, 0x52}, /* 0x40-0x43 */ + {0x97, 0x5E}, {0x4E, 0x9F}, {0x4E, 0xAD}, {0x4E, 0xAE}, /* 0x44-0x47 */ + {0x4F, 0xE1}, {0x4F, 0xB5}, {0x4F, 0xAF}, {0x4F, 0xBF}, /* 0x48-0x4B */ + {0x4F, 0xE0}, {0x4F, 0xD1}, {0x4F, 0xCF}, {0x4F, 0xDD}, /* 0x4C-0x4F */ + {0x4F, 0xC3}, {0x4F, 0xB6}, {0x4F, 0xD8}, {0x4F, 0xDF}, /* 0x50-0x53 */ + {0x4F, 0xCA}, {0x4F, 0xD7}, {0x4F, 0xAE}, {0x4F, 0xD0}, /* 0x54-0x57 */ + {0x4F, 0xC4}, {0x4F, 0xC2}, {0x4F, 0xDA}, {0x4F, 0xCE}, /* 0x58-0x5B */ + {0x4F, 0xDE}, {0x4F, 0xB7}, {0x51, 0x57}, {0x51, 0x92}, /* 0x5C-0x5F */ + {0x51, 0x91}, {0x51, 0xA0}, {0x52, 0x4E}, {0x52, 0x43}, /* 0x60-0x63 */ + {0x52, 0x4A}, {0x52, 0x4D}, {0x52, 0x4C}, {0x52, 0x4B}, /* 0x64-0x67 */ + {0x52, 0x47}, {0x52, 0xC7}, {0x52, 0xC9}, {0x52, 0xC3}, /* 0x68-0x6B */ + {0x52, 0xC1}, {0x53, 0x0D}, {0x53, 0x57}, {0x53, 0x7B}, /* 0x6C-0x6F */ + {0x53, 0x9A}, {0x53, 0xDB}, {0x54, 0xAC}, {0x54, 0xC0}, /* 0x70-0x73 */ + {0x54, 0xA8}, {0x54, 0xCE}, {0x54, 0xC9}, {0x54, 0xB8}, /* 0x74-0x77 */ + {0x54, 0xA6}, {0x54, 0xB3}, {0x54, 0xC7}, {0x54, 0xC2}, /* 0x78-0x7B */ + {0x54, 0xBD}, {0x54, 0xAA}, {0x54, 0xC1}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x54, 0xC4}, {0x54, 0xC8}, {0x54, 0xAF}, /* 0xA0-0xA3 */ + {0x54, 0xAB}, {0x54, 0xB1}, {0x54, 0xBB}, {0x54, 0xA9}, /* 0xA4-0xA7 */ + {0x54, 0xA7}, {0x54, 0xBF}, {0x56, 0xFF}, {0x57, 0x82}, /* 0xA8-0xAB */ + {0x57, 0x8B}, {0x57, 0xA0}, {0x57, 0xA3}, {0x57, 0xA2}, /* 0xAC-0xAF */ + {0x57, 0xCE}, {0x57, 0xAE}, {0x57, 0x93}, {0x59, 0x55}, /* 0xB0-0xB3 */ + {0x59, 0x51}, {0x59, 0x4F}, {0x59, 0x4E}, {0x59, 0x50}, /* 0xB4-0xB7 */ + {0x59, 0xDC}, {0x59, 0xD8}, {0x59, 0xFF}, {0x59, 0xE3}, /* 0xB8-0xBB */ + {0x59, 0xE8}, {0x5A, 0x03}, {0x59, 0xE5}, {0x59, 0xEA}, /* 0xBC-0xBF */ + {0x59, 0xDA}, {0x59, 0xE6}, {0x5A, 0x01}, {0x59, 0xFB}, /* 0xC0-0xC3 */ + {0x5B, 0x69}, {0x5B, 0xA3}, {0x5B, 0xA6}, {0x5B, 0xA4}, /* 0xC4-0xC7 */ + {0x5B, 0xA2}, {0x5B, 0xA5}, {0x5C, 0x01}, {0x5C, 0x4E}, /* 0xC8-0xCB */ + {0x5C, 0x4F}, {0x5C, 0x4D}, {0x5C, 0x4B}, {0x5C, 0xD9}, /* 0xCC-0xCF */ + {0x5C, 0xD2}, {0x5D, 0xF7}, {0x5E, 0x1D}, {0x5E, 0x25}, /* 0xD0-0xD3 */ + {0x5E, 0x1F}, {0x5E, 0x7D}, {0x5E, 0xA0}, {0x5E, 0xA6}, /* 0xD4-0xD7 */ + {0x5E, 0xFA}, {0x5F, 0x08}, {0x5F, 0x2D}, {0x5F, 0x65}, /* 0xD8-0xDB */ + {0x5F, 0x88}, {0x5F, 0x85}, {0x5F, 0x8A}, {0x5F, 0x8B}, /* 0xDC-0xDF */ + {0x5F, 0x87}, {0x5F, 0x8C}, {0x5F, 0x89}, {0x60, 0x12}, /* 0xE0-0xE3 */ + {0x60, 0x1D}, {0x60, 0x20}, {0x60, 0x25}, {0x60, 0x0E}, /* 0xE4-0xE7 */ + {0x60, 0x28}, {0x60, 0x4D}, {0x60, 0x70}, {0x60, 0x68}, /* 0xE8-0xEB */ + {0x60, 0x62}, {0x60, 0x46}, {0x60, 0x43}, {0x60, 0x6C}, /* 0xEC-0xEF */ + {0x60, 0x6B}, {0x60, 0x6A}, {0x60, 0x64}, {0x62, 0x41}, /* 0xF0-0xF3 */ + {0x62, 0xDC}, {0x63, 0x16}, {0x63, 0x09}, {0x62, 0xFC}, /* 0xF4-0xF7 */ + {0x62, 0xED}, {0x63, 0x01}, {0x62, 0xEE}, {0x62, 0xFD}, /* 0xF8-0xFB */ + {0x63, 0x07}, {0x62, 0xF1}, {0x62, 0xF7}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x62, 0xEF}, {0x62, 0xEC}, {0x62, 0xFE}, {0x62, 0xF4}, /* 0x40-0x43 */ + {0x63, 0x11}, {0x63, 0x02}, {0x65, 0x3F}, {0x65, 0x45}, /* 0x44-0x47 */ + {0x65, 0xAB}, {0x65, 0xBD}, {0x65, 0xE2}, {0x66, 0x25}, /* 0x48-0x4B */ + {0x66, 0x2D}, {0x66, 0x20}, {0x66, 0x27}, {0x66, 0x2F}, /* 0x4C-0x4F */ + {0x66, 0x1F}, {0x66, 0x28}, {0x66, 0x31}, {0x66, 0x24}, /* 0x50-0x53 */ + {0x66, 0xF7}, {0x67, 0xFF}, {0x67, 0xD3}, {0x67, 0xF1}, /* 0x54-0x57 */ + {0x67, 0xD4}, {0x67, 0xD0}, {0x67, 0xEC}, {0x67, 0xB6}, /* 0x58-0x5B */ + {0x67, 0xAF}, {0x67, 0xF5}, {0x67, 0xE9}, {0x67, 0xEF}, /* 0x5C-0x5F */ + {0x67, 0xC4}, {0x67, 0xD1}, {0x67, 0xB4}, {0x67, 0xDA}, /* 0x60-0x63 */ + {0x67, 0xE5}, {0x67, 0xB8}, {0x67, 0xCF}, {0x67, 0xDE}, /* 0x64-0x67 */ + {0x67, 0xF3}, {0x67, 0xB0}, {0x67, 0xD9}, {0x67, 0xE2}, /* 0x68-0x6B */ + {0x67, 0xDD}, {0x67, 0xD2}, {0x6B, 0x6A}, {0x6B, 0x83}, /* 0x6C-0x6F */ + {0x6B, 0x86}, {0x6B, 0xB5}, {0x6B, 0xD2}, {0x6B, 0xD7}, /* 0x70-0x73 */ + {0x6C, 0x1F}, {0x6C, 0xC9}, {0x6D, 0x0B}, {0x6D, 0x32}, /* 0x74-0x77 */ + {0x6D, 0x2A}, {0x6D, 0x41}, {0x6D, 0x25}, {0x6D, 0x0C}, /* 0x78-0x7B */ + {0x6D, 0x31}, {0x6D, 0x1E}, {0x6D, 0x17}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6D, 0x3B}, {0x6D, 0x3D}, {0x6D, 0x3E}, /* 0xA0-0xA3 */ + {0x6D, 0x36}, {0x6D, 0x1B}, {0x6C, 0xF5}, {0x6D, 0x39}, /* 0xA4-0xA7 */ + {0x6D, 0x27}, {0x6D, 0x38}, {0x6D, 0x29}, {0x6D, 0x2E}, /* 0xA8-0xAB */ + {0x6D, 0x35}, {0x6D, 0x0E}, {0x6D, 0x2B}, {0x70, 0xAB}, /* 0xAC-0xAF */ + {0x70, 0xBA}, {0x70, 0xB3}, {0x70, 0xAC}, {0x70, 0xAF}, /* 0xB0-0xB3 */ + {0x70, 0xAD}, {0x70, 0xB8}, {0x70, 0xAE}, {0x70, 0xA4}, /* 0xB4-0xB7 */ + {0x72, 0x30}, {0x72, 0x72}, {0x72, 0x6F}, {0x72, 0x74}, /* 0xB8-0xBB */ + {0x72, 0xE9}, {0x72, 0xE0}, {0x72, 0xE1}, {0x73, 0xB7}, /* 0xBC-0xBF */ + {0x73, 0xCA}, {0x73, 0xBB}, {0x73, 0xB2}, {0x73, 0xCD}, /* 0xC0-0xC3 */ + {0x73, 0xC0}, {0x73, 0xB3}, {0x75, 0x1A}, {0x75, 0x2D}, /* 0xC4-0xC7 */ + {0x75, 0x4F}, {0x75, 0x4C}, {0x75, 0x4E}, {0x75, 0x4B}, /* 0xC8-0xCB */ + {0x75, 0xAB}, {0x75, 0xA4}, {0x75, 0xA5}, {0x75, 0xA2}, /* 0xCC-0xCF */ + {0x75, 0xA3}, {0x76, 0x78}, {0x76, 0x86}, {0x76, 0x87}, /* 0xD0-0xD3 */ + {0x76, 0x88}, {0x76, 0xC8}, {0x76, 0xC6}, {0x76, 0xC3}, /* 0xD4-0xD7 */ + {0x76, 0xC5}, {0x77, 0x01}, {0x76, 0xF9}, {0x76, 0xF8}, /* 0xD8-0xDB */ + {0x77, 0x09}, {0x77, 0x0B}, {0x76, 0xFE}, {0x76, 0xFC}, /* 0xDC-0xDF */ + {0x77, 0x07}, {0x77, 0xDC}, {0x78, 0x02}, {0x78, 0x14}, /* 0xE0-0xE3 */ + {0x78, 0x0C}, {0x78, 0x0D}, {0x79, 0x46}, {0x79, 0x49}, /* 0xE4-0xE7 */ + {0x79, 0x48}, {0x79, 0x47}, {0x79, 0xB9}, {0x79, 0xBA}, /* 0xE8-0xEB */ + {0x79, 0xD1}, {0x79, 0xD2}, {0x79, 0xCB}, {0x7A, 0x7F}, /* 0xEC-0xEF */ + {0x7A, 0x81}, {0x7A, 0xFF}, {0x7A, 0xFD}, {0x7C, 0x7D}, /* 0xF0-0xF3 */ + {0x7D, 0x02}, {0x7D, 0x05}, {0x7D, 0x00}, {0x7D, 0x09}, /* 0xF4-0xF7 */ + {0x7D, 0x07}, {0x7D, 0x04}, {0x7D, 0x06}, {0x7F, 0x38}, /* 0xF8-0xFB */ + {0x7F, 0x8E}, {0x7F, 0xBF}, {0x80, 0x04}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x80, 0x10}, {0x80, 0x0D}, {0x80, 0x11}, {0x80, 0x36}, /* 0x40-0x43 */ + {0x80, 0xD6}, {0x80, 0xE5}, {0x80, 0xDA}, {0x80, 0xC3}, /* 0x44-0x47 */ + {0x80, 0xC4}, {0x80, 0xCC}, {0x80, 0xE1}, {0x80, 0xDB}, /* 0x48-0x4B */ + {0x80, 0xCE}, {0x80, 0xDE}, {0x80, 0xE4}, {0x80, 0xDD}, /* 0x4C-0x4F */ + {0x81, 0xF4}, {0x82, 0x22}, {0x82, 0xE7}, {0x83, 0x03}, /* 0x50-0x53 */ + {0x83, 0x05}, {0x82, 0xE3}, {0x82, 0xDB}, {0x82, 0xE6}, /* 0x54-0x57 */ + {0x83, 0x04}, {0x82, 0xE5}, {0x83, 0x02}, {0x83, 0x09}, /* 0x58-0x5B */ + {0x82, 0xD2}, {0x82, 0xD7}, {0x82, 0xF1}, {0x83, 0x01}, /* 0x5C-0x5F */ + {0x82, 0xDC}, {0x82, 0xD4}, {0x82, 0xD1}, {0x82, 0xDE}, /* 0x60-0x63 */ + {0x82, 0xD3}, {0x82, 0xDF}, {0x82, 0xEF}, {0x83, 0x06}, /* 0x64-0x67 */ + {0x86, 0x50}, {0x86, 0x79}, {0x86, 0x7B}, {0x86, 0x7A}, /* 0x68-0x6B */ + {0x88, 0x4D}, {0x88, 0x6B}, {0x89, 0x81}, {0x89, 0xD4}, /* 0x6C-0x6F */ + {0x8A, 0x08}, {0x8A, 0x02}, {0x8A, 0x03}, {0x8C, 0x9E}, /* 0x70-0x73 */ + {0x8C, 0xA0}, {0x8D, 0x74}, {0x8D, 0x73}, {0x8D, 0xB4}, /* 0x74-0x77 */ + {0x8E, 0xCD}, {0x8E, 0xCC}, {0x8F, 0xF0}, {0x8F, 0xE6}, /* 0x78-0x7B */ + {0x8F, 0xE2}, {0x8F, 0xEA}, {0x8F, 0xE5}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8F, 0xED}, {0x8F, 0xEB}, {0x8F, 0xE4}, /* 0xA0-0xA3 */ + {0x8F, 0xE8}, {0x90, 0xCA}, {0x90, 0xCE}, {0x90, 0xC1}, /* 0xA4-0xA7 */ + {0x90, 0xC3}, {0x91, 0x4B}, {0x91, 0x4A}, {0x91, 0xCD}, /* 0xA8-0xAB */ + {0x95, 0x82}, {0x96, 0x50}, {0x96, 0x4B}, {0x96, 0x4C}, /* 0xAC-0xAF */ + {0x96, 0x4D}, {0x97, 0x62}, {0x97, 0x69}, {0x97, 0xCB}, /* 0xB0-0xB3 */ + {0x97, 0xED}, {0x97, 0xF3}, {0x98, 0x01}, {0x98, 0xA8}, /* 0xB4-0xB7 */ + {0x98, 0xDB}, {0x98, 0xDF}, {0x99, 0x96}, {0x99, 0x99}, /* 0xB8-0xBB */ + {0x4E, 0x58}, {0x4E, 0xB3}, {0x50, 0x0C}, {0x50, 0x0D}, /* 0xBC-0xBF */ + {0x50, 0x23}, {0x4F, 0xEF}, {0x50, 0x26}, {0x50, 0x25}, /* 0xC0-0xC3 */ + {0x4F, 0xF8}, {0x50, 0x29}, {0x50, 0x16}, {0x50, 0x06}, /* 0xC4-0xC7 */ + {0x50, 0x3C}, {0x50, 0x1F}, {0x50, 0x1A}, {0x50, 0x12}, /* 0xC8-0xCB */ + {0x50, 0x11}, {0x4F, 0xFA}, {0x50, 0x00}, {0x50, 0x14}, /* 0xCC-0xCF */ + {0x50, 0x28}, {0x4F, 0xF1}, {0x50, 0x21}, {0x50, 0x0B}, /* 0xD0-0xD3 */ + {0x50, 0x19}, {0x50, 0x18}, {0x4F, 0xF3}, {0x4F, 0xEE}, /* 0xD4-0xD7 */ + {0x50, 0x2D}, {0x50, 0x2A}, {0x4F, 0xFE}, {0x50, 0x2B}, /* 0xD8-0xDB */ + {0x50, 0x09}, {0x51, 0x7C}, {0x51, 0xA4}, {0x51, 0xA5}, /* 0xDC-0xDF */ + {0x51, 0xA2}, {0x51, 0xCD}, {0x51, 0xCC}, {0x51, 0xC6}, /* 0xE0-0xE3 */ + {0x51, 0xCB}, {0x52, 0x56}, {0x52, 0x5C}, {0x52, 0x54}, /* 0xE4-0xE7 */ + {0x52, 0x5B}, {0x52, 0x5D}, {0x53, 0x2A}, {0x53, 0x7F}, /* 0xE8-0xEB */ + {0x53, 0x9F}, {0x53, 0x9D}, {0x53, 0xDF}, {0x54, 0xE8}, /* 0xEC-0xEF */ + {0x55, 0x10}, {0x55, 0x01}, {0x55, 0x37}, {0x54, 0xFC}, /* 0xF0-0xF3 */ + {0x54, 0xE5}, {0x54, 0xF2}, {0x55, 0x06}, {0x54, 0xFA}, /* 0xF4-0xF7 */ + {0x55, 0x14}, {0x54, 0xE9}, {0x54, 0xED}, {0x54, 0xE1}, /* 0xF8-0xFB */ + {0x55, 0x09}, {0x54, 0xEE}, {0x54, 0xEA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x54, 0xE6}, {0x55, 0x27}, {0x55, 0x07}, {0x54, 0xFD}, /* 0x40-0x43 */ + {0x55, 0x0F}, {0x57, 0x03}, {0x57, 0x04}, {0x57, 0xC2}, /* 0x44-0x47 */ + {0x57, 0xD4}, {0x57, 0xCB}, {0x57, 0xC3}, {0x58, 0x09}, /* 0x48-0x4B */ + {0x59, 0x0F}, {0x59, 0x57}, {0x59, 0x58}, {0x59, 0x5A}, /* 0x4C-0x4F */ + {0x5A, 0x11}, {0x5A, 0x18}, {0x5A, 0x1C}, {0x5A, 0x1F}, /* 0x50-0x53 */ + {0x5A, 0x1B}, {0x5A, 0x13}, {0x59, 0xEC}, {0x5A, 0x20}, /* 0x54-0x57 */ + {0x5A, 0x23}, {0x5A, 0x29}, {0x5A, 0x25}, {0x5A, 0x0C}, /* 0x58-0x5B */ + {0x5A, 0x09}, {0x5B, 0x6B}, {0x5C, 0x58}, {0x5B, 0xB0}, /* 0x5C-0x5F */ + {0x5B, 0xB3}, {0x5B, 0xB6}, {0x5B, 0xB4}, {0x5B, 0xAE}, /* 0x60-0x63 */ + {0x5B, 0xB5}, {0x5B, 0xB9}, {0x5B, 0xB8}, {0x5C, 0x04}, /* 0x64-0x67 */ + {0x5C, 0x51}, {0x5C, 0x55}, {0x5C, 0x50}, {0x5C, 0xED}, /* 0x68-0x6B */ + {0x5C, 0xFD}, {0x5C, 0xFB}, {0x5C, 0xEA}, {0x5C, 0xE8}, /* 0x6C-0x6F */ + {0x5C, 0xF0}, {0x5C, 0xF6}, {0x5D, 0x01}, {0x5C, 0xF4}, /* 0x70-0x73 */ + {0x5D, 0xEE}, {0x5E, 0x2D}, {0x5E, 0x2B}, {0x5E, 0xAB}, /* 0x74-0x77 */ + {0x5E, 0xAD}, {0x5E, 0xA7}, {0x5F, 0x31}, {0x5F, 0x92}, /* 0x78-0x7B */ + {0x5F, 0x91}, {0x5F, 0x90}, {0x60, 0x59}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x60, 0x63}, {0x60, 0x65}, {0x60, 0x50}, /* 0xA0-0xA3 */ + {0x60, 0x55}, {0x60, 0x6D}, {0x60, 0x69}, {0x60, 0x6F}, /* 0xA4-0xA7 */ + {0x60, 0x84}, {0x60, 0x9F}, {0x60, 0x9A}, {0x60, 0x8D}, /* 0xA8-0xAB */ + {0x60, 0x94}, {0x60, 0x8C}, {0x60, 0x85}, {0x60, 0x96}, /* 0xAC-0xAF */ + {0x62, 0x47}, {0x62, 0xF3}, {0x63, 0x08}, {0x62, 0xFF}, /* 0xB0-0xB3 */ + {0x63, 0x4E}, {0x63, 0x3E}, {0x63, 0x2F}, {0x63, 0x55}, /* 0xB4-0xB7 */ + {0x63, 0x42}, {0x63, 0x46}, {0x63, 0x4F}, {0x63, 0x49}, /* 0xB8-0xBB */ + {0x63, 0x3A}, {0x63, 0x50}, {0x63, 0x3D}, {0x63, 0x2A}, /* 0xBC-0xBF */ + {0x63, 0x2B}, {0x63, 0x28}, {0x63, 0x4D}, {0x63, 0x4C}, /* 0xC0-0xC3 */ + {0x65, 0x48}, {0x65, 0x49}, {0x65, 0x99}, {0x65, 0xC1}, /* 0xC4-0xC7 */ + {0x65, 0xC5}, {0x66, 0x42}, {0x66, 0x49}, {0x66, 0x4F}, /* 0xC8-0xCB */ + {0x66, 0x43}, {0x66, 0x52}, {0x66, 0x4C}, {0x66, 0x45}, /* 0xCC-0xCF */ + {0x66, 0x41}, {0x66, 0xF8}, {0x67, 0x14}, {0x67, 0x15}, /* 0xD0-0xD3 */ + {0x67, 0x17}, {0x68, 0x21}, {0x68, 0x38}, {0x68, 0x48}, /* 0xD4-0xD7 */ + {0x68, 0x46}, {0x68, 0x53}, {0x68, 0x39}, {0x68, 0x42}, /* 0xD8-0xDB */ + {0x68, 0x54}, {0x68, 0x29}, {0x68, 0xB3}, {0x68, 0x17}, /* 0xDC-0xDF */ + {0x68, 0x4C}, {0x68, 0x51}, {0x68, 0x3D}, {0x67, 0xF4}, /* 0xE0-0xE3 */ + {0x68, 0x50}, {0x68, 0x40}, {0x68, 0x3C}, {0x68, 0x43}, /* 0xE4-0xE7 */ + {0x68, 0x2A}, {0x68, 0x45}, {0x68, 0x13}, {0x68, 0x18}, /* 0xE8-0xEB */ + {0x68, 0x41}, {0x6B, 0x8A}, {0x6B, 0x89}, {0x6B, 0xB7}, /* 0xEC-0xEF */ + {0x6C, 0x23}, {0x6C, 0x27}, {0x6C, 0x28}, {0x6C, 0x26}, /* 0xF0-0xF3 */ + {0x6C, 0x24}, {0x6C, 0xF0}, {0x6D, 0x6A}, {0x6D, 0x95}, /* 0xF4-0xF7 */ + {0x6D, 0x88}, {0x6D, 0x87}, {0x6D, 0x66}, {0x6D, 0x78}, /* 0xF8-0xFB */ + {0x6D, 0x77}, {0x6D, 0x59}, {0x6D, 0x93}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_AF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6D, 0x6C}, {0x6D, 0x89}, {0x6D, 0x6E}, {0x6D, 0x5A}, /* 0x40-0x43 */ + {0x6D, 0x74}, {0x6D, 0x69}, {0x6D, 0x8C}, {0x6D, 0x8A}, /* 0x44-0x47 */ + {0x6D, 0x79}, {0x6D, 0x85}, {0x6D, 0x65}, {0x6D, 0x94}, /* 0x48-0x4B */ + {0x70, 0xCA}, {0x70, 0xD8}, {0x70, 0xE4}, {0x70, 0xD9}, /* 0x4C-0x4F */ + {0x70, 0xC8}, {0x70, 0xCF}, {0x72, 0x39}, {0x72, 0x79}, /* 0x50-0x53 */ + {0x72, 0xFC}, {0x72, 0xF9}, {0x72, 0xFD}, {0x72, 0xF8}, /* 0x54-0x57 */ + {0x72, 0xF7}, {0x73, 0x86}, {0x73, 0xED}, {0x74, 0x09}, /* 0x58-0x5B */ + {0x73, 0xEE}, {0x73, 0xE0}, {0x73, 0xEA}, {0x73, 0xDE}, /* 0x5C-0x5F */ + {0x75, 0x54}, {0x75, 0x5D}, {0x75, 0x5C}, {0x75, 0x5A}, /* 0x60-0x63 */ + {0x75, 0x59}, {0x75, 0xBE}, {0x75, 0xC5}, {0x75, 0xC7}, /* 0x64-0x67 */ + {0x75, 0xB2}, {0x75, 0xB3}, {0x75, 0xBD}, {0x75, 0xBC}, /* 0x68-0x6B */ + {0x75, 0xB9}, {0x75, 0xC2}, {0x75, 0xB8}, {0x76, 0x8B}, /* 0x6C-0x6F */ + {0x76, 0xB0}, {0x76, 0xCA}, {0x76, 0xCD}, {0x76, 0xCE}, /* 0x70-0x73 */ + {0x77, 0x29}, {0x77, 0x1F}, {0x77, 0x20}, {0x77, 0x28}, /* 0x74-0x77 */ + {0x77, 0xE9}, {0x78, 0x30}, {0x78, 0x27}, {0x78, 0x38}, /* 0x78-0x7B */ + {0x78, 0x1D}, {0x78, 0x34}, {0x78, 0x37}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x78, 0x25}, {0x78, 0x2D}, {0x78, 0x20}, /* 0xA0-0xA3 */ + {0x78, 0x1F}, {0x78, 0x32}, {0x79, 0x55}, {0x79, 0x50}, /* 0xA4-0xA7 */ + {0x79, 0x60}, {0x79, 0x5F}, {0x79, 0x56}, {0x79, 0x5E}, /* 0xA8-0xAB */ + {0x79, 0x5D}, {0x79, 0x57}, {0x79, 0x5A}, {0x79, 0xE4}, /* 0xAC-0xAF */ + {0x79, 0xE3}, {0x79, 0xE7}, {0x79, 0xDF}, {0x79, 0xE6}, /* 0xB0-0xB3 */ + {0x79, 0xE9}, {0x79, 0xD8}, {0x7A, 0x84}, {0x7A, 0x88}, /* 0xB4-0xB7 */ + {0x7A, 0xD9}, {0x7B, 0x06}, {0x7B, 0x11}, {0x7C, 0x89}, /* 0xB8-0xBB */ + {0x7D, 0x21}, {0x7D, 0x17}, {0x7D, 0x0B}, {0x7D, 0x0A}, /* 0xBC-0xBF */ + {0x7D, 0x20}, {0x7D, 0x22}, {0x7D, 0x14}, {0x7D, 0x10}, /* 0xC0-0xC3 */ + {0x7D, 0x15}, {0x7D, 0x1A}, {0x7D, 0x1C}, {0x7D, 0x0D}, /* 0xC4-0xC7 */ + {0x7D, 0x19}, {0x7D, 0x1B}, {0x7F, 0x3A}, {0x7F, 0x5F}, /* 0xC8-0xCB */ + {0x7F, 0x94}, {0x7F, 0xC5}, {0x7F, 0xC1}, {0x80, 0x06}, /* 0xCC-0xCF */ + {0x80, 0x18}, {0x80, 0x15}, {0x80, 0x19}, {0x80, 0x17}, /* 0xD0-0xD3 */ + {0x80, 0x3D}, {0x80, 0x3F}, {0x80, 0xF1}, {0x81, 0x02}, /* 0xD4-0xD7 */ + {0x80, 0xF0}, {0x81, 0x05}, {0x80, 0xED}, {0x80, 0xF4}, /* 0xD8-0xDB */ + {0x81, 0x06}, {0x80, 0xF8}, {0x80, 0xF3}, {0x81, 0x08}, /* 0xDC-0xDF */ + {0x80, 0xFD}, {0x81, 0x0A}, {0x80, 0xFC}, {0x80, 0xEF}, /* 0xE0-0xE3 */ + {0x81, 0xED}, {0x81, 0xEC}, {0x82, 0x00}, {0x82, 0x10}, /* 0xE4-0xE7 */ + {0x82, 0x2A}, {0x82, 0x2B}, {0x82, 0x28}, {0x82, 0x2C}, /* 0xE8-0xEB */ + {0x82, 0xBB}, {0x83, 0x2B}, {0x83, 0x52}, {0x83, 0x54}, /* 0xEC-0xEF */ + {0x83, 0x4A}, {0x83, 0x38}, {0x83, 0x50}, {0x83, 0x49}, /* 0xF0-0xF3 */ + {0x83, 0x35}, {0x83, 0x34}, {0x83, 0x4F}, {0x83, 0x32}, /* 0xF4-0xF7 */ + {0x83, 0x39}, {0x83, 0x36}, {0x83, 0x17}, {0x83, 0x40}, /* 0xF8-0xFB */ + {0x83, 0x31}, {0x83, 0x28}, {0x83, 0x43}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x86, 0x54}, {0x86, 0x8A}, {0x86, 0xAA}, {0x86, 0x93}, /* 0x40-0x43 */ + {0x86, 0xA4}, {0x86, 0xA9}, {0x86, 0x8C}, {0x86, 0xA3}, /* 0x44-0x47 */ + {0x86, 0x9C}, {0x88, 0x70}, {0x88, 0x77}, {0x88, 0x81}, /* 0x48-0x4B */ + {0x88, 0x82}, {0x88, 0x7D}, {0x88, 0x79}, {0x8A, 0x18}, /* 0x4C-0x4F */ + {0x8A, 0x10}, {0x8A, 0x0E}, {0x8A, 0x0C}, {0x8A, 0x15}, /* 0x50-0x53 */ + {0x8A, 0x0A}, {0x8A, 0x17}, {0x8A, 0x13}, {0x8A, 0x16}, /* 0x54-0x57 */ + {0x8A, 0x0F}, {0x8A, 0x11}, {0x8C, 0x48}, {0x8C, 0x7A}, /* 0x58-0x5B */ + {0x8C, 0x79}, {0x8C, 0xA1}, {0x8C, 0xA2}, {0x8D, 0x77}, /* 0x5C-0x5F */ + {0x8E, 0xAC}, {0x8E, 0xD2}, {0x8E, 0xD4}, {0x8E, 0xCF}, /* 0x60-0x63 */ + {0x8F, 0xB1}, {0x90, 0x01}, {0x90, 0x06}, {0x8F, 0xF7}, /* 0x64-0x67 */ + {0x90, 0x00}, {0x8F, 0xFA}, {0x8F, 0xF4}, {0x90, 0x03}, /* 0x68-0x6B */ + {0x8F, 0xFD}, {0x90, 0x05}, {0x8F, 0xF8}, {0x90, 0x95}, /* 0x6C-0x6F */ + {0x90, 0xE1}, {0x90, 0xDD}, {0x90, 0xE2}, {0x91, 0x52}, /* 0x70-0x73 */ + {0x91, 0x4D}, {0x91, 0x4C}, {0x91, 0xD8}, {0x91, 0xDD}, /* 0x74-0x77 */ + {0x91, 0xD7}, {0x91, 0xDC}, {0x91, 0xD9}, {0x95, 0x83}, /* 0x78-0x7B */ + {0x96, 0x62}, {0x96, 0x63}, {0x96, 0x61}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x96, 0x5B}, {0x96, 0x5D}, {0x96, 0x64}, /* 0xA0-0xA3 */ + {0x96, 0x58}, {0x96, 0x5E}, {0x96, 0xBB}, {0x98, 0xE2}, /* 0xA4-0xA7 */ + {0x99, 0xAC}, {0x9A, 0xA8}, {0x9A, 0xD8}, {0x9B, 0x25}, /* 0xA8-0xAB */ + {0x9B, 0x32}, {0x9B, 0x3C}, {0x4E, 0x7E}, {0x50, 0x7A}, /* 0xAC-0xAF */ + {0x50, 0x7D}, {0x50, 0x5C}, {0x50, 0x47}, {0x50, 0x43}, /* 0xB0-0xB3 */ + {0x50, 0x4C}, {0x50, 0x5A}, {0x50, 0x49}, {0x50, 0x65}, /* 0xB4-0xB7 */ + {0x50, 0x76}, {0x50, 0x4E}, {0x50, 0x55}, {0x50, 0x75}, /* 0xB8-0xBB */ + {0x50, 0x74}, {0x50, 0x77}, {0x50, 0x4F}, {0x50, 0x0F}, /* 0xBC-0xBF */ + {0x50, 0x6F}, {0x50, 0x6D}, {0x51, 0x5C}, {0x51, 0x95}, /* 0xC0-0xC3 */ + {0x51, 0xF0}, {0x52, 0x6A}, {0x52, 0x6F}, {0x52, 0xD2}, /* 0xC4-0xC7 */ + {0x52, 0xD9}, {0x52, 0xD8}, {0x52, 0xD5}, {0x53, 0x10}, /* 0xC8-0xCB */ + {0x53, 0x0F}, {0x53, 0x19}, {0x53, 0x3F}, {0x53, 0x40}, /* 0xCC-0xCF */ + {0x53, 0x3E}, {0x53, 0xC3}, {0x66, 0xFC}, {0x55, 0x46}, /* 0xD0-0xD3 */ + {0x55, 0x6A}, {0x55, 0x66}, {0x55, 0x44}, {0x55, 0x5E}, /* 0xD4-0xD7 */ + {0x55, 0x61}, {0x55, 0x43}, {0x55, 0x4A}, {0x55, 0x31}, /* 0xD8-0xDB */ + {0x55, 0x56}, {0x55, 0x4F}, {0x55, 0x55}, {0x55, 0x2F}, /* 0xDC-0xDF */ + {0x55, 0x64}, {0x55, 0x38}, {0x55, 0x2E}, {0x55, 0x5C}, /* 0xE0-0xE3 */ + {0x55, 0x2C}, {0x55, 0x63}, {0x55, 0x33}, {0x55, 0x41}, /* 0xE4-0xE7 */ + {0x55, 0x57}, {0x57, 0x08}, {0x57, 0x0B}, {0x57, 0x09}, /* 0xE8-0xEB */ + {0x57, 0xDF}, {0x58, 0x05}, {0x58, 0x0A}, {0x58, 0x06}, /* 0xEC-0xEF */ + {0x57, 0xE0}, {0x57, 0xE4}, {0x57, 0xFA}, {0x58, 0x02}, /* 0xF0-0xF3 */ + {0x58, 0x35}, {0x57, 0xF7}, {0x57, 0xF9}, {0x59, 0x20}, /* 0xF4-0xF7 */ + {0x59, 0x62}, {0x5A, 0x36}, {0x5A, 0x41}, {0x5A, 0x49}, /* 0xF8-0xFB */ + {0x5A, 0x66}, {0x5A, 0x6A}, {0x5A, 0x40}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5A, 0x3C}, {0x5A, 0x62}, {0x5A, 0x5A}, {0x5A, 0x46}, /* 0x40-0x43 */ + {0x5A, 0x4A}, {0x5B, 0x70}, {0x5B, 0xC7}, {0x5B, 0xC5}, /* 0x44-0x47 */ + {0x5B, 0xC4}, {0x5B, 0xC2}, {0x5B, 0xBF}, {0x5B, 0xC6}, /* 0x48-0x4B */ + {0x5C, 0x09}, {0x5C, 0x08}, {0x5C, 0x07}, {0x5C, 0x60}, /* 0x4C-0x4F */ + {0x5C, 0x5C}, {0x5C, 0x5D}, {0x5D, 0x07}, {0x5D, 0x06}, /* 0x50-0x53 */ + {0x5D, 0x0E}, {0x5D, 0x1B}, {0x5D, 0x16}, {0x5D, 0x22}, /* 0x54-0x57 */ + {0x5D, 0x11}, {0x5D, 0x29}, {0x5D, 0x14}, {0x5D, 0x19}, /* 0x58-0x5B */ + {0x5D, 0x24}, {0x5D, 0x27}, {0x5D, 0x17}, {0x5D, 0xE2}, /* 0x5C-0x5F */ + {0x5E, 0x38}, {0x5E, 0x36}, {0x5E, 0x33}, {0x5E, 0x37}, /* 0x60-0x63 */ + {0x5E, 0xB7}, {0x5E, 0xB8}, {0x5E, 0xB6}, {0x5E, 0xB5}, /* 0x64-0x67 */ + {0x5E, 0xBE}, {0x5F, 0x35}, {0x5F, 0x37}, {0x5F, 0x57}, /* 0x68-0x6B */ + {0x5F, 0x6C}, {0x5F, 0x69}, {0x5F, 0x6B}, {0x5F, 0x97}, /* 0x6C-0x6F */ + {0x5F, 0x99}, {0x5F, 0x9E}, {0x5F, 0x98}, {0x5F, 0xA1}, /* 0x70-0x73 */ + {0x5F, 0xA0}, {0x5F, 0x9C}, {0x60, 0x7F}, {0x60, 0xA3}, /* 0x74-0x77 */ + {0x60, 0x89}, {0x60, 0xA0}, {0x60, 0xA8}, {0x60, 0xCB}, /* 0x78-0x7B */ + {0x60, 0xB4}, {0x60, 0xE6}, {0x60, 0xBD}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x60, 0xC5}, {0x60, 0xBB}, {0x60, 0xB5}, /* 0xA0-0xA3 */ + {0x60, 0xDC}, {0x60, 0xBC}, {0x60, 0xD8}, {0x60, 0xD5}, /* 0xA4-0xA7 */ + {0x60, 0xC6}, {0x60, 0xDF}, {0x60, 0xB8}, {0x60, 0xDA}, /* 0xA8-0xAB */ + {0x60, 0xC7}, {0x62, 0x1A}, {0x62, 0x1B}, {0x62, 0x48}, /* 0xAC-0xAF */ + {0x63, 0xA0}, {0x63, 0xA7}, {0x63, 0x72}, {0x63, 0x96}, /* 0xB0-0xB3 */ + {0x63, 0xA2}, {0x63, 0xA5}, {0x63, 0x77}, {0x63, 0x67}, /* 0xB4-0xB7 */ + {0x63, 0x98}, {0x63, 0xAA}, {0x63, 0x71}, {0x63, 0xA9}, /* 0xB8-0xBB */ + {0x63, 0x89}, {0x63, 0x83}, {0x63, 0x9B}, {0x63, 0x6B}, /* 0xBC-0xBF */ + {0x63, 0xA8}, {0x63, 0x84}, {0x63, 0x88}, {0x63, 0x99}, /* 0xC0-0xC3 */ + {0x63, 0xA1}, {0x63, 0xAC}, {0x63, 0x92}, {0x63, 0x8F}, /* 0xC4-0xC7 */ + {0x63, 0x80}, {0x63, 0x7B}, {0x63, 0x69}, {0x63, 0x68}, /* 0xC8-0xCB */ + {0x63, 0x7A}, {0x65, 0x5D}, {0x65, 0x56}, {0x65, 0x51}, /* 0xCC-0xCF */ + {0x65, 0x59}, {0x65, 0x57}, {0x55, 0x5F}, {0x65, 0x4F}, /* 0xD0-0xD3 */ + {0x65, 0x58}, {0x65, 0x55}, {0x65, 0x54}, {0x65, 0x9C}, /* 0xD4-0xD7 */ + {0x65, 0x9B}, {0x65, 0xAC}, {0x65, 0xCF}, {0x65, 0xCB}, /* 0xD8-0xDB */ + {0x65, 0xCC}, {0x65, 0xCE}, {0x66, 0x5D}, {0x66, 0x5A}, /* 0xDC-0xDF */ + {0x66, 0x64}, {0x66, 0x68}, {0x66, 0x66}, {0x66, 0x5E}, /* 0xE0-0xE3 */ + {0x66, 0xF9}, {0x52, 0xD7}, {0x67, 0x1B}, {0x68, 0x81}, /* 0xE4-0xE7 */ + {0x68, 0xAF}, {0x68, 0xA2}, {0x68, 0x93}, {0x68, 0xB5}, /* 0xE8-0xEB */ + {0x68, 0x7F}, {0x68, 0x76}, {0x68, 0xB1}, {0x68, 0xA7}, /* 0xEC-0xEF */ + {0x68, 0x97}, {0x68, 0xB0}, {0x68, 0x83}, {0x68, 0xC4}, /* 0xF0-0xF3 */ + {0x68, 0xAD}, {0x68, 0x86}, {0x68, 0x85}, {0x68, 0x94}, /* 0xF4-0xF7 */ + {0x68, 0x9D}, {0x68, 0xA8}, {0x68, 0x9F}, {0x68, 0xA1}, /* 0xF8-0xFB */ + {0x68, 0x82}, {0x6B, 0x32}, {0x6B, 0xBA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6B, 0xEB}, {0x6B, 0xEC}, {0x6C, 0x2B}, {0x6D, 0x8E}, /* 0x40-0x43 */ + {0x6D, 0xBC}, {0x6D, 0xF3}, {0x6D, 0xD9}, {0x6D, 0xB2}, /* 0x44-0x47 */ + {0x6D, 0xE1}, {0x6D, 0xCC}, {0x6D, 0xE4}, {0x6D, 0xFB}, /* 0x48-0x4B */ + {0x6D, 0xFA}, {0x6E, 0x05}, {0x6D, 0xC7}, {0x6D, 0xCB}, /* 0x4C-0x4F */ + {0x6D, 0xAF}, {0x6D, 0xD1}, {0x6D, 0xAE}, {0x6D, 0xDE}, /* 0x50-0x53 */ + {0x6D, 0xF9}, {0x6D, 0xB8}, {0x6D, 0xF7}, {0x6D, 0xF5}, /* 0x54-0x57 */ + {0x6D, 0xC5}, {0x6D, 0xD2}, {0x6E, 0x1A}, {0x6D, 0xB5}, /* 0x58-0x5B */ + {0x6D, 0xDA}, {0x6D, 0xEB}, {0x6D, 0xD8}, {0x6D, 0xEA}, /* 0x5C-0x5F */ + {0x6D, 0xF1}, {0x6D, 0xEE}, {0x6D, 0xE8}, {0x6D, 0xC6}, /* 0x60-0x63 */ + {0x6D, 0xC4}, {0x6D, 0xAA}, {0x6D, 0xEC}, {0x6D, 0xBF}, /* 0x64-0x67 */ + {0x6D, 0xE6}, {0x70, 0xF9}, {0x71, 0x09}, {0x71, 0x0A}, /* 0x68-0x6B */ + {0x70, 0xFD}, {0x70, 0xEF}, {0x72, 0x3D}, {0x72, 0x7D}, /* 0x6C-0x6F */ + {0x72, 0x81}, {0x73, 0x1C}, {0x73, 0x1B}, {0x73, 0x16}, /* 0x70-0x73 */ + {0x73, 0x13}, {0x73, 0x19}, {0x73, 0x87}, {0x74, 0x05}, /* 0x74-0x77 */ + {0x74, 0x0A}, {0x74, 0x03}, {0x74, 0x06}, {0x73, 0xFE}, /* 0x78-0x7B */ + {0x74, 0x0D}, {0x74, 0xE0}, {0x74, 0xF6}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x74, 0xF7}, {0x75, 0x1C}, {0x75, 0x22}, /* 0xA0-0xA3 */ + {0x75, 0x65}, {0x75, 0x66}, {0x75, 0x62}, {0x75, 0x70}, /* 0xA4-0xA7 */ + {0x75, 0x8F}, {0x75, 0xD4}, {0x75, 0xD5}, {0x75, 0xB5}, /* 0xA8-0xAB */ + {0x75, 0xCA}, {0x75, 0xCD}, {0x76, 0x8E}, {0x76, 0xD4}, /* 0xAC-0xAF */ + {0x76, 0xD2}, {0x76, 0xDB}, {0x77, 0x37}, {0x77, 0x3E}, /* 0xB0-0xB3 */ + {0x77, 0x3C}, {0x77, 0x36}, {0x77, 0x38}, {0x77, 0x3A}, /* 0xB4-0xB7 */ + {0x78, 0x6B}, {0x78, 0x43}, {0x78, 0x4E}, {0x79, 0x65}, /* 0xB8-0xBB */ + {0x79, 0x68}, {0x79, 0x6D}, {0x79, 0xFB}, {0x7A, 0x92}, /* 0xBC-0xBF */ + {0x7A, 0x95}, {0x7B, 0x20}, {0x7B, 0x28}, {0x7B, 0x1B}, /* 0xC0-0xC3 */ + {0x7B, 0x2C}, {0x7B, 0x26}, {0x7B, 0x19}, {0x7B, 0x1E}, /* 0xC4-0xC7 */ + {0x7B, 0x2E}, {0x7C, 0x92}, {0x7C, 0x97}, {0x7C, 0x95}, /* 0xC8-0xCB */ + {0x7D, 0x46}, {0x7D, 0x43}, {0x7D, 0x71}, {0x7D, 0x2E}, /* 0xCC-0xCF */ + {0x7D, 0x39}, {0x7D, 0x3C}, {0x7D, 0x40}, {0x7D, 0x30}, /* 0xD0-0xD3 */ + {0x7D, 0x33}, {0x7D, 0x44}, {0x7D, 0x2F}, {0x7D, 0x42}, /* 0xD4-0xD7 */ + {0x7D, 0x32}, {0x7D, 0x31}, {0x7F, 0x3D}, {0x7F, 0x9E}, /* 0xD8-0xDB */ + {0x7F, 0x9A}, {0x7F, 0xCC}, {0x7F, 0xCE}, {0x7F, 0xD2}, /* 0xDC-0xDF */ + {0x80, 0x1C}, {0x80, 0x4A}, {0x80, 0x46}, {0x81, 0x2F}, /* 0xE0-0xE3 */ + {0x81, 0x16}, {0x81, 0x23}, {0x81, 0x2B}, {0x81, 0x29}, /* 0xE4-0xE7 */ + {0x81, 0x30}, {0x81, 0x24}, {0x82, 0x02}, {0x82, 0x35}, /* 0xE8-0xEB */ + {0x82, 0x37}, {0x82, 0x36}, {0x82, 0x39}, {0x83, 0x8E}, /* 0xEC-0xEF */ + {0x83, 0x9E}, {0x83, 0x98}, {0x83, 0x78}, {0x83, 0xA2}, /* 0xF0-0xF3 */ + {0x83, 0x96}, {0x83, 0xBD}, {0x83, 0xAB}, {0x83, 0x92}, /* 0xF4-0xF7 */ + {0x83, 0x8A}, {0x83, 0x93}, {0x83, 0x89}, {0x83, 0xA0}, /* 0xF8-0xFB */ + {0x83, 0x77}, {0x83, 0x7B}, {0x83, 0x7C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x83, 0x86}, {0x83, 0xA7}, {0x86, 0x55}, {0x5F, 0x6A}, /* 0x40-0x43 */ + {0x86, 0xC7}, {0x86, 0xC0}, {0x86, 0xB6}, {0x86, 0xC4}, /* 0x44-0x47 */ + {0x86, 0xB5}, {0x86, 0xC6}, {0x86, 0xCB}, {0x86, 0xB1}, /* 0x48-0x4B */ + {0x86, 0xAF}, {0x86, 0xC9}, {0x88, 0x53}, {0x88, 0x9E}, /* 0x4C-0x4F */ + {0x88, 0x88}, {0x88, 0xAB}, {0x88, 0x92}, {0x88, 0x96}, /* 0x50-0x53 */ + {0x88, 0x8D}, {0x88, 0x8B}, {0x89, 0x93}, {0x89, 0x8F}, /* 0x54-0x57 */ + {0x8A, 0x2A}, {0x8A, 0x1D}, {0x8A, 0x23}, {0x8A, 0x25}, /* 0x58-0x5B */ + {0x8A, 0x31}, {0x8A, 0x2D}, {0x8A, 0x1F}, {0x8A, 0x1B}, /* 0x5C-0x5F */ + {0x8A, 0x22}, {0x8C, 0x49}, {0x8C, 0x5A}, {0x8C, 0xA9}, /* 0x60-0x63 */ + {0x8C, 0xAC}, {0x8C, 0xAB}, {0x8C, 0xA8}, {0x8C, 0xAA}, /* 0x64-0x67 */ + {0x8C, 0xA7}, {0x8D, 0x67}, {0x8D, 0x66}, {0x8D, 0xBE}, /* 0x68-0x6B */ + {0x8D, 0xBA}, {0x8E, 0xDB}, {0x8E, 0xDF}, {0x90, 0x19}, /* 0x6C-0x6F */ + {0x90, 0x0D}, {0x90, 0x1A}, {0x90, 0x17}, {0x90, 0x23}, /* 0x70-0x73 */ + {0x90, 0x1F}, {0x90, 0x1D}, {0x90, 0x10}, {0x90, 0x15}, /* 0x74-0x77 */ + {0x90, 0x1E}, {0x90, 0x20}, {0x90, 0x0F}, {0x90, 0x22}, /* 0x78-0x7B */ + {0x90, 0x16}, {0x90, 0x1B}, {0x90, 0x14}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x90, 0xE8}, {0x90, 0xED}, {0x90, 0xFD}, /* 0xA0-0xA3 */ + {0x91, 0x57}, {0x91, 0xCE}, {0x91, 0xF5}, {0x91, 0xE6}, /* 0xA4-0xA7 */ + {0x91, 0xE3}, {0x91, 0xE7}, {0x91, 0xED}, {0x91, 0xE9}, /* 0xA8-0xAB */ + {0x95, 0x89}, {0x96, 0x6A}, {0x96, 0x75}, {0x96, 0x73}, /* 0xAC-0xAF */ + {0x96, 0x78}, {0x96, 0x70}, {0x96, 0x74}, {0x96, 0x76}, /* 0xB0-0xB3 */ + {0x96, 0x77}, {0x96, 0x6C}, {0x96, 0xC0}, {0x96, 0xEA}, /* 0xB4-0xB7 */ + {0x96, 0xE9}, {0x7A, 0xE0}, {0x7A, 0xDF}, {0x98, 0x02}, /* 0xB8-0xBB */ + {0x98, 0x03}, {0x9B, 0x5A}, {0x9C, 0xE5}, {0x9E, 0x75}, /* 0xBC-0xBF */ + {0x9E, 0x7F}, {0x9E, 0xA5}, {0x9E, 0xBB}, {0x50, 0xA2}, /* 0xC0-0xC3 */ + {0x50, 0x8D}, {0x50, 0x85}, {0x50, 0x99}, {0x50, 0x91}, /* 0xC4-0xC7 */ + {0x50, 0x80}, {0x50, 0x96}, {0x50, 0x98}, {0x50, 0x9A}, /* 0xC8-0xCB */ + {0x67, 0x00}, {0x51, 0xF1}, {0x52, 0x72}, {0x52, 0x74}, /* 0xCC-0xCF */ + {0x52, 0x75}, {0x52, 0x69}, {0x52, 0xDE}, {0x52, 0xDD}, /* 0xD0-0xD3 */ + {0x52, 0xDB}, {0x53, 0x5A}, {0x53, 0xA5}, {0x55, 0x7B}, /* 0xD4-0xD7 */ + {0x55, 0x80}, {0x55, 0xA7}, {0x55, 0x7C}, {0x55, 0x8A}, /* 0xD8-0xDB */ + {0x55, 0x9D}, {0x55, 0x98}, {0x55, 0x82}, {0x55, 0x9C}, /* 0xDC-0xDF */ + {0x55, 0xAA}, {0x55, 0x94}, {0x55, 0x87}, {0x55, 0x8B}, /* 0xE0-0xE3 */ + {0x55, 0x83}, {0x55, 0xB3}, {0x55, 0xAE}, {0x55, 0x9F}, /* 0xE4-0xE7 */ + {0x55, 0x3E}, {0x55, 0xB2}, {0x55, 0x9A}, {0x55, 0xBB}, /* 0xE8-0xEB */ + {0x55, 0xAC}, {0x55, 0xB1}, {0x55, 0x7E}, {0x55, 0x89}, /* 0xEC-0xEF */ + {0x55, 0xAB}, {0x55, 0x99}, {0x57, 0x0D}, {0x58, 0x2F}, /* 0xF0-0xF3 */ + {0x58, 0x2A}, {0x58, 0x34}, {0x58, 0x24}, {0x58, 0x30}, /* 0xF4-0xF7 */ + {0x58, 0x31}, {0x58, 0x21}, {0x58, 0x1D}, {0x58, 0x20}, /* 0xF8-0xFB */ + {0x58, 0xF9}, {0x58, 0xFA}, {0x59, 0x60}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5A, 0x77}, {0x5A, 0x9A}, {0x5A, 0x7F}, {0x5A, 0x92}, /* 0x40-0x43 */ + {0x5A, 0x9B}, {0x5A, 0xA7}, {0x5B, 0x73}, {0x5B, 0x71}, /* 0x44-0x47 */ + {0x5B, 0xD2}, {0x5B, 0xCC}, {0x5B, 0xD3}, {0x5B, 0xD0}, /* 0x48-0x4B */ + {0x5C, 0x0A}, {0x5C, 0x0B}, {0x5C, 0x31}, {0x5D, 0x4C}, /* 0x4C-0x4F */ + {0x5D, 0x50}, {0x5D, 0x34}, {0x5D, 0x47}, {0x5D, 0xFD}, /* 0x50-0x53 */ + {0x5E, 0x45}, {0x5E, 0x3D}, {0x5E, 0x40}, {0x5E, 0x43}, /* 0x54-0x57 */ + {0x5E, 0x7E}, {0x5E, 0xCA}, {0x5E, 0xC1}, {0x5E, 0xC2}, /* 0x58-0x5B */ + {0x5E, 0xC4}, {0x5F, 0x3C}, {0x5F, 0x6D}, {0x5F, 0xA9}, /* 0x5C-0x5F */ + {0x5F, 0xAA}, {0x5F, 0xA8}, {0x60, 0xD1}, {0x60, 0xE1}, /* 0x60-0x63 */ + {0x60, 0xB2}, {0x60, 0xB6}, {0x60, 0xE0}, {0x61, 0x1C}, /* 0x64-0x67 */ + {0x61, 0x23}, {0x60, 0xFA}, {0x61, 0x15}, {0x60, 0xF0}, /* 0x68-0x6B */ + {0x60, 0xFB}, {0x60, 0xF4}, {0x61, 0x68}, {0x60, 0xF1}, /* 0x6C-0x6F */ + {0x61, 0x0E}, {0x60, 0xF6}, {0x61, 0x09}, {0x61, 0x00}, /* 0x70-0x73 */ + {0x61, 0x12}, {0x62, 0x1F}, {0x62, 0x49}, {0x63, 0xA3}, /* 0x74-0x77 */ + {0x63, 0x8C}, {0x63, 0xCF}, {0x63, 0xC0}, {0x63, 0xE9}, /* 0x78-0x7B */ + {0x63, 0xC9}, {0x63, 0xC6}, {0x63, 0xCD}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x63, 0xD2}, {0x63, 0xE3}, {0x63, 0xD0}, /* 0xA0-0xA3 */ + {0x63, 0xE1}, {0x63, 0xD6}, {0x63, 0xED}, {0x63, 0xEE}, /* 0xA4-0xA7 */ + {0x63, 0x76}, {0x63, 0xF4}, {0x63, 0xEA}, {0x63, 0xDB}, /* 0xA8-0xAB */ + {0x64, 0x52}, {0x63, 0xDA}, {0x63, 0xF9}, {0x65, 0x5E}, /* 0xAC-0xAF */ + {0x65, 0x66}, {0x65, 0x62}, {0x65, 0x63}, {0x65, 0x91}, /* 0xB0-0xB3 */ + {0x65, 0x90}, {0x65, 0xAF}, {0x66, 0x6E}, {0x66, 0x70}, /* 0xB4-0xB7 */ + {0x66, 0x74}, {0x66, 0x76}, {0x66, 0x6F}, {0x66, 0x91}, /* 0xB8-0xBB */ + {0x66, 0x7A}, {0x66, 0x7E}, {0x66, 0x77}, {0x66, 0xFE}, /* 0xBC-0xBF */ + {0x66, 0xFF}, {0x67, 0x1F}, {0x67, 0x1D}, {0x68, 0xFA}, /* 0xC0-0xC3 */ + {0x68, 0xD5}, {0x68, 0xE0}, {0x68, 0xD8}, {0x68, 0xD7}, /* 0xC4-0xC7 */ + {0x69, 0x05}, {0x68, 0xDF}, {0x68, 0xF5}, {0x68, 0xEE}, /* 0xC8-0xCB */ + {0x68, 0xE7}, {0x68, 0xF9}, {0x68, 0xD2}, {0x68, 0xF2}, /* 0xCC-0xCF */ + {0x68, 0xE3}, {0x68, 0xCB}, {0x68, 0xCD}, {0x69, 0x0D}, /* 0xD0-0xD3 */ + {0x69, 0x12}, {0x69, 0x0E}, {0x68, 0xC9}, {0x68, 0xDA}, /* 0xD4-0xD7 */ + {0x69, 0x6E}, {0x68, 0xFB}, {0x6B, 0x3E}, {0x6B, 0x3A}, /* 0xD8-0xDB */ + {0x6B, 0x3D}, {0x6B, 0x98}, {0x6B, 0x96}, {0x6B, 0xBC}, /* 0xDC-0xDF */ + {0x6B, 0xEF}, {0x6C, 0x2E}, {0x6C, 0x2F}, {0x6C, 0x2C}, /* 0xE0-0xE3 */ + {0x6E, 0x2F}, {0x6E, 0x38}, {0x6E, 0x54}, {0x6E, 0x21}, /* 0xE4-0xE7 */ + {0x6E, 0x32}, {0x6E, 0x67}, {0x6E, 0x4A}, {0x6E, 0x20}, /* 0xE8-0xEB */ + {0x6E, 0x25}, {0x6E, 0x23}, {0x6E, 0x1B}, {0x6E, 0x5B}, /* 0xEC-0xEF */ + {0x6E, 0x58}, {0x6E, 0x24}, {0x6E, 0x56}, {0x6E, 0x6E}, /* 0xF0-0xF3 */ + {0x6E, 0x2D}, {0x6E, 0x26}, {0x6E, 0x6F}, {0x6E, 0x34}, /* 0xF4-0xF7 */ + {0x6E, 0x4D}, {0x6E, 0x3A}, {0x6E, 0x2C}, {0x6E, 0x43}, /* 0xF8-0xFB */ + {0x6E, 0x1D}, {0x6E, 0x3E}, {0x6E, 0xCB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6E, 0x89}, {0x6E, 0x19}, {0x6E, 0x4E}, {0x6E, 0x63}, /* 0x40-0x43 */ + {0x6E, 0x44}, {0x6E, 0x72}, {0x6E, 0x69}, {0x6E, 0x5F}, /* 0x44-0x47 */ + {0x71, 0x19}, {0x71, 0x1A}, {0x71, 0x26}, {0x71, 0x30}, /* 0x48-0x4B */ + {0x71, 0x21}, {0x71, 0x36}, {0x71, 0x6E}, {0x71, 0x1C}, /* 0x4C-0x4F */ + {0x72, 0x4C}, {0x72, 0x84}, {0x72, 0x80}, {0x73, 0x36}, /* 0x50-0x53 */ + {0x73, 0x25}, {0x73, 0x34}, {0x73, 0x29}, {0x74, 0x3A}, /* 0x54-0x57 */ + {0x74, 0x2A}, {0x74, 0x33}, {0x74, 0x22}, {0x74, 0x25}, /* 0x58-0x5B */ + {0x74, 0x35}, {0x74, 0x36}, {0x74, 0x34}, {0x74, 0x2F}, /* 0x5C-0x5F */ + {0x74, 0x1B}, {0x74, 0x26}, {0x74, 0x28}, {0x75, 0x25}, /* 0x60-0x63 */ + {0x75, 0x26}, {0x75, 0x6B}, {0x75, 0x6A}, {0x75, 0xE2}, /* 0x64-0x67 */ + {0x75, 0xDB}, {0x75, 0xE3}, {0x75, 0xD9}, {0x75, 0xD8}, /* 0x68-0x6B */ + {0x75, 0xDE}, {0x75, 0xE0}, {0x76, 0x7B}, {0x76, 0x7C}, /* 0x6C-0x6F */ + {0x76, 0x96}, {0x76, 0x93}, {0x76, 0xB4}, {0x76, 0xDC}, /* 0x70-0x73 */ + {0x77, 0x4F}, {0x77, 0xED}, {0x78, 0x5D}, {0x78, 0x6C}, /* 0x74-0x77 */ + {0x78, 0x6F}, {0x7A, 0x0D}, {0x7A, 0x08}, {0x7A, 0x0B}, /* 0x78-0x7B */ + {0x7A, 0x05}, {0x7A, 0x00}, {0x7A, 0x98}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7A, 0x97}, {0x7A, 0x96}, {0x7A, 0xE5}, /* 0xA0-0xA3 */ + {0x7A, 0xE3}, {0x7B, 0x49}, {0x7B, 0x56}, {0x7B, 0x46}, /* 0xA4-0xA7 */ + {0x7B, 0x50}, {0x7B, 0x52}, {0x7B, 0x54}, {0x7B, 0x4D}, /* 0xA8-0xAB */ + {0x7B, 0x4B}, {0x7B, 0x4F}, {0x7B, 0x51}, {0x7C, 0x9F}, /* 0xAC-0xAF */ + {0x7C, 0xA5}, {0x7D, 0x5E}, {0x7D, 0x50}, {0x7D, 0x68}, /* 0xB0-0xB3 */ + {0x7D, 0x55}, {0x7D, 0x2B}, {0x7D, 0x6E}, {0x7D, 0x72}, /* 0xB4-0xB7 */ + {0x7D, 0x61}, {0x7D, 0x66}, {0x7D, 0x62}, {0x7D, 0x70}, /* 0xB8-0xBB */ + {0x7D, 0x73}, {0x55, 0x84}, {0x7F, 0xD4}, {0x7F, 0xD5}, /* 0xBC-0xBF */ + {0x80, 0x0B}, {0x80, 0x52}, {0x80, 0x85}, {0x81, 0x55}, /* 0xC0-0xC3 */ + {0x81, 0x54}, {0x81, 0x4B}, {0x81, 0x51}, {0x81, 0x4E}, /* 0xC4-0xC7 */ + {0x81, 0x39}, {0x81, 0x46}, {0x81, 0x3E}, {0x81, 0x4C}, /* 0xC8-0xCB */ + {0x81, 0x53}, {0x81, 0x74}, {0x82, 0x12}, {0x82, 0x1C}, /* 0xCC-0xCF */ + {0x83, 0xE9}, {0x84, 0x03}, {0x83, 0xF8}, {0x84, 0x0D}, /* 0xD0-0xD3 */ + {0x83, 0xE0}, {0x83, 0xC5}, {0x84, 0x0B}, {0x83, 0xC1}, /* 0xD4-0xD7 */ + {0x83, 0xEF}, {0x83, 0xF1}, {0x83, 0xF4}, {0x84, 0x57}, /* 0xD8-0xDB */ + {0x84, 0x0A}, {0x83, 0xF0}, {0x84, 0x0C}, {0x83, 0xCC}, /* 0xDC-0xDF */ + {0x83, 0xFD}, {0x83, 0xF2}, {0x83, 0xCA}, {0x84, 0x38}, /* 0xE0-0xE3 */ + {0x84, 0x0E}, {0x84, 0x04}, {0x83, 0xDC}, {0x84, 0x07}, /* 0xE4-0xE7 */ + {0x83, 0xD4}, {0x83, 0xDF}, {0x86, 0x5B}, {0x86, 0xDF}, /* 0xE8-0xEB */ + {0x86, 0xD9}, {0x86, 0xED}, {0x86, 0xD4}, {0x86, 0xDB}, /* 0xEC-0xEF */ + {0x86, 0xE4}, {0x86, 0xD0}, {0x86, 0xDE}, {0x88, 0x57}, /* 0xF0-0xF3 */ + {0x88, 0xC1}, {0x88, 0xC2}, {0x88, 0xB1}, {0x89, 0x83}, /* 0xF4-0xF7 */ + {0x89, 0x96}, {0x8A, 0x3B}, {0x8A, 0x60}, {0x8A, 0x55}, /* 0xF8-0xFB */ + {0x8A, 0x5E}, {0x8A, 0x3C}, {0x8A, 0x41}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8A, 0x54}, {0x8A, 0x5B}, {0x8A, 0x50}, {0x8A, 0x46}, /* 0x40-0x43 */ + {0x8A, 0x34}, {0x8A, 0x3A}, {0x8A, 0x36}, {0x8A, 0x56}, /* 0x44-0x47 */ + {0x8C, 0x61}, {0x8C, 0x82}, {0x8C, 0xAF}, {0x8C, 0xBC}, /* 0x48-0x4B */ + {0x8C, 0xB3}, {0x8C, 0xBD}, {0x8C, 0xC1}, {0x8C, 0xBB}, /* 0x4C-0x4F */ + {0x8C, 0xC0}, {0x8C, 0xB4}, {0x8C, 0xB7}, {0x8C, 0xB6}, /* 0x50-0x53 */ + {0x8C, 0xBF}, {0x8C, 0xB8}, {0x8D, 0x8A}, {0x8D, 0x85}, /* 0x54-0x57 */ + {0x8D, 0x81}, {0x8D, 0xCE}, {0x8D, 0xDD}, {0x8D, 0xCB}, /* 0x58-0x5B */ + {0x8D, 0xDA}, {0x8D, 0xD1}, {0x8D, 0xCC}, {0x8D, 0xDB}, /* 0x5C-0x5F */ + {0x8D, 0xC6}, {0x8E, 0xFB}, {0x8E, 0xF8}, {0x8E, 0xFC}, /* 0x60-0x63 */ + {0x8F, 0x9C}, {0x90, 0x2E}, {0x90, 0x35}, {0x90, 0x31}, /* 0x64-0x67 */ + {0x90, 0x38}, {0x90, 0x32}, {0x90, 0x36}, {0x91, 0x02}, /* 0x68-0x6B */ + {0x90, 0xF5}, {0x91, 0x09}, {0x90, 0xFE}, {0x91, 0x63}, /* 0x6C-0x6F */ + {0x91, 0x65}, {0x91, 0xCF}, {0x92, 0x14}, {0x92, 0x15}, /* 0x70-0x73 */ + {0x92, 0x23}, {0x92, 0x09}, {0x92, 0x1E}, {0x92, 0x0D}, /* 0x74-0x77 */ + {0x92, 0x10}, {0x92, 0x07}, {0x92, 0x11}, {0x95, 0x94}, /* 0x78-0x7B */ + {0x95, 0x8F}, {0x95, 0x8B}, {0x95, 0x91}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x95, 0x93}, {0x95, 0x92}, {0x95, 0x8E}, /* 0xA0-0xA3 */ + {0x96, 0x8A}, {0x96, 0x8E}, {0x96, 0x8B}, {0x96, 0x7D}, /* 0xA4-0xA7 */ + {0x96, 0x85}, {0x96, 0x86}, {0x96, 0x8D}, {0x96, 0x72}, /* 0xA8-0xAB */ + {0x96, 0x84}, {0x96, 0xC1}, {0x96, 0xC5}, {0x96, 0xC4}, /* 0xAC-0xAF */ + {0x96, 0xC6}, {0x96, 0xC7}, {0x96, 0xEF}, {0x96, 0xF2}, /* 0xB0-0xB3 */ + {0x97, 0xCC}, {0x98, 0x05}, {0x98, 0x06}, {0x98, 0x08}, /* 0xB4-0xB7 */ + {0x98, 0xE7}, {0x98, 0xEA}, {0x98, 0xEF}, {0x98, 0xE9}, /* 0xB8-0xBB */ + {0x98, 0xF2}, {0x98, 0xED}, {0x99, 0xAE}, {0x99, 0xAD}, /* 0xBC-0xBF */ + {0x9E, 0xC3}, {0x9E, 0xCD}, {0x9E, 0xD1}, {0x4E, 0x82}, /* 0xC0-0xC3 */ + {0x50, 0xAD}, {0x50, 0xB5}, {0x50, 0xB2}, {0x50, 0xB3}, /* 0xC4-0xC7 */ + {0x50, 0xC5}, {0x50, 0xBE}, {0x50, 0xAC}, {0x50, 0xB7}, /* 0xC8-0xCB */ + {0x50, 0xBB}, {0x50, 0xAF}, {0x50, 0xC7}, {0x52, 0x7F}, /* 0xCC-0xCF */ + {0x52, 0x77}, {0x52, 0x7D}, {0x52, 0xDF}, {0x52, 0xE6}, /* 0xD0-0xD3 */ + {0x52, 0xE4}, {0x52, 0xE2}, {0x52, 0xE3}, {0x53, 0x2F}, /* 0xD4-0xD7 */ + {0x55, 0xDF}, {0x55, 0xE8}, {0x55, 0xD3}, {0x55, 0xE6}, /* 0xD8-0xDB */ + {0x55, 0xCE}, {0x55, 0xDC}, {0x55, 0xC7}, {0x55, 0xD1}, /* 0xDC-0xDF */ + {0x55, 0xE3}, {0x55, 0xE4}, {0x55, 0xEF}, {0x55, 0xDA}, /* 0xE0-0xE3 */ + {0x55, 0xE1}, {0x55, 0xC5}, {0x55, 0xC6}, {0x55, 0xE5}, /* 0xE4-0xE7 */ + {0x55, 0xC9}, {0x57, 0x12}, {0x57, 0x13}, {0x58, 0x5E}, /* 0xE8-0xEB */ + {0x58, 0x51}, {0x58, 0x58}, {0x58, 0x57}, {0x58, 0x5A}, /* 0xEC-0xEF */ + {0x58, 0x54}, {0x58, 0x6B}, {0x58, 0x4C}, {0x58, 0x6D}, /* 0xF0-0xF3 */ + {0x58, 0x4A}, {0x58, 0x62}, {0x58, 0x52}, {0x58, 0x4B}, /* 0xF4-0xF7 */ + {0x59, 0x67}, {0x5A, 0xC1}, {0x5A, 0xC9}, {0x5A, 0xCC}, /* 0xF8-0xFB */ + {0x5A, 0xBE}, {0x5A, 0xBD}, {0x5A, 0xBC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5A, 0xB3}, {0x5A, 0xC2}, {0x5A, 0xB2}, {0x5D, 0x69}, /* 0x40-0x43 */ + {0x5D, 0x6F}, {0x5E, 0x4C}, {0x5E, 0x79}, {0x5E, 0xC9}, /* 0x44-0x47 */ + {0x5E, 0xC8}, {0x5F, 0x12}, {0x5F, 0x59}, {0x5F, 0xAC}, /* 0x48-0x4B */ + {0x5F, 0xAE}, {0x61, 0x1A}, {0x61, 0x0F}, {0x61, 0x48}, /* 0x4C-0x4F */ + {0x61, 0x1F}, {0x60, 0xF3}, {0x61, 0x1B}, {0x60, 0xF9}, /* 0x50-0x53 */ + {0x61, 0x01}, {0x61, 0x08}, {0x61, 0x4E}, {0x61, 0x4C}, /* 0x54-0x57 */ + {0x61, 0x44}, {0x61, 0x4D}, {0x61, 0x3E}, {0x61, 0x34}, /* 0x58-0x5B */ + {0x61, 0x27}, {0x61, 0x0D}, {0x61, 0x06}, {0x61, 0x37}, /* 0x5C-0x5F */ + {0x62, 0x21}, {0x62, 0x22}, {0x64, 0x13}, {0x64, 0x3E}, /* 0x60-0x63 */ + {0x64, 0x1E}, {0x64, 0x2A}, {0x64, 0x2D}, {0x64, 0x3D}, /* 0x64-0x67 */ + {0x64, 0x2C}, {0x64, 0x0F}, {0x64, 0x1C}, {0x64, 0x14}, /* 0x68-0x6B */ + {0x64, 0x0D}, {0x64, 0x36}, {0x64, 0x16}, {0x64, 0x17}, /* 0x6C-0x6F */ + {0x64, 0x06}, {0x65, 0x6C}, {0x65, 0x9F}, {0x65, 0xB0}, /* 0x70-0x73 */ + {0x66, 0x97}, {0x66, 0x89}, {0x66, 0x87}, {0x66, 0x88}, /* 0x74-0x77 */ + {0x66, 0x96}, {0x66, 0x84}, {0x66, 0x98}, {0x66, 0x8D}, /* 0x78-0x7B */ + {0x67, 0x03}, {0x69, 0x94}, {0x69, 0x6D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x69, 0x5A}, {0x69, 0x77}, {0x69, 0x60}, /* 0xA0-0xA3 */ + {0x69, 0x54}, {0x69, 0x75}, {0x69, 0x30}, {0x69, 0x82}, /* 0xA4-0xA7 */ + {0x69, 0x4A}, {0x69, 0x68}, {0x69, 0x6B}, {0x69, 0x5E}, /* 0xA8-0xAB */ + {0x69, 0x53}, {0x69, 0x79}, {0x69, 0x86}, {0x69, 0x5D}, /* 0xAC-0xAF */ + {0x69, 0x63}, {0x69, 0x5B}, {0x6B, 0x47}, {0x6B, 0x72}, /* 0xB0-0xB3 */ + {0x6B, 0xC0}, {0x6B, 0xBF}, {0x6B, 0xD3}, {0x6B, 0xFD}, /* 0xB4-0xB7 */ + {0x6E, 0xA2}, {0x6E, 0xAF}, {0x6E, 0xD3}, {0x6E, 0xB6}, /* 0xB8-0xBB */ + {0x6E, 0xC2}, {0x6E, 0x90}, {0x6E, 0x9D}, {0x6E, 0xC7}, /* 0xBC-0xBF */ + {0x6E, 0xC5}, {0x6E, 0xA5}, {0x6E, 0x98}, {0x6E, 0xBC}, /* 0xC0-0xC3 */ + {0x6E, 0xBA}, {0x6E, 0xAB}, {0x6E, 0xD1}, {0x6E, 0x96}, /* 0xC4-0xC7 */ + {0x6E, 0x9C}, {0x6E, 0xC4}, {0x6E, 0xD4}, {0x6E, 0xAA}, /* 0xC8-0xCB */ + {0x6E, 0xA7}, {0x6E, 0xB4}, {0x71, 0x4E}, {0x71, 0x59}, /* 0xCC-0xCF */ + {0x71, 0x69}, {0x71, 0x64}, {0x71, 0x49}, {0x71, 0x67}, /* 0xD0-0xD3 */ + {0x71, 0x5C}, {0x71, 0x6C}, {0x71, 0x66}, {0x71, 0x4C}, /* 0xD4-0xD7 */ + {0x71, 0x65}, {0x71, 0x5E}, {0x71, 0x46}, {0x71, 0x68}, /* 0xD8-0xDB */ + {0x71, 0x56}, {0x72, 0x3A}, {0x72, 0x52}, {0x73, 0x37}, /* 0xDC-0xDF */ + {0x73, 0x45}, {0x73, 0x3F}, {0x73, 0x3E}, {0x74, 0x6F}, /* 0xE0-0xE3 */ + {0x74, 0x5A}, {0x74, 0x55}, {0x74, 0x5F}, {0x74, 0x5E}, /* 0xE4-0xE7 */ + {0x74, 0x41}, {0x74, 0x3F}, {0x74, 0x59}, {0x74, 0x5B}, /* 0xE8-0xEB */ + {0x74, 0x5C}, {0x75, 0x76}, {0x75, 0x78}, {0x76, 0x00}, /* 0xEC-0xEF */ + {0x75, 0xF0}, {0x76, 0x01}, {0x75, 0xF2}, {0x75, 0xF1}, /* 0xF0-0xF3 */ + {0x75, 0xFA}, {0x75, 0xFF}, {0x75, 0xF4}, {0x75, 0xF3}, /* 0xF4-0xF7 */ + {0x76, 0xDE}, {0x76, 0xDF}, {0x77, 0x5B}, {0x77, 0x6B}, /* 0xF8-0xFB */ + {0x77, 0x66}, {0x77, 0x5E}, {0x77, 0x63}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x77, 0x79}, {0x77, 0x6A}, {0x77, 0x6C}, {0x77, 0x5C}, /* 0x40-0x43 */ + {0x77, 0x65}, {0x77, 0x68}, {0x77, 0x62}, {0x77, 0xEE}, /* 0x44-0x47 */ + {0x78, 0x8E}, {0x78, 0xB0}, {0x78, 0x97}, {0x78, 0x98}, /* 0x48-0x4B */ + {0x78, 0x8C}, {0x78, 0x89}, {0x78, 0x7C}, {0x78, 0x91}, /* 0x4C-0x4F */ + {0x78, 0x93}, {0x78, 0x7F}, {0x79, 0x7A}, {0x79, 0x7F}, /* 0x50-0x53 */ + {0x79, 0x81}, {0x84, 0x2C}, {0x79, 0xBD}, {0x7A, 0x1C}, /* 0x54-0x57 */ + {0x7A, 0x1A}, {0x7A, 0x20}, {0x7A, 0x14}, {0x7A, 0x1F}, /* 0x58-0x5B */ + {0x7A, 0x1E}, {0x7A, 0x9F}, {0x7A, 0xA0}, {0x7B, 0x77}, /* 0x5C-0x5F */ + {0x7B, 0xC0}, {0x7B, 0x60}, {0x7B, 0x6E}, {0x7B, 0x67}, /* 0x60-0x63 */ + {0x7C, 0xB1}, {0x7C, 0xB3}, {0x7C, 0xB5}, {0x7D, 0x93}, /* 0x64-0x67 */ + {0x7D, 0x79}, {0x7D, 0x91}, {0x7D, 0x81}, {0x7D, 0x8F}, /* 0x68-0x6B */ + {0x7D, 0x5B}, {0x7F, 0x6E}, {0x7F, 0x69}, {0x7F, 0x6A}, /* 0x6C-0x6F */ + {0x7F, 0x72}, {0x7F, 0xA9}, {0x7F, 0xA8}, {0x7F, 0xA4}, /* 0x70-0x73 */ + {0x80, 0x56}, {0x80, 0x58}, {0x80, 0x86}, {0x80, 0x84}, /* 0x74-0x77 */ + {0x81, 0x71}, {0x81, 0x70}, {0x81, 0x78}, {0x81, 0x65}, /* 0x78-0x7B */ + {0x81, 0x6E}, {0x81, 0x73}, {0x81, 0x6B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x81, 0x79}, {0x81, 0x7A}, {0x81, 0x66}, /* 0xA0-0xA3 */ + {0x82, 0x05}, {0x82, 0x47}, {0x84, 0x82}, {0x84, 0x77}, /* 0xA4-0xA7 */ + {0x84, 0x3D}, {0x84, 0x31}, {0x84, 0x75}, {0x84, 0x66}, /* 0xA8-0xAB */ + {0x84, 0x6B}, {0x84, 0x49}, {0x84, 0x6C}, {0x84, 0x5B}, /* 0xAC-0xAF */ + {0x84, 0x3C}, {0x84, 0x35}, {0x84, 0x61}, {0x84, 0x63}, /* 0xB0-0xB3 */ + {0x84, 0x69}, {0x84, 0x6D}, {0x84, 0x46}, {0x86, 0x5E}, /* 0xB4-0xB7 */ + {0x86, 0x5C}, {0x86, 0x5F}, {0x86, 0xF9}, {0x87, 0x13}, /* 0xB8-0xBB */ + {0x87, 0x08}, {0x87, 0x07}, {0x87, 0x00}, {0x86, 0xFE}, /* 0xBC-0xBF */ + {0x86, 0xFB}, {0x87, 0x02}, {0x87, 0x03}, {0x87, 0x06}, /* 0xC0-0xC3 */ + {0x87, 0x0A}, {0x88, 0x59}, {0x88, 0xDF}, {0x88, 0xD4}, /* 0xC4-0xC7 */ + {0x88, 0xD9}, {0x88, 0xDC}, {0x88, 0xD8}, {0x88, 0xDD}, /* 0xC8-0xCB */ + {0x88, 0xE1}, {0x88, 0xCA}, {0x88, 0xD5}, {0x88, 0xD2}, /* 0xCC-0xCF */ + {0x89, 0x9C}, {0x89, 0xE3}, {0x8A, 0x6B}, {0x8A, 0x72}, /* 0xD0-0xD3 */ + {0x8A, 0x73}, {0x8A, 0x66}, {0x8A, 0x69}, {0x8A, 0x70}, /* 0xD4-0xD7 */ + {0x8A, 0x87}, {0x8A, 0x7C}, {0x8A, 0x63}, {0x8A, 0xA0}, /* 0xD8-0xDB */ + {0x8A, 0x71}, {0x8A, 0x85}, {0x8A, 0x6D}, {0x8A, 0x62}, /* 0xDC-0xDF */ + {0x8A, 0x6E}, {0x8A, 0x6C}, {0x8A, 0x79}, {0x8A, 0x7B}, /* 0xE0-0xE3 */ + {0x8A, 0x3E}, {0x8A, 0x68}, {0x8C, 0x62}, {0x8C, 0x8A}, /* 0xE4-0xE7 */ + {0x8C, 0x89}, {0x8C, 0xCA}, {0x8C, 0xC7}, {0x8C, 0xC8}, /* 0xE8-0xEB */ + {0x8C, 0xC4}, {0x8C, 0xB2}, {0x8C, 0xC3}, {0x8C, 0xC2}, /* 0xEC-0xEF */ + {0x8C, 0xC5}, {0x8D, 0xE1}, {0x8D, 0xDF}, {0x8D, 0xE8}, /* 0xF0-0xF3 */ + {0x8D, 0xEF}, {0x8D, 0xF3}, {0x8D, 0xFA}, {0x8D, 0xEA}, /* 0xF4-0xF7 */ + {0x8D, 0xE4}, {0x8D, 0xE6}, {0x8E, 0xB2}, {0x8F, 0x03}, /* 0xF8-0xFB */ + {0x8F, 0x09}, {0x8E, 0xFE}, {0x8F, 0x0A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_B9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8F, 0x9F}, {0x8F, 0xB2}, {0x90, 0x4B}, {0x90, 0x4A}, /* 0x40-0x43 */ + {0x90, 0x53}, {0x90, 0x42}, {0x90, 0x54}, {0x90, 0x3C}, /* 0x44-0x47 */ + {0x90, 0x55}, {0x90, 0x50}, {0x90, 0x47}, {0x90, 0x4F}, /* 0x48-0x4B */ + {0x90, 0x4E}, {0x90, 0x4D}, {0x90, 0x51}, {0x90, 0x3E}, /* 0x4C-0x4F */ + {0x90, 0x41}, {0x91, 0x12}, {0x91, 0x17}, {0x91, 0x6C}, /* 0x50-0x53 */ + {0x91, 0x6A}, {0x91, 0x69}, {0x91, 0xC9}, {0x92, 0x37}, /* 0x54-0x57 */ + {0x92, 0x57}, {0x92, 0x38}, {0x92, 0x3D}, {0x92, 0x40}, /* 0x58-0x5B */ + {0x92, 0x3E}, {0x92, 0x5B}, {0x92, 0x4B}, {0x92, 0x64}, /* 0x5C-0x5F */ + {0x92, 0x51}, {0x92, 0x34}, {0x92, 0x49}, {0x92, 0x4D}, /* 0x60-0x63 */ + {0x92, 0x45}, {0x92, 0x39}, {0x92, 0x3F}, {0x92, 0x5A}, /* 0x64-0x67 */ + {0x95, 0x98}, {0x96, 0x98}, {0x96, 0x94}, {0x96, 0x95}, /* 0x68-0x6B */ + {0x96, 0xCD}, {0x96, 0xCB}, {0x96, 0xC9}, {0x96, 0xCA}, /* 0x6C-0x6F */ + {0x96, 0xF7}, {0x96, 0xFB}, {0x96, 0xF9}, {0x96, 0xF6}, /* 0x70-0x73 */ + {0x97, 0x56}, {0x97, 0x74}, {0x97, 0x76}, {0x98, 0x10}, /* 0x74-0x77 */ + {0x98, 0x11}, {0x98, 0x13}, {0x98, 0x0A}, {0x98, 0x12}, /* 0x78-0x7B */ + {0x98, 0x0C}, {0x98, 0xFC}, {0x98, 0xF4}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x98, 0xFD}, {0x98, 0xFE}, {0x99, 0xB3}, /* 0xA0-0xA3 */ + {0x99, 0xB1}, {0x99, 0xB4}, {0x9A, 0xE1}, {0x9C, 0xE9}, /* 0xA4-0xA7 */ + {0x9E, 0x82}, {0x9F, 0x0E}, {0x9F, 0x13}, {0x9F, 0x20}, /* 0xA8-0xAB */ + {0x50, 0xE7}, {0x50, 0xEE}, {0x50, 0xE5}, {0x50, 0xD6}, /* 0xAC-0xAF */ + {0x50, 0xED}, {0x50, 0xDA}, {0x50, 0xD5}, {0x50, 0xCF}, /* 0xB0-0xB3 */ + {0x50, 0xD1}, {0x50, 0xF1}, {0x50, 0xCE}, {0x50, 0xE9}, /* 0xB4-0xB7 */ + {0x51, 0x62}, {0x51, 0xF3}, {0x52, 0x83}, {0x52, 0x82}, /* 0xB8-0xBB */ + {0x53, 0x31}, {0x53, 0xAD}, {0x55, 0xFE}, {0x56, 0x00}, /* 0xBC-0xBF */ + {0x56, 0x1B}, {0x56, 0x17}, {0x55, 0xFD}, {0x56, 0x14}, /* 0xC0-0xC3 */ + {0x56, 0x06}, {0x56, 0x09}, {0x56, 0x0D}, {0x56, 0x0E}, /* 0xC4-0xC7 */ + {0x55, 0xF7}, {0x56, 0x16}, {0x56, 0x1F}, {0x56, 0x08}, /* 0xC8-0xCB */ + {0x56, 0x10}, {0x55, 0xF6}, {0x57, 0x18}, {0x57, 0x16}, /* 0xCC-0xCF */ + {0x58, 0x75}, {0x58, 0x7E}, {0x58, 0x83}, {0x58, 0x93}, /* 0xD0-0xD3 */ + {0x58, 0x8A}, {0x58, 0x79}, {0x58, 0x85}, {0x58, 0x7D}, /* 0xD4-0xD7 */ + {0x58, 0xFD}, {0x59, 0x25}, {0x59, 0x22}, {0x59, 0x24}, /* 0xD8-0xDB */ + {0x59, 0x6A}, {0x59, 0x69}, {0x5A, 0xE1}, {0x5A, 0xE6}, /* 0xDC-0xDF */ + {0x5A, 0xE9}, {0x5A, 0xD7}, {0x5A, 0xD6}, {0x5A, 0xD8}, /* 0xE0-0xE3 */ + {0x5A, 0xE3}, {0x5B, 0x75}, {0x5B, 0xDE}, {0x5B, 0xE7}, /* 0xE4-0xE7 */ + {0x5B, 0xE1}, {0x5B, 0xE5}, {0x5B, 0xE6}, {0x5B, 0xE8}, /* 0xE8-0xEB */ + {0x5B, 0xE2}, {0x5B, 0xE4}, {0x5B, 0xDF}, {0x5C, 0x0D}, /* 0xEC-0xEF */ + {0x5C, 0x62}, {0x5D, 0x84}, {0x5D, 0x87}, {0x5E, 0x5B}, /* 0xF0-0xF3 */ + {0x5E, 0x63}, {0x5E, 0x55}, {0x5E, 0x57}, {0x5E, 0x54}, /* 0xF4-0xF7 */ + {0x5E, 0xD3}, {0x5E, 0xD6}, {0x5F, 0x0A}, {0x5F, 0x46}, /* 0xF8-0xFB */ + {0x5F, 0x70}, {0x5F, 0xB9}, {0x61, 0x47}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x61, 0x3F}, {0x61, 0x4B}, {0x61, 0x77}, {0x61, 0x62}, /* 0x40-0x43 */ + {0x61, 0x63}, {0x61, 0x5F}, {0x61, 0x5A}, {0x61, 0x58}, /* 0x44-0x47 */ + {0x61, 0x75}, {0x62, 0x2A}, {0x64, 0x87}, {0x64, 0x58}, /* 0x48-0x4B */ + {0x64, 0x54}, {0x64, 0xA4}, {0x64, 0x78}, {0x64, 0x5F}, /* 0x4C-0x4F */ + {0x64, 0x7A}, {0x64, 0x51}, {0x64, 0x67}, {0x64, 0x34}, /* 0x50-0x53 */ + {0x64, 0x6D}, {0x64, 0x7B}, {0x65, 0x72}, {0x65, 0xA1}, /* 0x54-0x57 */ + {0x65, 0xD7}, {0x65, 0xD6}, {0x66, 0xA2}, {0x66, 0xA8}, /* 0x58-0x5B */ + {0x66, 0x9D}, {0x69, 0x9C}, {0x69, 0xA8}, {0x69, 0x95}, /* 0x5C-0x5F */ + {0x69, 0xC1}, {0x69, 0xAE}, {0x69, 0xD3}, {0x69, 0xCB}, /* 0x60-0x63 */ + {0x69, 0x9B}, {0x69, 0xB7}, {0x69, 0xBB}, {0x69, 0xAB}, /* 0x64-0x67 */ + {0x69, 0xB4}, {0x69, 0xD0}, {0x69, 0xCD}, {0x69, 0xAD}, /* 0x68-0x6B */ + {0x69, 0xCC}, {0x69, 0xA6}, {0x69, 0xC3}, {0x69, 0xA3}, /* 0x6C-0x6F */ + {0x6B, 0x49}, {0x6B, 0x4C}, {0x6C, 0x33}, {0x6F, 0x33}, /* 0x70-0x73 */ + {0x6F, 0x14}, {0x6E, 0xFE}, {0x6F, 0x13}, {0x6E, 0xF4}, /* 0x74-0x77 */ + {0x6F, 0x29}, {0x6F, 0x3E}, {0x6F, 0x20}, {0x6F, 0x2C}, /* 0x78-0x7B */ + {0x6F, 0x0F}, {0x6F, 0x02}, {0x6F, 0x22}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6E, 0xFF}, {0x6E, 0xEF}, {0x6F, 0x06}, /* 0xA0-0xA3 */ + {0x6F, 0x31}, {0x6F, 0x38}, {0x6F, 0x32}, {0x6F, 0x23}, /* 0xA4-0xA7 */ + {0x6F, 0x15}, {0x6F, 0x2B}, {0x6F, 0x2F}, {0x6F, 0x88}, /* 0xA8-0xAB */ + {0x6F, 0x2A}, {0x6E, 0xEC}, {0x6F, 0x01}, {0x6E, 0xF2}, /* 0xAC-0xAF */ + {0x6E, 0xCC}, {0x6E, 0xF7}, {0x71, 0x94}, {0x71, 0x99}, /* 0xB0-0xB3 */ + {0x71, 0x7D}, {0x71, 0x8A}, {0x71, 0x84}, {0x71, 0x92}, /* 0xB4-0xB7 */ + {0x72, 0x3E}, {0x72, 0x92}, {0x72, 0x96}, {0x73, 0x44}, /* 0xB8-0xBB */ + {0x73, 0x50}, {0x74, 0x64}, {0x74, 0x63}, {0x74, 0x6A}, /* 0xBC-0xBF */ + {0x74, 0x70}, {0x74, 0x6D}, {0x75, 0x04}, {0x75, 0x91}, /* 0xC0-0xC3 */ + {0x76, 0x27}, {0x76, 0x0D}, {0x76, 0x0B}, {0x76, 0x09}, /* 0xC4-0xC7 */ + {0x76, 0x13}, {0x76, 0xE1}, {0x76, 0xE3}, {0x77, 0x84}, /* 0xC8-0xCB */ + {0x77, 0x7D}, {0x77, 0x7F}, {0x77, 0x61}, {0x78, 0xC1}, /* 0xCC-0xCF */ + {0x78, 0x9F}, {0x78, 0xA7}, {0x78, 0xB3}, {0x78, 0xA9}, /* 0xD0-0xD3 */ + {0x78, 0xA3}, {0x79, 0x8E}, {0x79, 0x8F}, {0x79, 0x8D}, /* 0xD4-0xD7 */ + {0x7A, 0x2E}, {0x7A, 0x31}, {0x7A, 0xAA}, {0x7A, 0xA9}, /* 0xD8-0xDB */ + {0x7A, 0xED}, {0x7A, 0xEF}, {0x7B, 0xA1}, {0x7B, 0x95}, /* 0xDC-0xDF */ + {0x7B, 0x8B}, {0x7B, 0x75}, {0x7B, 0x97}, {0x7B, 0x9D}, /* 0xE0-0xE3 */ + {0x7B, 0x94}, {0x7B, 0x8F}, {0x7B, 0xB8}, {0x7B, 0x87}, /* 0xE4-0xE7 */ + {0x7B, 0x84}, {0x7C, 0xB9}, {0x7C, 0xBD}, {0x7C, 0xBE}, /* 0xE8-0xEB */ + {0x7D, 0xBB}, {0x7D, 0xB0}, {0x7D, 0x9C}, {0x7D, 0xBD}, /* 0xEC-0xEF */ + {0x7D, 0xBE}, {0x7D, 0xA0}, {0x7D, 0xCA}, {0x7D, 0xB4}, /* 0xF0-0xF3 */ + {0x7D, 0xB2}, {0x7D, 0xB1}, {0x7D, 0xBA}, {0x7D, 0xA2}, /* 0xF4-0xF7 */ + {0x7D, 0xBF}, {0x7D, 0xB5}, {0x7D, 0xB8}, {0x7D, 0xAD}, /* 0xF8-0xFB */ + {0x7D, 0xD2}, {0x7D, 0xC7}, {0x7D, 0xAC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7F, 0x70}, {0x7F, 0xE0}, {0x7F, 0xE1}, {0x7F, 0xDF}, /* 0x40-0x43 */ + {0x80, 0x5E}, {0x80, 0x5A}, {0x80, 0x87}, {0x81, 0x50}, /* 0x44-0x47 */ + {0x81, 0x80}, {0x81, 0x8F}, {0x81, 0x88}, {0x81, 0x8A}, /* 0x48-0x4B */ + {0x81, 0x7F}, {0x81, 0x82}, {0x81, 0xE7}, {0x81, 0xFA}, /* 0x4C-0x4F */ + {0x82, 0x07}, {0x82, 0x14}, {0x82, 0x1E}, {0x82, 0x4B}, /* 0x50-0x53 */ + {0x84, 0xC9}, {0x84, 0xBF}, {0x84, 0xC6}, {0x84, 0xC4}, /* 0x54-0x57 */ + {0x84, 0x99}, {0x84, 0x9E}, {0x84, 0xB2}, {0x84, 0x9C}, /* 0x58-0x5B */ + {0x84, 0xCB}, {0x84, 0xB8}, {0x84, 0xC0}, {0x84, 0xD3}, /* 0x5C-0x5F */ + {0x84, 0x90}, {0x84, 0xBC}, {0x84, 0xD1}, {0x84, 0xCA}, /* 0x60-0x63 */ + {0x87, 0x3F}, {0x87, 0x1C}, {0x87, 0x3B}, {0x87, 0x22}, /* 0x64-0x67 */ + {0x87, 0x25}, {0x87, 0x34}, {0x87, 0x18}, {0x87, 0x55}, /* 0x68-0x6B */ + {0x87, 0x37}, {0x87, 0x29}, {0x88, 0xF3}, {0x89, 0x02}, /* 0x6C-0x6F */ + {0x88, 0xF4}, {0x88, 0xF9}, {0x88, 0xF8}, {0x88, 0xFD}, /* 0x70-0x73 */ + {0x88, 0xE8}, {0x89, 0x1A}, {0x88, 0xEF}, {0x8A, 0xA6}, /* 0x74-0x77 */ + {0x8A, 0x8C}, {0x8A, 0x9E}, {0x8A, 0xA3}, {0x8A, 0x8D}, /* 0x78-0x7B */ + {0x8A, 0xA1}, {0x8A, 0x93}, {0x8A, 0xA4}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8A, 0xAA}, {0x8A, 0xA5}, {0x8A, 0xA8}, /* 0xA0-0xA3 */ + {0x8A, 0x98}, {0x8A, 0x91}, {0x8A, 0x9A}, {0x8A, 0xA7}, /* 0xA4-0xA7 */ + {0x8C, 0x6A}, {0x8C, 0x8D}, {0x8C, 0x8C}, {0x8C, 0xD3}, /* 0xA8-0xAB */ + {0x8C, 0xD1}, {0x8C, 0xD2}, {0x8D, 0x6B}, {0x8D, 0x99}, /* 0xAC-0xAF */ + {0x8D, 0x95}, {0x8D, 0xFC}, {0x8F, 0x14}, {0x8F, 0x12}, /* 0xB0-0xB3 */ + {0x8F, 0x15}, {0x8F, 0x13}, {0x8F, 0xA3}, {0x90, 0x60}, /* 0xB4-0xB7 */ + {0x90, 0x58}, {0x90, 0x5C}, {0x90, 0x63}, {0x90, 0x59}, /* 0xB8-0xBB */ + {0x90, 0x5E}, {0x90, 0x62}, {0x90, 0x5D}, {0x90, 0x5B}, /* 0xBC-0xBF */ + {0x91, 0x19}, {0x91, 0x18}, {0x91, 0x1E}, {0x91, 0x75}, /* 0xC0-0xC3 */ + {0x91, 0x78}, {0x91, 0x77}, {0x91, 0x74}, {0x92, 0x78}, /* 0xC4-0xC7 */ + {0x92, 0x80}, {0x92, 0x85}, {0x92, 0x98}, {0x92, 0x96}, /* 0xC8-0xCB */ + {0x92, 0x7B}, {0x92, 0x93}, {0x92, 0x9C}, {0x92, 0xA8}, /* 0xCC-0xCF */ + {0x92, 0x7C}, {0x92, 0x91}, {0x95, 0xA1}, {0x95, 0xA8}, /* 0xD0-0xD3 */ + {0x95, 0xA9}, {0x95, 0xA3}, {0x95, 0xA5}, {0x95, 0xA4}, /* 0xD4-0xD7 */ + {0x96, 0x99}, {0x96, 0x9C}, {0x96, 0x9B}, {0x96, 0xCC}, /* 0xD8-0xDB */ + {0x96, 0xD2}, {0x97, 0x00}, {0x97, 0x7C}, {0x97, 0x85}, /* 0xDC-0xDF */ + {0x97, 0xF6}, {0x98, 0x17}, {0x98, 0x18}, {0x98, 0xAF}, /* 0xE0-0xE3 */ + {0x98, 0xB1}, {0x99, 0x03}, {0x99, 0x05}, {0x99, 0x0C}, /* 0xE4-0xE7 */ + {0x99, 0x09}, {0x99, 0xC1}, {0x9A, 0xAF}, {0x9A, 0xB0}, /* 0xE8-0xEB */ + {0x9A, 0xE6}, {0x9B, 0x41}, {0x9B, 0x42}, {0x9C, 0xF4}, /* 0xEC-0xEF */ + {0x9C, 0xF6}, {0x9C, 0xF3}, {0x9E, 0xBC}, {0x9F, 0x3B}, /* 0xF0-0xF3 */ + {0x9F, 0x4A}, {0x51, 0x04}, {0x51, 0x00}, {0x50, 0xFB}, /* 0xF4-0xF7 */ + {0x50, 0xF5}, {0x50, 0xF9}, {0x51, 0x02}, {0x51, 0x08}, /* 0xF8-0xFB */ + {0x51, 0x09}, {0x51, 0x05}, {0x51, 0xDC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x52, 0x87}, {0x52, 0x88}, {0x52, 0x89}, {0x52, 0x8D}, /* 0x40-0x43 */ + {0x52, 0x8A}, {0x52, 0xF0}, {0x53, 0xB2}, {0x56, 0x2E}, /* 0x44-0x47 */ + {0x56, 0x3B}, {0x56, 0x39}, {0x56, 0x32}, {0x56, 0x3F}, /* 0x48-0x4B */ + {0x56, 0x34}, {0x56, 0x29}, {0x56, 0x53}, {0x56, 0x4E}, /* 0x4C-0x4F */ + {0x56, 0x57}, {0x56, 0x74}, {0x56, 0x36}, {0x56, 0x2F}, /* 0x50-0x53 */ + {0x56, 0x30}, {0x58, 0x80}, {0x58, 0x9F}, {0x58, 0x9E}, /* 0x54-0x57 */ + {0x58, 0xB3}, {0x58, 0x9C}, {0x58, 0xAE}, {0x58, 0xA9}, /* 0x58-0x5B */ + {0x58, 0xA6}, {0x59, 0x6D}, {0x5B, 0x09}, {0x5A, 0xFB}, /* 0x5C-0x5F */ + {0x5B, 0x0B}, {0x5A, 0xF5}, {0x5B, 0x0C}, {0x5B, 0x08}, /* 0x60-0x63 */ + {0x5B, 0xEE}, {0x5B, 0xEC}, {0x5B, 0xE9}, {0x5B, 0xEB}, /* 0x64-0x67 */ + {0x5C, 0x64}, {0x5C, 0x65}, {0x5D, 0x9D}, {0x5D, 0x94}, /* 0x68-0x6B */ + {0x5E, 0x62}, {0x5E, 0x5F}, {0x5E, 0x61}, {0x5E, 0xE2}, /* 0x6C-0x6F */ + {0x5E, 0xDA}, {0x5E, 0xDF}, {0x5E, 0xDD}, {0x5E, 0xE3}, /* 0x70-0x73 */ + {0x5E, 0xE0}, {0x5F, 0x48}, {0x5F, 0x71}, {0x5F, 0xB7}, /* 0x74-0x77 */ + {0x5F, 0xB5}, {0x61, 0x76}, {0x61, 0x67}, {0x61, 0x6E}, /* 0x78-0x7B */ + {0x61, 0x5D}, {0x61, 0x55}, {0x61, 0x82}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x61, 0x7C}, {0x61, 0x70}, {0x61, 0x6B}, /* 0xA0-0xA3 */ + {0x61, 0x7E}, {0x61, 0xA7}, {0x61, 0x90}, {0x61, 0xAB}, /* 0xA4-0xA7 */ + {0x61, 0x8E}, {0x61, 0xAC}, {0x61, 0x9A}, {0x61, 0xA4}, /* 0xA8-0xAB */ + {0x61, 0x94}, {0x61, 0xAE}, {0x62, 0x2E}, {0x64, 0x69}, /* 0xAC-0xAF */ + {0x64, 0x6F}, {0x64, 0x79}, {0x64, 0x9E}, {0x64, 0xB2}, /* 0xB0-0xB3 */ + {0x64, 0x88}, {0x64, 0x90}, {0x64, 0xB0}, {0x64, 0xA5}, /* 0xB4-0xB7 */ + {0x64, 0x93}, {0x64, 0x95}, {0x64, 0xA9}, {0x64, 0x92}, /* 0xB8-0xBB */ + {0x64, 0xAE}, {0x64, 0xAD}, {0x64, 0xAB}, {0x64, 0x9A}, /* 0xBC-0xBF */ + {0x64, 0xAC}, {0x64, 0x99}, {0x64, 0xA2}, {0x64, 0xB3}, /* 0xC0-0xC3 */ + {0x65, 0x75}, {0x65, 0x77}, {0x65, 0x78}, {0x66, 0xAE}, /* 0xC4-0xC7 */ + {0x66, 0xAB}, {0x66, 0xB4}, {0x66, 0xB1}, {0x6A, 0x23}, /* 0xC8-0xCB */ + {0x6A, 0x1F}, {0x69, 0xE8}, {0x6A, 0x01}, {0x6A, 0x1E}, /* 0xCC-0xCF */ + {0x6A, 0x19}, {0x69, 0xFD}, {0x6A, 0x21}, {0x6A, 0x13}, /* 0xD0-0xD3 */ + {0x6A, 0x0A}, {0x69, 0xF3}, {0x6A, 0x02}, {0x6A, 0x05}, /* 0xD4-0xD7 */ + {0x69, 0xED}, {0x6A, 0x11}, {0x6B, 0x50}, {0x6B, 0x4E}, /* 0xD8-0xDB */ + {0x6B, 0xA4}, {0x6B, 0xC5}, {0x6B, 0xC6}, {0x6F, 0x3F}, /* 0xDC-0xDF */ + {0x6F, 0x7C}, {0x6F, 0x84}, {0x6F, 0x51}, {0x6F, 0x66}, /* 0xE0-0xE3 */ + {0x6F, 0x54}, {0x6F, 0x86}, {0x6F, 0x6D}, {0x6F, 0x5B}, /* 0xE4-0xE7 */ + {0x6F, 0x78}, {0x6F, 0x6E}, {0x6F, 0x8E}, {0x6F, 0x7A}, /* 0xE8-0xEB */ + {0x6F, 0x70}, {0x6F, 0x64}, {0x6F, 0x97}, {0x6F, 0x58}, /* 0xEC-0xEF */ + {0x6E, 0xD5}, {0x6F, 0x6F}, {0x6F, 0x60}, {0x6F, 0x5F}, /* 0xF0-0xF3 */ + {0x71, 0x9F}, {0x71, 0xAC}, {0x71, 0xB1}, {0x71, 0xA8}, /* 0xF4-0xF7 */ + {0x72, 0x56}, {0x72, 0x9B}, {0x73, 0x4E}, {0x73, 0x57}, /* 0xF8-0xFB */ + {0x74, 0x69}, {0x74, 0x8B}, {0x74, 0x83}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x74, 0x7E}, {0x74, 0x80}, {0x75, 0x7F}, {0x76, 0x20}, /* 0x40-0x43 */ + {0x76, 0x29}, {0x76, 0x1F}, {0x76, 0x24}, {0x76, 0x26}, /* 0x44-0x47 */ + {0x76, 0x21}, {0x76, 0x22}, {0x76, 0x9A}, {0x76, 0xBA}, /* 0x48-0x4B */ + {0x76, 0xE4}, {0x77, 0x8E}, {0x77, 0x87}, {0x77, 0x8C}, /* 0x4C-0x4F */ + {0x77, 0x91}, {0x77, 0x8B}, {0x78, 0xCB}, {0x78, 0xC5}, /* 0x50-0x53 */ + {0x78, 0xBA}, {0x78, 0xCA}, {0x78, 0xBE}, {0x78, 0xD5}, /* 0x54-0x57 */ + {0x78, 0xBC}, {0x78, 0xD0}, {0x7A, 0x3F}, {0x7A, 0x3C}, /* 0x58-0x5B */ + {0x7A, 0x40}, {0x7A, 0x3D}, {0x7A, 0x37}, {0x7A, 0x3B}, /* 0x5C-0x5F */ + {0x7A, 0xAF}, {0x7A, 0xAE}, {0x7B, 0xAD}, {0x7B, 0xB1}, /* 0x60-0x63 */ + {0x7B, 0xC4}, {0x7B, 0xB4}, {0x7B, 0xC6}, {0x7B, 0xC7}, /* 0x64-0x67 */ + {0x7B, 0xC1}, {0x7B, 0xA0}, {0x7B, 0xCC}, {0x7C, 0xCA}, /* 0x68-0x6B */ + {0x7D, 0xE0}, {0x7D, 0xF4}, {0x7D, 0xEF}, {0x7D, 0xFB}, /* 0x6C-0x6F */ + {0x7D, 0xD8}, {0x7D, 0xEC}, {0x7D, 0xDD}, {0x7D, 0xE8}, /* 0x70-0x73 */ + {0x7D, 0xE3}, {0x7D, 0xDA}, {0x7D, 0xDE}, {0x7D, 0xE9}, /* 0x74-0x77 */ + {0x7D, 0x9E}, {0x7D, 0xD9}, {0x7D, 0xF2}, {0x7D, 0xF9}, /* 0x78-0x7B */ + {0x7F, 0x75}, {0x7F, 0x77}, {0x7F, 0xAF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7F, 0xE9}, {0x80, 0x26}, {0x81, 0x9B}, /* 0xA0-0xA3 */ + {0x81, 0x9C}, {0x81, 0x9D}, {0x81, 0xA0}, {0x81, 0x9A}, /* 0xA4-0xA7 */ + {0x81, 0x98}, {0x85, 0x17}, {0x85, 0x3D}, {0x85, 0x1A}, /* 0xA8-0xAB */ + {0x84, 0xEE}, {0x85, 0x2C}, {0x85, 0x2D}, {0x85, 0x13}, /* 0xAC-0xAF */ + {0x85, 0x11}, {0x85, 0x23}, {0x85, 0x21}, {0x85, 0x14}, /* 0xB0-0xB3 */ + {0x84, 0xEC}, {0x85, 0x25}, {0x84, 0xFF}, {0x85, 0x06}, /* 0xB4-0xB7 */ + {0x87, 0x82}, {0x87, 0x74}, {0x87, 0x76}, {0x87, 0x60}, /* 0xB8-0xBB */ + {0x87, 0x66}, {0x87, 0x78}, {0x87, 0x68}, {0x87, 0x59}, /* 0xBC-0xBF */ + {0x87, 0x57}, {0x87, 0x4C}, {0x87, 0x53}, {0x88, 0x5B}, /* 0xC0-0xC3 */ + {0x88, 0x5D}, {0x89, 0x10}, {0x89, 0x07}, {0x89, 0x12}, /* 0xC4-0xC7 */ + {0x89, 0x13}, {0x89, 0x15}, {0x89, 0x0A}, {0x8A, 0xBC}, /* 0xC8-0xCB */ + {0x8A, 0xD2}, {0x8A, 0xC7}, {0x8A, 0xC4}, {0x8A, 0x95}, /* 0xCC-0xCF */ + {0x8A, 0xCB}, {0x8A, 0xF8}, {0x8A, 0xB2}, {0x8A, 0xC9}, /* 0xD0-0xD3 */ + {0x8A, 0xC2}, {0x8A, 0xBF}, {0x8A, 0xB0}, {0x8A, 0xD6}, /* 0xD4-0xD7 */ + {0x8A, 0xCD}, {0x8A, 0xB6}, {0x8A, 0xB9}, {0x8A, 0xDB}, /* 0xD8-0xDB */ + {0x8C, 0x4C}, {0x8C, 0x4E}, {0x8C, 0x6C}, {0x8C, 0xE0}, /* 0xDC-0xDF */ + {0x8C, 0xDE}, {0x8C, 0xE6}, {0x8C, 0xE4}, {0x8C, 0xEC}, /* 0xE0-0xE3 */ + {0x8C, 0xED}, {0x8C, 0xE2}, {0x8C, 0xE3}, {0x8C, 0xDC}, /* 0xE4-0xE7 */ + {0x8C, 0xEA}, {0x8C, 0xE1}, {0x8D, 0x6D}, {0x8D, 0x9F}, /* 0xE8-0xEB */ + {0x8D, 0xA3}, {0x8E, 0x2B}, {0x8E, 0x10}, {0x8E, 0x1D}, /* 0xEC-0xEF */ + {0x8E, 0x22}, {0x8E, 0x0F}, {0x8E, 0x29}, {0x8E, 0x1F}, /* 0xF0-0xF3 */ + {0x8E, 0x21}, {0x8E, 0x1E}, {0x8E, 0xBA}, {0x8F, 0x1D}, /* 0xF4-0xF7 */ + {0x8F, 0x1B}, {0x8F, 0x1F}, {0x8F, 0x29}, {0x8F, 0x26}, /* 0xF8-0xFB */ + {0x8F, 0x2A}, {0x8F, 0x1C}, {0x8F, 0x1E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8F, 0x25}, {0x90, 0x69}, {0x90, 0x6E}, {0x90, 0x68}, /* 0x40-0x43 */ + {0x90, 0x6D}, {0x90, 0x77}, {0x91, 0x30}, {0x91, 0x2D}, /* 0x44-0x47 */ + {0x91, 0x27}, {0x91, 0x31}, {0x91, 0x87}, {0x91, 0x89}, /* 0x48-0x4B */ + {0x91, 0x8B}, {0x91, 0x83}, {0x92, 0xC5}, {0x92, 0xBB}, /* 0x4C-0x4F */ + {0x92, 0xB7}, {0x92, 0xEA}, {0x92, 0xAC}, {0x92, 0xE4}, /* 0x50-0x53 */ + {0x92, 0xC1}, {0x92, 0xB3}, {0x92, 0xBC}, {0x92, 0xD2}, /* 0x54-0x57 */ + {0x92, 0xC7}, {0x92, 0xF0}, {0x92, 0xB2}, {0x95, 0xAD}, /* 0x58-0x5B */ + {0x95, 0xB1}, {0x97, 0x04}, {0x97, 0x06}, {0x97, 0x07}, /* 0x5C-0x5F */ + {0x97, 0x09}, {0x97, 0x60}, {0x97, 0x8D}, {0x97, 0x8B}, /* 0x60-0x63 */ + {0x97, 0x8F}, {0x98, 0x21}, {0x98, 0x2B}, {0x98, 0x1C}, /* 0x64-0x67 */ + {0x98, 0xB3}, {0x99, 0x0A}, {0x99, 0x13}, {0x99, 0x12}, /* 0x68-0x6B */ + {0x99, 0x18}, {0x99, 0xDD}, {0x99, 0xD0}, {0x99, 0xDF}, /* 0x6C-0x6F */ + {0x99, 0xDB}, {0x99, 0xD1}, {0x99, 0xD5}, {0x99, 0xD2}, /* 0x70-0x73 */ + {0x99, 0xD9}, {0x9A, 0xB7}, {0x9A, 0xEE}, {0x9A, 0xEF}, /* 0x74-0x77 */ + {0x9B, 0x27}, {0x9B, 0x45}, {0x9B, 0x44}, {0x9B, 0x77}, /* 0x78-0x7B */ + {0x9B, 0x6F}, {0x9D, 0x06}, {0x9D, 0x09}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9D, 0x03}, {0x9E, 0xA9}, {0x9E, 0xBE}, /* 0xA0-0xA3 */ + {0x9E, 0xCE}, {0x58, 0xA8}, {0x9F, 0x52}, {0x51, 0x12}, /* 0xA4-0xA7 */ + {0x51, 0x18}, {0x51, 0x14}, {0x51, 0x10}, {0x51, 0x15}, /* 0xA8-0xAB */ + {0x51, 0x80}, {0x51, 0xAA}, {0x51, 0xDD}, {0x52, 0x91}, /* 0xAC-0xAF */ + {0x52, 0x93}, {0x52, 0xF3}, {0x56, 0x59}, {0x56, 0x6B}, /* 0xB0-0xB3 */ + {0x56, 0x79}, {0x56, 0x69}, {0x56, 0x64}, {0x56, 0x78}, /* 0xB4-0xB7 */ + {0x56, 0x6A}, {0x56, 0x68}, {0x56, 0x65}, {0x56, 0x71}, /* 0xB8-0xBB */ + {0x56, 0x6F}, {0x56, 0x6C}, {0x56, 0x62}, {0x56, 0x76}, /* 0xBC-0xBF */ + {0x58, 0xC1}, {0x58, 0xBE}, {0x58, 0xC7}, {0x58, 0xC5}, /* 0xC0-0xC3 */ + {0x59, 0x6E}, {0x5B, 0x1D}, {0x5B, 0x34}, {0x5B, 0x78}, /* 0xC4-0xC7 */ + {0x5B, 0xF0}, {0x5C, 0x0E}, {0x5F, 0x4A}, {0x61, 0xB2}, /* 0xC8-0xCB */ + {0x61, 0x91}, {0x61, 0xA9}, {0x61, 0x8A}, {0x61, 0xCD}, /* 0xCC-0xCF */ + {0x61, 0xB6}, {0x61, 0xBE}, {0x61, 0xCA}, {0x61, 0xC8}, /* 0xD0-0xD3 */ + {0x62, 0x30}, {0x64, 0xC5}, {0x64, 0xC1}, {0x64, 0xCB}, /* 0xD4-0xD7 */ + {0x64, 0xBB}, {0x64, 0xBC}, {0x64, 0xDA}, {0x64, 0xC4}, /* 0xD8-0xDB */ + {0x64, 0xC7}, {0x64, 0xC2}, {0x64, 0xCD}, {0x64, 0xBF}, /* 0xDC-0xDF */ + {0x64, 0xD2}, {0x64, 0xD4}, {0x64, 0xBE}, {0x65, 0x74}, /* 0xE0-0xE3 */ + {0x66, 0xC6}, {0x66, 0xC9}, {0x66, 0xB9}, {0x66, 0xC4}, /* 0xE4-0xE7 */ + {0x66, 0xC7}, {0x66, 0xB8}, {0x6A, 0x3D}, {0x6A, 0x38}, /* 0xE8-0xEB */ + {0x6A, 0x3A}, {0x6A, 0x59}, {0x6A, 0x6B}, {0x6A, 0x58}, /* 0xEC-0xEF */ + {0x6A, 0x39}, {0x6A, 0x44}, {0x6A, 0x62}, {0x6A, 0x61}, /* 0xF0-0xF3 */ + {0x6A, 0x4B}, {0x6A, 0x47}, {0x6A, 0x35}, {0x6A, 0x5F}, /* 0xF4-0xF7 */ + {0x6A, 0x48}, {0x6B, 0x59}, {0x6B, 0x77}, {0x6C, 0x05}, /* 0xF8-0xFB */ + {0x6F, 0xC2}, {0x6F, 0xB1}, {0x6F, 0xA1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_BF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6F, 0xC3}, {0x6F, 0xA4}, {0x6F, 0xC1}, {0x6F, 0xA7}, /* 0x40-0x43 */ + {0x6F, 0xB3}, {0x6F, 0xC0}, {0x6F, 0xB9}, {0x6F, 0xB6}, /* 0x44-0x47 */ + {0x6F, 0xA6}, {0x6F, 0xA0}, {0x6F, 0xB4}, {0x71, 0xBE}, /* 0x48-0x4B */ + {0x71, 0xC9}, {0x71, 0xD0}, {0x71, 0xD2}, {0x71, 0xC8}, /* 0x4C-0x4F */ + {0x71, 0xD5}, {0x71, 0xB9}, {0x71, 0xCE}, {0x71, 0xD9}, /* 0x50-0x53 */ + {0x71, 0xDC}, {0x71, 0xC3}, {0x71, 0xC4}, {0x73, 0x68}, /* 0x54-0x57 */ + {0x74, 0x9C}, {0x74, 0xA3}, {0x74, 0x98}, {0x74, 0x9F}, /* 0x58-0x5B */ + {0x74, 0x9E}, {0x74, 0xE2}, {0x75, 0x0C}, {0x75, 0x0D}, /* 0x5C-0x5F */ + {0x76, 0x34}, {0x76, 0x38}, {0x76, 0x3A}, {0x76, 0xE7}, /* 0x60-0x63 */ + {0x76, 0xE5}, {0x77, 0xA0}, {0x77, 0x9E}, {0x77, 0x9F}, /* 0x64-0x67 */ + {0x77, 0xA5}, {0x78, 0xE8}, {0x78, 0xDA}, {0x78, 0xEC}, /* 0x68-0x6B */ + {0x78, 0xE7}, {0x79, 0xA6}, {0x7A, 0x4D}, {0x7A, 0x4E}, /* 0x6C-0x6F */ + {0x7A, 0x46}, {0x7A, 0x4C}, {0x7A, 0x4B}, {0x7A, 0xBA}, /* 0x70-0x73 */ + {0x7B, 0xD9}, {0x7C, 0x11}, {0x7B, 0xC9}, {0x7B, 0xE4}, /* 0x74-0x77 */ + {0x7B, 0xDB}, {0x7B, 0xE1}, {0x7B, 0xE9}, {0x7B, 0xE6}, /* 0x78-0x7B */ + {0x7C, 0xD5}, {0x7C, 0xD6}, {0x7E, 0x0A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7E, 0x11}, {0x7E, 0x08}, {0x7E, 0x1B}, /* 0xA0-0xA3 */ + {0x7E, 0x23}, {0x7E, 0x1E}, {0x7E, 0x1D}, {0x7E, 0x09}, /* 0xA4-0xA7 */ + {0x7E, 0x10}, {0x7F, 0x79}, {0x7F, 0xB2}, {0x7F, 0xF0}, /* 0xA8-0xAB */ + {0x7F, 0xF1}, {0x7F, 0xEE}, {0x80, 0x28}, {0x81, 0xB3}, /* 0xAC-0xAF */ + {0x81, 0xA9}, {0x81, 0xA8}, {0x81, 0xFB}, {0x82, 0x08}, /* 0xB0-0xB3 */ + {0x82, 0x58}, {0x82, 0x59}, {0x85, 0x4A}, {0x85, 0x59}, /* 0xB4-0xB7 */ + {0x85, 0x48}, {0x85, 0x68}, {0x85, 0x69}, {0x85, 0x43}, /* 0xB8-0xBB */ + {0x85, 0x49}, {0x85, 0x6D}, {0x85, 0x6A}, {0x85, 0x5E}, /* 0xBC-0xBF */ + {0x87, 0x83}, {0x87, 0x9F}, {0x87, 0x9E}, {0x87, 0xA2}, /* 0xC0-0xC3 */ + {0x87, 0x8D}, {0x88, 0x61}, {0x89, 0x2A}, {0x89, 0x32}, /* 0xC4-0xC7 */ + {0x89, 0x25}, {0x89, 0x2B}, {0x89, 0x21}, {0x89, 0xAA}, /* 0xC8-0xCB */ + {0x89, 0xA6}, {0x8A, 0xE6}, {0x8A, 0xFA}, {0x8A, 0xEB}, /* 0xCC-0xCF */ + {0x8A, 0xF1}, {0x8B, 0x00}, {0x8A, 0xDC}, {0x8A, 0xE7}, /* 0xD0-0xD3 */ + {0x8A, 0xEE}, {0x8A, 0xFE}, {0x8B, 0x01}, {0x8B, 0x02}, /* 0xD4-0xD7 */ + {0x8A, 0xF7}, {0x8A, 0xED}, {0x8A, 0xF3}, {0x8A, 0xF6}, /* 0xD8-0xDB */ + {0x8A, 0xFC}, {0x8C, 0x6B}, {0x8C, 0x6D}, {0x8C, 0x93}, /* 0xDC-0xDF */ + {0x8C, 0xF4}, {0x8E, 0x44}, {0x8E, 0x31}, {0x8E, 0x34}, /* 0xE0-0xE3 */ + {0x8E, 0x42}, {0x8E, 0x39}, {0x8E, 0x35}, {0x8F, 0x3B}, /* 0xE4-0xE7 */ + {0x8F, 0x2F}, {0x8F, 0x38}, {0x8F, 0x33}, {0x8F, 0xA8}, /* 0xE8-0xEB */ + {0x8F, 0xA6}, {0x90, 0x75}, {0x90, 0x74}, {0x90, 0x78}, /* 0xEC-0xEF */ + {0x90, 0x72}, {0x90, 0x7C}, {0x90, 0x7A}, {0x91, 0x34}, /* 0xF0-0xF3 */ + {0x91, 0x92}, {0x93, 0x20}, {0x93, 0x36}, {0x92, 0xF8}, /* 0xF4-0xF7 */ + {0x93, 0x33}, {0x93, 0x2F}, {0x93, 0x22}, {0x92, 0xFC}, /* 0xF8-0xFB */ + {0x93, 0x2B}, {0x93, 0x04}, {0x93, 0x1A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0x10}, {0x93, 0x26}, {0x93, 0x21}, {0x93, 0x15}, /* 0x40-0x43 */ + {0x93, 0x2E}, {0x93, 0x19}, {0x95, 0xBB}, {0x96, 0xA7}, /* 0x44-0x47 */ + {0x96, 0xA8}, {0x96, 0xAA}, {0x96, 0xD5}, {0x97, 0x0E}, /* 0x48-0x4B */ + {0x97, 0x11}, {0x97, 0x16}, {0x97, 0x0D}, {0x97, 0x13}, /* 0x4C-0x4F */ + {0x97, 0x0F}, {0x97, 0x5B}, {0x97, 0x5C}, {0x97, 0x66}, /* 0x50-0x53 */ + {0x97, 0x98}, {0x98, 0x30}, {0x98, 0x38}, {0x98, 0x3B}, /* 0x54-0x57 */ + {0x98, 0x37}, {0x98, 0x2D}, {0x98, 0x39}, {0x98, 0x24}, /* 0x58-0x5B */ + {0x99, 0x10}, {0x99, 0x28}, {0x99, 0x1E}, {0x99, 0x1B}, /* 0x5C-0x5F */ + {0x99, 0x21}, {0x99, 0x1A}, {0x99, 0xED}, {0x99, 0xE2}, /* 0x60-0x63 */ + {0x99, 0xF1}, {0x9A, 0xB8}, {0x9A, 0xBC}, {0x9A, 0xFB}, /* 0x64-0x67 */ + {0x9A, 0xED}, {0x9B, 0x28}, {0x9B, 0x91}, {0x9D, 0x15}, /* 0x68-0x6B */ + {0x9D, 0x23}, {0x9D, 0x26}, {0x9D, 0x28}, {0x9D, 0x12}, /* 0x6C-0x6F */ + {0x9D, 0x1B}, {0x9E, 0xD8}, {0x9E, 0xD4}, {0x9F, 0x8D}, /* 0x70-0x73 */ + {0x9F, 0x9C}, {0x51, 0x2A}, {0x51, 0x1F}, {0x51, 0x21}, /* 0x74-0x77 */ + {0x51, 0x32}, {0x52, 0xF5}, {0x56, 0x8E}, {0x56, 0x80}, /* 0x78-0x7B */ + {0x56, 0x90}, {0x56, 0x85}, {0x56, 0x87}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x56, 0x8F}, {0x58, 0xD5}, {0x58, 0xD3}, /* 0xA0-0xA3 */ + {0x58, 0xD1}, {0x58, 0xCE}, {0x5B, 0x30}, {0x5B, 0x2A}, /* 0xA4-0xA7 */ + {0x5B, 0x24}, {0x5B, 0x7A}, {0x5C, 0x37}, {0x5C, 0x68}, /* 0xA8-0xAB */ + {0x5D, 0xBC}, {0x5D, 0xBA}, {0x5D, 0xBD}, {0x5D, 0xB8}, /* 0xAC-0xAF */ + {0x5E, 0x6B}, {0x5F, 0x4C}, {0x5F, 0xBD}, {0x61, 0xC9}, /* 0xB0-0xB3 */ + {0x61, 0xC2}, {0x61, 0xC7}, {0x61, 0xE6}, {0x61, 0xCB}, /* 0xB4-0xB7 */ + {0x62, 0x32}, {0x62, 0x34}, {0x64, 0xCE}, {0x64, 0xCA}, /* 0xB8-0xBB */ + {0x64, 0xD8}, {0x64, 0xE0}, {0x64, 0xF0}, {0x64, 0xE6}, /* 0xBC-0xBF */ + {0x64, 0xEC}, {0x64, 0xF1}, {0x64, 0xE2}, {0x64, 0xED}, /* 0xC0-0xC3 */ + {0x65, 0x82}, {0x65, 0x83}, {0x66, 0xD9}, {0x66, 0xD6}, /* 0xC4-0xC7 */ + {0x6A, 0x80}, {0x6A, 0x94}, {0x6A, 0x84}, {0x6A, 0xA2}, /* 0xC8-0xCB */ + {0x6A, 0x9C}, {0x6A, 0xDB}, {0x6A, 0xA3}, {0x6A, 0x7E}, /* 0xCC-0xCF */ + {0x6A, 0x97}, {0x6A, 0x90}, {0x6A, 0xA0}, {0x6B, 0x5C}, /* 0xD0-0xD3 */ + {0x6B, 0xAE}, {0x6B, 0xDA}, {0x6C, 0x08}, {0x6F, 0xD8}, /* 0xD4-0xD7 */ + {0x6F, 0xF1}, {0x6F, 0xDF}, {0x6F, 0xE0}, {0x6F, 0xDB}, /* 0xD8-0xDB */ + {0x6F, 0xE4}, {0x6F, 0xEB}, {0x6F, 0xEF}, {0x6F, 0x80}, /* 0xDC-0xDF */ + {0x6F, 0xEC}, {0x6F, 0xE1}, {0x6F, 0xE9}, {0x6F, 0xD5}, /* 0xE0-0xE3 */ + {0x6F, 0xEE}, {0x6F, 0xF0}, {0x71, 0xE7}, {0x71, 0xDF}, /* 0xE4-0xE7 */ + {0x71, 0xEE}, {0x71, 0xE6}, {0x71, 0xE5}, {0x71, 0xED}, /* 0xE8-0xEB */ + {0x71, 0xEC}, {0x71, 0xF4}, {0x71, 0xE0}, {0x72, 0x35}, /* 0xEC-0xEF */ + {0x72, 0x46}, {0x73, 0x70}, {0x73, 0x72}, {0x74, 0xA9}, /* 0xF0-0xF3 */ + {0x74, 0xB0}, {0x74, 0xA6}, {0x74, 0xA8}, {0x76, 0x46}, /* 0xF4-0xF7 */ + {0x76, 0x42}, {0x76, 0x4C}, {0x76, 0xEA}, {0x77, 0xB3}, /* 0xF8-0xFB */ + {0x77, 0xAA}, {0x77, 0xB0}, {0x77, 0xAC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x77, 0xA7}, {0x77, 0xAD}, {0x77, 0xEF}, {0x78, 0xF7}, /* 0x40-0x43 */ + {0x78, 0xFA}, {0x78, 0xF4}, {0x78, 0xEF}, {0x79, 0x01}, /* 0x44-0x47 */ + {0x79, 0xA7}, {0x79, 0xAA}, {0x7A, 0x57}, {0x7A, 0xBF}, /* 0x48-0x4B */ + {0x7C, 0x07}, {0x7C, 0x0D}, {0x7B, 0xFE}, {0x7B, 0xF7}, /* 0x4C-0x4F */ + {0x7C, 0x0C}, {0x7B, 0xE0}, {0x7C, 0xE0}, {0x7C, 0xDC}, /* 0x50-0x53 */ + {0x7C, 0xDE}, {0x7C, 0xE2}, {0x7C, 0xDF}, {0x7C, 0xD9}, /* 0x54-0x57 */ + {0x7C, 0xDD}, {0x7E, 0x2E}, {0x7E, 0x3E}, {0x7E, 0x46}, /* 0x58-0x5B */ + {0x7E, 0x37}, {0x7E, 0x32}, {0x7E, 0x43}, {0x7E, 0x2B}, /* 0x5C-0x5F */ + {0x7E, 0x3D}, {0x7E, 0x31}, {0x7E, 0x45}, {0x7E, 0x41}, /* 0x60-0x63 */ + {0x7E, 0x34}, {0x7E, 0x39}, {0x7E, 0x48}, {0x7E, 0x35}, /* 0x64-0x67 */ + {0x7E, 0x3F}, {0x7E, 0x2F}, {0x7F, 0x44}, {0x7F, 0xF3}, /* 0x68-0x6B */ + {0x7F, 0xFC}, {0x80, 0x71}, {0x80, 0x72}, {0x80, 0x70}, /* 0x6C-0x6F */ + {0x80, 0x6F}, {0x80, 0x73}, {0x81, 0xC6}, {0x81, 0xC3}, /* 0x70-0x73 */ + {0x81, 0xBA}, {0x81, 0xC2}, {0x81, 0xC0}, {0x81, 0xBF}, /* 0x74-0x77 */ + {0x81, 0xBD}, {0x81, 0xC9}, {0x81, 0xBE}, {0x81, 0xE8}, /* 0x78-0x7B */ + {0x82, 0x09}, {0x82, 0x71}, {0x85, 0xAA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x85, 0x84}, {0x85, 0x7E}, {0x85, 0x9C}, /* 0xA0-0xA3 */ + {0x85, 0x91}, {0x85, 0x94}, {0x85, 0xAF}, {0x85, 0x9B}, /* 0xA4-0xA7 */ + {0x85, 0x87}, {0x85, 0xA8}, {0x85, 0x8A}, {0x86, 0x67}, /* 0xA8-0xAB */ + {0x87, 0xC0}, {0x87, 0xD1}, {0x87, 0xB3}, {0x87, 0xD2}, /* 0xAC-0xAF */ + {0x87, 0xC6}, {0x87, 0xAB}, {0x87, 0xBB}, {0x87, 0xBA}, /* 0xB0-0xB3 */ + {0x87, 0xC8}, {0x87, 0xCB}, {0x89, 0x3B}, {0x89, 0x36}, /* 0xB4-0xB7 */ + {0x89, 0x44}, {0x89, 0x38}, {0x89, 0x3D}, {0x89, 0xAC}, /* 0xB8-0xBB */ + {0x8B, 0x0E}, {0x8B, 0x17}, {0x8B, 0x19}, {0x8B, 0x1B}, /* 0xBC-0xBF */ + {0x8B, 0x0A}, {0x8B, 0x20}, {0x8B, 0x1D}, {0x8B, 0x04}, /* 0xC0-0xC3 */ + {0x8B, 0x10}, {0x8C, 0x41}, {0x8C, 0x3F}, {0x8C, 0x73}, /* 0xC4-0xC7 */ + {0x8C, 0xFA}, {0x8C, 0xFD}, {0x8C, 0xFC}, {0x8C, 0xF8}, /* 0xC8-0xCB */ + {0x8C, 0xFB}, {0x8D, 0xA8}, {0x8E, 0x49}, {0x8E, 0x4B}, /* 0xCC-0xCF */ + {0x8E, 0x48}, {0x8E, 0x4A}, {0x8F, 0x44}, {0x8F, 0x3E}, /* 0xD0-0xD3 */ + {0x8F, 0x42}, {0x8F, 0x45}, {0x8F, 0x3F}, {0x90, 0x7F}, /* 0xD4-0xD7 */ + {0x90, 0x7D}, {0x90, 0x84}, {0x90, 0x81}, {0x90, 0x82}, /* 0xD8-0xDB */ + {0x90, 0x80}, {0x91, 0x39}, {0x91, 0xA3}, {0x91, 0x9E}, /* 0xDC-0xDF */ + {0x91, 0x9C}, {0x93, 0x4D}, {0x93, 0x82}, {0x93, 0x28}, /* 0xE0-0xE3 */ + {0x93, 0x75}, {0x93, 0x4A}, {0x93, 0x65}, {0x93, 0x4B}, /* 0xE4-0xE7 */ + {0x93, 0x18}, {0x93, 0x7E}, {0x93, 0x6C}, {0x93, 0x5B}, /* 0xE8-0xEB */ + {0x93, 0x70}, {0x93, 0x5A}, {0x93, 0x54}, {0x95, 0xCA}, /* 0xEC-0xEF */ + {0x95, 0xCB}, {0x95, 0xCC}, {0x95, 0xC8}, {0x95, 0xC6}, /* 0xF0-0xF3 */ + {0x96, 0xB1}, {0x96, 0xB8}, {0x96, 0xD6}, {0x97, 0x1C}, /* 0xF4-0xF7 */ + {0x97, 0x1E}, {0x97, 0xA0}, {0x97, 0xD3}, {0x98, 0x46}, /* 0xF8-0xFB */ + {0x98, 0xB6}, {0x99, 0x35}, {0x9A, 0x01}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x99, 0xFF}, {0x9B, 0xAE}, {0x9B, 0xAB}, {0x9B, 0xAA}, /* 0x40-0x43 */ + {0x9B, 0xAD}, {0x9D, 0x3B}, {0x9D, 0x3F}, {0x9E, 0x8B}, /* 0x44-0x47 */ + {0x9E, 0xCF}, {0x9E, 0xDE}, {0x9E, 0xDC}, {0x9E, 0xDD}, /* 0x48-0x4B */ + {0x9E, 0xDB}, {0x9F, 0x3E}, {0x9F, 0x4B}, {0x53, 0xE2}, /* 0x4C-0x4F */ + {0x56, 0x95}, {0x56, 0xAE}, {0x58, 0xD9}, {0x58, 0xD8}, /* 0x50-0x53 */ + {0x5B, 0x38}, {0x5F, 0x5D}, {0x61, 0xE3}, {0x62, 0x33}, /* 0x54-0x57 */ + {0x64, 0xF4}, {0x64, 0xF2}, {0x64, 0xFE}, {0x65, 0x06}, /* 0x58-0x5B */ + {0x64, 0xFA}, {0x64, 0xFB}, {0x64, 0xF7}, {0x65, 0xB7}, /* 0x5C-0x5F */ + {0x66, 0xDC}, {0x67, 0x26}, {0x6A, 0xB3}, {0x6A, 0xAC}, /* 0x60-0x63 */ + {0x6A, 0xC3}, {0x6A, 0xBB}, {0x6A, 0xB8}, {0x6A, 0xC2}, /* 0x64-0x67 */ + {0x6A, 0xAE}, {0x6A, 0xAF}, {0x6B, 0x5F}, {0x6B, 0x78}, /* 0x68-0x6B */ + {0x6B, 0xAF}, {0x70, 0x09}, {0x70, 0x0B}, {0x6F, 0xFE}, /* 0x6C-0x6F */ + {0x70, 0x06}, {0x6F, 0xFA}, {0x70, 0x11}, {0x70, 0x0F}, /* 0x70-0x73 */ + {0x71, 0xFB}, {0x71, 0xFC}, {0x71, 0xFE}, {0x71, 0xF8}, /* 0x74-0x77 */ + {0x73, 0x77}, {0x73, 0x75}, {0x74, 0xA7}, {0x74, 0xBF}, /* 0x78-0x7B */ + {0x75, 0x15}, {0x76, 0x56}, {0x76, 0x58}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x76, 0x52}, {0x77, 0xBD}, {0x77, 0xBF}, /* 0xA0-0xA3 */ + {0x77, 0xBB}, {0x77, 0xBC}, {0x79, 0x0E}, {0x79, 0xAE}, /* 0xA4-0xA7 */ + {0x7A, 0x61}, {0x7A, 0x62}, {0x7A, 0x60}, {0x7A, 0xC4}, /* 0xA8-0xAB */ + {0x7A, 0xC5}, {0x7C, 0x2B}, {0x7C, 0x27}, {0x7C, 0x2A}, /* 0xAC-0xAF */ + {0x7C, 0x1E}, {0x7C, 0x23}, {0x7C, 0x21}, {0x7C, 0xE7}, /* 0xB0-0xB3 */ + {0x7E, 0x54}, {0x7E, 0x55}, {0x7E, 0x5E}, {0x7E, 0x5A}, /* 0xB4-0xB7 */ + {0x7E, 0x61}, {0x7E, 0x52}, {0x7E, 0x59}, {0x7F, 0x48}, /* 0xB8-0xBB */ + {0x7F, 0xF9}, {0x7F, 0xFB}, {0x80, 0x77}, {0x80, 0x76}, /* 0xBC-0xBF */ + {0x81, 0xCD}, {0x81, 0xCF}, {0x82, 0x0A}, {0x85, 0xCF}, /* 0xC0-0xC3 */ + {0x85, 0xA9}, {0x85, 0xCD}, {0x85, 0xD0}, {0x85, 0xC9}, /* 0xC4-0xC7 */ + {0x85, 0xB0}, {0x85, 0xBA}, {0x85, 0xB9}, {0x85, 0xA6}, /* 0xC8-0xCB */ + {0x87, 0xEF}, {0x87, 0xEC}, {0x87, 0xF2}, {0x87, 0xE0}, /* 0xCC-0xCF */ + {0x89, 0x86}, {0x89, 0xB2}, {0x89, 0xF4}, {0x8B, 0x28}, /* 0xD0-0xD3 */ + {0x8B, 0x39}, {0x8B, 0x2C}, {0x8B, 0x2B}, {0x8C, 0x50}, /* 0xD4-0xD7 */ + {0x8D, 0x05}, {0x8E, 0x59}, {0x8E, 0x63}, {0x8E, 0x66}, /* 0xD8-0xDB */ + {0x8E, 0x64}, {0x8E, 0x5F}, {0x8E, 0x55}, {0x8E, 0xC0}, /* 0xDC-0xDF */ + {0x8F, 0x49}, {0x8F, 0x4D}, {0x90, 0x87}, {0x90, 0x83}, /* 0xE0-0xE3 */ + {0x90, 0x88}, {0x91, 0xAB}, {0x91, 0xAC}, {0x91, 0xD0}, /* 0xE4-0xE7 */ + {0x93, 0x94}, {0x93, 0x8A}, {0x93, 0x96}, {0x93, 0xA2}, /* 0xE8-0xEB */ + {0x93, 0xB3}, {0x93, 0xAE}, {0x93, 0xAC}, {0x93, 0xB0}, /* 0xEC-0xEF */ + {0x93, 0x98}, {0x93, 0x9A}, {0x93, 0x97}, {0x95, 0xD4}, /* 0xF0-0xF3 */ + {0x95, 0xD6}, {0x95, 0xD0}, {0x95, 0xD5}, {0x96, 0xE2}, /* 0xF4-0xF7 */ + {0x96, 0xDC}, {0x96, 0xD9}, {0x96, 0xDB}, {0x96, 0xDE}, /* 0xF8-0xFB */ + {0x97, 0x24}, {0x97, 0xA3}, {0x97, 0xA6}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x97, 0xAD}, {0x97, 0xF9}, {0x98, 0x4D}, {0x98, 0x4F}, /* 0x40-0x43 */ + {0x98, 0x4C}, {0x98, 0x4E}, {0x98, 0x53}, {0x98, 0xBA}, /* 0x44-0x47 */ + {0x99, 0x3E}, {0x99, 0x3F}, {0x99, 0x3D}, {0x99, 0x2E}, /* 0x48-0x4B */ + {0x99, 0xA5}, {0x9A, 0x0E}, {0x9A, 0xC1}, {0x9B, 0x03}, /* 0x4C-0x4F */ + {0x9B, 0x06}, {0x9B, 0x4F}, {0x9B, 0x4E}, {0x9B, 0x4D}, /* 0x50-0x53 */ + {0x9B, 0xCA}, {0x9B, 0xC9}, {0x9B, 0xFD}, {0x9B, 0xC8}, /* 0x54-0x57 */ + {0x9B, 0xC0}, {0x9D, 0x51}, {0x9D, 0x5D}, {0x9D, 0x60}, /* 0x58-0x5B */ + {0x9E, 0xE0}, {0x9F, 0x15}, {0x9F, 0x2C}, {0x51, 0x33}, /* 0x5C-0x5F */ + {0x56, 0xA5}, {0x58, 0xDE}, {0x58, 0xDF}, {0x58, 0xE2}, /* 0x60-0x63 */ + {0x5B, 0xF5}, {0x9F, 0x90}, {0x5E, 0xEC}, {0x61, 0xF2}, /* 0x64-0x67 */ + {0x61, 0xF7}, {0x61, 0xF6}, {0x61, 0xF5}, {0x65, 0x00}, /* 0x68-0x6B */ + {0x65, 0x0F}, {0x66, 0xE0}, {0x66, 0xDD}, {0x6A, 0xE5}, /* 0x6C-0x6F */ + {0x6A, 0xDD}, {0x6A, 0xDA}, {0x6A, 0xD3}, {0x70, 0x1B}, /* 0x70-0x73 */ + {0x70, 0x1F}, {0x70, 0x28}, {0x70, 0x1A}, {0x70, 0x1D}, /* 0x74-0x77 */ + {0x70, 0x15}, {0x70, 0x18}, {0x72, 0x06}, {0x72, 0x0D}, /* 0x78-0x7B */ + {0x72, 0x58}, {0x72, 0xA2}, {0x73, 0x78}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x73, 0x7A}, {0x74, 0xBD}, {0x74, 0xCA}, /* 0xA0-0xA3 */ + {0x74, 0xE3}, {0x75, 0x87}, {0x75, 0x86}, {0x76, 0x5F}, /* 0xA4-0xA7 */ + {0x76, 0x61}, {0x77, 0xC7}, {0x79, 0x19}, {0x79, 0xB1}, /* 0xA8-0xAB */ + {0x7A, 0x6B}, {0x7A, 0x69}, {0x7C, 0x3E}, {0x7C, 0x3F}, /* 0xAC-0xAF */ + {0x7C, 0x38}, {0x7C, 0x3D}, {0x7C, 0x37}, {0x7C, 0x40}, /* 0xB0-0xB3 */ + {0x7E, 0x6B}, {0x7E, 0x6D}, {0x7E, 0x79}, {0x7E, 0x69}, /* 0xB4-0xB7 */ + {0x7E, 0x6A}, {0x7F, 0x85}, {0x7E, 0x73}, {0x7F, 0xB6}, /* 0xB8-0xBB */ + {0x7F, 0xB9}, {0x7F, 0xB8}, {0x81, 0xD8}, {0x85, 0xE9}, /* 0xBC-0xBF */ + {0x85, 0xDD}, {0x85, 0xEA}, {0x85, 0xD5}, {0x85, 0xE4}, /* 0xC0-0xC3 */ + {0x85, 0xE5}, {0x85, 0xF7}, {0x87, 0xFB}, {0x88, 0x05}, /* 0xC4-0xC7 */ + {0x88, 0x0D}, {0x87, 0xF9}, {0x87, 0xFE}, {0x89, 0x60}, /* 0xC8-0xCB */ + {0x89, 0x5F}, {0x89, 0x56}, {0x89, 0x5E}, {0x8B, 0x41}, /* 0xCC-0xCF */ + {0x8B, 0x5C}, {0x8B, 0x58}, {0x8B, 0x49}, {0x8B, 0x5A}, /* 0xD0-0xD3 */ + {0x8B, 0x4E}, {0x8B, 0x4F}, {0x8B, 0x46}, {0x8B, 0x59}, /* 0xD4-0xD7 */ + {0x8D, 0x08}, {0x8D, 0x0A}, {0x8E, 0x7C}, {0x8E, 0x72}, /* 0xD8-0xDB */ + {0x8E, 0x87}, {0x8E, 0x76}, {0x8E, 0x6C}, {0x8E, 0x7A}, /* 0xDC-0xDF */ + {0x8E, 0x74}, {0x8F, 0x54}, {0x8F, 0x4E}, {0x8F, 0xAD}, /* 0xE0-0xE3 */ + {0x90, 0x8A}, {0x90, 0x8B}, {0x91, 0xB1}, {0x91, 0xAE}, /* 0xE4-0xE7 */ + {0x93, 0xE1}, {0x93, 0xD1}, {0x93, 0xDF}, {0x93, 0xC3}, /* 0xE8-0xEB */ + {0x93, 0xC8}, {0x93, 0xDC}, {0x93, 0xDD}, {0x93, 0xD6}, /* 0xEC-0xEF */ + {0x93, 0xE2}, {0x93, 0xCD}, {0x93, 0xD8}, {0x93, 0xE4}, /* 0xF0-0xF3 */ + {0x93, 0xD7}, {0x93, 0xE8}, {0x95, 0xDC}, {0x96, 0xB4}, /* 0xF4-0xF7 */ + {0x96, 0xE3}, {0x97, 0x2A}, {0x97, 0x27}, {0x97, 0x61}, /* 0xF8-0xFB */ + {0x97, 0xDC}, {0x97, 0xFB}, {0x98, 0x5E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x98, 0x58}, {0x98, 0x5B}, {0x98, 0xBC}, {0x99, 0x45}, /* 0x40-0x43 */ + {0x99, 0x49}, {0x9A, 0x16}, {0x9A, 0x19}, {0x9B, 0x0D}, /* 0x44-0x47 */ + {0x9B, 0xE8}, {0x9B, 0xE7}, {0x9B, 0xD6}, {0x9B, 0xDB}, /* 0x48-0x4B */ + {0x9D, 0x89}, {0x9D, 0x61}, {0x9D, 0x72}, {0x9D, 0x6A}, /* 0x4C-0x4F */ + {0x9D, 0x6C}, {0x9E, 0x92}, {0x9E, 0x97}, {0x9E, 0x93}, /* 0x50-0x53 */ + {0x9E, 0xB4}, {0x52, 0xF8}, {0x56, 0xA8}, {0x56, 0xB7}, /* 0x54-0x57 */ + {0x56, 0xB6}, {0x56, 0xB4}, {0x56, 0xBC}, {0x58, 0xE4}, /* 0x58-0x5B */ + {0x5B, 0x40}, {0x5B, 0x43}, {0x5B, 0x7D}, {0x5B, 0xF6}, /* 0x5C-0x5F */ + {0x5D, 0xC9}, {0x61, 0xF8}, {0x61, 0xFA}, {0x65, 0x18}, /* 0x60-0x63 */ + {0x65, 0x14}, {0x65, 0x19}, {0x66, 0xE6}, {0x67, 0x27}, /* 0x64-0x67 */ + {0x6A, 0xEC}, {0x70, 0x3E}, {0x70, 0x30}, {0x70, 0x32}, /* 0x68-0x6B */ + {0x72, 0x10}, {0x73, 0x7B}, {0x74, 0xCF}, {0x76, 0x62}, /* 0x6C-0x6F */ + {0x76, 0x65}, {0x79, 0x26}, {0x79, 0x2A}, {0x79, 0x2C}, /* 0x70-0x73 */ + {0x79, 0x2B}, {0x7A, 0xC7}, {0x7A, 0xF6}, {0x7C, 0x4C}, /* 0x74-0x77 */ + {0x7C, 0x43}, {0x7C, 0x4D}, {0x7C, 0xEF}, {0x7C, 0xF0}, /* 0x78-0x7B */ + {0x8F, 0xAE}, {0x7E, 0x7D}, {0x7E, 0x7C}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x7E, 0x82}, {0x7F, 0x4C}, {0x80, 0x00}, /* 0xA0-0xA3 */ + {0x81, 0xDA}, {0x82, 0x66}, {0x85, 0xFB}, {0x85, 0xF9}, /* 0xA4-0xA7 */ + {0x86, 0x11}, {0x85, 0xFA}, {0x86, 0x06}, {0x86, 0x0B}, /* 0xA8-0xAB */ + {0x86, 0x07}, {0x86, 0x0A}, {0x88, 0x14}, {0x88, 0x15}, /* 0xAC-0xAF */ + {0x89, 0x64}, {0x89, 0xBA}, {0x89, 0xF8}, {0x8B, 0x70}, /* 0xB0-0xB3 */ + {0x8B, 0x6C}, {0x8B, 0x66}, {0x8B, 0x6F}, {0x8B, 0x5F}, /* 0xB4-0xB7 */ + {0x8B, 0x6B}, {0x8D, 0x0F}, {0x8D, 0x0D}, {0x8E, 0x89}, /* 0xB8-0xBB */ + {0x8E, 0x81}, {0x8E, 0x85}, {0x8E, 0x82}, {0x91, 0xB4}, /* 0xBC-0xBF */ + {0x91, 0xCB}, {0x94, 0x18}, {0x94, 0x03}, {0x93, 0xFD}, /* 0xC0-0xC3 */ + {0x95, 0xE1}, {0x97, 0x30}, {0x98, 0xC4}, {0x99, 0x52}, /* 0xC4-0xC7 */ + {0x99, 0x51}, {0x99, 0xA8}, {0x9A, 0x2B}, {0x9A, 0x30}, /* 0xC8-0xCB */ + {0x9A, 0x37}, {0x9A, 0x35}, {0x9C, 0x13}, {0x9C, 0x0D}, /* 0xCC-0xCF */ + {0x9E, 0x79}, {0x9E, 0xB5}, {0x9E, 0xE8}, {0x9F, 0x2F}, /* 0xD0-0xD3 */ + {0x9F, 0x5F}, {0x9F, 0x63}, {0x9F, 0x61}, {0x51, 0x37}, /* 0xD4-0xD7 */ + {0x51, 0x38}, {0x56, 0xC1}, {0x56, 0xC0}, {0x56, 0xC2}, /* 0xD8-0xDB */ + {0x59, 0x14}, {0x5C, 0x6C}, {0x5D, 0xCD}, {0x61, 0xFC}, /* 0xDC-0xDF */ + {0x61, 0xFE}, {0x65, 0x1D}, {0x65, 0x1C}, {0x65, 0x95}, /* 0xE0-0xE3 */ + {0x66, 0xE9}, {0x6A, 0xFB}, {0x6B, 0x04}, {0x6A, 0xFA}, /* 0xE4-0xE7 */ + {0x6B, 0xB2}, {0x70, 0x4C}, {0x72, 0x1B}, {0x72, 0xA7}, /* 0xE8-0xEB */ + {0x74, 0xD6}, {0x74, 0xD4}, {0x76, 0x69}, {0x77, 0xD3}, /* 0xEC-0xEF */ + {0x7C, 0x50}, {0x7E, 0x8F}, {0x7E, 0x8C}, {0x7F, 0xBC}, /* 0xF0-0xF3 */ + {0x86, 0x17}, {0x86, 0x2D}, {0x86, 0x1A}, {0x88, 0x23}, /* 0xF4-0xF7 */ + {0x88, 0x22}, {0x88, 0x21}, {0x88, 0x1F}, {0x89, 0x6A}, /* 0xF8-0xFB */ + {0x89, 0x6C}, {0x89, 0xBD}, {0x8B, 0x74}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8B, 0x77}, {0x8B, 0x7D}, {0x8D, 0x13}, {0x8E, 0x8A}, /* 0x40-0x43 */ + {0x8E, 0x8D}, {0x8E, 0x8B}, {0x8F, 0x5F}, {0x8F, 0xAF}, /* 0x44-0x47 */ + {0x91, 0xBA}, {0x94, 0x2E}, {0x94, 0x33}, {0x94, 0x35}, /* 0x48-0x4B */ + {0x94, 0x3A}, {0x94, 0x38}, {0x94, 0x32}, {0x94, 0x2B}, /* 0x4C-0x4F */ + {0x95, 0xE2}, {0x97, 0x38}, {0x97, 0x39}, {0x97, 0x32}, /* 0x50-0x53 */ + {0x97, 0xFF}, {0x98, 0x67}, {0x98, 0x65}, {0x99, 0x57}, /* 0x54-0x57 */ + {0x9A, 0x45}, {0x9A, 0x43}, {0x9A, 0x40}, {0x9A, 0x3E}, /* 0x58-0x5B */ + {0x9A, 0xCF}, {0x9B, 0x54}, {0x9B, 0x51}, {0x9C, 0x2D}, /* 0x5C-0x5F */ + {0x9C, 0x25}, {0x9D, 0xAF}, {0x9D, 0xB4}, {0x9D, 0xC2}, /* 0x60-0x63 */ + {0x9D, 0xB8}, {0x9E, 0x9D}, {0x9E, 0xEF}, {0x9F, 0x19}, /* 0x64-0x67 */ + {0x9F, 0x5C}, {0x9F, 0x66}, {0x9F, 0x67}, {0x51, 0x3C}, /* 0x68-0x6B */ + {0x51, 0x3B}, {0x56, 0xC8}, {0x56, 0xCA}, {0x56, 0xC9}, /* 0x6C-0x6F */ + {0x5B, 0x7F}, {0x5D, 0xD4}, {0x5D, 0xD2}, {0x5F, 0x4E}, /* 0x70-0x73 */ + {0x61, 0xFF}, {0x65, 0x24}, {0x6B, 0x0A}, {0x6B, 0x61}, /* 0x74-0x77 */ + {0x70, 0x51}, {0x70, 0x58}, {0x73, 0x80}, {0x74, 0xE4}, /* 0x78-0x7B */ + {0x75, 0x8A}, {0x76, 0x6E}, {0x76, 0x6C}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x79, 0xB3}, {0x7C, 0x60}, {0x7C, 0x5F}, /* 0xA0-0xA3 */ + {0x80, 0x7E}, {0x80, 0x7D}, {0x81, 0xDF}, {0x89, 0x72}, /* 0xA4-0xA7 */ + {0x89, 0x6F}, {0x89, 0xFC}, {0x8B, 0x80}, {0x8D, 0x16}, /* 0xA8-0xAB */ + {0x8D, 0x17}, {0x8E, 0x91}, {0x8E, 0x93}, {0x8F, 0x61}, /* 0xAC-0xAF */ + {0x91, 0x48}, {0x94, 0x44}, {0x94, 0x51}, {0x94, 0x52}, /* 0xB0-0xB3 */ + {0x97, 0x3D}, {0x97, 0x3E}, {0x97, 0xC3}, {0x97, 0xC1}, /* 0xB4-0xB7 */ + {0x98, 0x6B}, {0x99, 0x55}, {0x9A, 0x55}, {0x9A, 0x4D}, /* 0xB8-0xBB */ + {0x9A, 0xD2}, {0x9B, 0x1A}, {0x9C, 0x49}, {0x9C, 0x31}, /* 0xBC-0xBF */ + {0x9C, 0x3E}, {0x9C, 0x3B}, {0x9D, 0xD3}, {0x9D, 0xD7}, /* 0xC0-0xC3 */ + {0x9F, 0x34}, {0x9F, 0x6C}, {0x9F, 0x6A}, {0x9F, 0x94}, /* 0xC4-0xC7 */ + {0x56, 0xCC}, {0x5D, 0xD6}, {0x62, 0x00}, {0x65, 0x23}, /* 0xC8-0xCB */ + {0x65, 0x2B}, {0x65, 0x2A}, {0x66, 0xEC}, {0x6B, 0x10}, /* 0xCC-0xCF */ + {0x74, 0xDA}, {0x7A, 0xCA}, {0x7C, 0x64}, {0x7C, 0x63}, /* 0xD0-0xD3 */ + {0x7C, 0x65}, {0x7E, 0x93}, {0x7E, 0x96}, {0x7E, 0x94}, /* 0xD4-0xD7 */ + {0x81, 0xE2}, {0x86, 0x38}, {0x86, 0x3F}, {0x88, 0x31}, /* 0xD8-0xDB */ + {0x8B, 0x8A}, {0x90, 0x90}, {0x90, 0x8F}, {0x94, 0x63}, /* 0xDC-0xDF */ + {0x94, 0x60}, {0x94, 0x64}, {0x97, 0x68}, {0x98, 0x6F}, /* 0xE0-0xE3 */ + {0x99, 0x5C}, {0x9A, 0x5A}, {0x9A, 0x5B}, {0x9A, 0x57}, /* 0xE4-0xE7 */ + {0x9A, 0xD3}, {0x9A, 0xD4}, {0x9A, 0xD1}, {0x9C, 0x54}, /* 0xE8-0xEB */ + {0x9C, 0x57}, {0x9C, 0x56}, {0x9D, 0xE5}, {0x9E, 0x9F}, /* 0xEC-0xEF */ + {0x9E, 0xF4}, {0x56, 0xD1}, {0x58, 0xE9}, {0x65, 0x2C}, /* 0xF0-0xF3 */ + {0x70, 0x5E}, {0x76, 0x71}, {0x76, 0x72}, {0x77, 0xD7}, /* 0xF4-0xF7 */ + {0x7F, 0x50}, {0x7F, 0x88}, {0x88, 0x36}, {0x88, 0x39}, /* 0xF8-0xFB */ + {0x88, 0x62}, {0x8B, 0x93}, {0x8B, 0x92}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8B, 0x96}, {0x82, 0x77}, {0x8D, 0x1B}, {0x91, 0xC0}, /* 0x40-0x43 */ + {0x94, 0x6A}, {0x97, 0x42}, {0x97, 0x48}, {0x97, 0x44}, /* 0x44-0x47 */ + {0x97, 0xC6}, {0x98, 0x70}, {0x9A, 0x5F}, {0x9B, 0x22}, /* 0x48-0x4B */ + {0x9B, 0x58}, {0x9C, 0x5F}, {0x9D, 0xF9}, {0x9D, 0xFA}, /* 0x4C-0x4F */ + {0x9E, 0x7C}, {0x9E, 0x7D}, {0x9F, 0x07}, {0x9F, 0x77}, /* 0x50-0x53 */ + {0x9F, 0x72}, {0x5E, 0xF3}, {0x6B, 0x16}, {0x70, 0x63}, /* 0x54-0x57 */ + {0x7C, 0x6C}, {0x7C, 0x6E}, {0x88, 0x3B}, {0x89, 0xC0}, /* 0x58-0x5B */ + {0x8E, 0xA1}, {0x91, 0xC1}, {0x94, 0x72}, {0x94, 0x70}, /* 0x5C-0x5F */ + {0x98, 0x71}, {0x99, 0x5E}, {0x9A, 0xD6}, {0x9B, 0x23}, /* 0x60-0x63 */ + {0x9E, 0xCC}, {0x70, 0x64}, {0x77, 0xDA}, {0x8B, 0x9A}, /* 0x64-0x67 */ + {0x94, 0x77}, {0x97, 0xC9}, {0x9A, 0x62}, {0x9A, 0x65}, /* 0x68-0x6B */ + {0x7E, 0x9C}, {0x8B, 0x9C}, {0x8E, 0xAA}, {0x91, 0xC5}, /* 0x6C-0x6F */ + {0x94, 0x7D}, {0x94, 0x7E}, {0x94, 0x7C}, {0x9C, 0x77}, /* 0x70-0x73 */ + {0x9C, 0x78}, {0x9E, 0xF7}, {0x8C, 0x54}, {0x94, 0x7F}, /* 0x74-0x77 */ + {0x9E, 0x1A}, {0x72, 0x28}, {0x9A, 0x6A}, {0x9B, 0x31}, /* 0x78-0x7B */ + {0x9E, 0x1B}, {0x9E, 0x1E}, {0x7C, 0x72}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA0-0xA3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA4-0xA7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xA8-0xAB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xAC-0xAF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB0-0xB3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB4-0xB7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xB8-0xBB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xBC-0xBF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC0-0xC3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC4-0xC7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xC8-0xCB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xCC-0xCF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD0-0xD3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD4-0xD7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xD8-0xDB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xDC-0xDF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE0-0xE3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE4-0xE7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xE8-0xEB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xEC-0xEF */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF0-0xF3 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF4-0xF7 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xF8-0xFB */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_C9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x4E, 0x42}, {0x4E, 0x5C}, {0x51, 0xF5}, {0x53, 0x1A}, /* 0x40-0x43 */ + {0x53, 0x82}, {0x4E, 0x07}, {0x4E, 0x0C}, {0x4E, 0x47}, /* 0x44-0x47 */ + {0x4E, 0x8D}, {0x56, 0xD7}, {0xFA, 0x0C}, {0x5C, 0x6E}, /* 0x48-0x4B */ + {0x5F, 0x73}, {0x4E, 0x0F}, {0x51, 0x87}, {0x4E, 0x0E}, /* 0x4C-0x4F */ + {0x4E, 0x2E}, {0x4E, 0x93}, {0x4E, 0xC2}, {0x4E, 0xC9}, /* 0x50-0x53 */ + {0x4E, 0xC8}, {0x51, 0x98}, {0x52, 0xFC}, {0x53, 0x6C}, /* 0x54-0x57 */ + {0x53, 0xB9}, {0x57, 0x20}, {0x59, 0x03}, {0x59, 0x2C}, /* 0x58-0x5B */ + {0x5C, 0x10}, {0x5D, 0xFF}, {0x65, 0xE1}, {0x6B, 0xB3}, /* 0x5C-0x5F */ + {0x6B, 0xCC}, {0x6C, 0x14}, {0x72, 0x3F}, {0x4E, 0x31}, /* 0x60-0x63 */ + {0x4E, 0x3C}, {0x4E, 0xE8}, {0x4E, 0xDC}, {0x4E, 0xE9}, /* 0x64-0x67 */ + {0x4E, 0xE1}, {0x4E, 0xDD}, {0x4E, 0xDA}, {0x52, 0x0C}, /* 0x68-0x6B */ + {0x53, 0x1C}, {0x53, 0x4C}, {0x57, 0x22}, {0x57, 0x23}, /* 0x6C-0x6F */ + {0x59, 0x17}, {0x59, 0x2F}, {0x5B, 0x81}, {0x5B, 0x84}, /* 0x70-0x73 */ + {0x5C, 0x12}, {0x5C, 0x3B}, {0x5C, 0x74}, {0x5C, 0x73}, /* 0x74-0x77 */ + {0x5E, 0x04}, {0x5E, 0x80}, {0x5E, 0x82}, {0x5F, 0xC9}, /* 0x78-0x7B */ + {0x62, 0x09}, {0x62, 0x50}, {0x6C, 0x15}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6C, 0x36}, {0x6C, 0x43}, {0x6C, 0x3F}, /* 0xA0-0xA3 */ + {0x6C, 0x3B}, {0x72, 0xAE}, {0x72, 0xB0}, {0x73, 0x8A}, /* 0xA4-0xA7 */ + {0x79, 0xB8}, {0x80, 0x8A}, {0x96, 0x1E}, {0x4F, 0x0E}, /* 0xA8-0xAB */ + {0x4F, 0x18}, {0x4F, 0x2C}, {0x4E, 0xF5}, {0x4F, 0x14}, /* 0xAC-0xAF */ + {0x4E, 0xF1}, {0x4F, 0x00}, {0x4E, 0xF7}, {0x4F, 0x08}, /* 0xB0-0xB3 */ + {0x4F, 0x1D}, {0x4F, 0x02}, {0x4F, 0x05}, {0x4F, 0x22}, /* 0xB4-0xB7 */ + {0x4F, 0x13}, {0x4F, 0x04}, {0x4E, 0xF4}, {0x4F, 0x12}, /* 0xB8-0xBB */ + {0x51, 0xB1}, {0x52, 0x13}, {0x52, 0x09}, {0x52, 0x10}, /* 0xBC-0xBF */ + {0x52, 0xA6}, {0x53, 0x22}, {0x53, 0x1F}, {0x53, 0x4D}, /* 0xC0-0xC3 */ + {0x53, 0x8A}, {0x54, 0x07}, {0x56, 0xE1}, {0x56, 0xDF}, /* 0xC4-0xC7 */ + {0x57, 0x2E}, {0x57, 0x2A}, {0x57, 0x34}, {0x59, 0x3C}, /* 0xC8-0xCB */ + {0x59, 0x80}, {0x59, 0x7C}, {0x59, 0x85}, {0x59, 0x7B}, /* 0xCC-0xCF */ + {0x59, 0x7E}, {0x59, 0x77}, {0x59, 0x7F}, {0x5B, 0x56}, /* 0xD0-0xD3 */ + {0x5C, 0x15}, {0x5C, 0x25}, {0x5C, 0x7C}, {0x5C, 0x7A}, /* 0xD4-0xD7 */ + {0x5C, 0x7B}, {0x5C, 0x7E}, {0x5D, 0xDF}, {0x5E, 0x75}, /* 0xD8-0xDB */ + {0x5E, 0x84}, {0x5F, 0x02}, {0x5F, 0x1A}, {0x5F, 0x74}, /* 0xDC-0xDF */ + {0x5F, 0xD5}, {0x5F, 0xD4}, {0x5F, 0xCF}, {0x62, 0x5C}, /* 0xE0-0xE3 */ + {0x62, 0x5E}, {0x62, 0x64}, {0x62, 0x61}, {0x62, 0x66}, /* 0xE4-0xE7 */ + {0x62, 0x62}, {0x62, 0x59}, {0x62, 0x60}, {0x62, 0x5A}, /* 0xE8-0xEB */ + {0x62, 0x65}, {0x65, 0xEF}, {0x65, 0xEE}, {0x67, 0x3E}, /* 0xEC-0xEF */ + {0x67, 0x39}, {0x67, 0x38}, {0x67, 0x3B}, {0x67, 0x3A}, /* 0xF0-0xF3 */ + {0x67, 0x3F}, {0x67, 0x3C}, {0x67, 0x33}, {0x6C, 0x18}, /* 0xF4-0xF7 */ + {0x6C, 0x46}, {0x6C, 0x52}, {0x6C, 0x5C}, {0x6C, 0x4F}, /* 0xF8-0xFB */ + {0x6C, 0x4A}, {0x6C, 0x54}, {0x6C, 0x4B}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6C, 0x4C}, {0x70, 0x71}, {0x72, 0x5E}, {0x72, 0xB4}, /* 0x40-0x43 */ + {0x72, 0xB5}, {0x73, 0x8E}, {0x75, 0x2A}, {0x76, 0x7F}, /* 0x44-0x47 */ + {0x7A, 0x75}, {0x7F, 0x51}, {0x82, 0x78}, {0x82, 0x7C}, /* 0x48-0x4B */ + {0x82, 0x80}, {0x82, 0x7D}, {0x82, 0x7F}, {0x86, 0x4D}, /* 0x4C-0x4F */ + {0x89, 0x7E}, {0x90, 0x99}, {0x90, 0x97}, {0x90, 0x98}, /* 0x50-0x53 */ + {0x90, 0x9B}, {0x90, 0x94}, {0x96, 0x22}, {0x96, 0x24}, /* 0x54-0x57 */ + {0x96, 0x20}, {0x96, 0x23}, {0x4F, 0x56}, {0x4F, 0x3B}, /* 0x58-0x5B */ + {0x4F, 0x62}, {0x4F, 0x49}, {0x4F, 0x53}, {0x4F, 0x64}, /* 0x5C-0x5F */ + {0x4F, 0x3E}, {0x4F, 0x67}, {0x4F, 0x52}, {0x4F, 0x5F}, /* 0x60-0x63 */ + {0x4F, 0x41}, {0x4F, 0x58}, {0x4F, 0x2D}, {0x4F, 0x33}, /* 0x64-0x67 */ + {0x4F, 0x3F}, {0x4F, 0x61}, {0x51, 0x8F}, {0x51, 0xB9}, /* 0x68-0x6B */ + {0x52, 0x1C}, {0x52, 0x1E}, {0x52, 0x21}, {0x52, 0xAD}, /* 0x6C-0x6F */ + {0x52, 0xAE}, {0x53, 0x09}, {0x53, 0x63}, {0x53, 0x72}, /* 0x70-0x73 */ + {0x53, 0x8E}, {0x53, 0x8F}, {0x54, 0x30}, {0x54, 0x37}, /* 0x74-0x77 */ + {0x54, 0x2A}, {0x54, 0x54}, {0x54, 0x45}, {0x54, 0x19}, /* 0x78-0x7B */ + {0x54, 0x1C}, {0x54, 0x25}, {0x54, 0x18}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x54, 0x3D}, {0x54, 0x4F}, {0x54, 0x41}, /* 0xA0-0xA3 */ + {0x54, 0x28}, {0x54, 0x24}, {0x54, 0x47}, {0x56, 0xEE}, /* 0xA4-0xA7 */ + {0x56, 0xE7}, {0x56, 0xE5}, {0x57, 0x41}, {0x57, 0x45}, /* 0xA8-0xAB */ + {0x57, 0x4C}, {0x57, 0x49}, {0x57, 0x4B}, {0x57, 0x52}, /* 0xAC-0xAF */ + {0x59, 0x06}, {0x59, 0x40}, {0x59, 0xA6}, {0x59, 0x98}, /* 0xB0-0xB3 */ + {0x59, 0xA0}, {0x59, 0x97}, {0x59, 0x8E}, {0x59, 0xA2}, /* 0xB4-0xB7 */ + {0x59, 0x90}, {0x59, 0x8F}, {0x59, 0xA7}, {0x59, 0xA1}, /* 0xB8-0xBB */ + {0x5B, 0x8E}, {0x5B, 0x92}, {0x5C, 0x28}, {0x5C, 0x2A}, /* 0xBC-0xBF */ + {0x5C, 0x8D}, {0x5C, 0x8F}, {0x5C, 0x88}, {0x5C, 0x8B}, /* 0xC0-0xC3 */ + {0x5C, 0x89}, {0x5C, 0x92}, {0x5C, 0x8A}, {0x5C, 0x86}, /* 0xC4-0xC7 */ + {0x5C, 0x93}, {0x5C, 0x95}, {0x5D, 0xE0}, {0x5E, 0x0A}, /* 0xC8-0xCB */ + {0x5E, 0x0E}, {0x5E, 0x8B}, {0x5E, 0x89}, {0x5E, 0x8C}, /* 0xCC-0xCF */ + {0x5E, 0x88}, {0x5E, 0x8D}, {0x5F, 0x05}, {0x5F, 0x1D}, /* 0xD0-0xD3 */ + {0x5F, 0x78}, {0x5F, 0x76}, {0x5F, 0xD2}, {0x5F, 0xD1}, /* 0xD4-0xD7 */ + {0x5F, 0xD0}, {0x5F, 0xED}, {0x5F, 0xE8}, {0x5F, 0xEE}, /* 0xD8-0xDB */ + {0x5F, 0xF3}, {0x5F, 0xE1}, {0x5F, 0xE4}, {0x5F, 0xE3}, /* 0xDC-0xDF */ + {0x5F, 0xFA}, {0x5F, 0xEF}, {0x5F, 0xF7}, {0x5F, 0xFB}, /* 0xE0-0xE3 */ + {0x60, 0x00}, {0x5F, 0xF4}, {0x62, 0x3A}, {0x62, 0x83}, /* 0xE4-0xE7 */ + {0x62, 0x8C}, {0x62, 0x8E}, {0x62, 0x8F}, {0x62, 0x94}, /* 0xE8-0xEB */ + {0x62, 0x87}, {0x62, 0x71}, {0x62, 0x7B}, {0x62, 0x7A}, /* 0xEC-0xEF */ + {0x62, 0x70}, {0x62, 0x81}, {0x62, 0x88}, {0x62, 0x77}, /* 0xF0-0xF3 */ + {0x62, 0x7D}, {0x62, 0x72}, {0x62, 0x74}, {0x65, 0x37}, /* 0xF4-0xF7 */ + {0x65, 0xF0}, {0x65, 0xF4}, {0x65, 0xF3}, {0x65, 0xF2}, /* 0xF8-0xFB */ + {0x65, 0xF5}, {0x67, 0x45}, {0x67, 0x47}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x67, 0x59}, {0x67, 0x55}, {0x67, 0x4C}, {0x67, 0x48}, /* 0x40-0x43 */ + {0x67, 0x5D}, {0x67, 0x4D}, {0x67, 0x5A}, {0x67, 0x4B}, /* 0x44-0x47 */ + {0x6B, 0xD0}, {0x6C, 0x19}, {0x6C, 0x1A}, {0x6C, 0x78}, /* 0x48-0x4B */ + {0x6C, 0x67}, {0x6C, 0x6B}, {0x6C, 0x84}, {0x6C, 0x8B}, /* 0x4C-0x4F */ + {0x6C, 0x8F}, {0x6C, 0x71}, {0x6C, 0x6F}, {0x6C, 0x69}, /* 0x50-0x53 */ + {0x6C, 0x9A}, {0x6C, 0x6D}, {0x6C, 0x87}, {0x6C, 0x95}, /* 0x54-0x57 */ + {0x6C, 0x9C}, {0x6C, 0x66}, {0x6C, 0x73}, {0x6C, 0x65}, /* 0x58-0x5B */ + {0x6C, 0x7B}, {0x6C, 0x8E}, {0x70, 0x74}, {0x70, 0x7A}, /* 0x5C-0x5F */ + {0x72, 0x63}, {0x72, 0xBF}, {0x72, 0xBD}, {0x72, 0xC3}, /* 0x60-0x63 */ + {0x72, 0xC6}, {0x72, 0xC1}, {0x72, 0xBA}, {0x72, 0xC5}, /* 0x64-0x67 */ + {0x73, 0x95}, {0x73, 0x97}, {0x73, 0x93}, {0x73, 0x94}, /* 0x68-0x6B */ + {0x73, 0x92}, {0x75, 0x3A}, {0x75, 0x39}, {0x75, 0x94}, /* 0x6C-0x6F */ + {0x75, 0x95}, {0x76, 0x81}, {0x79, 0x3D}, {0x80, 0x34}, /* 0x70-0x73 */ + {0x80, 0x95}, {0x80, 0x99}, {0x80, 0x90}, {0x80, 0x92}, /* 0x74-0x77 */ + {0x80, 0x9C}, {0x82, 0x90}, {0x82, 0x8F}, {0x82, 0x85}, /* 0x78-0x7B */ + {0x82, 0x8E}, {0x82, 0x91}, {0x82, 0x93}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x82, 0x8A}, {0x82, 0x83}, {0x82, 0x84}, /* 0xA0-0xA3 */ + {0x8C, 0x78}, {0x8F, 0xC9}, {0x8F, 0xBF}, {0x90, 0x9F}, /* 0xA4-0xA7 */ + {0x90, 0xA1}, {0x90, 0xA5}, {0x90, 0x9E}, {0x90, 0xA7}, /* 0xA8-0xAB */ + {0x90, 0xA0}, {0x96, 0x30}, {0x96, 0x28}, {0x96, 0x2F}, /* 0xAC-0xAF */ + {0x96, 0x2D}, {0x4E, 0x33}, {0x4F, 0x98}, {0x4F, 0x7C}, /* 0xB0-0xB3 */ + {0x4F, 0x85}, {0x4F, 0x7D}, {0x4F, 0x80}, {0x4F, 0x87}, /* 0xB4-0xB7 */ + {0x4F, 0x76}, {0x4F, 0x74}, {0x4F, 0x89}, {0x4F, 0x84}, /* 0xB8-0xBB */ + {0x4F, 0x77}, {0x4F, 0x4C}, {0x4F, 0x97}, {0x4F, 0x6A}, /* 0xBC-0xBF */ + {0x4F, 0x9A}, {0x4F, 0x79}, {0x4F, 0x81}, {0x4F, 0x78}, /* 0xC0-0xC3 */ + {0x4F, 0x90}, {0x4F, 0x9C}, {0x4F, 0x94}, {0x4F, 0x9E}, /* 0xC4-0xC7 */ + {0x4F, 0x92}, {0x4F, 0x82}, {0x4F, 0x95}, {0x4F, 0x6B}, /* 0xC8-0xCB */ + {0x4F, 0x6E}, {0x51, 0x9E}, {0x51, 0xBC}, {0x51, 0xBE}, /* 0xCC-0xCF */ + {0x52, 0x35}, {0x52, 0x32}, {0x52, 0x33}, {0x52, 0x46}, /* 0xD0-0xD3 */ + {0x52, 0x31}, {0x52, 0xBC}, {0x53, 0x0A}, {0x53, 0x0B}, /* 0xD4-0xD7 */ + {0x53, 0x3C}, {0x53, 0x92}, {0x53, 0x94}, {0x54, 0x87}, /* 0xD8-0xDB */ + {0x54, 0x7F}, {0x54, 0x81}, {0x54, 0x91}, {0x54, 0x82}, /* 0xDC-0xDF */ + {0x54, 0x88}, {0x54, 0x6B}, {0x54, 0x7A}, {0x54, 0x7E}, /* 0xE0-0xE3 */ + {0x54, 0x65}, {0x54, 0x6C}, {0x54, 0x74}, {0x54, 0x66}, /* 0xE4-0xE7 */ + {0x54, 0x8D}, {0x54, 0x6F}, {0x54, 0x61}, {0x54, 0x60}, /* 0xE8-0xEB */ + {0x54, 0x98}, {0x54, 0x63}, {0x54, 0x67}, {0x54, 0x64}, /* 0xEC-0xEF */ + {0x56, 0xF7}, {0x56, 0xF9}, {0x57, 0x6F}, {0x57, 0x72}, /* 0xF0-0xF3 */ + {0x57, 0x6D}, {0x57, 0x6B}, {0x57, 0x71}, {0x57, 0x70}, /* 0xF4-0xF7 */ + {0x57, 0x76}, {0x57, 0x80}, {0x57, 0x75}, {0x57, 0x7B}, /* 0xF8-0xFB */ + {0x57, 0x73}, {0x57, 0x74}, {0x57, 0x62}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x57, 0x68}, {0x57, 0x7D}, {0x59, 0x0C}, {0x59, 0x45}, /* 0x40-0x43 */ + {0x59, 0xB5}, {0x59, 0xBA}, {0x59, 0xCF}, {0x59, 0xCE}, /* 0x44-0x47 */ + {0x59, 0xB2}, {0x59, 0xCC}, {0x59, 0xC1}, {0x59, 0xB6}, /* 0x48-0x4B */ + {0x59, 0xBC}, {0x59, 0xC3}, {0x59, 0xD6}, {0x59, 0xB1}, /* 0x4C-0x4F */ + {0x59, 0xBD}, {0x59, 0xC0}, {0x59, 0xC8}, {0x59, 0xB4}, /* 0x50-0x53 */ + {0x59, 0xC7}, {0x5B, 0x62}, {0x5B, 0x65}, {0x5B, 0x93}, /* 0x54-0x57 */ + {0x5B, 0x95}, {0x5C, 0x44}, {0x5C, 0x47}, {0x5C, 0xAE}, /* 0x58-0x5B */ + {0x5C, 0xA4}, {0x5C, 0xA0}, {0x5C, 0xB5}, {0x5C, 0xAF}, /* 0x5C-0x5F */ + {0x5C, 0xA8}, {0x5C, 0xAC}, {0x5C, 0x9F}, {0x5C, 0xA3}, /* 0x60-0x63 */ + {0x5C, 0xAD}, {0x5C, 0xA2}, {0x5C, 0xAA}, {0x5C, 0xA7}, /* 0x64-0x67 */ + {0x5C, 0x9D}, {0x5C, 0xA5}, {0x5C, 0xB6}, {0x5C, 0xB0}, /* 0x68-0x6B */ + {0x5C, 0xA6}, {0x5E, 0x17}, {0x5E, 0x14}, {0x5E, 0x19}, /* 0x6C-0x6F */ + {0x5F, 0x28}, {0x5F, 0x22}, {0x5F, 0x23}, {0x5F, 0x24}, /* 0x70-0x73 */ + {0x5F, 0x54}, {0x5F, 0x82}, {0x5F, 0x7E}, {0x5F, 0x7D}, /* 0x74-0x77 */ + {0x5F, 0xDE}, {0x5F, 0xE5}, {0x60, 0x2D}, {0x60, 0x26}, /* 0x78-0x7B */ + {0x60, 0x19}, {0x60, 0x32}, {0x60, 0x0B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x60, 0x34}, {0x60, 0x0A}, {0x60, 0x17}, /* 0xA0-0xA3 */ + {0x60, 0x33}, {0x60, 0x1A}, {0x60, 0x1E}, {0x60, 0x2C}, /* 0xA4-0xA7 */ + {0x60, 0x22}, {0x60, 0x0D}, {0x60, 0x10}, {0x60, 0x2E}, /* 0xA8-0xAB */ + {0x60, 0x13}, {0x60, 0x11}, {0x60, 0x0C}, {0x60, 0x09}, /* 0xAC-0xAF */ + {0x60, 0x1C}, {0x62, 0x14}, {0x62, 0x3D}, {0x62, 0xAD}, /* 0xB0-0xB3 */ + {0x62, 0xB4}, {0x62, 0xD1}, {0x62, 0xBE}, {0x62, 0xAA}, /* 0xB4-0xB7 */ + {0x62, 0xB6}, {0x62, 0xCA}, {0x62, 0xAE}, {0x62, 0xB3}, /* 0xB8-0xBB */ + {0x62, 0xAF}, {0x62, 0xBB}, {0x62, 0xA9}, {0x62, 0xB0}, /* 0xBC-0xBF */ + {0x62, 0xB8}, {0x65, 0x3D}, {0x65, 0xA8}, {0x65, 0xBB}, /* 0xC0-0xC3 */ + {0x66, 0x09}, {0x65, 0xFC}, {0x66, 0x04}, {0x66, 0x12}, /* 0xC4-0xC7 */ + {0x66, 0x08}, {0x65, 0xFB}, {0x66, 0x03}, {0x66, 0x0B}, /* 0xC8-0xCB */ + {0x66, 0x0D}, {0x66, 0x05}, {0x65, 0xFD}, {0x66, 0x11}, /* 0xCC-0xCF */ + {0x66, 0x10}, {0x66, 0xF6}, {0x67, 0x0A}, {0x67, 0x85}, /* 0xD0-0xD3 */ + {0x67, 0x6C}, {0x67, 0x8E}, {0x67, 0x92}, {0x67, 0x76}, /* 0xD4-0xD7 */ + {0x67, 0x7B}, {0x67, 0x98}, {0x67, 0x86}, {0x67, 0x84}, /* 0xD8-0xDB */ + {0x67, 0x74}, {0x67, 0x8D}, {0x67, 0x8C}, {0x67, 0x7A}, /* 0xDC-0xDF */ + {0x67, 0x9F}, {0x67, 0x91}, {0x67, 0x99}, {0x67, 0x83}, /* 0xE0-0xE3 */ + {0x67, 0x7D}, {0x67, 0x81}, {0x67, 0x78}, {0x67, 0x79}, /* 0xE4-0xE7 */ + {0x67, 0x94}, {0x6B, 0x25}, {0x6B, 0x80}, {0x6B, 0x7E}, /* 0xE8-0xEB */ + {0x6B, 0xDE}, {0x6C, 0x1D}, {0x6C, 0x93}, {0x6C, 0xEC}, /* 0xEC-0xEF */ + {0x6C, 0xEB}, {0x6C, 0xEE}, {0x6C, 0xD9}, {0x6C, 0xB6}, /* 0xF0-0xF3 */ + {0x6C, 0xD4}, {0x6C, 0xAD}, {0x6C, 0xE7}, {0x6C, 0xB7}, /* 0xF4-0xF7 */ + {0x6C, 0xD0}, {0x6C, 0xC2}, {0x6C, 0xBA}, {0x6C, 0xC3}, /* 0xF8-0xFB */ + {0x6C, 0xC6}, {0x6C, 0xED}, {0x6C, 0xF2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6C, 0xD2}, {0x6C, 0xDD}, {0x6C, 0xB4}, {0x6C, 0x8A}, /* 0x40-0x43 */ + {0x6C, 0x9D}, {0x6C, 0x80}, {0x6C, 0xDE}, {0x6C, 0xC0}, /* 0x44-0x47 */ + {0x6D, 0x30}, {0x6C, 0xCD}, {0x6C, 0xC7}, {0x6C, 0xB0}, /* 0x48-0x4B */ + {0x6C, 0xF9}, {0x6C, 0xCF}, {0x6C, 0xE9}, {0x6C, 0xD1}, /* 0x4C-0x4F */ + {0x70, 0x94}, {0x70, 0x98}, {0x70, 0x85}, {0x70, 0x93}, /* 0x50-0x53 */ + {0x70, 0x86}, {0x70, 0x84}, {0x70, 0x91}, {0x70, 0x96}, /* 0x54-0x57 */ + {0x70, 0x82}, {0x70, 0x9A}, {0x70, 0x83}, {0x72, 0x6A}, /* 0x58-0x5B */ + {0x72, 0xD6}, {0x72, 0xCB}, {0x72, 0xD8}, {0x72, 0xC9}, /* 0x5C-0x5F */ + {0x72, 0xDC}, {0x72, 0xD2}, {0x72, 0xD4}, {0x72, 0xDA}, /* 0x60-0x63 */ + {0x72, 0xCC}, {0x72, 0xD1}, {0x73, 0xA4}, {0x73, 0xA1}, /* 0x64-0x67 */ + {0x73, 0xAD}, {0x73, 0xA6}, {0x73, 0xA2}, {0x73, 0xA0}, /* 0x68-0x6B */ + {0x73, 0xAC}, {0x73, 0x9D}, {0x74, 0xDD}, {0x74, 0xE8}, /* 0x6C-0x6F */ + {0x75, 0x3F}, {0x75, 0x40}, {0x75, 0x3E}, {0x75, 0x8C}, /* 0x70-0x73 */ + {0x75, 0x98}, {0x76, 0xAF}, {0x76, 0xF3}, {0x76, 0xF1}, /* 0x74-0x77 */ + {0x76, 0xF0}, {0x76, 0xF5}, {0x77, 0xF8}, {0x77, 0xFC}, /* 0x78-0x7B */ + {0x77, 0xF9}, {0x77, 0xFB}, {0x77, 0xFA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x77, 0xF7}, {0x79, 0x42}, {0x79, 0x3F}, /* 0xA0-0xA3 */ + {0x79, 0xC5}, {0x7A, 0x78}, {0x7A, 0x7B}, {0x7A, 0xFB}, /* 0xA4-0xA7 */ + {0x7C, 0x75}, {0x7C, 0xFD}, {0x80, 0x35}, {0x80, 0x8F}, /* 0xA8-0xAB */ + {0x80, 0xAE}, {0x80, 0xA3}, {0x80, 0xB8}, {0x80, 0xB5}, /* 0xAC-0xAF */ + {0x80, 0xAD}, {0x82, 0x20}, {0x82, 0xA0}, {0x82, 0xC0}, /* 0xB0-0xB3 */ + {0x82, 0xAB}, {0x82, 0x9A}, {0x82, 0x98}, {0x82, 0x9B}, /* 0xB4-0xB7 */ + {0x82, 0xB5}, {0x82, 0xA7}, {0x82, 0xAE}, {0x82, 0xBC}, /* 0xB8-0xBB */ + {0x82, 0x9E}, {0x82, 0xBA}, {0x82, 0xB4}, {0x82, 0xA8}, /* 0xBC-0xBF */ + {0x82, 0xA1}, {0x82, 0xA9}, {0x82, 0xC2}, {0x82, 0xA4}, /* 0xC0-0xC3 */ + {0x82, 0xC3}, {0x82, 0xB6}, {0x82, 0xA2}, {0x86, 0x70}, /* 0xC4-0xC7 */ + {0x86, 0x6F}, {0x86, 0x6D}, {0x86, 0x6E}, {0x8C, 0x56}, /* 0xC8-0xCB */ + {0x8F, 0xD2}, {0x8F, 0xCB}, {0x8F, 0xD3}, {0x8F, 0xCD}, /* 0xCC-0xCF */ + {0x8F, 0xD6}, {0x8F, 0xD5}, {0x8F, 0xD7}, {0x90, 0xB2}, /* 0xD0-0xD3 */ + {0x90, 0xB4}, {0x90, 0xAF}, {0x90, 0xB3}, {0x90, 0xB0}, /* 0xD4-0xD7 */ + {0x96, 0x39}, {0x96, 0x3D}, {0x96, 0x3C}, {0x96, 0x3A}, /* 0xD8-0xDB */ + {0x96, 0x43}, {0x4F, 0xCD}, {0x4F, 0xC5}, {0x4F, 0xD3}, /* 0xDC-0xDF */ + {0x4F, 0xB2}, {0x4F, 0xC9}, {0x4F, 0xCB}, {0x4F, 0xC1}, /* 0xE0-0xE3 */ + {0x4F, 0xD4}, {0x4F, 0xDC}, {0x4F, 0xD9}, {0x4F, 0xBB}, /* 0xE4-0xE7 */ + {0x4F, 0xB3}, {0x4F, 0xDB}, {0x4F, 0xC7}, {0x4F, 0xD6}, /* 0xE8-0xEB */ + {0x4F, 0xBA}, {0x4F, 0xC0}, {0x4F, 0xB9}, {0x4F, 0xEC}, /* 0xEC-0xEF */ + {0x52, 0x44}, {0x52, 0x49}, {0x52, 0xC0}, {0x52, 0xC2}, /* 0xF0-0xF3 */ + {0x53, 0x3D}, {0x53, 0x7C}, {0x53, 0x97}, {0x53, 0x96}, /* 0xF4-0xF7 */ + {0x53, 0x99}, {0x53, 0x98}, {0x54, 0xBA}, {0x54, 0xA1}, /* 0xF8-0xFB */ + {0x54, 0xAD}, {0x54, 0xA5}, {0x54, 0xCF}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x54, 0xC3}, {0x83, 0x0D}, {0x54, 0xB7}, {0x54, 0xAE}, /* 0x40-0x43 */ + {0x54, 0xD6}, {0x54, 0xB6}, {0x54, 0xC5}, {0x54, 0xC6}, /* 0x44-0x47 */ + {0x54, 0xA0}, {0x54, 0x70}, {0x54, 0xBC}, {0x54, 0xA2}, /* 0x48-0x4B */ + {0x54, 0xBE}, {0x54, 0x72}, {0x54, 0xDE}, {0x54, 0xB0}, /* 0x4C-0x4F */ + {0x57, 0xB5}, {0x57, 0x9E}, {0x57, 0x9F}, {0x57, 0xA4}, /* 0x50-0x53 */ + {0x57, 0x8C}, {0x57, 0x97}, {0x57, 0x9D}, {0x57, 0x9B}, /* 0x54-0x57 */ + {0x57, 0x94}, {0x57, 0x98}, {0x57, 0x8F}, {0x57, 0x99}, /* 0x58-0x5B */ + {0x57, 0xA5}, {0x57, 0x9A}, {0x57, 0x95}, {0x58, 0xF4}, /* 0x5C-0x5F */ + {0x59, 0x0D}, {0x59, 0x53}, {0x59, 0xE1}, {0x59, 0xDE}, /* 0x60-0x63 */ + {0x59, 0xEE}, {0x5A, 0x00}, {0x59, 0xF1}, {0x59, 0xDD}, /* 0x64-0x67 */ + {0x59, 0xFA}, {0x59, 0xFD}, {0x59, 0xFC}, {0x59, 0xF6}, /* 0x68-0x6B */ + {0x59, 0xE4}, {0x59, 0xF2}, {0x59, 0xF7}, {0x59, 0xDB}, /* 0x6C-0x6F */ + {0x59, 0xE9}, {0x59, 0xF3}, {0x59, 0xF5}, {0x59, 0xE0}, /* 0x70-0x73 */ + {0x59, 0xFE}, {0x59, 0xF4}, {0x59, 0xED}, {0x5B, 0xA8}, /* 0x74-0x77 */ + {0x5C, 0x4C}, {0x5C, 0xD0}, {0x5C, 0xD8}, {0x5C, 0xCC}, /* 0x78-0x7B */ + {0x5C, 0xD7}, {0x5C, 0xCB}, {0x5C, 0xDB}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5C, 0xDE}, {0x5C, 0xDA}, {0x5C, 0xC9}, /* 0xA0-0xA3 */ + {0x5C, 0xC7}, {0x5C, 0xCA}, {0x5C, 0xD6}, {0x5C, 0xD3}, /* 0xA4-0xA7 */ + {0x5C, 0xD4}, {0x5C, 0xCF}, {0x5C, 0xC8}, {0x5C, 0xC6}, /* 0xA8-0xAB */ + {0x5C, 0xCE}, {0x5C, 0xDF}, {0x5C, 0xF8}, {0x5D, 0xF9}, /* 0xAC-0xAF */ + {0x5E, 0x21}, {0x5E, 0x22}, {0x5E, 0x23}, {0x5E, 0x20}, /* 0xB0-0xB3 */ + {0x5E, 0x24}, {0x5E, 0xB0}, {0x5E, 0xA4}, {0x5E, 0xA2}, /* 0xB4-0xB7 */ + {0x5E, 0x9B}, {0x5E, 0xA3}, {0x5E, 0xA5}, {0x5F, 0x07}, /* 0xB8-0xBB */ + {0x5F, 0x2E}, {0x5F, 0x56}, {0x5F, 0x86}, {0x60, 0x37}, /* 0xBC-0xBF */ + {0x60, 0x39}, {0x60, 0x54}, {0x60, 0x72}, {0x60, 0x5E}, /* 0xC0-0xC3 */ + {0x60, 0x45}, {0x60, 0x53}, {0x60, 0x47}, {0x60, 0x49}, /* 0xC4-0xC7 */ + {0x60, 0x5B}, {0x60, 0x4C}, {0x60, 0x40}, {0x60, 0x42}, /* 0xC8-0xCB */ + {0x60, 0x5F}, {0x60, 0x24}, {0x60, 0x44}, {0x60, 0x58}, /* 0xCC-0xCF */ + {0x60, 0x66}, {0x60, 0x6E}, {0x62, 0x42}, {0x62, 0x43}, /* 0xD0-0xD3 */ + {0x62, 0xCF}, {0x63, 0x0D}, {0x63, 0x0B}, {0x62, 0xF5}, /* 0xD4-0xD7 */ + {0x63, 0x0E}, {0x63, 0x03}, {0x62, 0xEB}, {0x62, 0xF9}, /* 0xD8-0xDB */ + {0x63, 0x0F}, {0x63, 0x0C}, {0x62, 0xF8}, {0x62, 0xF6}, /* 0xDC-0xDF */ + {0x63, 0x00}, {0x63, 0x13}, {0x63, 0x14}, {0x62, 0xFA}, /* 0xE0-0xE3 */ + {0x63, 0x15}, {0x62, 0xFB}, {0x62, 0xF0}, {0x65, 0x41}, /* 0xE4-0xE7 */ + {0x65, 0x43}, {0x65, 0xAA}, {0x65, 0xBF}, {0x66, 0x36}, /* 0xE8-0xEB */ + {0x66, 0x21}, {0x66, 0x32}, {0x66, 0x35}, {0x66, 0x1C}, /* 0xEC-0xEF */ + {0x66, 0x26}, {0x66, 0x22}, {0x66, 0x33}, {0x66, 0x2B}, /* 0xF0-0xF3 */ + {0x66, 0x3A}, {0x66, 0x1D}, {0x66, 0x34}, {0x66, 0x39}, /* 0xF4-0xF7 */ + {0x66, 0x2E}, {0x67, 0x0F}, {0x67, 0x10}, {0x67, 0xC1}, /* 0xF8-0xFB */ + {0x67, 0xF2}, {0x67, 0xC8}, {0x67, 0xBA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_CF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x67, 0xDC}, {0x67, 0xBB}, {0x67, 0xF8}, {0x67, 0xD8}, /* 0x40-0x43 */ + {0x67, 0xC0}, {0x67, 0xB7}, {0x67, 0xC5}, {0x67, 0xEB}, /* 0x44-0x47 */ + {0x67, 0xE4}, {0x67, 0xDF}, {0x67, 0xB5}, {0x67, 0xCD}, /* 0x48-0x4B */ + {0x67, 0xB3}, {0x67, 0xF7}, {0x67, 0xF6}, {0x67, 0xEE}, /* 0x4C-0x4F */ + {0x67, 0xE3}, {0x67, 0xC2}, {0x67, 0xB9}, {0x67, 0xCE}, /* 0x50-0x53 */ + {0x67, 0xE7}, {0x67, 0xF0}, {0x67, 0xB2}, {0x67, 0xFC}, /* 0x54-0x57 */ + {0x67, 0xC6}, {0x67, 0xED}, {0x67, 0xCC}, {0x67, 0xAE}, /* 0x58-0x5B */ + {0x67, 0xE6}, {0x67, 0xDB}, {0x67, 0xFA}, {0x67, 0xC9}, /* 0x5C-0x5F */ + {0x67, 0xCA}, {0x67, 0xC3}, {0x67, 0xEA}, {0x67, 0xCB}, /* 0x60-0x63 */ + {0x6B, 0x28}, {0x6B, 0x82}, {0x6B, 0x84}, {0x6B, 0xB6}, /* 0x64-0x67 */ + {0x6B, 0xD6}, {0x6B, 0xD8}, {0x6B, 0xE0}, {0x6C, 0x20}, /* 0x68-0x6B */ + {0x6C, 0x21}, {0x6D, 0x28}, {0x6D, 0x34}, {0x6D, 0x2D}, /* 0x6C-0x6F */ + {0x6D, 0x1F}, {0x6D, 0x3C}, {0x6D, 0x3F}, {0x6D, 0x12}, /* 0x70-0x73 */ + {0x6D, 0x0A}, {0x6C, 0xDA}, {0x6D, 0x33}, {0x6D, 0x04}, /* 0x74-0x77 */ + {0x6D, 0x19}, {0x6D, 0x3A}, {0x6D, 0x1A}, {0x6D, 0x11}, /* 0x78-0x7B */ + {0x6D, 0x00}, {0x6D, 0x1D}, {0x6D, 0x42}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6D, 0x01}, {0x6D, 0x18}, {0x6D, 0x37}, /* 0xA0-0xA3 */ + {0x6D, 0x03}, {0x6D, 0x0F}, {0x6D, 0x40}, {0x6D, 0x07}, /* 0xA4-0xA7 */ + {0x6D, 0x20}, {0x6D, 0x2C}, {0x6D, 0x08}, {0x6D, 0x22}, /* 0xA8-0xAB */ + {0x6D, 0x09}, {0x6D, 0x10}, {0x70, 0xB7}, {0x70, 0x9F}, /* 0xAC-0xAF */ + {0x70, 0xBE}, {0x70, 0xB1}, {0x70, 0xB0}, {0x70, 0xA1}, /* 0xB0-0xB3 */ + {0x70, 0xB4}, {0x70, 0xB5}, {0x70, 0xA9}, {0x72, 0x41}, /* 0xB4-0xB7 */ + {0x72, 0x49}, {0x72, 0x4A}, {0x72, 0x6C}, {0x72, 0x70}, /* 0xB8-0xBB */ + {0x72, 0x73}, {0x72, 0x6E}, {0x72, 0xCA}, {0x72, 0xE4}, /* 0xBC-0xBF */ + {0x72, 0xE8}, {0x72, 0xEB}, {0x72, 0xDF}, {0x72, 0xEA}, /* 0xC0-0xC3 */ + {0x72, 0xE6}, {0x72, 0xE3}, {0x73, 0x85}, {0x73, 0xCC}, /* 0xC4-0xC7 */ + {0x73, 0xC2}, {0x73, 0xC8}, {0x73, 0xC5}, {0x73, 0xB9}, /* 0xC8-0xCB */ + {0x73, 0xB6}, {0x73, 0xB5}, {0x73, 0xB4}, {0x73, 0xEB}, /* 0xCC-0xCF */ + {0x73, 0xBF}, {0x73, 0xC7}, {0x73, 0xBE}, {0x73, 0xC3}, /* 0xD0-0xD3 */ + {0x73, 0xC6}, {0x73, 0xB8}, {0x73, 0xCB}, {0x74, 0xEC}, /* 0xD4-0xD7 */ + {0x74, 0xEE}, {0x75, 0x2E}, {0x75, 0x47}, {0x75, 0x48}, /* 0xD8-0xDB */ + {0x75, 0xA7}, {0x75, 0xAA}, {0x76, 0x79}, {0x76, 0xC4}, /* 0xDC-0xDF */ + {0x77, 0x08}, {0x77, 0x03}, {0x77, 0x04}, {0x77, 0x05}, /* 0xE0-0xE3 */ + {0x77, 0x0A}, {0x76, 0xF7}, {0x76, 0xFB}, {0x76, 0xFA}, /* 0xE4-0xE7 */ + {0x77, 0xE7}, {0x77, 0xE8}, {0x78, 0x06}, {0x78, 0x11}, /* 0xE8-0xEB */ + {0x78, 0x12}, {0x78, 0x05}, {0x78, 0x10}, {0x78, 0x0F}, /* 0xEC-0xEF */ + {0x78, 0x0E}, {0x78, 0x09}, {0x78, 0x03}, {0x78, 0x13}, /* 0xF0-0xF3 */ + {0x79, 0x4A}, {0x79, 0x4C}, {0x79, 0x4B}, {0x79, 0x45}, /* 0xF4-0xF7 */ + {0x79, 0x44}, {0x79, 0xD5}, {0x79, 0xCD}, {0x79, 0xCF}, /* 0xF8-0xFB */ + {0x79, 0xD6}, {0x79, 0xCE}, {0x7A, 0x80}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7A, 0x7E}, {0x7A, 0xD1}, {0x7B, 0x00}, {0x7B, 0x01}, /* 0x40-0x43 */ + {0x7C, 0x7A}, {0x7C, 0x78}, {0x7C, 0x79}, {0x7C, 0x7F}, /* 0x44-0x47 */ + {0x7C, 0x80}, {0x7C, 0x81}, {0x7D, 0x03}, {0x7D, 0x08}, /* 0x48-0x4B */ + {0x7D, 0x01}, {0x7F, 0x58}, {0x7F, 0x91}, {0x7F, 0x8D}, /* 0x4C-0x4F */ + {0x7F, 0xBE}, {0x80, 0x07}, {0x80, 0x0E}, {0x80, 0x0F}, /* 0x50-0x53 */ + {0x80, 0x14}, {0x80, 0x37}, {0x80, 0xD8}, {0x80, 0xC7}, /* 0x54-0x57 */ + {0x80, 0xE0}, {0x80, 0xD1}, {0x80, 0xC8}, {0x80, 0xC2}, /* 0x58-0x5B */ + {0x80, 0xD0}, {0x80, 0xC5}, {0x80, 0xE3}, {0x80, 0xD9}, /* 0x5C-0x5F */ + {0x80, 0xDC}, {0x80, 0xCA}, {0x80, 0xD5}, {0x80, 0xC9}, /* 0x60-0x63 */ + {0x80, 0xCF}, {0x80, 0xD7}, {0x80, 0xE6}, {0x80, 0xCD}, /* 0x64-0x67 */ + {0x81, 0xFF}, {0x82, 0x21}, {0x82, 0x94}, {0x82, 0xD9}, /* 0x68-0x6B */ + {0x82, 0xFE}, {0x82, 0xF9}, {0x83, 0x07}, {0x82, 0xE8}, /* 0x6C-0x6F */ + {0x83, 0x00}, {0x82, 0xD5}, {0x83, 0x3A}, {0x82, 0xEB}, /* 0x70-0x73 */ + {0x82, 0xD6}, {0x82, 0xF4}, {0x82, 0xEC}, {0x82, 0xE1}, /* 0x74-0x77 */ + {0x82, 0xF2}, {0x82, 0xF5}, {0x83, 0x0C}, {0x82, 0xFB}, /* 0x78-0x7B */ + {0x82, 0xF6}, {0x82, 0xF0}, {0x82, 0xEA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x82, 0xE4}, {0x82, 0xE0}, {0x82, 0xFA}, /* 0xA0-0xA3 */ + {0x82, 0xF3}, {0x82, 0xED}, {0x86, 0x77}, {0x86, 0x74}, /* 0xA4-0xA7 */ + {0x86, 0x7C}, {0x86, 0x73}, {0x88, 0x41}, {0x88, 0x4E}, /* 0xA8-0xAB */ + {0x88, 0x67}, {0x88, 0x6A}, {0x88, 0x69}, {0x89, 0xD3}, /* 0xAC-0xAF */ + {0x8A, 0x04}, {0x8A, 0x07}, {0x8D, 0x72}, {0x8F, 0xE3}, /* 0xB0-0xB3 */ + {0x8F, 0xE1}, {0x8F, 0xEE}, {0x8F, 0xE0}, {0x90, 0xF1}, /* 0xB4-0xB7 */ + {0x90, 0xBD}, {0x90, 0xBF}, {0x90, 0xD5}, {0x90, 0xC5}, /* 0xB8-0xBB */ + {0x90, 0xBE}, {0x90, 0xC7}, {0x90, 0xCB}, {0x90, 0xC8}, /* 0xBC-0xBF */ + {0x91, 0xD4}, {0x91, 0xD3}, {0x96, 0x54}, {0x96, 0x4F}, /* 0xC0-0xC3 */ + {0x96, 0x51}, {0x96, 0x53}, {0x96, 0x4A}, {0x96, 0x4E}, /* 0xC4-0xC7 */ + {0x50, 0x1E}, {0x50, 0x05}, {0x50, 0x07}, {0x50, 0x13}, /* 0xC8-0xCB */ + {0x50, 0x22}, {0x50, 0x30}, {0x50, 0x1B}, {0x4F, 0xF5}, /* 0xCC-0xCF */ + {0x4F, 0xF4}, {0x50, 0x33}, {0x50, 0x37}, {0x50, 0x2C}, /* 0xD0-0xD3 */ + {0x4F, 0xF6}, {0x4F, 0xF7}, {0x50, 0x17}, {0x50, 0x1C}, /* 0xD4-0xD7 */ + {0x50, 0x20}, {0x50, 0x27}, {0x50, 0x35}, {0x50, 0x2F}, /* 0xD8-0xDB */ + {0x50, 0x31}, {0x50, 0x0E}, {0x51, 0x5A}, {0x51, 0x94}, /* 0xDC-0xDF */ + {0x51, 0x93}, {0x51, 0xCA}, {0x51, 0xC4}, {0x51, 0xC5}, /* 0xE0-0xE3 */ + {0x51, 0xC8}, {0x51, 0xCE}, {0x52, 0x61}, {0x52, 0x5A}, /* 0xE4-0xE7 */ + {0x52, 0x52}, {0x52, 0x5E}, {0x52, 0x5F}, {0x52, 0x55}, /* 0xE8-0xEB */ + {0x52, 0x62}, {0x52, 0xCD}, {0x53, 0x0E}, {0x53, 0x9E}, /* 0xEC-0xEF */ + {0x55, 0x26}, {0x54, 0xE2}, {0x55, 0x17}, {0x55, 0x12}, /* 0xF0-0xF3 */ + {0x54, 0xE7}, {0x54, 0xF3}, {0x54, 0xE4}, {0x55, 0x1A}, /* 0xF4-0xF7 */ + {0x54, 0xFF}, {0x55, 0x04}, {0x55, 0x08}, {0x54, 0xEB}, /* 0xF8-0xFB */ + {0x55, 0x11}, {0x55, 0x05}, {0x54, 0xF1}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x55, 0x0A}, {0x54, 0xFB}, {0x54, 0xF7}, {0x54, 0xF8}, /* 0x40-0x43 */ + {0x54, 0xE0}, {0x55, 0x0E}, {0x55, 0x03}, {0x55, 0x0B}, /* 0x44-0x47 */ + {0x57, 0x01}, {0x57, 0x02}, {0x57, 0xCC}, {0x58, 0x32}, /* 0x48-0x4B */ + {0x57, 0xD5}, {0x57, 0xD2}, {0x57, 0xBA}, {0x57, 0xC6}, /* 0x4C-0x4F */ + {0x57, 0xBD}, {0x57, 0xBC}, {0x57, 0xB8}, {0x57, 0xB6}, /* 0x50-0x53 */ + {0x57, 0xBF}, {0x57, 0xC7}, {0x57, 0xD0}, {0x57, 0xB9}, /* 0x54-0x57 */ + {0x57, 0xC1}, {0x59, 0x0E}, {0x59, 0x4A}, {0x5A, 0x19}, /* 0x58-0x5B */ + {0x5A, 0x16}, {0x5A, 0x2D}, {0x5A, 0x2E}, {0x5A, 0x15}, /* 0x5C-0x5F */ + {0x5A, 0x0F}, {0x5A, 0x17}, {0x5A, 0x0A}, {0x5A, 0x1E}, /* 0x60-0x63 */ + {0x5A, 0x33}, {0x5B, 0x6C}, {0x5B, 0xA7}, {0x5B, 0xAD}, /* 0x64-0x67 */ + {0x5B, 0xAC}, {0x5C, 0x03}, {0x5C, 0x56}, {0x5C, 0x54}, /* 0x68-0x6B */ + {0x5C, 0xEC}, {0x5C, 0xFF}, {0x5C, 0xEE}, {0x5C, 0xF1}, /* 0x6C-0x6F */ + {0x5C, 0xF7}, {0x5D, 0x00}, {0x5C, 0xF9}, {0x5E, 0x29}, /* 0x70-0x73 */ + {0x5E, 0x28}, {0x5E, 0xA8}, {0x5E, 0xAE}, {0x5E, 0xAA}, /* 0x74-0x77 */ + {0x5E, 0xAC}, {0x5F, 0x33}, {0x5F, 0x30}, {0x5F, 0x67}, /* 0x78-0x7B */ + {0x60, 0x5D}, {0x60, 0x5A}, {0x60, 0x67}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x60, 0x41}, {0x60, 0xA2}, {0x60, 0x88}, /* 0xA0-0xA3 */ + {0x60, 0x80}, {0x60, 0x92}, {0x60, 0x81}, {0x60, 0x9D}, /* 0xA4-0xA7 */ + {0x60, 0x83}, {0x60, 0x95}, {0x60, 0x9B}, {0x60, 0x97}, /* 0xA8-0xAB */ + {0x60, 0x87}, {0x60, 0x9C}, {0x60, 0x8E}, {0x62, 0x19}, /* 0xAC-0xAF */ + {0x62, 0x46}, {0x62, 0xF2}, {0x63, 0x10}, {0x63, 0x56}, /* 0xB0-0xB3 */ + {0x63, 0x2C}, {0x63, 0x44}, {0x63, 0x45}, {0x63, 0x36}, /* 0xB4-0xB7 */ + {0x63, 0x43}, {0x63, 0xE4}, {0x63, 0x39}, {0x63, 0x4B}, /* 0xB8-0xBB */ + {0x63, 0x4A}, {0x63, 0x3C}, {0x63, 0x29}, {0x63, 0x41}, /* 0xBC-0xBF */ + {0x63, 0x34}, {0x63, 0x58}, {0x63, 0x54}, {0x63, 0x59}, /* 0xC0-0xC3 */ + {0x63, 0x2D}, {0x63, 0x47}, {0x63, 0x33}, {0x63, 0x5A}, /* 0xC4-0xC7 */ + {0x63, 0x51}, {0x63, 0x38}, {0x63, 0x57}, {0x63, 0x40}, /* 0xC8-0xCB */ + {0x63, 0x48}, {0x65, 0x4A}, {0x65, 0x46}, {0x65, 0xC6}, /* 0xCC-0xCF */ + {0x65, 0xC3}, {0x65, 0xC4}, {0x65, 0xC2}, {0x66, 0x4A}, /* 0xD0-0xD3 */ + {0x66, 0x5F}, {0x66, 0x47}, {0x66, 0x51}, {0x67, 0x12}, /* 0xD4-0xD7 */ + {0x67, 0x13}, {0x68, 0x1F}, {0x68, 0x1A}, {0x68, 0x49}, /* 0xD8-0xDB */ + {0x68, 0x32}, {0x68, 0x33}, {0x68, 0x3B}, {0x68, 0x4B}, /* 0xDC-0xDF */ + {0x68, 0x4F}, {0x68, 0x16}, {0x68, 0x31}, {0x68, 0x1C}, /* 0xE0-0xE3 */ + {0x68, 0x35}, {0x68, 0x2B}, {0x68, 0x2D}, {0x68, 0x2F}, /* 0xE4-0xE7 */ + {0x68, 0x4E}, {0x68, 0x44}, {0x68, 0x34}, {0x68, 0x1D}, /* 0xE8-0xEB */ + {0x68, 0x12}, {0x68, 0x14}, {0x68, 0x26}, {0x68, 0x28}, /* 0xEC-0xEF */ + {0x68, 0x2E}, {0x68, 0x4D}, {0x68, 0x3A}, {0x68, 0x25}, /* 0xF0-0xF3 */ + {0x68, 0x20}, {0x6B, 0x2C}, {0x6B, 0x2F}, {0x6B, 0x2D}, /* 0xF4-0xF7 */ + {0x6B, 0x31}, {0x6B, 0x34}, {0x6B, 0x6D}, {0x80, 0x82}, /* 0xF8-0xFB */ + {0x6B, 0x88}, {0x6B, 0xE6}, {0x6B, 0xE4}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6B, 0xE8}, {0x6B, 0xE3}, {0x6B, 0xE2}, {0x6B, 0xE7}, /* 0x40-0x43 */ + {0x6C, 0x25}, {0x6D, 0x7A}, {0x6D, 0x63}, {0x6D, 0x64}, /* 0x44-0x47 */ + {0x6D, 0x76}, {0x6D, 0x0D}, {0x6D, 0x61}, {0x6D, 0x92}, /* 0x48-0x4B */ + {0x6D, 0x58}, {0x6D, 0x62}, {0x6D, 0x6D}, {0x6D, 0x6F}, /* 0x4C-0x4F */ + {0x6D, 0x91}, {0x6D, 0x8D}, {0x6D, 0xEF}, {0x6D, 0x7F}, /* 0x50-0x53 */ + {0x6D, 0x86}, {0x6D, 0x5E}, {0x6D, 0x67}, {0x6D, 0x60}, /* 0x54-0x57 */ + {0x6D, 0x97}, {0x6D, 0x70}, {0x6D, 0x7C}, {0x6D, 0x5F}, /* 0x58-0x5B */ + {0x6D, 0x82}, {0x6D, 0x98}, {0x6D, 0x2F}, {0x6D, 0x68}, /* 0x5C-0x5F */ + {0x6D, 0x8B}, {0x6D, 0x7E}, {0x6D, 0x80}, {0x6D, 0x84}, /* 0x60-0x63 */ + {0x6D, 0x16}, {0x6D, 0x83}, {0x6D, 0x7B}, {0x6D, 0x7D}, /* 0x64-0x67 */ + {0x6D, 0x75}, {0x6D, 0x90}, {0x70, 0xDC}, {0x70, 0xD3}, /* 0x68-0x6B */ + {0x70, 0xD1}, {0x70, 0xDD}, {0x70, 0xCB}, {0x7F, 0x39}, /* 0x6C-0x6F */ + {0x70, 0xE2}, {0x70, 0xD7}, {0x70, 0xD2}, {0x70, 0xDE}, /* 0x70-0x73 */ + {0x70, 0xE0}, {0x70, 0xD4}, {0x70, 0xCD}, {0x70, 0xC5}, /* 0x74-0x77 */ + {0x70, 0xC6}, {0x70, 0xC7}, {0x70, 0xDA}, {0x70, 0xCE}, /* 0x78-0x7B */ + {0x70, 0xE1}, {0x72, 0x42}, {0x72, 0x78}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x72, 0x77}, {0x72, 0x76}, {0x73, 0x00}, /* 0xA0-0xA3 */ + {0x72, 0xFA}, {0x72, 0xF4}, {0x72, 0xFE}, {0x72, 0xF6}, /* 0xA4-0xA7 */ + {0x72, 0xF3}, {0x72, 0xFB}, {0x73, 0x01}, {0x73, 0xD3}, /* 0xA8-0xAB */ + {0x73, 0xD9}, {0x73, 0xE5}, {0x73, 0xD6}, {0x73, 0xBC}, /* 0xAC-0xAF */ + {0x73, 0xE7}, {0x73, 0xE3}, {0x73, 0xE9}, {0x73, 0xDC}, /* 0xB0-0xB3 */ + {0x73, 0xD2}, {0x73, 0xDB}, {0x73, 0xD4}, {0x73, 0xDD}, /* 0xB4-0xB7 */ + {0x73, 0xDA}, {0x73, 0xD7}, {0x73, 0xD8}, {0x73, 0xE8}, /* 0xB8-0xBB */ + {0x74, 0xDE}, {0x74, 0xDF}, {0x74, 0xF4}, {0x74, 0xF5}, /* 0xBC-0xBF */ + {0x75, 0x21}, {0x75, 0x5B}, {0x75, 0x5F}, {0x75, 0xB0}, /* 0xC0-0xC3 */ + {0x75, 0xC1}, {0x75, 0xBB}, {0x75, 0xC4}, {0x75, 0xC0}, /* 0xC4-0xC7 */ + {0x75, 0xBF}, {0x75, 0xB6}, {0x75, 0xBA}, {0x76, 0x8A}, /* 0xC8-0xCB */ + {0x76, 0xC9}, {0x77, 0x1D}, {0x77, 0x1B}, {0x77, 0x10}, /* 0xCC-0xCF */ + {0x77, 0x13}, {0x77, 0x12}, {0x77, 0x23}, {0x77, 0x11}, /* 0xD0-0xD3 */ + {0x77, 0x15}, {0x77, 0x19}, {0x77, 0x1A}, {0x77, 0x22}, /* 0xD4-0xD7 */ + {0x77, 0x27}, {0x78, 0x23}, {0x78, 0x2C}, {0x78, 0x22}, /* 0xD8-0xDB */ + {0x78, 0x35}, {0x78, 0x2F}, {0x78, 0x28}, {0x78, 0x2E}, /* 0xDC-0xDF */ + {0x78, 0x2B}, {0x78, 0x21}, {0x78, 0x29}, {0x78, 0x33}, /* 0xE0-0xE3 */ + {0x78, 0x2A}, {0x78, 0x31}, {0x79, 0x54}, {0x79, 0x5B}, /* 0xE4-0xE7 */ + {0x79, 0x4F}, {0x79, 0x5C}, {0x79, 0x53}, {0x79, 0x52}, /* 0xE8-0xEB */ + {0x79, 0x51}, {0x79, 0xEB}, {0x79, 0xEC}, {0x79, 0xE0}, /* 0xEC-0xEF */ + {0x79, 0xEE}, {0x79, 0xED}, {0x79, 0xEA}, {0x79, 0xDC}, /* 0xF0-0xF3 */ + {0x79, 0xDE}, {0x79, 0xDD}, {0x7A, 0x86}, {0x7A, 0x89}, /* 0xF4-0xF7 */ + {0x7A, 0x85}, {0x7A, 0x8B}, {0x7A, 0x8C}, {0x7A, 0x8A}, /* 0xF8-0xFB */ + {0x7A, 0x87}, {0x7A, 0xD8}, {0x7B, 0x10}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7B, 0x04}, {0x7B, 0x13}, {0x7B, 0x05}, {0x7B, 0x0F}, /* 0x40-0x43 */ + {0x7B, 0x08}, {0x7B, 0x0A}, {0x7B, 0x0E}, {0x7B, 0x09}, /* 0x44-0x47 */ + {0x7B, 0x12}, {0x7C, 0x84}, {0x7C, 0x91}, {0x7C, 0x8A}, /* 0x48-0x4B */ + {0x7C, 0x8C}, {0x7C, 0x88}, {0x7C, 0x8D}, {0x7C, 0x85}, /* 0x4C-0x4F */ + {0x7D, 0x1E}, {0x7D, 0x1D}, {0x7D, 0x11}, {0x7D, 0x0E}, /* 0x50-0x53 */ + {0x7D, 0x18}, {0x7D, 0x16}, {0x7D, 0x13}, {0x7D, 0x1F}, /* 0x54-0x57 */ + {0x7D, 0x12}, {0x7D, 0x0F}, {0x7D, 0x0C}, {0x7F, 0x5C}, /* 0x58-0x5B */ + {0x7F, 0x61}, {0x7F, 0x5E}, {0x7F, 0x60}, {0x7F, 0x5D}, /* 0x5C-0x5F */ + {0x7F, 0x5B}, {0x7F, 0x96}, {0x7F, 0x92}, {0x7F, 0xC3}, /* 0x60-0x63 */ + {0x7F, 0xC2}, {0x7F, 0xC0}, {0x80, 0x16}, {0x80, 0x3E}, /* 0x64-0x67 */ + {0x80, 0x39}, {0x80, 0xFA}, {0x80, 0xF2}, {0x80, 0xF9}, /* 0x68-0x6B */ + {0x80, 0xF5}, {0x81, 0x01}, {0x80, 0xFB}, {0x81, 0x00}, /* 0x6C-0x6F */ + {0x82, 0x01}, {0x82, 0x2F}, {0x82, 0x25}, {0x83, 0x33}, /* 0x70-0x73 */ + {0x83, 0x2D}, {0x83, 0x44}, {0x83, 0x19}, {0x83, 0x51}, /* 0x74-0x77 */ + {0x83, 0x25}, {0x83, 0x56}, {0x83, 0x3F}, {0x83, 0x41}, /* 0x78-0x7B */ + {0x83, 0x26}, {0x83, 0x1C}, {0x83, 0x22}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x83, 0x42}, {0x83, 0x4E}, {0x83, 0x1B}, /* 0xA0-0xA3 */ + {0x83, 0x2A}, {0x83, 0x08}, {0x83, 0x3C}, {0x83, 0x4D}, /* 0xA4-0xA7 */ + {0x83, 0x16}, {0x83, 0x24}, {0x83, 0x20}, {0x83, 0x37}, /* 0xA8-0xAB */ + {0x83, 0x2F}, {0x83, 0x29}, {0x83, 0x47}, {0x83, 0x45}, /* 0xAC-0xAF */ + {0x83, 0x4C}, {0x83, 0x53}, {0x83, 0x1E}, {0x83, 0x2C}, /* 0xB0-0xB3 */ + {0x83, 0x4B}, {0x83, 0x27}, {0x83, 0x48}, {0x86, 0x53}, /* 0xB4-0xB7 */ + {0x86, 0x52}, {0x86, 0xA2}, {0x86, 0xA8}, {0x86, 0x96}, /* 0xB8-0xBB */ + {0x86, 0x8D}, {0x86, 0x91}, {0x86, 0x9E}, {0x86, 0x87}, /* 0xBC-0xBF */ + {0x86, 0x97}, {0x86, 0x86}, {0x86, 0x8B}, {0x86, 0x9A}, /* 0xC0-0xC3 */ + {0x86, 0x85}, {0x86, 0xA5}, {0x86, 0x99}, {0x86, 0xA1}, /* 0xC4-0xC7 */ + {0x86, 0xA7}, {0x86, 0x95}, {0x86, 0x98}, {0x86, 0x8E}, /* 0xC8-0xCB */ + {0x86, 0x9D}, {0x86, 0x90}, {0x86, 0x94}, {0x88, 0x43}, /* 0xCC-0xCF */ + {0x88, 0x44}, {0x88, 0x6D}, {0x88, 0x75}, {0x88, 0x76}, /* 0xD0-0xD3 */ + {0x88, 0x72}, {0x88, 0x80}, {0x88, 0x71}, {0x88, 0x7F}, /* 0xD4-0xD7 */ + {0x88, 0x6F}, {0x88, 0x83}, {0x88, 0x7E}, {0x88, 0x74}, /* 0xD8-0xDB */ + {0x88, 0x7C}, {0x8A, 0x12}, {0x8C, 0x47}, {0x8C, 0x57}, /* 0xDC-0xDF */ + {0x8C, 0x7B}, {0x8C, 0xA4}, {0x8C, 0xA3}, {0x8D, 0x76}, /* 0xE0-0xE3 */ + {0x8D, 0x78}, {0x8D, 0xB5}, {0x8D, 0xB7}, {0x8D, 0xB6}, /* 0xE4-0xE7 */ + {0x8E, 0xD1}, {0x8E, 0xD3}, {0x8F, 0xFE}, {0x8F, 0xF5}, /* 0xE8-0xEB */ + {0x90, 0x02}, {0x8F, 0xFF}, {0x8F, 0xFB}, {0x90, 0x04}, /* 0xEC-0xEF */ + {0x8F, 0xFC}, {0x8F, 0xF6}, {0x90, 0xD6}, {0x90, 0xE0}, /* 0xF0-0xF3 */ + {0x90, 0xD9}, {0x90, 0xDA}, {0x90, 0xE3}, {0x90, 0xDF}, /* 0xF4-0xF7 */ + {0x90, 0xE5}, {0x90, 0xD8}, {0x90, 0xDB}, {0x90, 0xD7}, /* 0xF8-0xFB */ + {0x90, 0xDC}, {0x90, 0xE4}, {0x91, 0x50}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x91, 0x4E}, {0x91, 0x4F}, {0x91, 0xD5}, {0x91, 0xE2}, /* 0x40-0x43 */ + {0x91, 0xDA}, {0x96, 0x5C}, {0x96, 0x5F}, {0x96, 0xBC}, /* 0x44-0x47 */ + {0x98, 0xE3}, {0x9A, 0xDF}, {0x9B, 0x2F}, {0x4E, 0x7F}, /* 0x48-0x4B */ + {0x50, 0x70}, {0x50, 0x6A}, {0x50, 0x61}, {0x50, 0x5E}, /* 0x4C-0x4F */ + {0x50, 0x60}, {0x50, 0x53}, {0x50, 0x4B}, {0x50, 0x5D}, /* 0x50-0x53 */ + {0x50, 0x72}, {0x50, 0x48}, {0x50, 0x4D}, {0x50, 0x41}, /* 0x54-0x57 */ + {0x50, 0x5B}, {0x50, 0x4A}, {0x50, 0x62}, {0x50, 0x15}, /* 0x58-0x5B */ + {0x50, 0x45}, {0x50, 0x5F}, {0x50, 0x69}, {0x50, 0x6B}, /* 0x5C-0x5F */ + {0x50, 0x63}, {0x50, 0x64}, {0x50, 0x46}, {0x50, 0x40}, /* 0x60-0x63 */ + {0x50, 0x6E}, {0x50, 0x73}, {0x50, 0x57}, {0x50, 0x51}, /* 0x64-0x67 */ + {0x51, 0xD0}, {0x52, 0x6B}, {0x52, 0x6D}, {0x52, 0x6C}, /* 0x68-0x6B */ + {0x52, 0x6E}, {0x52, 0xD6}, {0x52, 0xD3}, {0x53, 0x2D}, /* 0x6C-0x6F */ + {0x53, 0x9C}, {0x55, 0x75}, {0x55, 0x76}, {0x55, 0x3C}, /* 0x70-0x73 */ + {0x55, 0x4D}, {0x55, 0x50}, {0x55, 0x34}, {0x55, 0x2A}, /* 0x74-0x77 */ + {0x55, 0x51}, {0x55, 0x62}, {0x55, 0x36}, {0x55, 0x35}, /* 0x78-0x7B */ + {0x55, 0x30}, {0x55, 0x52}, {0x55, 0x45}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x55, 0x0C}, {0x55, 0x32}, {0x55, 0x65}, /* 0xA0-0xA3 */ + {0x55, 0x4E}, {0x55, 0x39}, {0x55, 0x48}, {0x55, 0x2D}, /* 0xA4-0xA7 */ + {0x55, 0x3B}, {0x55, 0x40}, {0x55, 0x4B}, {0x57, 0x0A}, /* 0xA8-0xAB */ + {0x57, 0x07}, {0x57, 0xFB}, {0x58, 0x14}, {0x57, 0xE2}, /* 0xAC-0xAF */ + {0x57, 0xF6}, {0x57, 0xDC}, {0x57, 0xF4}, {0x58, 0x00}, /* 0xB0-0xB3 */ + {0x57, 0xED}, {0x57, 0xFD}, {0x58, 0x08}, {0x57, 0xF8}, /* 0xB4-0xB7 */ + {0x58, 0x0B}, {0x57, 0xF3}, {0x57, 0xCF}, {0x58, 0x07}, /* 0xB8-0xBB */ + {0x57, 0xEE}, {0x57, 0xE3}, {0x57, 0xF2}, {0x57, 0xE5}, /* 0xBC-0xBF */ + {0x57, 0xEC}, {0x57, 0xE1}, {0x58, 0x0E}, {0x57, 0xFC}, /* 0xC0-0xC3 */ + {0x58, 0x10}, {0x57, 0xE7}, {0x58, 0x01}, {0x58, 0x0C}, /* 0xC4-0xC7 */ + {0x57, 0xF1}, {0x57, 0xE9}, {0x57, 0xF0}, {0x58, 0x0D}, /* 0xC8-0xCB */ + {0x58, 0x04}, {0x59, 0x5C}, {0x5A, 0x60}, {0x5A, 0x58}, /* 0xCC-0xCF */ + {0x5A, 0x55}, {0x5A, 0x67}, {0x5A, 0x5E}, {0x5A, 0x38}, /* 0xD0-0xD3 */ + {0x5A, 0x35}, {0x5A, 0x6D}, {0x5A, 0x50}, {0x5A, 0x5F}, /* 0xD4-0xD7 */ + {0x5A, 0x65}, {0x5A, 0x6C}, {0x5A, 0x53}, {0x5A, 0x64}, /* 0xD8-0xDB */ + {0x5A, 0x57}, {0x5A, 0x43}, {0x5A, 0x5D}, {0x5A, 0x52}, /* 0xDC-0xDF */ + {0x5A, 0x44}, {0x5A, 0x5B}, {0x5A, 0x48}, {0x5A, 0x8E}, /* 0xE0-0xE3 */ + {0x5A, 0x3E}, {0x5A, 0x4D}, {0x5A, 0x39}, {0x5A, 0x4C}, /* 0xE4-0xE7 */ + {0x5A, 0x70}, {0x5A, 0x69}, {0x5A, 0x47}, {0x5A, 0x51}, /* 0xE8-0xEB */ + {0x5A, 0x56}, {0x5A, 0x42}, {0x5A, 0x5C}, {0x5B, 0x72}, /* 0xEC-0xEF */ + {0x5B, 0x6E}, {0x5B, 0xC1}, {0x5B, 0xC0}, {0x5C, 0x59}, /* 0xF0-0xF3 */ + {0x5D, 0x1E}, {0x5D, 0x0B}, {0x5D, 0x1D}, {0x5D, 0x1A}, /* 0xF4-0xF7 */ + {0x5D, 0x20}, {0x5D, 0x0C}, {0x5D, 0x28}, {0x5D, 0x0D}, /* 0xF8-0xFB */ + {0x5D, 0x26}, {0x5D, 0x25}, {0x5D, 0x0F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5D, 0x30}, {0x5D, 0x12}, {0x5D, 0x23}, {0x5D, 0x1F}, /* 0x40-0x43 */ + {0x5D, 0x2E}, {0x5E, 0x3E}, {0x5E, 0x34}, {0x5E, 0xB1}, /* 0x44-0x47 */ + {0x5E, 0xB4}, {0x5E, 0xB9}, {0x5E, 0xB2}, {0x5E, 0xB3}, /* 0x48-0x4B */ + {0x5F, 0x36}, {0x5F, 0x38}, {0x5F, 0x9B}, {0x5F, 0x96}, /* 0x4C-0x4F */ + {0x5F, 0x9F}, {0x60, 0x8A}, {0x60, 0x90}, {0x60, 0x86}, /* 0x50-0x53 */ + {0x60, 0xBE}, {0x60, 0xB0}, {0x60, 0xBA}, {0x60, 0xD3}, /* 0x54-0x57 */ + {0x60, 0xD4}, {0x60, 0xCF}, {0x60, 0xE4}, {0x60, 0xD9}, /* 0x58-0x5B */ + {0x60, 0xDD}, {0x60, 0xC8}, {0x60, 0xB1}, {0x60, 0xDB}, /* 0x5C-0x5F */ + {0x60, 0xB7}, {0x60, 0xCA}, {0x60, 0xBF}, {0x60, 0xC3}, /* 0x60-0x63 */ + {0x60, 0xCD}, {0x60, 0xC0}, {0x63, 0x32}, {0x63, 0x65}, /* 0x64-0x67 */ + {0x63, 0x8A}, {0x63, 0x82}, {0x63, 0x7D}, {0x63, 0xBD}, /* 0x68-0x6B */ + {0x63, 0x9E}, {0x63, 0xAD}, {0x63, 0x9D}, {0x63, 0x97}, /* 0x6C-0x6F */ + {0x63, 0xAB}, {0x63, 0x8E}, {0x63, 0x6F}, {0x63, 0x87}, /* 0x70-0x73 */ + {0x63, 0x90}, {0x63, 0x6E}, {0x63, 0xAF}, {0x63, 0x75}, /* 0x74-0x77 */ + {0x63, 0x9C}, {0x63, 0x6D}, {0x63, 0xAE}, {0x63, 0x7C}, /* 0x78-0x7B */ + {0x63, 0xA4}, {0x63, 0x3B}, {0x63, 0x9F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x63, 0x78}, {0x63, 0x85}, {0x63, 0x81}, /* 0xA0-0xA3 */ + {0x63, 0x91}, {0x63, 0x8D}, {0x63, 0x70}, {0x65, 0x53}, /* 0xA4-0xA7 */ + {0x65, 0xCD}, {0x66, 0x65}, {0x66, 0x61}, {0x66, 0x5B}, /* 0xA8-0xAB */ + {0x66, 0x59}, {0x66, 0x5C}, {0x66, 0x62}, {0x67, 0x18}, /* 0xAC-0xAF */ + {0x68, 0x79}, {0x68, 0x87}, {0x68, 0x90}, {0x68, 0x9C}, /* 0xB0-0xB3 */ + {0x68, 0x6D}, {0x68, 0x6E}, {0x68, 0xAE}, {0x68, 0xAB}, /* 0xB4-0xB7 */ + {0x69, 0x56}, {0x68, 0x6F}, {0x68, 0xA3}, {0x68, 0xAC}, /* 0xB8-0xBB */ + {0x68, 0xA9}, {0x68, 0x75}, {0x68, 0x74}, {0x68, 0xB2}, /* 0xBC-0xBF */ + {0x68, 0x8F}, {0x68, 0x77}, {0x68, 0x92}, {0x68, 0x7C}, /* 0xC0-0xC3 */ + {0x68, 0x6B}, {0x68, 0x72}, {0x68, 0xAA}, {0x68, 0x80}, /* 0xC4-0xC7 */ + {0x68, 0x71}, {0x68, 0x7E}, {0x68, 0x9B}, {0x68, 0x96}, /* 0xC8-0xCB */ + {0x68, 0x8B}, {0x68, 0xA0}, {0x68, 0x89}, {0x68, 0xA4}, /* 0xCC-0xCF */ + {0x68, 0x78}, {0x68, 0x7B}, {0x68, 0x91}, {0x68, 0x8C}, /* 0xD0-0xD3 */ + {0x68, 0x8A}, {0x68, 0x7D}, {0x6B, 0x36}, {0x6B, 0x33}, /* 0xD4-0xD7 */ + {0x6B, 0x37}, {0x6B, 0x38}, {0x6B, 0x91}, {0x6B, 0x8F}, /* 0xD8-0xDB */ + {0x6B, 0x8D}, {0x6B, 0x8E}, {0x6B, 0x8C}, {0x6C, 0x2A}, /* 0xDC-0xDF */ + {0x6D, 0xC0}, {0x6D, 0xAB}, {0x6D, 0xB4}, {0x6D, 0xB3}, /* 0xE0-0xE3 */ + {0x6E, 0x74}, {0x6D, 0xAC}, {0x6D, 0xE9}, {0x6D, 0xE2}, /* 0xE4-0xE7 */ + {0x6D, 0xB7}, {0x6D, 0xF6}, {0x6D, 0xD4}, {0x6E, 0x00}, /* 0xE8-0xEB */ + {0x6D, 0xC8}, {0x6D, 0xE0}, {0x6D, 0xDF}, {0x6D, 0xD6}, /* 0xEC-0xEF */ + {0x6D, 0xBE}, {0x6D, 0xE5}, {0x6D, 0xDC}, {0x6D, 0xDD}, /* 0xF0-0xF3 */ + {0x6D, 0xDB}, {0x6D, 0xF4}, {0x6D, 0xCA}, {0x6D, 0xBD}, /* 0xF4-0xF7 */ + {0x6D, 0xED}, {0x6D, 0xF0}, {0x6D, 0xBA}, {0x6D, 0xD5}, /* 0xF8-0xFB */ + {0x6D, 0xC2}, {0x6D, 0xCF}, {0x6D, 0xC9}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6D, 0xD0}, {0x6D, 0xF2}, {0x6D, 0xD3}, {0x6D, 0xFD}, /* 0x40-0x43 */ + {0x6D, 0xD7}, {0x6D, 0xCD}, {0x6D, 0xE3}, {0x6D, 0xBB}, /* 0x44-0x47 */ + {0x70, 0xFA}, {0x71, 0x0D}, {0x70, 0xF7}, {0x71, 0x17}, /* 0x48-0x4B */ + {0x70, 0xF4}, {0x71, 0x0C}, {0x70, 0xF0}, {0x71, 0x04}, /* 0x4C-0x4F */ + {0x70, 0xF3}, {0x71, 0x10}, {0x70, 0xFC}, {0x70, 0xFF}, /* 0x50-0x53 */ + {0x71, 0x06}, {0x71, 0x13}, {0x71, 0x00}, {0x70, 0xF8}, /* 0x54-0x57 */ + {0x70, 0xF6}, {0x71, 0x0B}, {0x71, 0x02}, {0x71, 0x0E}, /* 0x58-0x5B */ + {0x72, 0x7E}, {0x72, 0x7B}, {0x72, 0x7C}, {0x72, 0x7F}, /* 0x5C-0x5F */ + {0x73, 0x1D}, {0x73, 0x17}, {0x73, 0x07}, {0x73, 0x11}, /* 0x60-0x63 */ + {0x73, 0x18}, {0x73, 0x0A}, {0x73, 0x08}, {0x72, 0xFF}, /* 0x64-0x67 */ + {0x73, 0x0F}, {0x73, 0x1E}, {0x73, 0x88}, {0x73, 0xF6}, /* 0x68-0x6B */ + {0x73, 0xF8}, {0x73, 0xF5}, {0x74, 0x04}, {0x74, 0x01}, /* 0x6C-0x6F */ + {0x73, 0xFD}, {0x74, 0x07}, {0x74, 0x00}, {0x73, 0xFA}, /* 0x70-0x73 */ + {0x73, 0xFC}, {0x73, 0xFF}, {0x74, 0x0C}, {0x74, 0x0B}, /* 0x74-0x77 */ + {0x73, 0xF4}, {0x74, 0x08}, {0x75, 0x64}, {0x75, 0x63}, /* 0x78-0x7B */ + {0x75, 0xCE}, {0x75, 0xD2}, {0x75, 0xCF}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x75, 0xCB}, {0x75, 0xCC}, {0x75, 0xD1}, /* 0xA0-0xA3 */ + {0x75, 0xD0}, {0x76, 0x8F}, {0x76, 0x89}, {0x76, 0xD3}, /* 0xA4-0xA7 */ + {0x77, 0x39}, {0x77, 0x2F}, {0x77, 0x2D}, {0x77, 0x31}, /* 0xA8-0xAB */ + {0x77, 0x32}, {0x77, 0x34}, {0x77, 0x33}, {0x77, 0x3D}, /* 0xAC-0xAF */ + {0x77, 0x25}, {0x77, 0x3B}, {0x77, 0x35}, {0x78, 0x48}, /* 0xB0-0xB3 */ + {0x78, 0x52}, {0x78, 0x49}, {0x78, 0x4D}, {0x78, 0x4A}, /* 0xB4-0xB7 */ + {0x78, 0x4C}, {0x78, 0x26}, {0x78, 0x45}, {0x78, 0x50}, /* 0xB8-0xBB */ + {0x79, 0x64}, {0x79, 0x67}, {0x79, 0x69}, {0x79, 0x6A}, /* 0xBC-0xBF */ + {0x79, 0x63}, {0x79, 0x6B}, {0x79, 0x61}, {0x79, 0xBB}, /* 0xC0-0xC3 */ + {0x79, 0xFA}, {0x79, 0xF8}, {0x79, 0xF6}, {0x79, 0xF7}, /* 0xC4-0xC7 */ + {0x7A, 0x8F}, {0x7A, 0x94}, {0x7A, 0x90}, {0x7B, 0x35}, /* 0xC8-0xCB */ + {0x7B, 0x47}, {0x7B, 0x34}, {0x7B, 0x25}, {0x7B, 0x30}, /* 0xCC-0xCF */ + {0x7B, 0x22}, {0x7B, 0x24}, {0x7B, 0x33}, {0x7B, 0x18}, /* 0xD0-0xD3 */ + {0x7B, 0x2A}, {0x7B, 0x1D}, {0x7B, 0x31}, {0x7B, 0x2B}, /* 0xD4-0xD7 */ + {0x7B, 0x2D}, {0x7B, 0x2F}, {0x7B, 0x32}, {0x7B, 0x38}, /* 0xD8-0xDB */ + {0x7B, 0x1A}, {0x7B, 0x23}, {0x7C, 0x94}, {0x7C, 0x98}, /* 0xDC-0xDF */ + {0x7C, 0x96}, {0x7C, 0xA3}, {0x7D, 0x35}, {0x7D, 0x3D}, /* 0xE0-0xE3 */ + {0x7D, 0x38}, {0x7D, 0x36}, {0x7D, 0x3A}, {0x7D, 0x45}, /* 0xE4-0xE7 */ + {0x7D, 0x2C}, {0x7D, 0x29}, {0x7D, 0x41}, {0x7D, 0x47}, /* 0xE8-0xEB */ + {0x7D, 0x3E}, {0x7D, 0x3F}, {0x7D, 0x4A}, {0x7D, 0x3B}, /* 0xEC-0xEF */ + {0x7D, 0x28}, {0x7F, 0x63}, {0x7F, 0x95}, {0x7F, 0x9C}, /* 0xF0-0xF3 */ + {0x7F, 0x9D}, {0x7F, 0x9B}, {0x7F, 0xCA}, {0x7F, 0xCB}, /* 0xF4-0xF7 */ + {0x7F, 0xCD}, {0x7F, 0xD0}, {0x7F, 0xD1}, {0x7F, 0xC7}, /* 0xF8-0xFB */ + {0x7F, 0xCF}, {0x7F, 0xC9}, {0x80, 0x1F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x80, 0x1E}, {0x80, 0x1B}, {0x80, 0x47}, {0x80, 0x43}, /* 0x40-0x43 */ + {0x80, 0x48}, {0x81, 0x18}, {0x81, 0x25}, {0x81, 0x19}, /* 0x44-0x47 */ + {0x81, 0x1B}, {0x81, 0x2D}, {0x81, 0x1F}, {0x81, 0x2C}, /* 0x48-0x4B */ + {0x81, 0x1E}, {0x81, 0x21}, {0x81, 0x15}, {0x81, 0x27}, /* 0x4C-0x4F */ + {0x81, 0x1D}, {0x81, 0x22}, {0x82, 0x11}, {0x82, 0x38}, /* 0x50-0x53 */ + {0x82, 0x33}, {0x82, 0x3A}, {0x82, 0x34}, {0x82, 0x32}, /* 0x54-0x57 */ + {0x82, 0x74}, {0x83, 0x90}, {0x83, 0xA3}, {0x83, 0xA8}, /* 0x58-0x5B */ + {0x83, 0x8D}, {0x83, 0x7A}, {0x83, 0x73}, {0x83, 0xA4}, /* 0x5C-0x5F */ + {0x83, 0x74}, {0x83, 0x8F}, {0x83, 0x81}, {0x83, 0x95}, /* 0x60-0x63 */ + {0x83, 0x99}, {0x83, 0x75}, {0x83, 0x94}, {0x83, 0xA9}, /* 0x64-0x67 */ + {0x83, 0x7D}, {0x83, 0x83}, {0x83, 0x8C}, {0x83, 0x9D}, /* 0x68-0x6B */ + {0x83, 0x9B}, {0x83, 0xAA}, {0x83, 0x8B}, {0x83, 0x7E}, /* 0x6C-0x6F */ + {0x83, 0xA5}, {0x83, 0xAF}, {0x83, 0x88}, {0x83, 0x97}, /* 0x70-0x73 */ + {0x83, 0xB0}, {0x83, 0x7F}, {0x83, 0xA6}, {0x83, 0x87}, /* 0x74-0x77 */ + {0x83, 0xAE}, {0x83, 0x76}, {0x83, 0x9A}, {0x86, 0x59}, /* 0x78-0x7B */ + {0x86, 0x56}, {0x86, 0xBF}, {0x86, 0xB7}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x86, 0xC2}, {0x86, 0xC1}, {0x86, 0xC5}, /* 0xA0-0xA3 */ + {0x86, 0xBA}, {0x86, 0xB0}, {0x86, 0xC8}, {0x86, 0xB9}, /* 0xA4-0xA7 */ + {0x86, 0xB3}, {0x86, 0xB8}, {0x86, 0xCC}, {0x86, 0xB4}, /* 0xA8-0xAB */ + {0x86, 0xBB}, {0x86, 0xBC}, {0x86, 0xC3}, {0x86, 0xBD}, /* 0xAC-0xAF */ + {0x86, 0xBE}, {0x88, 0x52}, {0x88, 0x89}, {0x88, 0x95}, /* 0xB0-0xB3 */ + {0x88, 0xA8}, {0x88, 0xA2}, {0x88, 0xAA}, {0x88, 0x9A}, /* 0xB4-0xB7 */ + {0x88, 0x91}, {0x88, 0xA1}, {0x88, 0x9F}, {0x88, 0x98}, /* 0xB8-0xBB */ + {0x88, 0xA7}, {0x88, 0x99}, {0x88, 0x9B}, {0x88, 0x97}, /* 0xBC-0xBF */ + {0x88, 0xA4}, {0x88, 0xAC}, {0x88, 0x8C}, {0x88, 0x93}, /* 0xC0-0xC3 */ + {0x88, 0x8E}, {0x89, 0x82}, {0x89, 0xD6}, {0x89, 0xD9}, /* 0xC4-0xC7 */ + {0x89, 0xD5}, {0x8A, 0x30}, {0x8A, 0x27}, {0x8A, 0x2C}, /* 0xC8-0xCB */ + {0x8A, 0x1E}, {0x8C, 0x39}, {0x8C, 0x3B}, {0x8C, 0x5C}, /* 0xCC-0xCF */ + {0x8C, 0x5D}, {0x8C, 0x7D}, {0x8C, 0xA5}, {0x8D, 0x7D}, /* 0xD0-0xD3 */ + {0x8D, 0x7B}, {0x8D, 0x79}, {0x8D, 0xBC}, {0x8D, 0xC2}, /* 0xD4-0xD7 */ + {0x8D, 0xB9}, {0x8D, 0xBF}, {0x8D, 0xC1}, {0x8E, 0xD8}, /* 0xD8-0xDB */ + {0x8E, 0xDE}, {0x8E, 0xDD}, {0x8E, 0xDC}, {0x8E, 0xD7}, /* 0xDC-0xDF */ + {0x8E, 0xE0}, {0x8E, 0xE1}, {0x90, 0x24}, {0x90, 0x0B}, /* 0xE0-0xE3 */ + {0x90, 0x11}, {0x90, 0x1C}, {0x90, 0x0C}, {0x90, 0x21}, /* 0xE4-0xE7 */ + {0x90, 0xEF}, {0x90, 0xEA}, {0x90, 0xF0}, {0x90, 0xF4}, /* 0xE8-0xEB */ + {0x90, 0xF2}, {0x90, 0xF3}, {0x90, 0xD4}, {0x90, 0xEB}, /* 0xEC-0xEF */ + {0x90, 0xEC}, {0x90, 0xE9}, {0x91, 0x56}, {0x91, 0x58}, /* 0xF0-0xF3 */ + {0x91, 0x5A}, {0x91, 0x53}, {0x91, 0x55}, {0x91, 0xEC}, /* 0xF4-0xF7 */ + {0x91, 0xF4}, {0x91, 0xF1}, {0x91, 0xF3}, {0x91, 0xF8}, /* 0xF8-0xFB */ + {0x91, 0xE4}, {0x91, 0xF9}, {0x91, 0xEA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x91, 0xEB}, {0x91, 0xF7}, {0x91, 0xE8}, {0x91, 0xEE}, /* 0x40-0x43 */ + {0x95, 0x7A}, {0x95, 0x86}, {0x95, 0x88}, {0x96, 0x7C}, /* 0x44-0x47 */ + {0x96, 0x6D}, {0x96, 0x6B}, {0x96, 0x71}, {0x96, 0x6F}, /* 0x48-0x4B */ + {0x96, 0xBF}, {0x97, 0x6A}, {0x98, 0x04}, {0x98, 0xE5}, /* 0x4C-0x4F */ + {0x99, 0x97}, {0x50, 0x9B}, {0x50, 0x95}, {0x50, 0x94}, /* 0x50-0x53 */ + {0x50, 0x9E}, {0x50, 0x8B}, {0x50, 0xA3}, {0x50, 0x83}, /* 0x54-0x57 */ + {0x50, 0x8C}, {0x50, 0x8E}, {0x50, 0x9D}, {0x50, 0x68}, /* 0x58-0x5B */ + {0x50, 0x9C}, {0x50, 0x92}, {0x50, 0x82}, {0x50, 0x87}, /* 0x5C-0x5F */ + {0x51, 0x5F}, {0x51, 0xD4}, {0x53, 0x12}, {0x53, 0x11}, /* 0x60-0x63 */ + {0x53, 0xA4}, {0x53, 0xA7}, {0x55, 0x91}, {0x55, 0xA8}, /* 0x64-0x67 */ + {0x55, 0xA5}, {0x55, 0xAD}, {0x55, 0x77}, {0x56, 0x45}, /* 0x68-0x6B */ + {0x55, 0xA2}, {0x55, 0x93}, {0x55, 0x88}, {0x55, 0x8F}, /* 0x6C-0x6F */ + {0x55, 0xB5}, {0x55, 0x81}, {0x55, 0xA3}, {0x55, 0x92}, /* 0x70-0x73 */ + {0x55, 0xA4}, {0x55, 0x7D}, {0x55, 0x8C}, {0x55, 0xA6}, /* 0x74-0x77 */ + {0x55, 0x7F}, {0x55, 0x95}, {0x55, 0xA1}, {0x55, 0x8E}, /* 0x78-0x7B */ + {0x57, 0x0C}, {0x58, 0x29}, {0x58, 0x37}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x58, 0x19}, {0x58, 0x1E}, {0x58, 0x27}, /* 0xA0-0xA3 */ + {0x58, 0x23}, {0x58, 0x28}, {0x57, 0xF5}, {0x58, 0x48}, /* 0xA4-0xA7 */ + {0x58, 0x25}, {0x58, 0x1C}, {0x58, 0x1B}, {0x58, 0x33}, /* 0xA8-0xAB */ + {0x58, 0x3F}, {0x58, 0x36}, {0x58, 0x2E}, {0x58, 0x39}, /* 0xAC-0xAF */ + {0x58, 0x38}, {0x58, 0x2D}, {0x58, 0x2C}, {0x58, 0x3B}, /* 0xB0-0xB3 */ + {0x59, 0x61}, {0x5A, 0xAF}, {0x5A, 0x94}, {0x5A, 0x9F}, /* 0xB4-0xB7 */ + {0x5A, 0x7A}, {0x5A, 0xA2}, {0x5A, 0x9E}, {0x5A, 0x78}, /* 0xB8-0xBB */ + {0x5A, 0xA6}, {0x5A, 0x7C}, {0x5A, 0xA5}, {0x5A, 0xAC}, /* 0xBC-0xBF */ + {0x5A, 0x95}, {0x5A, 0xAE}, {0x5A, 0x37}, {0x5A, 0x84}, /* 0xC0-0xC3 */ + {0x5A, 0x8A}, {0x5A, 0x97}, {0x5A, 0x83}, {0x5A, 0x8B}, /* 0xC4-0xC7 */ + {0x5A, 0xA9}, {0x5A, 0x7B}, {0x5A, 0x7D}, {0x5A, 0x8C}, /* 0xC8-0xCB */ + {0x5A, 0x9C}, {0x5A, 0x8F}, {0x5A, 0x93}, {0x5A, 0x9D}, /* 0xCC-0xCF */ + {0x5B, 0xEA}, {0x5B, 0xCD}, {0x5B, 0xCB}, {0x5B, 0xD4}, /* 0xD0-0xD3 */ + {0x5B, 0xD1}, {0x5B, 0xCA}, {0x5B, 0xCE}, {0x5C, 0x0C}, /* 0xD4-0xD7 */ + {0x5C, 0x30}, {0x5D, 0x37}, {0x5D, 0x43}, {0x5D, 0x6B}, /* 0xD8-0xDB */ + {0x5D, 0x41}, {0x5D, 0x4B}, {0x5D, 0x3F}, {0x5D, 0x35}, /* 0xDC-0xDF */ + {0x5D, 0x51}, {0x5D, 0x4E}, {0x5D, 0x55}, {0x5D, 0x33}, /* 0xE0-0xE3 */ + {0x5D, 0x3A}, {0x5D, 0x52}, {0x5D, 0x3D}, {0x5D, 0x31}, /* 0xE4-0xE7 */ + {0x5D, 0x59}, {0x5D, 0x42}, {0x5D, 0x39}, {0x5D, 0x49}, /* 0xE8-0xEB */ + {0x5D, 0x38}, {0x5D, 0x3C}, {0x5D, 0x32}, {0x5D, 0x36}, /* 0xEC-0xEF */ + {0x5D, 0x40}, {0x5D, 0x45}, {0x5E, 0x44}, {0x5E, 0x41}, /* 0xF0-0xF3 */ + {0x5F, 0x58}, {0x5F, 0xA6}, {0x5F, 0xA5}, {0x5F, 0xAB}, /* 0xF4-0xF7 */ + {0x60, 0xC9}, {0x60, 0xB9}, {0x60, 0xCC}, {0x60, 0xE2}, /* 0xF8-0xFB */ + {0x60, 0xCE}, {0x60, 0xC4}, {0x61, 0x14}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_D9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x60, 0xF2}, {0x61, 0x0A}, {0x61, 0x16}, {0x61, 0x05}, /* 0x40-0x43 */ + {0x60, 0xF5}, {0x61, 0x13}, {0x60, 0xF8}, {0x60, 0xFC}, /* 0x44-0x47 */ + {0x60, 0xFE}, {0x60, 0xC1}, {0x61, 0x03}, {0x61, 0x18}, /* 0x48-0x4B */ + {0x61, 0x1D}, {0x61, 0x10}, {0x60, 0xFF}, {0x61, 0x04}, /* 0x4C-0x4F */ + {0x61, 0x0B}, {0x62, 0x4A}, {0x63, 0x94}, {0x63, 0xB1}, /* 0x50-0x53 */ + {0x63, 0xB0}, {0x63, 0xCE}, {0x63, 0xE5}, {0x63, 0xE8}, /* 0x54-0x57 */ + {0x63, 0xEF}, {0x63, 0xC3}, {0x64, 0x9D}, {0x63, 0xF3}, /* 0x58-0x5B */ + {0x63, 0xCA}, {0x63, 0xE0}, {0x63, 0xF6}, {0x63, 0xD5}, /* 0x5C-0x5F */ + {0x63, 0xF2}, {0x63, 0xF5}, {0x64, 0x61}, {0x63, 0xDF}, /* 0x60-0x63 */ + {0x63, 0xBE}, {0x63, 0xDD}, {0x63, 0xDC}, {0x63, 0xC4}, /* 0x64-0x67 */ + {0x63, 0xD8}, {0x63, 0xD3}, {0x63, 0xC2}, {0x63, 0xC7}, /* 0x68-0x6B */ + {0x63, 0xCC}, {0x63, 0xCB}, {0x63, 0xC8}, {0x63, 0xF0}, /* 0x6C-0x6F */ + {0x63, 0xD7}, {0x63, 0xD9}, {0x65, 0x32}, {0x65, 0x67}, /* 0x70-0x73 */ + {0x65, 0x6A}, {0x65, 0x64}, {0x65, 0x5C}, {0x65, 0x68}, /* 0x74-0x77 */ + {0x65, 0x65}, {0x65, 0x8C}, {0x65, 0x9D}, {0x65, 0x9E}, /* 0x78-0x7B */ + {0x65, 0xAE}, {0x65, 0xD0}, {0x65, 0xD2}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x66, 0x7C}, {0x66, 0x6C}, {0x66, 0x7B}, /* 0xA0-0xA3 */ + {0x66, 0x80}, {0x66, 0x71}, {0x66, 0x79}, {0x66, 0x6A}, /* 0xA4-0xA7 */ + {0x66, 0x72}, {0x67, 0x01}, {0x69, 0x0C}, {0x68, 0xD3}, /* 0xA8-0xAB */ + {0x69, 0x04}, {0x68, 0xDC}, {0x69, 0x2A}, {0x68, 0xEC}, /* 0xAC-0xAF */ + {0x68, 0xEA}, {0x68, 0xF1}, {0x69, 0x0F}, {0x68, 0xD6}, /* 0xB0-0xB3 */ + {0x68, 0xF7}, {0x68, 0xEB}, {0x68, 0xE4}, {0x68, 0xF6}, /* 0xB4-0xB7 */ + {0x69, 0x13}, {0x69, 0x10}, {0x68, 0xF3}, {0x68, 0xE1}, /* 0xB8-0xBB */ + {0x69, 0x07}, {0x68, 0xCC}, {0x69, 0x08}, {0x69, 0x70}, /* 0xBC-0xBF */ + {0x68, 0xB4}, {0x69, 0x11}, {0x68, 0xEF}, {0x68, 0xC6}, /* 0xC0-0xC3 */ + {0x69, 0x14}, {0x68, 0xF8}, {0x68, 0xD0}, {0x68, 0xFD}, /* 0xC4-0xC7 */ + {0x68, 0xFC}, {0x68, 0xE8}, {0x69, 0x0B}, {0x69, 0x0A}, /* 0xC8-0xCB */ + {0x69, 0x17}, {0x68, 0xCE}, {0x68, 0xC8}, {0x68, 0xDD}, /* 0xCC-0xCF */ + {0x68, 0xDE}, {0x68, 0xE6}, {0x68, 0xF4}, {0x68, 0xD1}, /* 0xD0-0xD3 */ + {0x69, 0x06}, {0x68, 0xD4}, {0x68, 0xE9}, {0x69, 0x15}, /* 0xD4-0xD7 */ + {0x69, 0x25}, {0x68, 0xC7}, {0x6B, 0x39}, {0x6B, 0x3B}, /* 0xD8-0xDB */ + {0x6B, 0x3F}, {0x6B, 0x3C}, {0x6B, 0x94}, {0x6B, 0x97}, /* 0xDC-0xDF */ + {0x6B, 0x99}, {0x6B, 0x95}, {0x6B, 0xBD}, {0x6B, 0xF0}, /* 0xE0-0xE3 */ + {0x6B, 0xF2}, {0x6B, 0xF3}, {0x6C, 0x30}, {0x6D, 0xFC}, /* 0xE4-0xE7 */ + {0x6E, 0x46}, {0x6E, 0x47}, {0x6E, 0x1F}, {0x6E, 0x49}, /* 0xE8-0xEB */ + {0x6E, 0x88}, {0x6E, 0x3C}, {0x6E, 0x3D}, {0x6E, 0x45}, /* 0xEC-0xEF */ + {0x6E, 0x62}, {0x6E, 0x2B}, {0x6E, 0x3F}, {0x6E, 0x41}, /* 0xF0-0xF3 */ + {0x6E, 0x5D}, {0x6E, 0x73}, {0x6E, 0x1C}, {0x6E, 0x33}, /* 0xF4-0xF7 */ + {0x6E, 0x4B}, {0x6E, 0x40}, {0x6E, 0x51}, {0x6E, 0x3B}, /* 0xF8-0xFB */ + {0x6E, 0x03}, {0x6E, 0x2E}, {0x6E, 0x5E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6E, 0x68}, {0x6E, 0x5C}, {0x6E, 0x61}, {0x6E, 0x31}, /* 0x40-0x43 */ + {0x6E, 0x28}, {0x6E, 0x60}, {0x6E, 0x71}, {0x6E, 0x6B}, /* 0x44-0x47 */ + {0x6E, 0x39}, {0x6E, 0x22}, {0x6E, 0x30}, {0x6E, 0x53}, /* 0x48-0x4B */ + {0x6E, 0x65}, {0x6E, 0x27}, {0x6E, 0x78}, {0x6E, 0x64}, /* 0x4C-0x4F */ + {0x6E, 0x77}, {0x6E, 0x55}, {0x6E, 0x79}, {0x6E, 0x52}, /* 0x50-0x53 */ + {0x6E, 0x66}, {0x6E, 0x35}, {0x6E, 0x36}, {0x6E, 0x5A}, /* 0x54-0x57 */ + {0x71, 0x20}, {0x71, 0x1E}, {0x71, 0x2F}, {0x70, 0xFB}, /* 0x58-0x5B */ + {0x71, 0x2E}, {0x71, 0x31}, {0x71, 0x23}, {0x71, 0x25}, /* 0x5C-0x5F */ + {0x71, 0x22}, {0x71, 0x32}, {0x71, 0x1F}, {0x71, 0x28}, /* 0x60-0x63 */ + {0x71, 0x3A}, {0x71, 0x1B}, {0x72, 0x4B}, {0x72, 0x5A}, /* 0x64-0x67 */ + {0x72, 0x88}, {0x72, 0x89}, {0x72, 0x86}, {0x72, 0x85}, /* 0x68-0x6B */ + {0x72, 0x8B}, {0x73, 0x12}, {0x73, 0x0B}, {0x73, 0x30}, /* 0x6C-0x6F */ + {0x73, 0x22}, {0x73, 0x31}, {0x73, 0x33}, {0x73, 0x27}, /* 0x70-0x73 */ + {0x73, 0x32}, {0x73, 0x2D}, {0x73, 0x26}, {0x73, 0x23}, /* 0x74-0x77 */ + {0x73, 0x35}, {0x73, 0x0C}, {0x74, 0x2E}, {0x74, 0x2C}, /* 0x78-0x7B */ + {0x74, 0x30}, {0x74, 0x2B}, {0x74, 0x16}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x74, 0x1A}, {0x74, 0x21}, {0x74, 0x2D}, /* 0xA0-0xA3 */ + {0x74, 0x31}, {0x74, 0x24}, {0x74, 0x23}, {0x74, 0x1D}, /* 0xA4-0xA7 */ + {0x74, 0x29}, {0x74, 0x20}, {0x74, 0x32}, {0x74, 0xFB}, /* 0xA8-0xAB */ + {0x75, 0x2F}, {0x75, 0x6F}, {0x75, 0x6C}, {0x75, 0xE7}, /* 0xAC-0xAF */ + {0x75, 0xDA}, {0x75, 0xE1}, {0x75, 0xE6}, {0x75, 0xDD}, /* 0xB0-0xB3 */ + {0x75, 0xDF}, {0x75, 0xE4}, {0x75, 0xD7}, {0x76, 0x95}, /* 0xB4-0xB7 */ + {0x76, 0x92}, {0x76, 0xDA}, {0x77, 0x46}, {0x77, 0x47}, /* 0xB8-0xBB */ + {0x77, 0x44}, {0x77, 0x4D}, {0x77, 0x45}, {0x77, 0x4A}, /* 0xBC-0xBF */ + {0x77, 0x4E}, {0x77, 0x4B}, {0x77, 0x4C}, {0x77, 0xDE}, /* 0xC0-0xC3 */ + {0x77, 0xEC}, {0x78, 0x60}, {0x78, 0x64}, {0x78, 0x65}, /* 0xC4-0xC7 */ + {0x78, 0x5C}, {0x78, 0x6D}, {0x78, 0x71}, {0x78, 0x6A}, /* 0xC8-0xCB */ + {0x78, 0x6E}, {0x78, 0x70}, {0x78, 0x69}, {0x78, 0x68}, /* 0xCC-0xCF */ + {0x78, 0x5E}, {0x78, 0x62}, {0x79, 0x74}, {0x79, 0x73}, /* 0xD0-0xD3 */ + {0x79, 0x72}, {0x79, 0x70}, {0x7A, 0x02}, {0x7A, 0x0A}, /* 0xD4-0xD7 */ + {0x7A, 0x03}, {0x7A, 0x0C}, {0x7A, 0x04}, {0x7A, 0x99}, /* 0xD8-0xDB */ + {0x7A, 0xE6}, {0x7A, 0xE4}, {0x7B, 0x4A}, {0x7B, 0x3B}, /* 0xDC-0xDF */ + {0x7B, 0x44}, {0x7B, 0x48}, {0x7B, 0x4C}, {0x7B, 0x4E}, /* 0xE0-0xE3 */ + {0x7B, 0x40}, {0x7B, 0x58}, {0x7B, 0x45}, {0x7C, 0xA2}, /* 0xE4-0xE7 */ + {0x7C, 0x9E}, {0x7C, 0xA8}, {0x7C, 0xA1}, {0x7D, 0x58}, /* 0xE8-0xEB */ + {0x7D, 0x6F}, {0x7D, 0x63}, {0x7D, 0x53}, {0x7D, 0x56}, /* 0xEC-0xEF */ + {0x7D, 0x67}, {0x7D, 0x6A}, {0x7D, 0x4F}, {0x7D, 0x6D}, /* 0xF0-0xF3 */ + {0x7D, 0x5C}, {0x7D, 0x6B}, {0x7D, 0x52}, {0x7D, 0x54}, /* 0xF4-0xF7 */ + {0x7D, 0x69}, {0x7D, 0x51}, {0x7D, 0x5F}, {0x7D, 0x4E}, /* 0xF8-0xFB */ + {0x7F, 0x3E}, {0x7F, 0x3F}, {0x7F, 0x65}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7F, 0x66}, {0x7F, 0xA2}, {0x7F, 0xA0}, {0x7F, 0xA1}, /* 0x40-0x43 */ + {0x7F, 0xD7}, {0x80, 0x51}, {0x80, 0x4F}, {0x80, 0x50}, /* 0x44-0x47 */ + {0x80, 0xFE}, {0x80, 0xD4}, {0x81, 0x43}, {0x81, 0x4A}, /* 0x48-0x4B */ + {0x81, 0x52}, {0x81, 0x4F}, {0x81, 0x47}, {0x81, 0x3D}, /* 0x4C-0x4F */ + {0x81, 0x4D}, {0x81, 0x3A}, {0x81, 0xE6}, {0x81, 0xEE}, /* 0x50-0x53 */ + {0x81, 0xF7}, {0x81, 0xF8}, {0x81, 0xF9}, {0x82, 0x04}, /* 0x54-0x57 */ + {0x82, 0x3C}, {0x82, 0x3D}, {0x82, 0x3F}, {0x82, 0x75}, /* 0x58-0x5B */ + {0x83, 0x3B}, {0x83, 0xCF}, {0x83, 0xF9}, {0x84, 0x23}, /* 0x5C-0x5F */ + {0x83, 0xC0}, {0x83, 0xE8}, {0x84, 0x12}, {0x83, 0xE7}, /* 0x60-0x63 */ + {0x83, 0xE4}, {0x83, 0xFC}, {0x83, 0xF6}, {0x84, 0x10}, /* 0x64-0x67 */ + {0x83, 0xC6}, {0x83, 0xC8}, {0x83, 0xEB}, {0x83, 0xE3}, /* 0x68-0x6B */ + {0x83, 0xBF}, {0x84, 0x01}, {0x83, 0xDD}, {0x83, 0xE5}, /* 0x6C-0x6F */ + {0x83, 0xD8}, {0x83, 0xFF}, {0x83, 0xE1}, {0x83, 0xCB}, /* 0x70-0x73 */ + {0x83, 0xCE}, {0x83, 0xD6}, {0x83, 0xF5}, {0x83, 0xC9}, /* 0x74-0x77 */ + {0x84, 0x09}, {0x84, 0x0F}, {0x83, 0xDE}, {0x84, 0x11}, /* 0x78-0x7B */ + {0x84, 0x06}, {0x83, 0xC2}, {0x83, 0xF3}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x83, 0xD5}, {0x83, 0xFA}, {0x83, 0xC7}, /* 0xA0-0xA3 */ + {0x83, 0xD1}, {0x83, 0xEA}, {0x84, 0x13}, {0x83, 0xC3}, /* 0xA4-0xA7 */ + {0x83, 0xEC}, {0x83, 0xEE}, {0x83, 0xC4}, {0x83, 0xFB}, /* 0xA8-0xAB */ + {0x83, 0xD7}, {0x83, 0xE2}, {0x84, 0x1B}, {0x83, 0xDB}, /* 0xAC-0xAF */ + {0x83, 0xFE}, {0x86, 0xD8}, {0x86, 0xE2}, {0x86, 0xE6}, /* 0xB0-0xB3 */ + {0x86, 0xD3}, {0x86, 0xE3}, {0x86, 0xDA}, {0x86, 0xEA}, /* 0xB4-0xB7 */ + {0x86, 0xDD}, {0x86, 0xEB}, {0x86, 0xDC}, {0x86, 0xEC}, /* 0xB8-0xBB */ + {0x86, 0xE9}, {0x86, 0xD7}, {0x86, 0xE8}, {0x86, 0xD1}, /* 0xBC-0xBF */ + {0x88, 0x48}, {0x88, 0x56}, {0x88, 0x55}, {0x88, 0xBA}, /* 0xC0-0xC3 */ + {0x88, 0xD7}, {0x88, 0xB9}, {0x88, 0xB8}, {0x88, 0xC0}, /* 0xC4-0xC7 */ + {0x88, 0xBE}, {0x88, 0xB6}, {0x88, 0xBC}, {0x88, 0xB7}, /* 0xC8-0xCB */ + {0x88, 0xBD}, {0x88, 0xB2}, {0x89, 0x01}, {0x88, 0xC9}, /* 0xCC-0xCF */ + {0x89, 0x95}, {0x89, 0x98}, {0x89, 0x97}, {0x89, 0xDD}, /* 0xD0-0xD3 */ + {0x89, 0xDA}, {0x89, 0xDB}, {0x8A, 0x4E}, {0x8A, 0x4D}, /* 0xD4-0xD7 */ + {0x8A, 0x39}, {0x8A, 0x59}, {0x8A, 0x40}, {0x8A, 0x57}, /* 0xD8-0xDB */ + {0x8A, 0x58}, {0x8A, 0x44}, {0x8A, 0x45}, {0x8A, 0x52}, /* 0xDC-0xDF */ + {0x8A, 0x48}, {0x8A, 0x51}, {0x8A, 0x4A}, {0x8A, 0x4C}, /* 0xE0-0xE3 */ + {0x8A, 0x4F}, {0x8C, 0x5F}, {0x8C, 0x81}, {0x8C, 0x80}, /* 0xE4-0xE7 */ + {0x8C, 0xBA}, {0x8C, 0xBE}, {0x8C, 0xB0}, {0x8C, 0xB9}, /* 0xE8-0xEB */ + {0x8C, 0xB5}, {0x8D, 0x84}, {0x8D, 0x80}, {0x8D, 0x89}, /* 0xEC-0xEF */ + {0x8D, 0xD8}, {0x8D, 0xD3}, {0x8D, 0xCD}, {0x8D, 0xC7}, /* 0xF0-0xF3 */ + {0x8D, 0xD6}, {0x8D, 0xDC}, {0x8D, 0xCF}, {0x8D, 0xD5}, /* 0xF4-0xF7 */ + {0x8D, 0xD9}, {0x8D, 0xC8}, {0x8D, 0xD7}, {0x8D, 0xC5}, /* 0xF8-0xFB */ + {0x8E, 0xEF}, {0x8E, 0xF7}, {0x8E, 0xFA}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8E, 0xF9}, {0x8E, 0xE6}, {0x8E, 0xEE}, {0x8E, 0xE5}, /* 0x40-0x43 */ + {0x8E, 0xF5}, {0x8E, 0xE7}, {0x8E, 0xE8}, {0x8E, 0xF6}, /* 0x44-0x47 */ + {0x8E, 0xEB}, {0x8E, 0xF1}, {0x8E, 0xEC}, {0x8E, 0xF4}, /* 0x48-0x4B */ + {0x8E, 0xE9}, {0x90, 0x2D}, {0x90, 0x34}, {0x90, 0x2F}, /* 0x4C-0x4F */ + {0x91, 0x06}, {0x91, 0x2C}, {0x91, 0x04}, {0x90, 0xFF}, /* 0x50-0x53 */ + {0x90, 0xFC}, {0x91, 0x08}, {0x90, 0xF9}, {0x90, 0xFB}, /* 0x54-0x57 */ + {0x91, 0x01}, {0x91, 0x00}, {0x91, 0x07}, {0x91, 0x05}, /* 0x58-0x5B */ + {0x91, 0x03}, {0x91, 0x61}, {0x91, 0x64}, {0x91, 0x5F}, /* 0x5C-0x5F */ + {0x91, 0x62}, {0x91, 0x60}, {0x92, 0x01}, {0x92, 0x0A}, /* 0x60-0x63 */ + {0x92, 0x25}, {0x92, 0x03}, {0x92, 0x1A}, {0x92, 0x26}, /* 0x64-0x67 */ + {0x92, 0x0F}, {0x92, 0x0C}, {0x92, 0x00}, {0x92, 0x12}, /* 0x68-0x6B */ + {0x91, 0xFF}, {0x91, 0xFD}, {0x92, 0x06}, {0x92, 0x04}, /* 0x6C-0x6F */ + {0x92, 0x27}, {0x92, 0x02}, {0x92, 0x1C}, {0x92, 0x24}, /* 0x70-0x73 */ + {0x92, 0x19}, {0x92, 0x17}, {0x92, 0x05}, {0x92, 0x16}, /* 0x74-0x77 */ + {0x95, 0x7B}, {0x95, 0x8D}, {0x95, 0x8C}, {0x95, 0x90}, /* 0x78-0x7B */ + {0x96, 0x87}, {0x96, 0x7E}, {0x96, 0x88}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x96, 0x89}, {0x96, 0x83}, {0x96, 0x80}, /* 0xA0-0xA3 */ + {0x96, 0xC2}, {0x96, 0xC8}, {0x96, 0xC3}, {0x96, 0xF1}, /* 0xA4-0xA7 */ + {0x96, 0xF0}, {0x97, 0x6C}, {0x97, 0x70}, {0x97, 0x6E}, /* 0xA8-0xAB */ + {0x98, 0x07}, {0x98, 0xA9}, {0x98, 0xEB}, {0x9C, 0xE6}, /* 0xAC-0xAF */ + {0x9E, 0xF9}, {0x4E, 0x83}, {0x4E, 0x84}, {0x4E, 0xB6}, /* 0xB0-0xB3 */ + {0x50, 0xBD}, {0x50, 0xBF}, {0x50, 0xC6}, {0x50, 0xAE}, /* 0xB4-0xB7 */ + {0x50, 0xC4}, {0x50, 0xCA}, {0x50, 0xB4}, {0x50, 0xC8}, /* 0xB8-0xBB */ + {0x50, 0xC2}, {0x50, 0xB0}, {0x50, 0xC1}, {0x50, 0xBA}, /* 0xBC-0xBF */ + {0x50, 0xB1}, {0x50, 0xCB}, {0x50, 0xC9}, {0x50, 0xB6}, /* 0xC0-0xC3 */ + {0x50, 0xB8}, {0x51, 0xD7}, {0x52, 0x7A}, {0x52, 0x78}, /* 0xC4-0xC7 */ + {0x52, 0x7B}, {0x52, 0x7C}, {0x55, 0xC3}, {0x55, 0xDB}, /* 0xC8-0xCB */ + {0x55, 0xCC}, {0x55, 0xD0}, {0x55, 0xCB}, {0x55, 0xCA}, /* 0xCC-0xCF */ + {0x55, 0xDD}, {0x55, 0xC0}, {0x55, 0xD4}, {0x55, 0xC4}, /* 0xD0-0xD3 */ + {0x55, 0xE9}, {0x55, 0xBF}, {0x55, 0xD2}, {0x55, 0x8D}, /* 0xD4-0xD7 */ + {0x55, 0xCF}, {0x55, 0xD5}, {0x55, 0xE2}, {0x55, 0xD6}, /* 0xD8-0xDB */ + {0x55, 0xC8}, {0x55, 0xF2}, {0x55, 0xCD}, {0x55, 0xD9}, /* 0xDC-0xDF */ + {0x55, 0xC2}, {0x57, 0x14}, {0x58, 0x53}, {0x58, 0x68}, /* 0xE0-0xE3 */ + {0x58, 0x64}, {0x58, 0x4F}, {0x58, 0x4D}, {0x58, 0x49}, /* 0xE4-0xE7 */ + {0x58, 0x6F}, {0x58, 0x55}, {0x58, 0x4E}, {0x58, 0x5D}, /* 0xE8-0xEB */ + {0x58, 0x59}, {0x58, 0x65}, {0x58, 0x5B}, {0x58, 0x3D}, /* 0xEC-0xEF */ + {0x58, 0x63}, {0x58, 0x71}, {0x58, 0xFC}, {0x5A, 0xC7}, /* 0xF0-0xF3 */ + {0x5A, 0xC4}, {0x5A, 0xCB}, {0x5A, 0xBA}, {0x5A, 0xB8}, /* 0xF4-0xF7 */ + {0x5A, 0xB1}, {0x5A, 0xB5}, {0x5A, 0xB0}, {0x5A, 0xBF}, /* 0xF8-0xFB */ + {0x5A, 0xC8}, {0x5A, 0xBB}, {0x5A, 0xC6}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DD[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5A, 0xB7}, {0x5A, 0xC0}, {0x5A, 0xCA}, {0x5A, 0xB4}, /* 0x40-0x43 */ + {0x5A, 0xB6}, {0x5A, 0xCD}, {0x5A, 0xB9}, {0x5A, 0x90}, /* 0x44-0x47 */ + {0x5B, 0xD6}, {0x5B, 0xD8}, {0x5B, 0xD9}, {0x5C, 0x1F}, /* 0x48-0x4B */ + {0x5C, 0x33}, {0x5D, 0x71}, {0x5D, 0x63}, {0x5D, 0x4A}, /* 0x4C-0x4F */ + {0x5D, 0x65}, {0x5D, 0x72}, {0x5D, 0x6C}, {0x5D, 0x5E}, /* 0x50-0x53 */ + {0x5D, 0x68}, {0x5D, 0x67}, {0x5D, 0x62}, {0x5D, 0xF0}, /* 0x54-0x57 */ + {0x5E, 0x4F}, {0x5E, 0x4E}, {0x5E, 0x4A}, {0x5E, 0x4D}, /* 0x58-0x5B */ + {0x5E, 0x4B}, {0x5E, 0xC5}, {0x5E, 0xCC}, {0x5E, 0xC6}, /* 0x5C-0x5F */ + {0x5E, 0xCB}, {0x5E, 0xC7}, {0x5F, 0x40}, {0x5F, 0xAF}, /* 0x60-0x63 */ + {0x5F, 0xAD}, {0x60, 0xF7}, {0x61, 0x49}, {0x61, 0x4A}, /* 0x64-0x67 */ + {0x61, 0x2B}, {0x61, 0x45}, {0x61, 0x36}, {0x61, 0x32}, /* 0x68-0x6B */ + {0x61, 0x2E}, {0x61, 0x46}, {0x61, 0x2F}, {0x61, 0x4F}, /* 0x6C-0x6F */ + {0x61, 0x29}, {0x61, 0x40}, {0x62, 0x20}, {0x91, 0x68}, /* 0x70-0x73 */ + {0x62, 0x23}, {0x62, 0x25}, {0x62, 0x24}, {0x63, 0xC5}, /* 0x74-0x77 */ + {0x63, 0xF1}, {0x63, 0xEB}, {0x64, 0x10}, {0x64, 0x12}, /* 0x78-0x7B */ + {0x64, 0x09}, {0x64, 0x20}, {0x64, 0x24}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x64, 0x33}, {0x64, 0x43}, {0x64, 0x1F}, /* 0xA0-0xA3 */ + {0x64, 0x15}, {0x64, 0x18}, {0x64, 0x39}, {0x64, 0x37}, /* 0xA4-0xA7 */ + {0x64, 0x22}, {0x64, 0x23}, {0x64, 0x0C}, {0x64, 0x26}, /* 0xA8-0xAB */ + {0x64, 0x30}, {0x64, 0x28}, {0x64, 0x41}, {0x64, 0x35}, /* 0xAC-0xAF */ + {0x64, 0x2F}, {0x64, 0x0A}, {0x64, 0x1A}, {0x64, 0x40}, /* 0xB0-0xB3 */ + {0x64, 0x25}, {0x64, 0x27}, {0x64, 0x0B}, {0x63, 0xE7}, /* 0xB4-0xB7 */ + {0x64, 0x1B}, {0x64, 0x2E}, {0x64, 0x21}, {0x64, 0x0E}, /* 0xB8-0xBB */ + {0x65, 0x6F}, {0x65, 0x92}, {0x65, 0xD3}, {0x66, 0x86}, /* 0xBC-0xBF */ + {0x66, 0x8C}, {0x66, 0x95}, {0x66, 0x90}, {0x66, 0x8B}, /* 0xC0-0xC3 */ + {0x66, 0x8A}, {0x66, 0x99}, {0x66, 0x94}, {0x66, 0x78}, /* 0xC4-0xC7 */ + {0x67, 0x20}, {0x69, 0x66}, {0x69, 0x5F}, {0x69, 0x38}, /* 0xC8-0xCB */ + {0x69, 0x4E}, {0x69, 0x62}, {0x69, 0x71}, {0x69, 0x3F}, /* 0xCC-0xCF */ + {0x69, 0x45}, {0x69, 0x6A}, {0x69, 0x39}, {0x69, 0x42}, /* 0xD0-0xD3 */ + {0x69, 0x57}, {0x69, 0x59}, {0x69, 0x7A}, {0x69, 0x48}, /* 0xD4-0xD7 */ + {0x69, 0x49}, {0x69, 0x35}, {0x69, 0x6C}, {0x69, 0x33}, /* 0xD8-0xDB */ + {0x69, 0x3D}, {0x69, 0x65}, {0x68, 0xF0}, {0x69, 0x78}, /* 0xDC-0xDF */ + {0x69, 0x34}, {0x69, 0x69}, {0x69, 0x40}, {0x69, 0x6F}, /* 0xE0-0xE3 */ + {0x69, 0x44}, {0x69, 0x76}, {0x69, 0x58}, {0x69, 0x41}, /* 0xE4-0xE7 */ + {0x69, 0x74}, {0x69, 0x4C}, {0x69, 0x3B}, {0x69, 0x4B}, /* 0xE8-0xEB */ + {0x69, 0x37}, {0x69, 0x5C}, {0x69, 0x4F}, {0x69, 0x51}, /* 0xEC-0xEF */ + {0x69, 0x32}, {0x69, 0x52}, {0x69, 0x2F}, {0x69, 0x7B}, /* 0xF0-0xF3 */ + {0x69, 0x3C}, {0x6B, 0x46}, {0x6B, 0x45}, {0x6B, 0x43}, /* 0xF4-0xF7 */ + {0x6B, 0x42}, {0x6B, 0x48}, {0x6B, 0x41}, {0x6B, 0x9B}, /* 0xF8-0xFB */ + {0xFA, 0x0D}, {0x6B, 0xFB}, {0x6B, 0xFC}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6B, 0xF9}, {0x6B, 0xF7}, {0x6B, 0xF8}, {0x6E, 0x9B}, /* 0x40-0x43 */ + {0x6E, 0xD6}, {0x6E, 0xC8}, {0x6E, 0x8F}, {0x6E, 0xC0}, /* 0x44-0x47 */ + {0x6E, 0x9F}, {0x6E, 0x93}, {0x6E, 0x94}, {0x6E, 0xA0}, /* 0x48-0x4B */ + {0x6E, 0xB1}, {0x6E, 0xB9}, {0x6E, 0xC6}, {0x6E, 0xD2}, /* 0x4C-0x4F */ + {0x6E, 0xBD}, {0x6E, 0xC1}, {0x6E, 0x9E}, {0x6E, 0xC9}, /* 0x50-0x53 */ + {0x6E, 0xB7}, {0x6E, 0xB0}, {0x6E, 0xCD}, {0x6E, 0xA6}, /* 0x54-0x57 */ + {0x6E, 0xCF}, {0x6E, 0xB2}, {0x6E, 0xBE}, {0x6E, 0xC3}, /* 0x58-0x5B */ + {0x6E, 0xDC}, {0x6E, 0xD8}, {0x6E, 0x99}, {0x6E, 0x92}, /* 0x5C-0x5F */ + {0x6E, 0x8E}, {0x6E, 0x8D}, {0x6E, 0xA4}, {0x6E, 0xA1}, /* 0x60-0x63 */ + {0x6E, 0xBF}, {0x6E, 0xB3}, {0x6E, 0xD0}, {0x6E, 0xCA}, /* 0x64-0x67 */ + {0x6E, 0x97}, {0x6E, 0xAE}, {0x6E, 0xA3}, {0x71, 0x47}, /* 0x68-0x6B */ + {0x71, 0x54}, {0x71, 0x52}, {0x71, 0x63}, {0x71, 0x60}, /* 0x6C-0x6F */ + {0x71, 0x41}, {0x71, 0x5D}, {0x71, 0x62}, {0x71, 0x72}, /* 0x70-0x73 */ + {0x71, 0x78}, {0x71, 0x6A}, {0x71, 0x61}, {0x71, 0x42}, /* 0x74-0x77 */ + {0x71, 0x58}, {0x71, 0x43}, {0x71, 0x4B}, {0x71, 0x70}, /* 0x78-0x7B */ + {0x71, 0x5F}, {0x71, 0x50}, {0x71, 0x53}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x71, 0x44}, {0x71, 0x4D}, {0x71, 0x5A}, /* 0xA0-0xA3 */ + {0x72, 0x4F}, {0x72, 0x8D}, {0x72, 0x8C}, {0x72, 0x91}, /* 0xA4-0xA7 */ + {0x72, 0x90}, {0x72, 0x8E}, {0x73, 0x3C}, {0x73, 0x42}, /* 0xA8-0xAB */ + {0x73, 0x3B}, {0x73, 0x3A}, {0x73, 0x40}, {0x73, 0x4A}, /* 0xAC-0xAF */ + {0x73, 0x49}, {0x74, 0x44}, {0x74, 0x4A}, {0x74, 0x4B}, /* 0xB0-0xB3 */ + {0x74, 0x52}, {0x74, 0x51}, {0x74, 0x57}, {0x74, 0x40}, /* 0xB4-0xB7 */ + {0x74, 0x4F}, {0x74, 0x50}, {0x74, 0x4E}, {0x74, 0x42}, /* 0xB8-0xBB */ + {0x74, 0x46}, {0x74, 0x4D}, {0x74, 0x54}, {0x74, 0xE1}, /* 0xBC-0xBF */ + {0x74, 0xFF}, {0x74, 0xFE}, {0x74, 0xFD}, {0x75, 0x1D}, /* 0xC0-0xC3 */ + {0x75, 0x79}, {0x75, 0x77}, {0x69, 0x83}, {0x75, 0xEF}, /* 0xC4-0xC7 */ + {0x76, 0x0F}, {0x76, 0x03}, {0x75, 0xF7}, {0x75, 0xFE}, /* 0xC8-0xCB */ + {0x75, 0xFC}, {0x75, 0xF9}, {0x75, 0xF8}, {0x76, 0x10}, /* 0xCC-0xCF */ + {0x75, 0xFB}, {0x75, 0xF6}, {0x75, 0xED}, {0x75, 0xF5}, /* 0xD0-0xD3 */ + {0x75, 0xFD}, {0x76, 0x99}, {0x76, 0xB5}, {0x76, 0xDD}, /* 0xD4-0xD7 */ + {0x77, 0x55}, {0x77, 0x5F}, {0x77, 0x60}, {0x77, 0x52}, /* 0xD8-0xDB */ + {0x77, 0x56}, {0x77, 0x5A}, {0x77, 0x69}, {0x77, 0x67}, /* 0xDC-0xDF */ + {0x77, 0x54}, {0x77, 0x59}, {0x77, 0x6D}, {0x77, 0xE0}, /* 0xE0-0xE3 */ + {0x78, 0x87}, {0x78, 0x9A}, {0x78, 0x94}, {0x78, 0x8F}, /* 0xE4-0xE7 */ + {0x78, 0x84}, {0x78, 0x95}, {0x78, 0x85}, {0x78, 0x86}, /* 0xE8-0xEB */ + {0x78, 0xA1}, {0x78, 0x83}, {0x78, 0x79}, {0x78, 0x99}, /* 0xEC-0xEF */ + {0x78, 0x80}, {0x78, 0x96}, {0x78, 0x7B}, {0x79, 0x7C}, /* 0xF0-0xF3 */ + {0x79, 0x82}, {0x79, 0x7D}, {0x79, 0x79}, {0x7A, 0x11}, /* 0xF4-0xF7 */ + {0x7A, 0x18}, {0x7A, 0x19}, {0x7A, 0x12}, {0x7A, 0x17}, /* 0xF8-0xFB */ + {0x7A, 0x15}, {0x7A, 0x22}, {0x7A, 0x13}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_DF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7A, 0x1B}, {0x7A, 0x10}, {0x7A, 0xA3}, {0x7A, 0xA2}, /* 0x40-0x43 */ + {0x7A, 0x9E}, {0x7A, 0xEB}, {0x7B, 0x66}, {0x7B, 0x64}, /* 0x44-0x47 */ + {0x7B, 0x6D}, {0x7B, 0x74}, {0x7B, 0x69}, {0x7B, 0x72}, /* 0x48-0x4B */ + {0x7B, 0x65}, {0x7B, 0x73}, {0x7B, 0x71}, {0x7B, 0x70}, /* 0x4C-0x4F */ + {0x7B, 0x61}, {0x7B, 0x78}, {0x7B, 0x76}, {0x7B, 0x63}, /* 0x50-0x53 */ + {0x7C, 0xB2}, {0x7C, 0xB4}, {0x7C, 0xAF}, {0x7D, 0x88}, /* 0x54-0x57 */ + {0x7D, 0x86}, {0x7D, 0x80}, {0x7D, 0x8D}, {0x7D, 0x7F}, /* 0x58-0x5B */ + {0x7D, 0x85}, {0x7D, 0x7A}, {0x7D, 0x8E}, {0x7D, 0x7B}, /* 0x5C-0x5F */ + {0x7D, 0x83}, {0x7D, 0x7C}, {0x7D, 0x8C}, {0x7D, 0x94}, /* 0x60-0x63 */ + {0x7D, 0x84}, {0x7D, 0x7D}, {0x7D, 0x92}, {0x7F, 0x6D}, /* 0x64-0x67 */ + {0x7F, 0x6B}, {0x7F, 0x67}, {0x7F, 0x68}, {0x7F, 0x6C}, /* 0x68-0x6B */ + {0x7F, 0xA6}, {0x7F, 0xA5}, {0x7F, 0xA7}, {0x7F, 0xDB}, /* 0x6C-0x6F */ + {0x7F, 0xDC}, {0x80, 0x21}, {0x81, 0x64}, {0x81, 0x60}, /* 0x70-0x73 */ + {0x81, 0x77}, {0x81, 0x5C}, {0x81, 0x69}, {0x81, 0x5B}, /* 0x74-0x77 */ + {0x81, 0x62}, {0x81, 0x72}, {0x67, 0x21}, {0x81, 0x5E}, /* 0x78-0x7B */ + {0x81, 0x76}, {0x81, 0x67}, {0x81, 0x6F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x81, 0x44}, {0x81, 0x61}, {0x82, 0x1D}, /* 0xA0-0xA3 */ + {0x82, 0x49}, {0x82, 0x44}, {0x82, 0x40}, {0x82, 0x42}, /* 0xA4-0xA7 */ + {0x82, 0x45}, {0x84, 0xF1}, {0x84, 0x3F}, {0x84, 0x56}, /* 0xA8-0xAB */ + {0x84, 0x76}, {0x84, 0x79}, {0x84, 0x8F}, {0x84, 0x8D}, /* 0xAC-0xAF */ + {0x84, 0x65}, {0x84, 0x51}, {0x84, 0x40}, {0x84, 0x86}, /* 0xB0-0xB3 */ + {0x84, 0x67}, {0x84, 0x30}, {0x84, 0x4D}, {0x84, 0x7D}, /* 0xB4-0xB7 */ + {0x84, 0x5A}, {0x84, 0x59}, {0x84, 0x74}, {0x84, 0x73}, /* 0xB8-0xBB */ + {0x84, 0x5D}, {0x85, 0x07}, {0x84, 0x5E}, {0x84, 0x37}, /* 0xBC-0xBF */ + {0x84, 0x3A}, {0x84, 0x34}, {0x84, 0x7A}, {0x84, 0x43}, /* 0xC0-0xC3 */ + {0x84, 0x78}, {0x84, 0x32}, {0x84, 0x45}, {0x84, 0x29}, /* 0xC4-0xC7 */ + {0x83, 0xD9}, {0x84, 0x4B}, {0x84, 0x2F}, {0x84, 0x42}, /* 0xC8-0xCB */ + {0x84, 0x2D}, {0x84, 0x5F}, {0x84, 0x70}, {0x84, 0x39}, /* 0xCC-0xCF */ + {0x84, 0x4E}, {0x84, 0x4C}, {0x84, 0x52}, {0x84, 0x6F}, /* 0xD0-0xD3 */ + {0x84, 0xC5}, {0x84, 0x8E}, {0x84, 0x3B}, {0x84, 0x47}, /* 0xD4-0xD7 */ + {0x84, 0x36}, {0x84, 0x33}, {0x84, 0x68}, {0x84, 0x7E}, /* 0xD8-0xDB */ + {0x84, 0x44}, {0x84, 0x2B}, {0x84, 0x60}, {0x84, 0x54}, /* 0xDC-0xDF */ + {0x84, 0x6E}, {0x84, 0x50}, {0x87, 0x0B}, {0x87, 0x04}, /* 0xE0-0xE3 */ + {0x86, 0xF7}, {0x87, 0x0C}, {0x86, 0xFA}, {0x86, 0xD6}, /* 0xE4-0xE7 */ + {0x86, 0xF5}, {0x87, 0x4D}, {0x86, 0xF8}, {0x87, 0x0E}, /* 0xE8-0xEB */ + {0x87, 0x09}, {0x87, 0x01}, {0x86, 0xF6}, {0x87, 0x0D}, /* 0xEC-0xEF */ + {0x87, 0x05}, {0x88, 0xD6}, {0x88, 0xCB}, {0x88, 0xCD}, /* 0xF0-0xF3 */ + {0x88, 0xCE}, {0x88, 0xDE}, {0x88, 0xDB}, {0x88, 0xDA}, /* 0xF4-0xF7 */ + {0x88, 0xCC}, {0x88, 0xD0}, {0x89, 0x85}, {0x89, 0x9B}, /* 0xF8-0xFB */ + {0x89, 0xDF}, {0x89, 0xE5}, {0x89, 0xE4}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x89, 0xE1}, {0x89, 0xE0}, {0x89, 0xE2}, {0x89, 0xDC}, /* 0x40-0x43 */ + {0x89, 0xE6}, {0x8A, 0x76}, {0x8A, 0x86}, {0x8A, 0x7F}, /* 0x44-0x47 */ + {0x8A, 0x61}, {0x8A, 0x3F}, {0x8A, 0x77}, {0x8A, 0x82}, /* 0x48-0x4B */ + {0x8A, 0x84}, {0x8A, 0x75}, {0x8A, 0x83}, {0x8A, 0x81}, /* 0x4C-0x4F */ + {0x8A, 0x74}, {0x8A, 0x7A}, {0x8C, 0x3C}, {0x8C, 0x4B}, /* 0x50-0x53 */ + {0x8C, 0x4A}, {0x8C, 0x65}, {0x8C, 0x64}, {0x8C, 0x66}, /* 0x54-0x57 */ + {0x8C, 0x86}, {0x8C, 0x84}, {0x8C, 0x85}, {0x8C, 0xCC}, /* 0x58-0x5B */ + {0x8D, 0x68}, {0x8D, 0x69}, {0x8D, 0x91}, {0x8D, 0x8C}, /* 0x5C-0x5F */ + {0x8D, 0x8E}, {0x8D, 0x8F}, {0x8D, 0x8D}, {0x8D, 0x93}, /* 0x60-0x63 */ + {0x8D, 0x94}, {0x8D, 0x90}, {0x8D, 0x92}, {0x8D, 0xF0}, /* 0x64-0x67 */ + {0x8D, 0xE0}, {0x8D, 0xEC}, {0x8D, 0xF1}, {0x8D, 0xEE}, /* 0x68-0x6B */ + {0x8D, 0xD0}, {0x8D, 0xE9}, {0x8D, 0xE3}, {0x8D, 0xE2}, /* 0x6C-0x6F */ + {0x8D, 0xE7}, {0x8D, 0xF2}, {0x8D, 0xEB}, {0x8D, 0xF4}, /* 0x70-0x73 */ + {0x8F, 0x06}, {0x8E, 0xFF}, {0x8F, 0x01}, {0x8F, 0x00}, /* 0x74-0x77 */ + {0x8F, 0x05}, {0x8F, 0x07}, {0x8F, 0x08}, {0x8F, 0x02}, /* 0x78-0x7B */ + {0x8F, 0x0B}, {0x90, 0x52}, {0x90, 0x3F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x90, 0x44}, {0x90, 0x49}, {0x90, 0x3D}, /* 0xA0-0xA3 */ + {0x91, 0x10}, {0x91, 0x0D}, {0x91, 0x0F}, {0x91, 0x11}, /* 0xA4-0xA7 */ + {0x91, 0x16}, {0x91, 0x14}, {0x91, 0x0B}, {0x91, 0x0E}, /* 0xA8-0xAB */ + {0x91, 0x6E}, {0x91, 0x6F}, {0x92, 0x48}, {0x92, 0x52}, /* 0xAC-0xAF */ + {0x92, 0x30}, {0x92, 0x3A}, {0x92, 0x66}, {0x92, 0x33}, /* 0xB0-0xB3 */ + {0x92, 0x65}, {0x92, 0x5E}, {0x92, 0x83}, {0x92, 0x2E}, /* 0xB4-0xB7 */ + {0x92, 0x4A}, {0x92, 0x46}, {0x92, 0x6D}, {0x92, 0x6C}, /* 0xB8-0xBB */ + {0x92, 0x4F}, {0x92, 0x60}, {0x92, 0x67}, {0x92, 0x6F}, /* 0xBC-0xBF */ + {0x92, 0x36}, {0x92, 0x61}, {0x92, 0x70}, {0x92, 0x31}, /* 0xC0-0xC3 */ + {0x92, 0x54}, {0x92, 0x63}, {0x92, 0x50}, {0x92, 0x72}, /* 0xC4-0xC7 */ + {0x92, 0x4E}, {0x92, 0x53}, {0x92, 0x4C}, {0x92, 0x56}, /* 0xC8-0xCB */ + {0x92, 0x32}, {0x95, 0x9F}, {0x95, 0x9C}, {0x95, 0x9E}, /* 0xCC-0xCF */ + {0x95, 0x9B}, {0x96, 0x92}, {0x96, 0x93}, {0x96, 0x91}, /* 0xD0-0xD3 */ + {0x96, 0x97}, {0x96, 0xCE}, {0x96, 0xFA}, {0x96, 0xFD}, /* 0xD4-0xD7 */ + {0x96, 0xF8}, {0x96, 0xF5}, {0x97, 0x73}, {0x97, 0x77}, /* 0xD8-0xDB */ + {0x97, 0x78}, {0x97, 0x72}, {0x98, 0x0F}, {0x98, 0x0D}, /* 0xDC-0xDF */ + {0x98, 0x0E}, {0x98, 0xAC}, {0x98, 0xF6}, {0x98, 0xF9}, /* 0xE0-0xE3 */ + {0x99, 0xAF}, {0x99, 0xB2}, {0x99, 0xB0}, {0x99, 0xB5}, /* 0xE4-0xE7 */ + {0x9A, 0xAD}, {0x9A, 0xAB}, {0x9B, 0x5B}, {0x9C, 0xEA}, /* 0xE8-0xEB */ + {0x9C, 0xED}, {0x9C, 0xE7}, {0x9E, 0x80}, {0x9E, 0xFD}, /* 0xEC-0xEF */ + {0x50, 0xE6}, {0x50, 0xD4}, {0x50, 0xD7}, {0x50, 0xE8}, /* 0xF0-0xF3 */ + {0x50, 0xF3}, {0x50, 0xDB}, {0x50, 0xEA}, {0x50, 0xDD}, /* 0xF4-0xF7 */ + {0x50, 0xE4}, {0x50, 0xD3}, {0x50, 0xEC}, {0x50, 0xF0}, /* 0xF8-0xFB */ + {0x50, 0xEF}, {0x50, 0xE3}, {0x50, 0xE0}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x51, 0xD8}, {0x52, 0x80}, {0x52, 0x81}, {0x52, 0xE9}, /* 0x40-0x43 */ + {0x52, 0xEB}, {0x53, 0x30}, {0x53, 0xAC}, {0x56, 0x27}, /* 0x44-0x47 */ + {0x56, 0x15}, {0x56, 0x0C}, {0x56, 0x12}, {0x55, 0xFC}, /* 0x48-0x4B */ + {0x56, 0x0F}, {0x56, 0x1C}, {0x56, 0x01}, {0x56, 0x13}, /* 0x4C-0x4F */ + {0x56, 0x02}, {0x55, 0xFA}, {0x56, 0x1D}, {0x56, 0x04}, /* 0x50-0x53 */ + {0x55, 0xFF}, {0x55, 0xF9}, {0x58, 0x89}, {0x58, 0x7C}, /* 0x54-0x57 */ + {0x58, 0x90}, {0x58, 0x98}, {0x58, 0x86}, {0x58, 0x81}, /* 0x58-0x5B */ + {0x58, 0x7F}, {0x58, 0x74}, {0x58, 0x8B}, {0x58, 0x7A}, /* 0x5C-0x5F */ + {0x58, 0x87}, {0x58, 0x91}, {0x58, 0x8E}, {0x58, 0x76}, /* 0x60-0x63 */ + {0x58, 0x82}, {0x58, 0x88}, {0x58, 0x7B}, {0x58, 0x94}, /* 0x64-0x67 */ + {0x58, 0x8F}, {0x58, 0xFE}, {0x59, 0x6B}, {0x5A, 0xDC}, /* 0x68-0x6B */ + {0x5A, 0xEE}, {0x5A, 0xE5}, {0x5A, 0xD5}, {0x5A, 0xEA}, /* 0x6C-0x6F */ + {0x5A, 0xDA}, {0x5A, 0xED}, {0x5A, 0xEB}, {0x5A, 0xF3}, /* 0x70-0x73 */ + {0x5A, 0xE2}, {0x5A, 0xE0}, {0x5A, 0xDB}, {0x5A, 0xEC}, /* 0x74-0x77 */ + {0x5A, 0xDE}, {0x5A, 0xDD}, {0x5A, 0xD9}, {0x5A, 0xE8}, /* 0x78-0x7B */ + {0x5A, 0xDF}, {0x5B, 0x77}, {0x5B, 0xE0}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x5B, 0xE3}, {0x5C, 0x63}, {0x5D, 0x82}, /* 0xA0-0xA3 */ + {0x5D, 0x80}, {0x5D, 0x7D}, {0x5D, 0x86}, {0x5D, 0x7A}, /* 0xA4-0xA7 */ + {0x5D, 0x81}, {0x5D, 0x77}, {0x5D, 0x8A}, {0x5D, 0x89}, /* 0xA8-0xAB */ + {0x5D, 0x88}, {0x5D, 0x7E}, {0x5D, 0x7C}, {0x5D, 0x8D}, /* 0xAC-0xAF */ + {0x5D, 0x79}, {0x5D, 0x7F}, {0x5E, 0x58}, {0x5E, 0x59}, /* 0xB0-0xB3 */ + {0x5E, 0x53}, {0x5E, 0xD8}, {0x5E, 0xD1}, {0x5E, 0xD7}, /* 0xB4-0xB7 */ + {0x5E, 0xCE}, {0x5E, 0xDC}, {0x5E, 0xD5}, {0x5E, 0xD9}, /* 0xB8-0xBB */ + {0x5E, 0xD2}, {0x5E, 0xD4}, {0x5F, 0x44}, {0x5F, 0x43}, /* 0xBC-0xBF */ + {0x5F, 0x6F}, {0x5F, 0xB6}, {0x61, 0x2C}, {0x61, 0x28}, /* 0xC0-0xC3 */ + {0x61, 0x41}, {0x61, 0x5E}, {0x61, 0x71}, {0x61, 0x73}, /* 0xC4-0xC7 */ + {0x61, 0x52}, {0x61, 0x53}, {0x61, 0x72}, {0x61, 0x6C}, /* 0xC8-0xCB */ + {0x61, 0x80}, {0x61, 0x74}, {0x61, 0x54}, {0x61, 0x7A}, /* 0xCC-0xCF */ + {0x61, 0x5B}, {0x61, 0x65}, {0x61, 0x3B}, {0x61, 0x6A}, /* 0xD0-0xD3 */ + {0x61, 0x61}, {0x61, 0x56}, {0x62, 0x29}, {0x62, 0x27}, /* 0xD4-0xD7 */ + {0x62, 0x2B}, {0x64, 0x2B}, {0x64, 0x4D}, {0x64, 0x5B}, /* 0xD8-0xDB */ + {0x64, 0x5D}, {0x64, 0x74}, {0x64, 0x76}, {0x64, 0x72}, /* 0xDC-0xDF */ + {0x64, 0x73}, {0x64, 0x7D}, {0x64, 0x75}, {0x64, 0x66}, /* 0xE0-0xE3 */ + {0x64, 0xA6}, {0x64, 0x4E}, {0x64, 0x82}, {0x64, 0x5E}, /* 0xE4-0xE7 */ + {0x64, 0x5C}, {0x64, 0x4B}, {0x64, 0x53}, {0x64, 0x60}, /* 0xE8-0xEB */ + {0x64, 0x50}, {0x64, 0x7F}, {0x64, 0x3F}, {0x64, 0x6C}, /* 0xEC-0xEF */ + {0x64, 0x6B}, {0x64, 0x59}, {0x64, 0x65}, {0x64, 0x77}, /* 0xF0-0xF3 */ + {0x65, 0x73}, {0x65, 0xA0}, {0x66, 0xA1}, {0x66, 0xA0}, /* 0xF4-0xF7 */ + {0x66, 0x9F}, {0x67, 0x05}, {0x67, 0x04}, {0x67, 0x22}, /* 0xF8-0xFB */ + {0x69, 0xB1}, {0x69, 0xB6}, {0x69, 0xC9}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x69, 0xA0}, {0x69, 0xCE}, {0x69, 0x96}, {0x69, 0xB0}, /* 0x40-0x43 */ + {0x69, 0xAC}, {0x69, 0xBC}, {0x69, 0x91}, {0x69, 0x99}, /* 0x44-0x47 */ + {0x69, 0x8E}, {0x69, 0xA7}, {0x69, 0x8D}, {0x69, 0xA9}, /* 0x48-0x4B */ + {0x69, 0xBE}, {0x69, 0xAF}, {0x69, 0xBF}, {0x69, 0xC4}, /* 0x4C-0x4F */ + {0x69, 0xBD}, {0x69, 0xA4}, {0x69, 0xD4}, {0x69, 0xB9}, /* 0x50-0x53 */ + {0x69, 0xCA}, {0x69, 0x9A}, {0x69, 0xCF}, {0x69, 0xB3}, /* 0x54-0x57 */ + {0x69, 0x93}, {0x69, 0xAA}, {0x69, 0xA1}, {0x69, 0x9E}, /* 0x58-0x5B */ + {0x69, 0xD9}, {0x69, 0x97}, {0x69, 0x90}, {0x69, 0xC2}, /* 0x5C-0x5F */ + {0x69, 0xB5}, {0x69, 0xA5}, {0x69, 0xC6}, {0x6B, 0x4A}, /* 0x60-0x63 */ + {0x6B, 0x4D}, {0x6B, 0x4B}, {0x6B, 0x9E}, {0x6B, 0x9F}, /* 0x64-0x67 */ + {0x6B, 0xA0}, {0x6B, 0xC3}, {0x6B, 0xC4}, {0x6B, 0xFE}, /* 0x68-0x6B */ + {0x6E, 0xCE}, {0x6E, 0xF5}, {0x6E, 0xF1}, {0x6F, 0x03}, /* 0x6C-0x6F */ + {0x6F, 0x25}, {0x6E, 0xF8}, {0x6F, 0x37}, {0x6E, 0xFB}, /* 0x70-0x73 */ + {0x6F, 0x2E}, {0x6F, 0x09}, {0x6F, 0x4E}, {0x6F, 0x19}, /* 0x74-0x77 */ + {0x6F, 0x1A}, {0x6F, 0x27}, {0x6F, 0x18}, {0x6F, 0x3B}, /* 0x78-0x7B */ + {0x6F, 0x12}, {0x6E, 0xED}, {0x6F, 0x0A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x6F, 0x36}, {0x6F, 0x73}, {0x6E, 0xF9}, /* 0xA0-0xA3 */ + {0x6E, 0xEE}, {0x6F, 0x2D}, {0x6F, 0x40}, {0x6F, 0x30}, /* 0xA4-0xA7 */ + {0x6F, 0x3C}, {0x6F, 0x35}, {0x6E, 0xEB}, {0x6F, 0x07}, /* 0xA8-0xAB */ + {0x6F, 0x0E}, {0x6F, 0x43}, {0x6F, 0x05}, {0x6E, 0xFD}, /* 0xAC-0xAF */ + {0x6E, 0xF6}, {0x6F, 0x39}, {0x6F, 0x1C}, {0x6E, 0xFC}, /* 0xB0-0xB3 */ + {0x6F, 0x3A}, {0x6F, 0x1F}, {0x6F, 0x0D}, {0x6F, 0x1E}, /* 0xB4-0xB7 */ + {0x6F, 0x08}, {0x6F, 0x21}, {0x71, 0x87}, {0x71, 0x90}, /* 0xB8-0xBB */ + {0x71, 0x89}, {0x71, 0x80}, {0x71, 0x85}, {0x71, 0x82}, /* 0xBC-0xBF */ + {0x71, 0x8F}, {0x71, 0x7B}, {0x71, 0x86}, {0x71, 0x81}, /* 0xC0-0xC3 */ + {0x71, 0x97}, {0x72, 0x44}, {0x72, 0x53}, {0x72, 0x97}, /* 0xC4-0xC7 */ + {0x72, 0x95}, {0x72, 0x93}, {0x73, 0x43}, {0x73, 0x4D}, /* 0xC8-0xCB */ + {0x73, 0x51}, {0x73, 0x4C}, {0x74, 0x62}, {0x74, 0x73}, /* 0xCC-0xCF */ + {0x74, 0x71}, {0x74, 0x75}, {0x74, 0x72}, {0x74, 0x67}, /* 0xD0-0xD3 */ + {0x74, 0x6E}, {0x75, 0x00}, {0x75, 0x02}, {0x75, 0x03}, /* 0xD4-0xD7 */ + {0x75, 0x7D}, {0x75, 0x90}, {0x76, 0x16}, {0x76, 0x08}, /* 0xD8-0xDB */ + {0x76, 0x0C}, {0x76, 0x15}, {0x76, 0x11}, {0x76, 0x0A}, /* 0xDC-0xDF */ + {0x76, 0x14}, {0x76, 0xB8}, {0x77, 0x81}, {0x77, 0x7C}, /* 0xE0-0xE3 */ + {0x77, 0x85}, {0x77, 0x82}, {0x77, 0x6E}, {0x77, 0x80}, /* 0xE4-0xE7 */ + {0x77, 0x6F}, {0x77, 0x7E}, {0x77, 0x83}, {0x78, 0xB2}, /* 0xE8-0xEB */ + {0x78, 0xAA}, {0x78, 0xB4}, {0x78, 0xAD}, {0x78, 0xA8}, /* 0xEC-0xEF */ + {0x78, 0x7E}, {0x78, 0xAB}, {0x78, 0x9E}, {0x78, 0xA5}, /* 0xF0-0xF3 */ + {0x78, 0xA0}, {0x78, 0xAC}, {0x78, 0xA2}, {0x78, 0xA4}, /* 0xF4-0xF7 */ + {0x79, 0x98}, {0x79, 0x8A}, {0x79, 0x8B}, {0x79, 0x96}, /* 0xF8-0xFB */ + {0x79, 0x95}, {0x79, 0x94}, {0x79, 0x93}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x79, 0x97}, {0x79, 0x88}, {0x79, 0x92}, {0x79, 0x90}, /* 0x40-0x43 */ + {0x7A, 0x2B}, {0x7A, 0x4A}, {0x7A, 0x30}, {0x7A, 0x2F}, /* 0x44-0x47 */ + {0x7A, 0x28}, {0x7A, 0x26}, {0x7A, 0xA8}, {0x7A, 0xAB}, /* 0x48-0x4B */ + {0x7A, 0xAC}, {0x7A, 0xEE}, {0x7B, 0x88}, {0x7B, 0x9C}, /* 0x4C-0x4F */ + {0x7B, 0x8A}, {0x7B, 0x91}, {0x7B, 0x90}, {0x7B, 0x96}, /* 0x50-0x53 */ + {0x7B, 0x8D}, {0x7B, 0x8C}, {0x7B, 0x9B}, {0x7B, 0x8E}, /* 0x54-0x57 */ + {0x7B, 0x85}, {0x7B, 0x98}, {0x52, 0x84}, {0x7B, 0x99}, /* 0x58-0x5B */ + {0x7B, 0xA4}, {0x7B, 0x82}, {0x7C, 0xBB}, {0x7C, 0xBF}, /* 0x5C-0x5F */ + {0x7C, 0xBC}, {0x7C, 0xBA}, {0x7D, 0xA7}, {0x7D, 0xB7}, /* 0x60-0x63 */ + {0x7D, 0xC2}, {0x7D, 0xA3}, {0x7D, 0xAA}, {0x7D, 0xC1}, /* 0x64-0x67 */ + {0x7D, 0xC0}, {0x7D, 0xC5}, {0x7D, 0x9D}, {0x7D, 0xCE}, /* 0x68-0x6B */ + {0x7D, 0xC4}, {0x7D, 0xC6}, {0x7D, 0xCB}, {0x7D, 0xCC}, /* 0x6C-0x6F */ + {0x7D, 0xAF}, {0x7D, 0xB9}, {0x7D, 0x96}, {0x7D, 0xBC}, /* 0x70-0x73 */ + {0x7D, 0x9F}, {0x7D, 0xA6}, {0x7D, 0xAE}, {0x7D, 0xA9}, /* 0x74-0x77 */ + {0x7D, 0xA1}, {0x7D, 0xC9}, {0x7F, 0x73}, {0x7F, 0xE2}, /* 0x78-0x7B */ + {0x7F, 0xE3}, {0x7F, 0xE5}, {0x7F, 0xDE}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x80, 0x24}, {0x80, 0x5D}, {0x80, 0x5C}, /* 0xA0-0xA3 */ + {0x81, 0x89}, {0x81, 0x86}, {0x81, 0x83}, {0x81, 0x87}, /* 0xA4-0xA7 */ + {0x81, 0x8D}, {0x81, 0x8C}, {0x81, 0x8B}, {0x82, 0x15}, /* 0xA8-0xAB */ + {0x84, 0x97}, {0x84, 0xA4}, {0x84, 0xA1}, {0x84, 0x9F}, /* 0xAC-0xAF */ + {0x84, 0xBA}, {0x84, 0xCE}, {0x84, 0xC2}, {0x84, 0xAC}, /* 0xB0-0xB3 */ + {0x84, 0xAE}, {0x84, 0xAB}, {0x84, 0xB9}, {0x84, 0xB4}, /* 0xB4-0xB7 */ + {0x84, 0xC1}, {0x84, 0xCD}, {0x84, 0xAA}, {0x84, 0x9A}, /* 0xB8-0xBB */ + {0x84, 0xB1}, {0x84, 0xD0}, {0x84, 0x9D}, {0x84, 0xA7}, /* 0xBC-0xBF */ + {0x84, 0xBB}, {0x84, 0xA2}, {0x84, 0x94}, {0x84, 0xC7}, /* 0xC0-0xC3 */ + {0x84, 0xCC}, {0x84, 0x9B}, {0x84, 0xA9}, {0x84, 0xAF}, /* 0xC4-0xC7 */ + {0x84, 0xA8}, {0x84, 0xD6}, {0x84, 0x98}, {0x84, 0xB6}, /* 0xC8-0xCB */ + {0x84, 0xCF}, {0x84, 0xA0}, {0x84, 0xD7}, {0x84, 0xD4}, /* 0xCC-0xCF */ + {0x84, 0xD2}, {0x84, 0xDB}, {0x84, 0xB0}, {0x84, 0x91}, /* 0xD0-0xD3 */ + {0x86, 0x61}, {0x87, 0x33}, {0x87, 0x23}, {0x87, 0x28}, /* 0xD4-0xD7 */ + {0x87, 0x6B}, {0x87, 0x40}, {0x87, 0x2E}, {0x87, 0x1E}, /* 0xD8-0xDB */ + {0x87, 0x21}, {0x87, 0x19}, {0x87, 0x1B}, {0x87, 0x43}, /* 0xDC-0xDF */ + {0x87, 0x2C}, {0x87, 0x41}, {0x87, 0x3E}, {0x87, 0x46}, /* 0xE0-0xE3 */ + {0x87, 0x20}, {0x87, 0x32}, {0x87, 0x2A}, {0x87, 0x2D}, /* 0xE4-0xE7 */ + {0x87, 0x3C}, {0x87, 0x12}, {0x87, 0x3A}, {0x87, 0x31}, /* 0xE8-0xEB */ + {0x87, 0x35}, {0x87, 0x42}, {0x87, 0x26}, {0x87, 0x27}, /* 0xEC-0xEF */ + {0x87, 0x38}, {0x87, 0x24}, {0x87, 0x1A}, {0x87, 0x30}, /* 0xF0-0xF3 */ + {0x87, 0x11}, {0x88, 0xF7}, {0x88, 0xE7}, {0x88, 0xF1}, /* 0xF4-0xF7 */ + {0x88, 0xF2}, {0x88, 0xFA}, {0x88, 0xFE}, {0x88, 0xEE}, /* 0xF8-0xFB */ + {0x88, 0xFC}, {0x88, 0xF6}, {0x88, 0xFB}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x88, 0xF0}, {0x88, 0xEC}, {0x88, 0xEB}, {0x89, 0x9D}, /* 0x40-0x43 */ + {0x89, 0xA1}, {0x89, 0x9F}, {0x89, 0x9E}, {0x89, 0xE9}, /* 0x44-0x47 */ + {0x89, 0xEB}, {0x89, 0xE8}, {0x8A, 0xAB}, {0x8A, 0x99}, /* 0x48-0x4B */ + {0x8A, 0x8B}, {0x8A, 0x92}, {0x8A, 0x8F}, {0x8A, 0x96}, /* 0x4C-0x4F */ + {0x8C, 0x3D}, {0x8C, 0x68}, {0x8C, 0x69}, {0x8C, 0xD5}, /* 0x50-0x53 */ + {0x8C, 0xCF}, {0x8C, 0xD7}, {0x8D, 0x96}, {0x8E, 0x09}, /* 0x54-0x57 */ + {0x8E, 0x02}, {0x8D, 0xFF}, {0x8E, 0x0D}, {0x8D, 0xFD}, /* 0x58-0x5B */ + {0x8E, 0x0A}, {0x8E, 0x03}, {0x8E, 0x07}, {0x8E, 0x06}, /* 0x5C-0x5F */ + {0x8E, 0x05}, {0x8D, 0xFE}, {0x8E, 0x00}, {0x8E, 0x04}, /* 0x60-0x63 */ + {0x8F, 0x10}, {0x8F, 0x11}, {0x8F, 0x0E}, {0x8F, 0x0D}, /* 0x64-0x67 */ + {0x91, 0x23}, {0x91, 0x1C}, {0x91, 0x20}, {0x91, 0x22}, /* 0x68-0x6B */ + {0x91, 0x1F}, {0x91, 0x1D}, {0x91, 0x1A}, {0x91, 0x24}, /* 0x6C-0x6F */ + {0x91, 0x21}, {0x91, 0x1B}, {0x91, 0x7A}, {0x91, 0x72}, /* 0x70-0x73 */ + {0x91, 0x79}, {0x91, 0x73}, {0x92, 0xA5}, {0x92, 0xA4}, /* 0x74-0x77 */ + {0x92, 0x76}, {0x92, 0x9B}, {0x92, 0x7A}, {0x92, 0xA0}, /* 0x78-0x7B */ + {0x92, 0x94}, {0x92, 0xAA}, {0x92, 0x8D}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x92, 0xA6}, {0x92, 0x9A}, {0x92, 0xAB}, /* 0xA0-0xA3 */ + {0x92, 0x79}, {0x92, 0x97}, {0x92, 0x7F}, {0x92, 0xA3}, /* 0xA4-0xA7 */ + {0x92, 0xEE}, {0x92, 0x8E}, {0x92, 0x82}, {0x92, 0x95}, /* 0xA8-0xAB */ + {0x92, 0xA2}, {0x92, 0x7D}, {0x92, 0x88}, {0x92, 0xA1}, /* 0xAC-0xAF */ + {0x92, 0x8A}, {0x92, 0x86}, {0x92, 0x8C}, {0x92, 0x99}, /* 0xB0-0xB3 */ + {0x92, 0xA7}, {0x92, 0x7E}, {0x92, 0x87}, {0x92, 0xA9}, /* 0xB4-0xB7 */ + {0x92, 0x9D}, {0x92, 0x8B}, {0x92, 0x2D}, {0x96, 0x9E}, /* 0xB8-0xBB */ + {0x96, 0xA1}, {0x96, 0xFF}, {0x97, 0x58}, {0x97, 0x7D}, /* 0xBC-0xBF */ + {0x97, 0x7A}, {0x97, 0x7E}, {0x97, 0x83}, {0x97, 0x80}, /* 0xC0-0xC3 */ + {0x97, 0x82}, {0x97, 0x7B}, {0x97, 0x84}, {0x97, 0x81}, /* 0xC4-0xC7 */ + {0x97, 0x7F}, {0x97, 0xCE}, {0x97, 0xCD}, {0x98, 0x16}, /* 0xC8-0xCB */ + {0x98, 0xAD}, {0x98, 0xAE}, {0x99, 0x02}, {0x99, 0x00}, /* 0xCC-0xCF */ + {0x99, 0x07}, {0x99, 0x9D}, {0x99, 0x9C}, {0x99, 0xC3}, /* 0xD0-0xD3 */ + {0x99, 0xB9}, {0x99, 0xBB}, {0x99, 0xBA}, {0x99, 0xC2}, /* 0xD4-0xD7 */ + {0x99, 0xBD}, {0x99, 0xC7}, {0x9A, 0xB1}, {0x9A, 0xE3}, /* 0xD8-0xDB */ + {0x9A, 0xE7}, {0x9B, 0x3E}, {0x9B, 0x3F}, {0x9B, 0x60}, /* 0xDC-0xDF */ + {0x9B, 0x61}, {0x9B, 0x5F}, {0x9C, 0xF1}, {0x9C, 0xF2}, /* 0xE0-0xE3 */ + {0x9C, 0xF5}, {0x9E, 0xA7}, {0x50, 0xFF}, {0x51, 0x03}, /* 0xE4-0xE7 */ + {0x51, 0x30}, {0x50, 0xF8}, {0x51, 0x06}, {0x51, 0x07}, /* 0xE8-0xEB */ + {0x50, 0xF6}, {0x50, 0xFE}, {0x51, 0x0B}, {0x51, 0x0C}, /* 0xEC-0xEF */ + {0x50, 0xFD}, {0x51, 0x0A}, {0x52, 0x8B}, {0x52, 0x8C}, /* 0xF0-0xF3 */ + {0x52, 0xF1}, {0x52, 0xEF}, {0x56, 0x48}, {0x56, 0x42}, /* 0xF4-0xF7 */ + {0x56, 0x4C}, {0x56, 0x35}, {0x56, 0x41}, {0x56, 0x4A}, /* 0xF8-0xFB */ + {0x56, 0x49}, {0x56, 0x46}, {0x56, 0x58}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x56, 0x5A}, {0x56, 0x40}, {0x56, 0x33}, {0x56, 0x3D}, /* 0x40-0x43 */ + {0x56, 0x2C}, {0x56, 0x3E}, {0x56, 0x38}, {0x56, 0x2A}, /* 0x44-0x47 */ + {0x56, 0x3A}, {0x57, 0x1A}, {0x58, 0xAB}, {0x58, 0x9D}, /* 0x48-0x4B */ + {0x58, 0xB1}, {0x58, 0xA0}, {0x58, 0xA3}, {0x58, 0xAF}, /* 0x4C-0x4F */ + {0x58, 0xAC}, {0x58, 0xA5}, {0x58, 0xA1}, {0x58, 0xFF}, /* 0x50-0x53 */ + {0x5A, 0xFF}, {0x5A, 0xF4}, {0x5A, 0xFD}, {0x5A, 0xF7}, /* 0x54-0x57 */ + {0x5A, 0xF6}, {0x5B, 0x03}, {0x5A, 0xF8}, {0x5B, 0x02}, /* 0x58-0x5B */ + {0x5A, 0xF9}, {0x5B, 0x01}, {0x5B, 0x07}, {0x5B, 0x05}, /* 0x5C-0x5F */ + {0x5B, 0x0F}, {0x5C, 0x67}, {0x5D, 0x99}, {0x5D, 0x97}, /* 0x60-0x63 */ + {0x5D, 0x9F}, {0x5D, 0x92}, {0x5D, 0xA2}, {0x5D, 0x93}, /* 0x64-0x67 */ + {0x5D, 0x95}, {0x5D, 0xA0}, {0x5D, 0x9C}, {0x5D, 0xA1}, /* 0x68-0x6B */ + {0x5D, 0x9A}, {0x5D, 0x9E}, {0x5E, 0x69}, {0x5E, 0x5D}, /* 0x6C-0x6F */ + {0x5E, 0x60}, {0x5E, 0x5C}, {0x7D, 0xF3}, {0x5E, 0xDB}, /* 0x70-0x73 */ + {0x5E, 0xDE}, {0x5E, 0xE1}, {0x5F, 0x49}, {0x5F, 0xB2}, /* 0x74-0x77 */ + {0x61, 0x8B}, {0x61, 0x83}, {0x61, 0x79}, {0x61, 0xB1}, /* 0x78-0x7B */ + {0x61, 0xB0}, {0x61, 0xA2}, {0x61, 0x89}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x61, 0x9B}, {0x61, 0x93}, {0x61, 0xAF}, /* 0xA0-0xA3 */ + {0x61, 0xAD}, {0x61, 0x9F}, {0x61, 0x92}, {0x61, 0xAA}, /* 0xA4-0xA7 */ + {0x61, 0xA1}, {0x61, 0x8D}, {0x61, 0x66}, {0x61, 0xB3}, /* 0xA8-0xAB */ + {0x62, 0x2D}, {0x64, 0x6E}, {0x64, 0x70}, {0x64, 0x96}, /* 0xAC-0xAF */ + {0x64, 0xA0}, {0x64, 0x85}, {0x64, 0x97}, {0x64, 0x9C}, /* 0xB0-0xB3 */ + {0x64, 0x8F}, {0x64, 0x8B}, {0x64, 0x8A}, {0x64, 0x8C}, /* 0xB4-0xB7 */ + {0x64, 0xA3}, {0x64, 0x9F}, {0x64, 0x68}, {0x64, 0xB1}, /* 0xB8-0xBB */ + {0x64, 0x98}, {0x65, 0x76}, {0x65, 0x7A}, {0x65, 0x79}, /* 0xBC-0xBF */ + {0x65, 0x7B}, {0x65, 0xB2}, {0x65, 0xB3}, {0x66, 0xB5}, /* 0xC0-0xC3 */ + {0x66, 0xB0}, {0x66, 0xA9}, {0x66, 0xB2}, {0x66, 0xB7}, /* 0xC4-0xC7 */ + {0x66, 0xAA}, {0x66, 0xAF}, {0x6A, 0x00}, {0x6A, 0x06}, /* 0xC8-0xCB */ + {0x6A, 0x17}, {0x69, 0xE5}, {0x69, 0xF8}, {0x6A, 0x15}, /* 0xCC-0xCF */ + {0x69, 0xF1}, {0x69, 0xE4}, {0x6A, 0x20}, {0x69, 0xFF}, /* 0xD0-0xD3 */ + {0x69, 0xEC}, {0x69, 0xE2}, {0x6A, 0x1B}, {0x6A, 0x1D}, /* 0xD4-0xD7 */ + {0x69, 0xFE}, {0x6A, 0x27}, {0x69, 0xF2}, {0x69, 0xEE}, /* 0xD8-0xDB */ + {0x6A, 0x14}, {0x69, 0xF7}, {0x69, 0xE7}, {0x6A, 0x40}, /* 0xDC-0xDF */ + {0x6A, 0x08}, {0x69, 0xE6}, {0x69, 0xFB}, {0x6A, 0x0D}, /* 0xE0-0xE3 */ + {0x69, 0xFC}, {0x69, 0xEB}, {0x6A, 0x09}, {0x6A, 0x04}, /* 0xE4-0xE7 */ + {0x6A, 0x18}, {0x6A, 0x25}, {0x6A, 0x0F}, {0x69, 0xF6}, /* 0xE8-0xEB */ + {0x6A, 0x26}, {0x6A, 0x07}, {0x69, 0xF4}, {0x6A, 0x16}, /* 0xEC-0xEF */ + {0x6B, 0x51}, {0x6B, 0xA5}, {0x6B, 0xA3}, {0x6B, 0xA2}, /* 0xF0-0xF3 */ + {0x6B, 0xA6}, {0x6C, 0x01}, {0x6C, 0x00}, {0x6B, 0xFF}, /* 0xF4-0xF7 */ + {0x6C, 0x02}, {0x6F, 0x41}, {0x6F, 0x26}, {0x6F, 0x7E}, /* 0xF8-0xFB */ + {0x6F, 0x87}, {0x6F, 0xC6}, {0x6F, 0x92}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6F, 0x8D}, {0x6F, 0x89}, {0x6F, 0x8C}, {0x6F, 0x62}, /* 0x40-0x43 */ + {0x6F, 0x4F}, {0x6F, 0x85}, {0x6F, 0x5A}, {0x6F, 0x96}, /* 0x44-0x47 */ + {0x6F, 0x76}, {0x6F, 0x6C}, {0x6F, 0x82}, {0x6F, 0x55}, /* 0x48-0x4B */ + {0x6F, 0x72}, {0x6F, 0x52}, {0x6F, 0x50}, {0x6F, 0x57}, /* 0x4C-0x4F */ + {0x6F, 0x94}, {0x6F, 0x93}, {0x6F, 0x5D}, {0x6F, 0x00}, /* 0x50-0x53 */ + {0x6F, 0x61}, {0x6F, 0x6B}, {0x6F, 0x7D}, {0x6F, 0x67}, /* 0x54-0x57 */ + {0x6F, 0x90}, {0x6F, 0x53}, {0x6F, 0x8B}, {0x6F, 0x69}, /* 0x58-0x5B */ + {0x6F, 0x7F}, {0x6F, 0x95}, {0x6F, 0x63}, {0x6F, 0x77}, /* 0x5C-0x5F */ + {0x6F, 0x6A}, {0x6F, 0x7B}, {0x71, 0xB2}, {0x71, 0xAF}, /* 0x60-0x63 */ + {0x71, 0x9B}, {0x71, 0xB0}, {0x71, 0xA0}, {0x71, 0x9A}, /* 0x64-0x67 */ + {0x71, 0xA9}, {0x71, 0xB5}, {0x71, 0x9D}, {0x71, 0xA5}, /* 0x68-0x6B */ + {0x71, 0x9E}, {0x71, 0xA4}, {0x71, 0xA1}, {0x71, 0xAA}, /* 0x6C-0x6F */ + {0x71, 0x9C}, {0x71, 0xA7}, {0x71, 0xB3}, {0x72, 0x98}, /* 0x70-0x73 */ + {0x72, 0x9A}, {0x73, 0x58}, {0x73, 0x52}, {0x73, 0x5E}, /* 0x74-0x77 */ + {0x73, 0x5F}, {0x73, 0x60}, {0x73, 0x5D}, {0x73, 0x5B}, /* 0x78-0x7B */ + {0x73, 0x61}, {0x73, 0x5A}, {0x73, 0x59}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x73, 0x62}, {0x74, 0x87}, {0x74, 0x89}, /* 0xA0-0xA3 */ + {0x74, 0x8A}, {0x74, 0x86}, {0x74, 0x81}, {0x74, 0x7D}, /* 0xA4-0xA7 */ + {0x74, 0x85}, {0x74, 0x88}, {0x74, 0x7C}, {0x74, 0x79}, /* 0xA8-0xAB */ + {0x75, 0x08}, {0x75, 0x07}, {0x75, 0x7E}, {0x76, 0x25}, /* 0xAC-0xAF */ + {0x76, 0x1E}, {0x76, 0x19}, {0x76, 0x1D}, {0x76, 0x1C}, /* 0xB0-0xB3 */ + {0x76, 0x23}, {0x76, 0x1A}, {0x76, 0x28}, {0x76, 0x1B}, /* 0xB4-0xB7 */ + {0x76, 0x9C}, {0x76, 0x9D}, {0x76, 0x9E}, {0x76, 0x9B}, /* 0xB8-0xBB */ + {0x77, 0x8D}, {0x77, 0x8F}, {0x77, 0x89}, {0x77, 0x88}, /* 0xBC-0xBF */ + {0x78, 0xCD}, {0x78, 0xBB}, {0x78, 0xCF}, {0x78, 0xCC}, /* 0xC0-0xC3 */ + {0x78, 0xD1}, {0x78, 0xCE}, {0x78, 0xD4}, {0x78, 0xC8}, /* 0xC4-0xC7 */ + {0x78, 0xC3}, {0x78, 0xC4}, {0x78, 0xC9}, {0x79, 0x9A}, /* 0xC8-0xCB */ + {0x79, 0xA1}, {0x79, 0xA0}, {0x79, 0x9C}, {0x79, 0xA2}, /* 0xCC-0xCF */ + {0x79, 0x9B}, {0x6B, 0x76}, {0x7A, 0x39}, {0x7A, 0xB2}, /* 0xD0-0xD3 */ + {0x7A, 0xB4}, {0x7A, 0xB3}, {0x7B, 0xB7}, {0x7B, 0xCB}, /* 0xD4-0xD7 */ + {0x7B, 0xBE}, {0x7B, 0xAC}, {0x7B, 0xCE}, {0x7B, 0xAF}, /* 0xD8-0xDB */ + {0x7B, 0xB9}, {0x7B, 0xCA}, {0x7B, 0xB5}, {0x7C, 0xC5}, /* 0xDC-0xDF */ + {0x7C, 0xC8}, {0x7C, 0xCC}, {0x7C, 0xCB}, {0x7D, 0xF7}, /* 0xE0-0xE3 */ + {0x7D, 0xDB}, {0x7D, 0xEA}, {0x7D, 0xE7}, {0x7D, 0xD7}, /* 0xE4-0xE7 */ + {0x7D, 0xE1}, {0x7E, 0x03}, {0x7D, 0xFA}, {0x7D, 0xE6}, /* 0xE8-0xEB */ + {0x7D, 0xF6}, {0x7D, 0xF1}, {0x7D, 0xF0}, {0x7D, 0xEE}, /* 0xEC-0xEF */ + {0x7D, 0xDF}, {0x7F, 0x76}, {0x7F, 0xAC}, {0x7F, 0xB0}, /* 0xF0-0xF3 */ + {0x7F, 0xAD}, {0x7F, 0xED}, {0x7F, 0xEB}, {0x7F, 0xEA}, /* 0xF4-0xF7 */ + {0x7F, 0xEC}, {0x7F, 0xE6}, {0x7F, 0xE8}, {0x80, 0x64}, /* 0xF8-0xFB */ + {0x80, 0x67}, {0x81, 0xA3}, {0x81, 0x9F}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x81, 0x9E}, {0x81, 0x95}, {0x81, 0xA2}, {0x81, 0x99}, /* 0x40-0x43 */ + {0x81, 0x97}, {0x82, 0x16}, {0x82, 0x4F}, {0x82, 0x53}, /* 0x44-0x47 */ + {0x82, 0x52}, {0x82, 0x50}, {0x82, 0x4E}, {0x82, 0x51}, /* 0x48-0x4B */ + {0x85, 0x24}, {0x85, 0x3B}, {0x85, 0x0F}, {0x85, 0x00}, /* 0x4C-0x4F */ + {0x85, 0x29}, {0x85, 0x0E}, {0x85, 0x09}, {0x85, 0x0D}, /* 0x50-0x53 */ + {0x85, 0x1F}, {0x85, 0x0A}, {0x85, 0x27}, {0x85, 0x1C}, /* 0x54-0x57 */ + {0x84, 0xFB}, {0x85, 0x2B}, {0x84, 0xFA}, {0x85, 0x08}, /* 0x58-0x5B */ + {0x85, 0x0C}, {0x84, 0xF4}, {0x85, 0x2A}, {0x84, 0xF2}, /* 0x5C-0x5F */ + {0x85, 0x15}, {0x84, 0xF7}, {0x84, 0xEB}, {0x84, 0xF3}, /* 0x60-0x63 */ + {0x84, 0xFC}, {0x85, 0x12}, {0x84, 0xEA}, {0x84, 0xE9}, /* 0x64-0x67 */ + {0x85, 0x16}, {0x84, 0xFE}, {0x85, 0x28}, {0x85, 0x1D}, /* 0x68-0x6B */ + {0x85, 0x2E}, {0x85, 0x02}, {0x84, 0xFD}, {0x85, 0x1E}, /* 0x6C-0x6F */ + {0x84, 0xF6}, {0x85, 0x31}, {0x85, 0x26}, {0x84, 0xE7}, /* 0x70-0x73 */ + {0x84, 0xE8}, {0x84, 0xF0}, {0x84, 0xEF}, {0x84, 0xF9}, /* 0x74-0x77 */ + {0x85, 0x18}, {0x85, 0x20}, {0x85, 0x30}, {0x85, 0x0B}, /* 0x78-0x7B */ + {0x85, 0x19}, {0x85, 0x2F}, {0x86, 0x62}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x87, 0x56}, {0x87, 0x63}, {0x87, 0x64}, /* 0xA0-0xA3 */ + {0x87, 0x77}, {0x87, 0xE1}, {0x87, 0x73}, {0x87, 0x58}, /* 0xA4-0xA7 */ + {0x87, 0x54}, {0x87, 0x5B}, {0x87, 0x52}, {0x87, 0x61}, /* 0xA8-0xAB */ + {0x87, 0x5A}, {0x87, 0x51}, {0x87, 0x5E}, {0x87, 0x6D}, /* 0xAC-0xAF */ + {0x87, 0x6A}, {0x87, 0x50}, {0x87, 0x4E}, {0x87, 0x5F}, /* 0xB0-0xB3 */ + {0x87, 0x5D}, {0x87, 0x6F}, {0x87, 0x6C}, {0x87, 0x7A}, /* 0xB4-0xB7 */ + {0x87, 0x6E}, {0x87, 0x5C}, {0x87, 0x65}, {0x87, 0x4F}, /* 0xB8-0xBB */ + {0x87, 0x7B}, {0x87, 0x75}, {0x87, 0x62}, {0x87, 0x67}, /* 0xBC-0xBF */ + {0x87, 0x69}, {0x88, 0x5A}, {0x89, 0x05}, {0x89, 0x0C}, /* 0xC0-0xC3 */ + {0x89, 0x14}, {0x89, 0x0B}, {0x89, 0x17}, {0x89, 0x18}, /* 0xC4-0xC7 */ + {0x89, 0x19}, {0x89, 0x06}, {0x89, 0x16}, {0x89, 0x11}, /* 0xC8-0xCB */ + {0x89, 0x0E}, {0x89, 0x09}, {0x89, 0xA2}, {0x89, 0xA4}, /* 0xCC-0xCF */ + {0x89, 0xA3}, {0x89, 0xED}, {0x89, 0xF0}, {0x89, 0xEC}, /* 0xD0-0xD3 */ + {0x8A, 0xCF}, {0x8A, 0xC6}, {0x8A, 0xB8}, {0x8A, 0xD3}, /* 0xD4-0xD7 */ + {0x8A, 0xD1}, {0x8A, 0xD4}, {0x8A, 0xD5}, {0x8A, 0xBB}, /* 0xD8-0xDB */ + {0x8A, 0xD7}, {0x8A, 0xBE}, {0x8A, 0xC0}, {0x8A, 0xC5}, /* 0xDC-0xDF */ + {0x8A, 0xD8}, {0x8A, 0xC3}, {0x8A, 0xBA}, {0x8A, 0xBD}, /* 0xE0-0xE3 */ + {0x8A, 0xD9}, {0x8C, 0x3E}, {0x8C, 0x4D}, {0x8C, 0x8F}, /* 0xE4-0xE7 */ + {0x8C, 0xE5}, {0x8C, 0xDF}, {0x8C, 0xD9}, {0x8C, 0xE8}, /* 0xE8-0xEB */ + {0x8C, 0xDA}, {0x8C, 0xDD}, {0x8C, 0xE7}, {0x8D, 0xA0}, /* 0xEC-0xEF */ + {0x8D, 0x9C}, {0x8D, 0xA1}, {0x8D, 0x9B}, {0x8E, 0x20}, /* 0xF0-0xF3 */ + {0x8E, 0x23}, {0x8E, 0x25}, {0x8E, 0x24}, {0x8E, 0x2E}, /* 0xF4-0xF7 */ + {0x8E, 0x15}, {0x8E, 0x1B}, {0x8E, 0x16}, {0x8E, 0x11}, /* 0xF8-0xFB */ + {0x8E, 0x19}, {0x8E, 0x26}, {0x8E, 0x27}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8E, 0x14}, {0x8E, 0x12}, {0x8E, 0x18}, {0x8E, 0x13}, /* 0x40-0x43 */ + {0x8E, 0x1C}, {0x8E, 0x17}, {0x8E, 0x1A}, {0x8F, 0x2C}, /* 0x44-0x47 */ + {0x8F, 0x24}, {0x8F, 0x18}, {0x8F, 0x1A}, {0x8F, 0x20}, /* 0x48-0x4B */ + {0x8F, 0x23}, {0x8F, 0x16}, {0x8F, 0x17}, {0x90, 0x73}, /* 0x4C-0x4F */ + {0x90, 0x70}, {0x90, 0x6F}, {0x90, 0x67}, {0x90, 0x6B}, /* 0x50-0x53 */ + {0x91, 0x2F}, {0x91, 0x2B}, {0x91, 0x29}, {0x91, 0x2A}, /* 0x54-0x57 */ + {0x91, 0x32}, {0x91, 0x26}, {0x91, 0x2E}, {0x91, 0x85}, /* 0x58-0x5B */ + {0x91, 0x86}, {0x91, 0x8A}, {0x91, 0x81}, {0x91, 0x82}, /* 0x5C-0x5F */ + {0x91, 0x84}, {0x91, 0x80}, {0x92, 0xD0}, {0x92, 0xC3}, /* 0x60-0x63 */ + {0x92, 0xC4}, {0x92, 0xC0}, {0x92, 0xD9}, {0x92, 0xB6}, /* 0x64-0x67 */ + {0x92, 0xCF}, {0x92, 0xF1}, {0x92, 0xDF}, {0x92, 0xD8}, /* 0x68-0x6B */ + {0x92, 0xE9}, {0x92, 0xD7}, {0x92, 0xDD}, {0x92, 0xCC}, /* 0x6C-0x6F */ + {0x92, 0xEF}, {0x92, 0xC2}, {0x92, 0xE8}, {0x92, 0xCA}, /* 0x70-0x73 */ + {0x92, 0xC8}, {0x92, 0xCE}, {0x92, 0xE6}, {0x92, 0xCD}, /* 0x74-0x77 */ + {0x92, 0xD5}, {0x92, 0xC9}, {0x92, 0xE0}, {0x92, 0xDE}, /* 0x78-0x7B */ + {0x92, 0xE7}, {0x92, 0xD1}, {0x92, 0xD3}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x92, 0xB5}, {0x92, 0xE1}, {0x92, 0xC6}, /* 0xA0-0xA3 */ + {0x92, 0xB4}, {0x95, 0x7C}, {0x95, 0xAC}, {0x95, 0xAB}, /* 0xA4-0xA7 */ + {0x95, 0xAE}, {0x95, 0xB0}, {0x96, 0xA4}, {0x96, 0xA2}, /* 0xA8-0xAB */ + {0x96, 0xD3}, {0x97, 0x05}, {0x97, 0x08}, {0x97, 0x02}, /* 0xAC-0xAF */ + {0x97, 0x5A}, {0x97, 0x8A}, {0x97, 0x8E}, {0x97, 0x88}, /* 0xB0-0xB3 */ + {0x97, 0xD0}, {0x97, 0xCF}, {0x98, 0x1E}, {0x98, 0x1D}, /* 0xB4-0xB7 */ + {0x98, 0x26}, {0x98, 0x29}, {0x98, 0x28}, {0x98, 0x20}, /* 0xB8-0xBB */ + {0x98, 0x1B}, {0x98, 0x27}, {0x98, 0xB2}, {0x99, 0x08}, /* 0xBC-0xBF */ + {0x98, 0xFA}, {0x99, 0x11}, {0x99, 0x14}, {0x99, 0x16}, /* 0xC0-0xC3 */ + {0x99, 0x17}, {0x99, 0x15}, {0x99, 0xDC}, {0x99, 0xCD}, /* 0xC4-0xC7 */ + {0x99, 0xCF}, {0x99, 0xD3}, {0x99, 0xD4}, {0x99, 0xCE}, /* 0xC8-0xCB */ + {0x99, 0xC9}, {0x99, 0xD6}, {0x99, 0xD8}, {0x99, 0xCB}, /* 0xCC-0xCF */ + {0x99, 0xD7}, {0x99, 0xCC}, {0x9A, 0xB3}, {0x9A, 0xEC}, /* 0xD0-0xD3 */ + {0x9A, 0xEB}, {0x9A, 0xF3}, {0x9A, 0xF2}, {0x9A, 0xF1}, /* 0xD4-0xD7 */ + {0x9B, 0x46}, {0x9B, 0x43}, {0x9B, 0x67}, {0x9B, 0x74}, /* 0xD8-0xDB */ + {0x9B, 0x71}, {0x9B, 0x66}, {0x9B, 0x76}, {0x9B, 0x75}, /* 0xDC-0xDF */ + {0x9B, 0x70}, {0x9B, 0x68}, {0x9B, 0x64}, {0x9B, 0x6C}, /* 0xE0-0xE3 */ + {0x9C, 0xFC}, {0x9C, 0xFA}, {0x9C, 0xFD}, {0x9C, 0xFF}, /* 0xE4-0xE7 */ + {0x9C, 0xF7}, {0x9D, 0x07}, {0x9D, 0x00}, {0x9C, 0xF9}, /* 0xE8-0xEB */ + {0x9C, 0xFB}, {0x9D, 0x08}, {0x9D, 0x05}, {0x9D, 0x04}, /* 0xEC-0xEF */ + {0x9E, 0x83}, {0x9E, 0xD3}, {0x9F, 0x0F}, {0x9F, 0x10}, /* 0xF0-0xF3 */ + {0x51, 0x1C}, {0x51, 0x13}, {0x51, 0x17}, {0x51, 0x1A}, /* 0xF4-0xF7 */ + {0x51, 0x11}, {0x51, 0xDE}, {0x53, 0x34}, {0x53, 0xE1}, /* 0xF8-0xFB */ + {0x56, 0x70}, {0x56, 0x60}, {0x56, 0x6E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_E9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x56, 0x73}, {0x56, 0x66}, {0x56, 0x63}, {0x56, 0x6D}, /* 0x40-0x43 */ + {0x56, 0x72}, {0x56, 0x5E}, {0x56, 0x77}, {0x57, 0x1C}, /* 0x44-0x47 */ + {0x57, 0x1B}, {0x58, 0xC8}, {0x58, 0xBD}, {0x58, 0xC9}, /* 0x48-0x4B */ + {0x58, 0xBF}, {0x58, 0xBA}, {0x58, 0xC2}, {0x58, 0xBC}, /* 0x4C-0x4F */ + {0x58, 0xC6}, {0x5B, 0x17}, {0x5B, 0x19}, {0x5B, 0x1B}, /* 0x50-0x53 */ + {0x5B, 0x21}, {0x5B, 0x14}, {0x5B, 0x13}, {0x5B, 0x10}, /* 0x54-0x57 */ + {0x5B, 0x16}, {0x5B, 0x28}, {0x5B, 0x1A}, {0x5B, 0x20}, /* 0x58-0x5B */ + {0x5B, 0x1E}, {0x5B, 0xEF}, {0x5D, 0xAC}, {0x5D, 0xB1}, /* 0x5C-0x5F */ + {0x5D, 0xA9}, {0x5D, 0xA7}, {0x5D, 0xB5}, {0x5D, 0xB0}, /* 0x60-0x63 */ + {0x5D, 0xAE}, {0x5D, 0xAA}, {0x5D, 0xA8}, {0x5D, 0xB2}, /* 0x64-0x67 */ + {0x5D, 0xAD}, {0x5D, 0xAF}, {0x5D, 0xB4}, {0x5E, 0x67}, /* 0x68-0x6B */ + {0x5E, 0x68}, {0x5E, 0x66}, {0x5E, 0x6F}, {0x5E, 0xE9}, /* 0x6C-0x6F */ + {0x5E, 0xE7}, {0x5E, 0xE6}, {0x5E, 0xE8}, {0x5E, 0xE5}, /* 0x70-0x73 */ + {0x5F, 0x4B}, {0x5F, 0xBC}, {0x61, 0x9D}, {0x61, 0xA8}, /* 0x74-0x77 */ + {0x61, 0x96}, {0x61, 0xC5}, {0x61, 0xB4}, {0x61, 0xC6}, /* 0x78-0x7B */ + {0x61, 0xC1}, {0x61, 0xCC}, {0x61, 0xBA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x61, 0xBF}, {0x61, 0xB8}, {0x61, 0x8C}, /* 0xA0-0xA3 */ + {0x64, 0xD7}, {0x64, 0xD6}, {0x64, 0xD0}, {0x64, 0xCF}, /* 0xA4-0xA7 */ + {0x64, 0xC9}, {0x64, 0xBD}, {0x64, 0x89}, {0x64, 0xC3}, /* 0xA8-0xAB */ + {0x64, 0xDB}, {0x64, 0xF3}, {0x64, 0xD9}, {0x65, 0x33}, /* 0xAC-0xAF */ + {0x65, 0x7F}, {0x65, 0x7C}, {0x65, 0xA2}, {0x66, 0xC8}, /* 0xB0-0xB3 */ + {0x66, 0xBE}, {0x66, 0xC0}, {0x66, 0xCA}, {0x66, 0xCB}, /* 0xB4-0xB7 */ + {0x66, 0xCF}, {0x66, 0xBD}, {0x66, 0xBB}, {0x66, 0xBA}, /* 0xB8-0xBB */ + {0x66, 0xCC}, {0x67, 0x23}, {0x6A, 0x34}, {0x6A, 0x66}, /* 0xBC-0xBF */ + {0x6A, 0x49}, {0x6A, 0x67}, {0x6A, 0x32}, {0x6A, 0x68}, /* 0xC0-0xC3 */ + {0x6A, 0x3E}, {0x6A, 0x5D}, {0x6A, 0x6D}, {0x6A, 0x76}, /* 0xC4-0xC7 */ + {0x6A, 0x5B}, {0x6A, 0x51}, {0x6A, 0x28}, {0x6A, 0x5A}, /* 0xC8-0xCB */ + {0x6A, 0x3B}, {0x6A, 0x3F}, {0x6A, 0x41}, {0x6A, 0x6A}, /* 0xCC-0xCF */ + {0x6A, 0x64}, {0x6A, 0x50}, {0x6A, 0x4F}, {0x6A, 0x54}, /* 0xD0-0xD3 */ + {0x6A, 0x6F}, {0x6A, 0x69}, {0x6A, 0x60}, {0x6A, 0x3C}, /* 0xD4-0xD7 */ + {0x6A, 0x5E}, {0x6A, 0x56}, {0x6A, 0x55}, {0x6A, 0x4D}, /* 0xD8-0xDB */ + {0x6A, 0x4E}, {0x6A, 0x46}, {0x6B, 0x55}, {0x6B, 0x54}, /* 0xDC-0xDF */ + {0x6B, 0x56}, {0x6B, 0xA7}, {0x6B, 0xAA}, {0x6B, 0xAB}, /* 0xE0-0xE3 */ + {0x6B, 0xC8}, {0x6B, 0xC7}, {0x6C, 0x04}, {0x6C, 0x03}, /* 0xE4-0xE7 */ + {0x6C, 0x06}, {0x6F, 0xAD}, {0x6F, 0xCB}, {0x6F, 0xA3}, /* 0xE8-0xEB */ + {0x6F, 0xC7}, {0x6F, 0xBC}, {0x6F, 0xCE}, {0x6F, 0xC8}, /* 0xEC-0xEF */ + {0x6F, 0x5E}, {0x6F, 0xC4}, {0x6F, 0xBD}, {0x6F, 0x9E}, /* 0xF0-0xF3 */ + {0x6F, 0xCA}, {0x6F, 0xA8}, {0x70, 0x04}, {0x6F, 0xA5}, /* 0xF4-0xF7 */ + {0x6F, 0xAE}, {0x6F, 0xBA}, {0x6F, 0xAC}, {0x6F, 0xAA}, /* 0xF8-0xFB */ + {0x6F, 0xCF}, {0x6F, 0xBF}, {0x6F, 0xB8}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EA[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6F, 0xA2}, {0x6F, 0xC9}, {0x6F, 0xAB}, {0x6F, 0xCD}, /* 0x40-0x43 */ + {0x6F, 0xAF}, {0x6F, 0xB2}, {0x6F, 0xB0}, {0x71, 0xC5}, /* 0x44-0x47 */ + {0x71, 0xC2}, {0x71, 0xBF}, {0x71, 0xB8}, {0x71, 0xD6}, /* 0x48-0x4B */ + {0x71, 0xC0}, {0x71, 0xC1}, {0x71, 0xCB}, {0x71, 0xD4}, /* 0x4C-0x4F */ + {0x71, 0xCA}, {0x71, 0xC7}, {0x71, 0xCF}, {0x71, 0xBD}, /* 0x50-0x53 */ + {0x71, 0xD8}, {0x71, 0xBC}, {0x71, 0xC6}, {0x71, 0xDA}, /* 0x54-0x57 */ + {0x71, 0xDB}, {0x72, 0x9D}, {0x72, 0x9E}, {0x73, 0x69}, /* 0x58-0x5B */ + {0x73, 0x66}, {0x73, 0x67}, {0x73, 0x6C}, {0x73, 0x65}, /* 0x5C-0x5F */ + {0x73, 0x6B}, {0x73, 0x6A}, {0x74, 0x7F}, {0x74, 0x9A}, /* 0x60-0x63 */ + {0x74, 0xA0}, {0x74, 0x94}, {0x74, 0x92}, {0x74, 0x95}, /* 0x64-0x67 */ + {0x74, 0xA1}, {0x75, 0x0B}, {0x75, 0x80}, {0x76, 0x2F}, /* 0x68-0x6B */ + {0x76, 0x2D}, {0x76, 0x31}, {0x76, 0x3D}, {0x76, 0x33}, /* 0x6C-0x6F */ + {0x76, 0x3C}, {0x76, 0x35}, {0x76, 0x32}, {0x76, 0x30}, /* 0x70-0x73 */ + {0x76, 0xBB}, {0x76, 0xE6}, {0x77, 0x9A}, {0x77, 0x9D}, /* 0x74-0x77 */ + {0x77, 0xA1}, {0x77, 0x9C}, {0x77, 0x9B}, {0x77, 0xA2}, /* 0x78-0x7B */ + {0x77, 0xA3}, {0x77, 0x95}, {0x77, 0x99}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x77, 0x97}, {0x78, 0xDD}, {0x78, 0xE9}, /* 0xA0-0xA3 */ + {0x78, 0xE5}, {0x78, 0xEA}, {0x78, 0xDE}, {0x78, 0xE3}, /* 0xA4-0xA7 */ + {0x78, 0xDB}, {0x78, 0xE1}, {0x78, 0xE2}, {0x78, 0xED}, /* 0xA8-0xAB */ + {0x78, 0xDF}, {0x78, 0xE0}, {0x79, 0xA4}, {0x7A, 0x44}, /* 0xAC-0xAF */ + {0x7A, 0x48}, {0x7A, 0x47}, {0x7A, 0xB6}, {0x7A, 0xB8}, /* 0xB0-0xB3 */ + {0x7A, 0xB5}, {0x7A, 0xB1}, {0x7A, 0xB7}, {0x7B, 0xDE}, /* 0xB4-0xB7 */ + {0x7B, 0xE3}, {0x7B, 0xE7}, {0x7B, 0xDD}, {0x7B, 0xD5}, /* 0xB8-0xBB */ + {0x7B, 0xE5}, {0x7B, 0xDA}, {0x7B, 0xE8}, {0x7B, 0xF9}, /* 0xBC-0xBF */ + {0x7B, 0xD4}, {0x7B, 0xEA}, {0x7B, 0xE2}, {0x7B, 0xDC}, /* 0xC0-0xC3 */ + {0x7B, 0xEB}, {0x7B, 0xD8}, {0x7B, 0xDF}, {0x7C, 0xD2}, /* 0xC4-0xC7 */ + {0x7C, 0xD4}, {0x7C, 0xD7}, {0x7C, 0xD0}, {0x7C, 0xD1}, /* 0xC8-0xCB */ + {0x7E, 0x12}, {0x7E, 0x21}, {0x7E, 0x17}, {0x7E, 0x0C}, /* 0xCC-0xCF */ + {0x7E, 0x1F}, {0x7E, 0x20}, {0x7E, 0x13}, {0x7E, 0x0E}, /* 0xD0-0xD3 */ + {0x7E, 0x1C}, {0x7E, 0x15}, {0x7E, 0x1A}, {0x7E, 0x22}, /* 0xD4-0xD7 */ + {0x7E, 0x0B}, {0x7E, 0x0F}, {0x7E, 0x16}, {0x7E, 0x0D}, /* 0xD8-0xDB */ + {0x7E, 0x14}, {0x7E, 0x25}, {0x7E, 0x24}, {0x7F, 0x43}, /* 0xDC-0xDF */ + {0x7F, 0x7B}, {0x7F, 0x7C}, {0x7F, 0x7A}, {0x7F, 0xB1}, /* 0xE0-0xE3 */ + {0x7F, 0xEF}, {0x80, 0x2A}, {0x80, 0x29}, {0x80, 0x6C}, /* 0xE4-0xE7 */ + {0x81, 0xB1}, {0x81, 0xA6}, {0x81, 0xAE}, {0x81, 0xB9}, /* 0xE8-0xEB */ + {0x81, 0xB5}, {0x81, 0xAB}, {0x81, 0xB0}, {0x81, 0xAC}, /* 0xEC-0xEF */ + {0x81, 0xB4}, {0x81, 0xB2}, {0x81, 0xB7}, {0x81, 0xA7}, /* 0xF0-0xF3 */ + {0x81, 0xF2}, {0x82, 0x55}, {0x82, 0x56}, {0x82, 0x57}, /* 0xF4-0xF7 */ + {0x85, 0x56}, {0x85, 0x45}, {0x85, 0x6B}, {0x85, 0x4D}, /* 0xF8-0xFB */ + {0x85, 0x53}, {0x85, 0x61}, {0x85, 0x58}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EB[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x85, 0x40}, {0x85, 0x46}, {0x85, 0x64}, {0x85, 0x41}, /* 0x40-0x43 */ + {0x85, 0x62}, {0x85, 0x44}, {0x85, 0x51}, {0x85, 0x47}, /* 0x44-0x47 */ + {0x85, 0x63}, {0x85, 0x3E}, {0x85, 0x5B}, {0x85, 0x71}, /* 0x48-0x4B */ + {0x85, 0x4E}, {0x85, 0x6E}, {0x85, 0x75}, {0x85, 0x55}, /* 0x4C-0x4F */ + {0x85, 0x67}, {0x85, 0x60}, {0x85, 0x8C}, {0x85, 0x66}, /* 0x50-0x53 */ + {0x85, 0x5D}, {0x85, 0x54}, {0x85, 0x65}, {0x85, 0x6C}, /* 0x54-0x57 */ + {0x86, 0x63}, {0x86, 0x65}, {0x86, 0x64}, {0x87, 0x9B}, /* 0x58-0x5B */ + {0x87, 0x8F}, {0x87, 0x97}, {0x87, 0x93}, {0x87, 0x92}, /* 0x5C-0x5F */ + {0x87, 0x88}, {0x87, 0x81}, {0x87, 0x96}, {0x87, 0x98}, /* 0x60-0x63 */ + {0x87, 0x79}, {0x87, 0x87}, {0x87, 0xA3}, {0x87, 0x85}, /* 0x64-0x67 */ + {0x87, 0x90}, {0x87, 0x91}, {0x87, 0x9D}, {0x87, 0x84}, /* 0x68-0x6B */ + {0x87, 0x94}, {0x87, 0x9C}, {0x87, 0x9A}, {0x87, 0x89}, /* 0x6C-0x6F */ + {0x89, 0x1E}, {0x89, 0x26}, {0x89, 0x30}, {0x89, 0x2D}, /* 0x70-0x73 */ + {0x89, 0x2E}, {0x89, 0x27}, {0x89, 0x31}, {0x89, 0x22}, /* 0x74-0x77 */ + {0x89, 0x29}, {0x89, 0x23}, {0x89, 0x2F}, {0x89, 0x2C}, /* 0x78-0x7B */ + {0x89, 0x1F}, {0x89, 0xF1}, {0x8A, 0xE0}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8A, 0xE2}, {0x8A, 0xF2}, {0x8A, 0xF4}, /* 0xA0-0xA3 */ + {0x8A, 0xF5}, {0x8A, 0xDD}, {0x8B, 0x14}, {0x8A, 0xE4}, /* 0xA4-0xA7 */ + {0x8A, 0xDF}, {0x8A, 0xF0}, {0x8A, 0xC8}, {0x8A, 0xDE}, /* 0xA8-0xAB */ + {0x8A, 0xE1}, {0x8A, 0xE8}, {0x8A, 0xFF}, {0x8A, 0xEF}, /* 0xAC-0xAF */ + {0x8A, 0xFB}, {0x8C, 0x91}, {0x8C, 0x92}, {0x8C, 0x90}, /* 0xB0-0xB3 */ + {0x8C, 0xF5}, {0x8C, 0xEE}, {0x8C, 0xF1}, {0x8C, 0xF0}, /* 0xB4-0xB7 */ + {0x8C, 0xF3}, {0x8D, 0x6C}, {0x8D, 0x6E}, {0x8D, 0xA5}, /* 0xB8-0xBB */ + {0x8D, 0xA7}, {0x8E, 0x33}, {0x8E, 0x3E}, {0x8E, 0x38}, /* 0xBC-0xBF */ + {0x8E, 0x40}, {0x8E, 0x45}, {0x8E, 0x36}, {0x8E, 0x3C}, /* 0xC0-0xC3 */ + {0x8E, 0x3D}, {0x8E, 0x41}, {0x8E, 0x30}, {0x8E, 0x3F}, /* 0xC4-0xC7 */ + {0x8E, 0xBD}, {0x8F, 0x36}, {0x8F, 0x2E}, {0x8F, 0x35}, /* 0xC8-0xCB */ + {0x8F, 0x32}, {0x8F, 0x39}, {0x8F, 0x37}, {0x8F, 0x34}, /* 0xCC-0xCF */ + {0x90, 0x76}, {0x90, 0x79}, {0x90, 0x7B}, {0x90, 0x86}, /* 0xD0-0xD3 */ + {0x90, 0xFA}, {0x91, 0x33}, {0x91, 0x35}, {0x91, 0x36}, /* 0xD4-0xD7 */ + {0x91, 0x93}, {0x91, 0x90}, {0x91, 0x91}, {0x91, 0x8D}, /* 0xD8-0xDB */ + {0x91, 0x8F}, {0x93, 0x27}, {0x93, 0x1E}, {0x93, 0x08}, /* 0xDC-0xDF */ + {0x93, 0x1F}, {0x93, 0x06}, {0x93, 0x0F}, {0x93, 0x7A}, /* 0xE0-0xE3 */ + {0x93, 0x38}, {0x93, 0x3C}, {0x93, 0x1B}, {0x93, 0x23}, /* 0xE4-0xE7 */ + {0x93, 0x12}, {0x93, 0x01}, {0x93, 0x46}, {0x93, 0x2D}, /* 0xE8-0xEB */ + {0x93, 0x0E}, {0x93, 0x0D}, {0x92, 0xCB}, {0x93, 0x1D}, /* 0xEC-0xEF */ + {0x92, 0xFA}, {0x93, 0x25}, {0x93, 0x13}, {0x92, 0xF9}, /* 0xF0-0xF3 */ + {0x92, 0xF7}, {0x93, 0x34}, {0x93, 0x02}, {0x93, 0x24}, /* 0xF4-0xF7 */ + {0x92, 0xFF}, {0x93, 0x29}, {0x93, 0x39}, {0x93, 0x35}, /* 0xF8-0xFB */ + {0x93, 0x2A}, {0x93, 0x14}, {0x93, 0x0C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EC[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0x0B}, {0x92, 0xFE}, {0x93, 0x09}, {0x93, 0x00}, /* 0x40-0x43 */ + {0x92, 0xFB}, {0x93, 0x16}, {0x95, 0xBC}, {0x95, 0xCD}, /* 0x44-0x47 */ + {0x95, 0xBE}, {0x95, 0xB9}, {0x95, 0xBA}, {0x95, 0xB6}, /* 0x48-0x4B */ + {0x95, 0xBF}, {0x95, 0xB5}, {0x95, 0xBD}, {0x96, 0xA9}, /* 0x4C-0x4F */ + {0x96, 0xD4}, {0x97, 0x0B}, {0x97, 0x12}, {0x97, 0x10}, /* 0x50-0x53 */ + {0x97, 0x99}, {0x97, 0x97}, {0x97, 0x94}, {0x97, 0xF0}, /* 0x54-0x57 */ + {0x97, 0xF8}, {0x98, 0x35}, {0x98, 0x2F}, {0x98, 0x32}, /* 0x58-0x5B */ + {0x99, 0x24}, {0x99, 0x1F}, {0x99, 0x27}, {0x99, 0x29}, /* 0x5C-0x5F */ + {0x99, 0x9E}, {0x99, 0xEE}, {0x99, 0xEC}, {0x99, 0xE5}, /* 0x60-0x63 */ + {0x99, 0xE4}, {0x99, 0xF0}, {0x99, 0xE3}, {0x99, 0xEA}, /* 0x64-0x67 */ + {0x99, 0xE9}, {0x99, 0xE7}, {0x9A, 0xB9}, {0x9A, 0xBF}, /* 0x68-0x6B */ + {0x9A, 0xB4}, {0x9A, 0xBB}, {0x9A, 0xF6}, {0x9A, 0xFA}, /* 0x6C-0x6F */ + {0x9A, 0xF9}, {0x9A, 0xF7}, {0x9B, 0x33}, {0x9B, 0x80}, /* 0x70-0x73 */ + {0x9B, 0x85}, {0x9B, 0x87}, {0x9B, 0x7C}, {0x9B, 0x7E}, /* 0x74-0x77 */ + {0x9B, 0x7B}, {0x9B, 0x82}, {0x9B, 0x93}, {0x9B, 0x92}, /* 0x78-0x7B */ + {0x9B, 0x90}, {0x9B, 0x7A}, {0x9B, 0x95}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9B, 0x7D}, {0x9B, 0x88}, {0x9D, 0x25}, /* 0xA0-0xA3 */ + {0x9D, 0x17}, {0x9D, 0x20}, {0x9D, 0x1E}, {0x9D, 0x14}, /* 0xA4-0xA7 */ + {0x9D, 0x29}, {0x9D, 0x1D}, {0x9D, 0x18}, {0x9D, 0x22}, /* 0xA8-0xAB */ + {0x9D, 0x10}, {0x9D, 0x19}, {0x9D, 0x1F}, {0x9E, 0x88}, /* 0xAC-0xAF */ + {0x9E, 0x86}, {0x9E, 0x87}, {0x9E, 0xAE}, {0x9E, 0xAD}, /* 0xB0-0xB3 */ + {0x9E, 0xD5}, {0x9E, 0xD6}, {0x9E, 0xFA}, {0x9F, 0x12}, /* 0xB4-0xB7 */ + {0x9F, 0x3D}, {0x51, 0x26}, {0x51, 0x25}, {0x51, 0x22}, /* 0xB8-0xBB */ + {0x51, 0x24}, {0x51, 0x20}, {0x51, 0x29}, {0x52, 0xF4}, /* 0xBC-0xBF */ + {0x56, 0x93}, {0x56, 0x8C}, {0x56, 0x8D}, {0x56, 0x86}, /* 0xC0-0xC3 */ + {0x56, 0x84}, {0x56, 0x83}, {0x56, 0x7E}, {0x56, 0x82}, /* 0xC4-0xC7 */ + {0x56, 0x7F}, {0x56, 0x81}, {0x58, 0xD6}, {0x58, 0xD4}, /* 0xC8-0xCB */ + {0x58, 0xCF}, {0x58, 0xD2}, {0x5B, 0x2D}, {0x5B, 0x25}, /* 0xCC-0xCF */ + {0x5B, 0x32}, {0x5B, 0x23}, {0x5B, 0x2C}, {0x5B, 0x27}, /* 0xD0-0xD3 */ + {0x5B, 0x26}, {0x5B, 0x2F}, {0x5B, 0x2E}, {0x5B, 0x7B}, /* 0xD4-0xD7 */ + {0x5B, 0xF1}, {0x5B, 0xF2}, {0x5D, 0xB7}, {0x5E, 0x6C}, /* 0xD8-0xDB */ + {0x5E, 0x6A}, {0x5F, 0xBE}, {0x5F, 0xBB}, {0x61, 0xC3}, /* 0xDC-0xDF */ + {0x61, 0xB5}, {0x61, 0xBC}, {0x61, 0xE7}, {0x61, 0xE0}, /* 0xE0-0xE3 */ + {0x61, 0xE5}, {0x61, 0xE4}, {0x61, 0xE8}, {0x61, 0xDE}, /* 0xE4-0xE7 */ + {0x64, 0xEF}, {0x64, 0xE9}, {0x64, 0xE3}, {0x64, 0xEB}, /* 0xE8-0xEB */ + {0x64, 0xE4}, {0x64, 0xE8}, {0x65, 0x81}, {0x65, 0x80}, /* 0xEC-0xEF */ + {0x65, 0xB6}, {0x65, 0xDA}, {0x66, 0xD2}, {0x6A, 0x8D}, /* 0xF0-0xF3 */ + {0x6A, 0x96}, {0x6A, 0x81}, {0x6A, 0xA5}, {0x6A, 0x89}, /* 0xF4-0xF7 */ + {0x6A, 0x9F}, {0x6A, 0x9B}, {0x6A, 0xA1}, {0x6A, 0x9E}, /* 0xF8-0xFB */ + {0x6A, 0x87}, {0x6A, 0x93}, {0x6A, 0x8E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_ED[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x6A, 0x95}, {0x6A, 0x83}, {0x6A, 0xA8}, {0x6A, 0xA4}, /* 0x40-0x43 */ + {0x6A, 0x91}, {0x6A, 0x7F}, {0x6A, 0xA6}, {0x6A, 0x9A}, /* 0x44-0x47 */ + {0x6A, 0x85}, {0x6A, 0x8C}, {0x6A, 0x92}, {0x6B, 0x5B}, /* 0x48-0x4B */ + {0x6B, 0xAD}, {0x6C, 0x09}, {0x6F, 0xCC}, {0x6F, 0xA9}, /* 0x4C-0x4F */ + {0x6F, 0xF4}, {0x6F, 0xD4}, {0x6F, 0xE3}, {0x6F, 0xDC}, /* 0x50-0x53 */ + {0x6F, 0xED}, {0x6F, 0xE7}, {0x6F, 0xE6}, {0x6F, 0xDE}, /* 0x54-0x57 */ + {0x6F, 0xF2}, {0x6F, 0xDD}, {0x6F, 0xE2}, {0x6F, 0xE8}, /* 0x58-0x5B */ + {0x71, 0xE1}, {0x71, 0xF1}, {0x71, 0xE8}, {0x71, 0xF2}, /* 0x5C-0x5F */ + {0x71, 0xE4}, {0x71, 0xF0}, {0x71, 0xE2}, {0x73, 0x73}, /* 0x60-0x63 */ + {0x73, 0x6E}, {0x73, 0x6F}, {0x74, 0x97}, {0x74, 0xB2}, /* 0x64-0x67 */ + {0x74, 0xAB}, {0x74, 0x90}, {0x74, 0xAA}, {0x74, 0xAD}, /* 0x68-0x6B */ + {0x74, 0xB1}, {0x74, 0xA5}, {0x74, 0xAF}, {0x75, 0x10}, /* 0x6C-0x6F */ + {0x75, 0x11}, {0x75, 0x12}, {0x75, 0x0F}, {0x75, 0x84}, /* 0x70-0x73 */ + {0x76, 0x43}, {0x76, 0x48}, {0x76, 0x49}, {0x76, 0x47}, /* 0x74-0x77 */ + {0x76, 0xA4}, {0x76, 0xE9}, {0x77, 0xB5}, {0x77, 0xAB}, /* 0x78-0x7B */ + {0x77, 0xB2}, {0x77, 0xB7}, {0x77, 0xB6}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x77, 0xB4}, {0x77, 0xB1}, {0x77, 0xA8}, /* 0xA0-0xA3 */ + {0x77, 0xF0}, {0x78, 0xF3}, {0x78, 0xFD}, {0x79, 0x02}, /* 0xA4-0xA7 */ + {0x78, 0xFB}, {0x78, 0xFC}, {0x78, 0xF2}, {0x79, 0x05}, /* 0xA8-0xAB */ + {0x78, 0xF9}, {0x78, 0xFE}, {0x79, 0x04}, {0x79, 0xAB}, /* 0xAC-0xAF */ + {0x79, 0xA8}, {0x7A, 0x5C}, {0x7A, 0x5B}, {0x7A, 0x56}, /* 0xB0-0xB3 */ + {0x7A, 0x58}, {0x7A, 0x54}, {0x7A, 0x5A}, {0x7A, 0xBE}, /* 0xB4-0xB7 */ + {0x7A, 0xC0}, {0x7A, 0xC1}, {0x7C, 0x05}, {0x7C, 0x0F}, /* 0xB8-0xBB */ + {0x7B, 0xF2}, {0x7C, 0x00}, {0x7B, 0xFF}, {0x7B, 0xFB}, /* 0xBC-0xBF */ + {0x7C, 0x0E}, {0x7B, 0xF4}, {0x7C, 0x0B}, {0x7B, 0xF3}, /* 0xC0-0xC3 */ + {0x7C, 0x02}, {0x7C, 0x09}, {0x7C, 0x03}, {0x7C, 0x01}, /* 0xC4-0xC7 */ + {0x7B, 0xF8}, {0x7B, 0xFD}, {0x7C, 0x06}, {0x7B, 0xF0}, /* 0xC8-0xCB */ + {0x7B, 0xF1}, {0x7C, 0x10}, {0x7C, 0x0A}, {0x7C, 0xE8}, /* 0xCC-0xCF */ + {0x7E, 0x2D}, {0x7E, 0x3C}, {0x7E, 0x42}, {0x7E, 0x33}, /* 0xD0-0xD3 */ + {0x98, 0x48}, {0x7E, 0x38}, {0x7E, 0x2A}, {0x7E, 0x49}, /* 0xD4-0xD7 */ + {0x7E, 0x40}, {0x7E, 0x47}, {0x7E, 0x29}, {0x7E, 0x4C}, /* 0xD8-0xDB */ + {0x7E, 0x30}, {0x7E, 0x3B}, {0x7E, 0x36}, {0x7E, 0x44}, /* 0xDC-0xDF */ + {0x7E, 0x3A}, {0x7F, 0x45}, {0x7F, 0x7F}, {0x7F, 0x7E}, /* 0xE0-0xE3 */ + {0x7F, 0x7D}, {0x7F, 0xF4}, {0x7F, 0xF2}, {0x80, 0x2C}, /* 0xE4-0xE7 */ + {0x81, 0xBB}, {0x81, 0xC4}, {0x81, 0xCC}, {0x81, 0xCA}, /* 0xE8-0xEB */ + {0x81, 0xC5}, {0x81, 0xC7}, {0x81, 0xBC}, {0x81, 0xE9}, /* 0xEC-0xEF */ + {0x82, 0x5B}, {0x82, 0x5A}, {0x82, 0x5C}, {0x85, 0x83}, /* 0xF0-0xF3 */ + {0x85, 0x80}, {0x85, 0x8F}, {0x85, 0xA7}, {0x85, 0x95}, /* 0xF4-0xF7 */ + {0x85, 0xA0}, {0x85, 0x8B}, {0x85, 0xA3}, {0x85, 0x7B}, /* 0xF8-0xFB */ + {0x85, 0xA4}, {0x85, 0x9A}, {0x85, 0x9E}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EE[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x85, 0x77}, {0x85, 0x7C}, {0x85, 0x89}, {0x85, 0xA1}, /* 0x40-0x43 */ + {0x85, 0x7A}, {0x85, 0x78}, {0x85, 0x57}, {0x85, 0x8E}, /* 0x44-0x47 */ + {0x85, 0x96}, {0x85, 0x86}, {0x85, 0x8D}, {0x85, 0x99}, /* 0x48-0x4B */ + {0x85, 0x9D}, {0x85, 0x81}, {0x85, 0xA2}, {0x85, 0x82}, /* 0x4C-0x4F */ + {0x85, 0x88}, {0x85, 0x85}, {0x85, 0x79}, {0x85, 0x76}, /* 0x50-0x53 */ + {0x85, 0x98}, {0x85, 0x90}, {0x85, 0x9F}, {0x86, 0x68}, /* 0x54-0x57 */ + {0x87, 0xBE}, {0x87, 0xAA}, {0x87, 0xAD}, {0x87, 0xC5}, /* 0x58-0x5B */ + {0x87, 0xB0}, {0x87, 0xAC}, {0x87, 0xB9}, {0x87, 0xB5}, /* 0x5C-0x5F */ + {0x87, 0xBC}, {0x87, 0xAE}, {0x87, 0xC9}, {0x87, 0xC3}, /* 0x60-0x63 */ + {0x87, 0xC2}, {0x87, 0xCC}, {0x87, 0xB7}, {0x87, 0xAF}, /* 0x64-0x67 */ + {0x87, 0xC4}, {0x87, 0xCA}, {0x87, 0xB4}, {0x87, 0xB6}, /* 0x68-0x6B */ + {0x87, 0xBF}, {0x87, 0xB8}, {0x87, 0xBD}, {0x87, 0xDE}, /* 0x6C-0x6F */ + {0x87, 0xB2}, {0x89, 0x35}, {0x89, 0x33}, {0x89, 0x3C}, /* 0x70-0x73 */ + {0x89, 0x3E}, {0x89, 0x41}, {0x89, 0x52}, {0x89, 0x37}, /* 0x74-0x77 */ + {0x89, 0x42}, {0x89, 0xAD}, {0x89, 0xAF}, {0x89, 0xAE}, /* 0x78-0x7B */ + {0x89, 0xF2}, {0x89, 0xF3}, {0x8B, 0x1E}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x8B, 0x18}, {0x8B, 0x16}, {0x8B, 0x11}, /* 0xA0-0xA3 */ + {0x8B, 0x05}, {0x8B, 0x0B}, {0x8B, 0x22}, {0x8B, 0x0F}, /* 0xA4-0xA7 */ + {0x8B, 0x12}, {0x8B, 0x15}, {0x8B, 0x07}, {0x8B, 0x0D}, /* 0xA8-0xAB */ + {0x8B, 0x08}, {0x8B, 0x06}, {0x8B, 0x1C}, {0x8B, 0x13}, /* 0xAC-0xAF */ + {0x8B, 0x1A}, {0x8C, 0x4F}, {0x8C, 0x70}, {0x8C, 0x72}, /* 0xB0-0xB3 */ + {0x8C, 0x71}, {0x8C, 0x6F}, {0x8C, 0x95}, {0x8C, 0x94}, /* 0xB4-0xB7 */ + {0x8C, 0xF9}, {0x8D, 0x6F}, {0x8E, 0x4E}, {0x8E, 0x4D}, /* 0xB8-0xBB */ + {0x8E, 0x53}, {0x8E, 0x50}, {0x8E, 0x4C}, {0x8E, 0x47}, /* 0xBC-0xBF */ + {0x8F, 0x43}, {0x8F, 0x40}, {0x90, 0x85}, {0x90, 0x7E}, /* 0xC0-0xC3 */ + {0x91, 0x38}, {0x91, 0x9A}, {0x91, 0xA2}, {0x91, 0x9B}, /* 0xC4-0xC7 */ + {0x91, 0x99}, {0x91, 0x9F}, {0x91, 0xA1}, {0x91, 0x9D}, /* 0xC8-0xCB */ + {0x91, 0xA0}, {0x93, 0xA1}, {0x93, 0x83}, {0x93, 0xAF}, /* 0xCC-0xCF */ + {0x93, 0x64}, {0x93, 0x56}, {0x93, 0x47}, {0x93, 0x7C}, /* 0xD0-0xD3 */ + {0x93, 0x58}, {0x93, 0x5C}, {0x93, 0x76}, {0x93, 0x49}, /* 0xD4-0xD7 */ + {0x93, 0x50}, {0x93, 0x51}, {0x93, 0x60}, {0x93, 0x6D}, /* 0xD8-0xDB */ + {0x93, 0x8F}, {0x93, 0x4C}, {0x93, 0x6A}, {0x93, 0x79}, /* 0xDC-0xDF */ + {0x93, 0x57}, {0x93, 0x55}, {0x93, 0x52}, {0x93, 0x4F}, /* 0xE0-0xE3 */ + {0x93, 0x71}, {0x93, 0x77}, {0x93, 0x7B}, {0x93, 0x61}, /* 0xE4-0xE7 */ + {0x93, 0x5E}, {0x93, 0x63}, {0x93, 0x67}, {0x93, 0x80}, /* 0xE8-0xEB */ + {0x93, 0x4E}, {0x93, 0x59}, {0x95, 0xC7}, {0x95, 0xC0}, /* 0xEC-0xEF */ + {0x95, 0xC9}, {0x95, 0xC3}, {0x95, 0xC5}, {0x95, 0xB7}, /* 0xF0-0xF3 */ + {0x96, 0xAE}, {0x96, 0xB0}, {0x96, 0xAC}, {0x97, 0x20}, /* 0xF4-0xF7 */ + {0x97, 0x1F}, {0x97, 0x18}, {0x97, 0x1D}, {0x97, 0x19}, /* 0xF8-0xFB */ + {0x97, 0x9A}, {0x97, 0xA1}, {0x97, 0x9C}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_EF[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x97, 0x9E}, {0x97, 0x9D}, {0x97, 0xD5}, {0x97, 0xD4}, /* 0x40-0x43 */ + {0x97, 0xF1}, {0x98, 0x41}, {0x98, 0x44}, {0x98, 0x4A}, /* 0x44-0x47 */ + {0x98, 0x49}, {0x98, 0x45}, {0x98, 0x43}, {0x99, 0x25}, /* 0x48-0x4B */ + {0x99, 0x2B}, {0x99, 0x2C}, {0x99, 0x2A}, {0x99, 0x33}, /* 0x4C-0x4F */ + {0x99, 0x32}, {0x99, 0x2F}, {0x99, 0x2D}, {0x99, 0x31}, /* 0x50-0x53 */ + {0x99, 0x30}, {0x99, 0x98}, {0x99, 0xA3}, {0x99, 0xA1}, /* 0x54-0x57 */ + {0x9A, 0x02}, {0x99, 0xFA}, {0x99, 0xF4}, {0x99, 0xF7}, /* 0x58-0x5B */ + {0x99, 0xF9}, {0x99, 0xF8}, {0x99, 0xF6}, {0x99, 0xFB}, /* 0x5C-0x5F */ + {0x99, 0xFD}, {0x99, 0xFE}, {0x99, 0xFC}, {0x9A, 0x03}, /* 0x60-0x63 */ + {0x9A, 0xBE}, {0x9A, 0xFE}, {0x9A, 0xFD}, {0x9B, 0x01}, /* 0x64-0x67 */ + {0x9A, 0xFC}, {0x9B, 0x48}, {0x9B, 0x9A}, {0x9B, 0xA8}, /* 0x68-0x6B */ + {0x9B, 0x9E}, {0x9B, 0x9B}, {0x9B, 0xA6}, {0x9B, 0xA1}, /* 0x6C-0x6F */ + {0x9B, 0xA5}, {0x9B, 0xA4}, {0x9B, 0x86}, {0x9B, 0xA2}, /* 0x70-0x73 */ + {0x9B, 0xA0}, {0x9B, 0xAF}, {0x9D, 0x33}, {0x9D, 0x41}, /* 0x74-0x77 */ + {0x9D, 0x67}, {0x9D, 0x36}, {0x9D, 0x2E}, {0x9D, 0x2F}, /* 0x78-0x7B */ + {0x9D, 0x31}, {0x9D, 0x38}, {0x9D, 0x30}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9D, 0x45}, {0x9D, 0x42}, {0x9D, 0x43}, /* 0xA0-0xA3 */ + {0x9D, 0x3E}, {0x9D, 0x37}, {0x9D, 0x40}, {0x9D, 0x3D}, /* 0xA4-0xA7 */ + {0x7F, 0xF5}, {0x9D, 0x2D}, {0x9E, 0x8A}, {0x9E, 0x89}, /* 0xA8-0xAB */ + {0x9E, 0x8D}, {0x9E, 0xB0}, {0x9E, 0xC8}, {0x9E, 0xDA}, /* 0xAC-0xAF */ + {0x9E, 0xFB}, {0x9E, 0xFF}, {0x9F, 0x24}, {0x9F, 0x23}, /* 0xB0-0xB3 */ + {0x9F, 0x22}, {0x9F, 0x54}, {0x9F, 0xA0}, {0x51, 0x31}, /* 0xB4-0xB7 */ + {0x51, 0x2D}, {0x51, 0x2E}, {0x56, 0x98}, {0x56, 0x9C}, /* 0xB8-0xBB */ + {0x56, 0x97}, {0x56, 0x9A}, {0x56, 0x9D}, {0x56, 0x99}, /* 0xBC-0xBF */ + {0x59, 0x70}, {0x5B, 0x3C}, {0x5C, 0x69}, {0x5C, 0x6A}, /* 0xC0-0xC3 */ + {0x5D, 0xC0}, {0x5E, 0x6D}, {0x5E, 0x6E}, {0x61, 0xD8}, /* 0xC4-0xC7 */ + {0x61, 0xDF}, {0x61, 0xED}, {0x61, 0xEE}, {0x61, 0xF1}, /* 0xC8-0xCB */ + {0x61, 0xEA}, {0x61, 0xF0}, {0x61, 0xEB}, {0x61, 0xD6}, /* 0xCC-0xCF */ + {0x61, 0xE9}, {0x64, 0xFF}, {0x65, 0x04}, {0x64, 0xFD}, /* 0xD0-0xD3 */ + {0x64, 0xF8}, {0x65, 0x01}, {0x65, 0x03}, {0x64, 0xFC}, /* 0xD4-0xD7 */ + {0x65, 0x94}, {0x65, 0xDB}, {0x66, 0xDA}, {0x66, 0xDB}, /* 0xD8-0xDB */ + {0x66, 0xD8}, {0x6A, 0xC5}, {0x6A, 0xB9}, {0x6A, 0xBD}, /* 0xDC-0xDF */ + {0x6A, 0xE1}, {0x6A, 0xC6}, {0x6A, 0xBA}, {0x6A, 0xB6}, /* 0xE0-0xE3 */ + {0x6A, 0xB7}, {0x6A, 0xC7}, {0x6A, 0xB4}, {0x6A, 0xAD}, /* 0xE4-0xE7 */ + {0x6B, 0x5E}, {0x6B, 0xC9}, {0x6C, 0x0B}, {0x70, 0x07}, /* 0xE8-0xEB */ + {0x70, 0x0C}, {0x70, 0x0D}, {0x70, 0x01}, {0x70, 0x05}, /* 0xEC-0xEF */ + {0x70, 0x14}, {0x70, 0x0E}, {0x6F, 0xFF}, {0x70, 0x00}, /* 0xF0-0xF3 */ + {0x6F, 0xFB}, {0x70, 0x26}, {0x6F, 0xFC}, {0x6F, 0xF7}, /* 0xF4-0xF7 */ + {0x70, 0x0A}, {0x72, 0x01}, {0x71, 0xFF}, {0x71, 0xF9}, /* 0xF8-0xFB */ + {0x72, 0x03}, {0x71, 0xFD}, {0x73, 0x76}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F0[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x74, 0xB8}, {0x74, 0xC0}, {0x74, 0xB5}, {0x74, 0xC1}, /* 0x40-0x43 */ + {0x74, 0xBE}, {0x74, 0xB6}, {0x74, 0xBB}, {0x74, 0xC2}, /* 0x44-0x47 */ + {0x75, 0x14}, {0x75, 0x13}, {0x76, 0x5C}, {0x76, 0x64}, /* 0x48-0x4B */ + {0x76, 0x59}, {0x76, 0x50}, {0x76, 0x53}, {0x76, 0x57}, /* 0x4C-0x4F */ + {0x76, 0x5A}, {0x76, 0xA6}, {0x76, 0xBD}, {0x76, 0xEC}, /* 0x50-0x53 */ + {0x77, 0xC2}, {0x77, 0xBA}, {0x78, 0xFF}, {0x79, 0x0C}, /* 0x54-0x57 */ + {0x79, 0x13}, {0x79, 0x14}, {0x79, 0x09}, {0x79, 0x10}, /* 0x58-0x5B */ + {0x79, 0x12}, {0x79, 0x11}, {0x79, 0xAD}, {0x79, 0xAC}, /* 0x5C-0x5F */ + {0x7A, 0x5F}, {0x7C, 0x1C}, {0x7C, 0x29}, {0x7C, 0x19}, /* 0x60-0x63 */ + {0x7C, 0x20}, {0x7C, 0x1F}, {0x7C, 0x2D}, {0x7C, 0x1D}, /* 0x64-0x67 */ + {0x7C, 0x26}, {0x7C, 0x28}, {0x7C, 0x22}, {0x7C, 0x25}, /* 0x68-0x6B */ + {0x7C, 0x30}, {0x7E, 0x5C}, {0x7E, 0x50}, {0x7E, 0x56}, /* 0x6C-0x6F */ + {0x7E, 0x63}, {0x7E, 0x58}, {0x7E, 0x62}, {0x7E, 0x5F}, /* 0x70-0x73 */ + {0x7E, 0x51}, {0x7E, 0x60}, {0x7E, 0x57}, {0x7E, 0x53}, /* 0x74-0x77 */ + {0x7F, 0xB5}, {0x7F, 0xB3}, {0x7F, 0xF7}, {0x7F, 0xF8}, /* 0x78-0x7B */ + {0x80, 0x75}, {0x81, 0xD1}, {0x81, 0xD2}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x81, 0xD0}, {0x82, 0x5F}, {0x82, 0x5E}, /* 0xA0-0xA3 */ + {0x85, 0xB4}, {0x85, 0xC6}, {0x85, 0xC0}, {0x85, 0xC3}, /* 0xA4-0xA7 */ + {0x85, 0xC2}, {0x85, 0xB3}, {0x85, 0xB5}, {0x85, 0xBD}, /* 0xA8-0xAB */ + {0x85, 0xC7}, {0x85, 0xC4}, {0x85, 0xBF}, {0x85, 0xCB}, /* 0xAC-0xAF */ + {0x85, 0xCE}, {0x85, 0xC8}, {0x85, 0xC5}, {0x85, 0xB1}, /* 0xB0-0xB3 */ + {0x85, 0xB6}, {0x85, 0xD2}, {0x86, 0x24}, {0x85, 0xB8}, /* 0xB4-0xB7 */ + {0x85, 0xB7}, {0x85, 0xBE}, {0x86, 0x69}, {0x87, 0xE7}, /* 0xB8-0xBB */ + {0x87, 0xE6}, {0x87, 0xE2}, {0x87, 0xDB}, {0x87, 0xEB}, /* 0xBC-0xBF */ + {0x87, 0xEA}, {0x87, 0xE5}, {0x87, 0xDF}, {0x87, 0xF3}, /* 0xC0-0xC3 */ + {0x87, 0xE4}, {0x87, 0xD4}, {0x87, 0xDC}, {0x87, 0xD3}, /* 0xC4-0xC7 */ + {0x87, 0xED}, {0x87, 0xD8}, {0x87, 0xE3}, {0x87, 0xA4}, /* 0xC8-0xCB */ + {0x87, 0xD7}, {0x87, 0xD9}, {0x88, 0x01}, {0x87, 0xF4}, /* 0xCC-0xCF */ + {0x87, 0xE8}, {0x87, 0xDD}, {0x89, 0x53}, {0x89, 0x4B}, /* 0xD0-0xD3 */ + {0x89, 0x4F}, {0x89, 0x4C}, {0x89, 0x46}, {0x89, 0x50}, /* 0xD4-0xD7 */ + {0x89, 0x51}, {0x89, 0x49}, {0x8B, 0x2A}, {0x8B, 0x27}, /* 0xD8-0xDB */ + {0x8B, 0x23}, {0x8B, 0x33}, {0x8B, 0x30}, {0x8B, 0x35}, /* 0xDC-0xDF */ + {0x8B, 0x47}, {0x8B, 0x2F}, {0x8B, 0x3C}, {0x8B, 0x3E}, /* 0xE0-0xE3 */ + {0x8B, 0x31}, {0x8B, 0x25}, {0x8B, 0x37}, {0x8B, 0x26}, /* 0xE4-0xE7 */ + {0x8B, 0x36}, {0x8B, 0x2E}, {0x8B, 0x24}, {0x8B, 0x3B}, /* 0xE8-0xEB */ + {0x8B, 0x3D}, {0x8B, 0x3A}, {0x8C, 0x42}, {0x8C, 0x75}, /* 0xEC-0xEF */ + {0x8C, 0x99}, {0x8C, 0x98}, {0x8C, 0x97}, {0x8C, 0xFE}, /* 0xF0-0xF3 */ + {0x8D, 0x04}, {0x8D, 0x02}, {0x8D, 0x00}, {0x8E, 0x5C}, /* 0xF4-0xF7 */ + {0x8E, 0x62}, {0x8E, 0x60}, {0x8E, 0x57}, {0x8E, 0x56}, /* 0xF8-0xFB */ + {0x8E, 0x5E}, {0x8E, 0x65}, {0x8E, 0x67}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F1[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8E, 0x5B}, {0x8E, 0x5A}, {0x8E, 0x61}, {0x8E, 0x5D}, /* 0x40-0x43 */ + {0x8E, 0x69}, {0x8E, 0x54}, {0x8F, 0x46}, {0x8F, 0x47}, /* 0x44-0x47 */ + {0x8F, 0x48}, {0x8F, 0x4B}, {0x91, 0x28}, {0x91, 0x3A}, /* 0x48-0x4B */ + {0x91, 0x3B}, {0x91, 0x3E}, {0x91, 0xA8}, {0x91, 0xA5}, /* 0x4C-0x4F */ + {0x91, 0xA7}, {0x91, 0xAF}, {0x91, 0xAA}, {0x93, 0xB5}, /* 0x50-0x53 */ + {0x93, 0x8C}, {0x93, 0x92}, {0x93, 0xB7}, {0x93, 0x9B}, /* 0x54-0x57 */ + {0x93, 0x9D}, {0x93, 0x89}, {0x93, 0xA7}, {0x93, 0x8E}, /* 0x58-0x5B */ + {0x93, 0xAA}, {0x93, 0x9E}, {0x93, 0xA6}, {0x93, 0x95}, /* 0x5C-0x5F */ + {0x93, 0x88}, {0x93, 0x99}, {0x93, 0x9F}, {0x93, 0x8D}, /* 0x60-0x63 */ + {0x93, 0xB1}, {0x93, 0x91}, {0x93, 0xB2}, {0x93, 0xA4}, /* 0x64-0x67 */ + {0x93, 0xA8}, {0x93, 0xB4}, {0x93, 0xA3}, {0x93, 0xA5}, /* 0x68-0x6B */ + {0x95, 0xD2}, {0x95, 0xD3}, {0x95, 0xD1}, {0x96, 0xB3}, /* 0x6C-0x6F */ + {0x96, 0xD7}, {0x96, 0xDA}, {0x5D, 0xC2}, {0x96, 0xDF}, /* 0x70-0x73 */ + {0x96, 0xD8}, {0x96, 0xDD}, {0x97, 0x23}, {0x97, 0x22}, /* 0x74-0x77 */ + {0x97, 0x25}, {0x97, 0xAC}, {0x97, 0xAE}, {0x97, 0xA8}, /* 0x78-0x7B */ + {0x97, 0xAB}, {0x97, 0xA4}, {0x97, 0xAA}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x97, 0xA2}, {0x97, 0xA5}, {0x97, 0xD7}, /* 0xA0-0xA3 */ + {0x97, 0xD9}, {0x97, 0xD6}, {0x97, 0xD8}, {0x97, 0xFA}, /* 0xA4-0xA7 */ + {0x98, 0x50}, {0x98, 0x51}, {0x98, 0x52}, {0x98, 0xB8}, /* 0xA8-0xAB */ + {0x99, 0x41}, {0x99, 0x3C}, {0x99, 0x3A}, {0x9A, 0x0F}, /* 0xAC-0xAF */ + {0x9A, 0x0B}, {0x9A, 0x09}, {0x9A, 0x0D}, {0x9A, 0x04}, /* 0xB0-0xB3 */ + {0x9A, 0x11}, {0x9A, 0x0A}, {0x9A, 0x05}, {0x9A, 0x07}, /* 0xB4-0xB7 */ + {0x9A, 0x06}, {0x9A, 0xC0}, {0x9A, 0xDC}, {0x9B, 0x08}, /* 0xB8-0xBB */ + {0x9B, 0x04}, {0x9B, 0x05}, {0x9B, 0x29}, {0x9B, 0x35}, /* 0xBC-0xBF */ + {0x9B, 0x4A}, {0x9B, 0x4C}, {0x9B, 0x4B}, {0x9B, 0xC7}, /* 0xC0-0xC3 */ + {0x9B, 0xC6}, {0x9B, 0xC3}, {0x9B, 0xBF}, {0x9B, 0xC1}, /* 0xC4-0xC7 */ + {0x9B, 0xB5}, {0x9B, 0xB8}, {0x9B, 0xD3}, {0x9B, 0xB6}, /* 0xC8-0xCB */ + {0x9B, 0xC4}, {0x9B, 0xB9}, {0x9B, 0xBD}, {0x9D, 0x5C}, /* 0xCC-0xCF */ + {0x9D, 0x53}, {0x9D, 0x4F}, {0x9D, 0x4A}, {0x9D, 0x5B}, /* 0xD0-0xD3 */ + {0x9D, 0x4B}, {0x9D, 0x59}, {0x9D, 0x56}, {0x9D, 0x4C}, /* 0xD4-0xD7 */ + {0x9D, 0x57}, {0x9D, 0x52}, {0x9D, 0x54}, {0x9D, 0x5F}, /* 0xD8-0xDB */ + {0x9D, 0x58}, {0x9D, 0x5A}, {0x9E, 0x8E}, {0x9E, 0x8C}, /* 0xDC-0xDF */ + {0x9E, 0xDF}, {0x9F, 0x01}, {0x9F, 0x00}, {0x9F, 0x16}, /* 0xE0-0xE3 */ + {0x9F, 0x25}, {0x9F, 0x2B}, {0x9F, 0x2A}, {0x9F, 0x29}, /* 0xE4-0xE7 */ + {0x9F, 0x28}, {0x9F, 0x4C}, {0x9F, 0x55}, {0x51, 0x34}, /* 0xE8-0xEB */ + {0x51, 0x35}, {0x52, 0x96}, {0x52, 0xF7}, {0x53, 0xB4}, /* 0xEC-0xEF */ + {0x56, 0xAB}, {0x56, 0xAD}, {0x56, 0xA6}, {0x56, 0xA7}, /* 0xF0-0xF3 */ + {0x56, 0xAA}, {0x56, 0xAC}, {0x58, 0xDA}, {0x58, 0xDD}, /* 0xF4-0xF7 */ + {0x58, 0xDB}, {0x59, 0x12}, {0x5B, 0x3D}, {0x5B, 0x3E}, /* 0xF8-0xFB */ + {0x5B, 0x3F}, {0x5D, 0xC3}, {0x5E, 0x70}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F2[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x5F, 0xBF}, {0x61, 0xFB}, {0x65, 0x07}, {0x65, 0x10}, /* 0x40-0x43 */ + {0x65, 0x0D}, {0x65, 0x09}, {0x65, 0x0C}, {0x65, 0x0E}, /* 0x44-0x47 */ + {0x65, 0x84}, {0x65, 0xDE}, {0x65, 0xDD}, {0x66, 0xDE}, /* 0x48-0x4B */ + {0x6A, 0xE7}, {0x6A, 0xE0}, {0x6A, 0xCC}, {0x6A, 0xD1}, /* 0x4C-0x4F */ + {0x6A, 0xD9}, {0x6A, 0xCB}, {0x6A, 0xDF}, {0x6A, 0xDC}, /* 0x50-0x53 */ + {0x6A, 0xD0}, {0x6A, 0xEB}, {0x6A, 0xCF}, {0x6A, 0xCD}, /* 0x54-0x57 */ + {0x6A, 0xDE}, {0x6B, 0x60}, {0x6B, 0xB0}, {0x6C, 0x0C}, /* 0x58-0x5B */ + {0x70, 0x19}, {0x70, 0x27}, {0x70, 0x20}, {0x70, 0x16}, /* 0x5C-0x5F */ + {0x70, 0x2B}, {0x70, 0x21}, {0x70, 0x22}, {0x70, 0x23}, /* 0x60-0x63 */ + {0x70, 0x29}, {0x70, 0x17}, {0x70, 0x24}, {0x70, 0x1C}, /* 0x64-0x67 */ + {0x70, 0x2A}, {0x72, 0x0C}, {0x72, 0x0A}, {0x72, 0x07}, /* 0x68-0x6B */ + {0x72, 0x02}, {0x72, 0x05}, {0x72, 0xA5}, {0x72, 0xA6}, /* 0x6C-0x6F */ + {0x72, 0xA4}, {0x72, 0xA3}, {0x72, 0xA1}, {0x74, 0xCB}, /* 0x70-0x73 */ + {0x74, 0xC5}, {0x74, 0xB7}, {0x74, 0xC3}, {0x75, 0x16}, /* 0x74-0x77 */ + {0x76, 0x60}, {0x77, 0xC9}, {0x77, 0xCA}, {0x77, 0xC4}, /* 0x78-0x7B */ + {0x77, 0xF1}, {0x79, 0x1D}, {0x79, 0x1B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x79, 0x21}, {0x79, 0x1C}, {0x79, 0x17}, /* 0xA0-0xA3 */ + {0x79, 0x1E}, {0x79, 0xB0}, {0x7A, 0x67}, {0x7A, 0x68}, /* 0xA4-0xA7 */ + {0x7C, 0x33}, {0x7C, 0x3C}, {0x7C, 0x39}, {0x7C, 0x2C}, /* 0xA8-0xAB */ + {0x7C, 0x3B}, {0x7C, 0xEC}, {0x7C, 0xEA}, {0x7E, 0x76}, /* 0xAC-0xAF */ + {0x7E, 0x75}, {0x7E, 0x78}, {0x7E, 0x70}, {0x7E, 0x77}, /* 0xB0-0xB3 */ + {0x7E, 0x6F}, {0x7E, 0x7A}, {0x7E, 0x72}, {0x7E, 0x74}, /* 0xB4-0xB7 */ + {0x7E, 0x68}, {0x7F, 0x4B}, {0x7F, 0x4A}, {0x7F, 0x83}, /* 0xB8-0xBB */ + {0x7F, 0x86}, {0x7F, 0xB7}, {0x7F, 0xFD}, {0x7F, 0xFE}, /* 0xBC-0xBF */ + {0x80, 0x78}, {0x81, 0xD7}, {0x81, 0xD5}, {0x82, 0x64}, /* 0xC0-0xC3 */ + {0x82, 0x61}, {0x82, 0x63}, {0x85, 0xEB}, {0x85, 0xF1}, /* 0xC4-0xC7 */ + {0x85, 0xED}, {0x85, 0xD9}, {0x85, 0xE1}, {0x85, 0xE8}, /* 0xC8-0xCB */ + {0x85, 0xDA}, {0x85, 0xD7}, {0x85, 0xEC}, {0x85, 0xF2}, /* 0xCC-0xCF */ + {0x85, 0xF8}, {0x85, 0xD8}, {0x85, 0xDF}, {0x85, 0xE3}, /* 0xD0-0xD3 */ + {0x85, 0xDC}, {0x85, 0xD1}, {0x85, 0xF0}, {0x85, 0xE6}, /* 0xD4-0xD7 */ + {0x85, 0xEF}, {0x85, 0xDE}, {0x85, 0xE2}, {0x88, 0x00}, /* 0xD8-0xDB */ + {0x87, 0xFA}, {0x88, 0x03}, {0x87, 0xF6}, {0x87, 0xF7}, /* 0xDC-0xDF */ + {0x88, 0x09}, {0x88, 0x0C}, {0x88, 0x0B}, {0x88, 0x06}, /* 0xE0-0xE3 */ + {0x87, 0xFC}, {0x88, 0x08}, {0x87, 0xFF}, {0x88, 0x0A}, /* 0xE4-0xE7 */ + {0x88, 0x02}, {0x89, 0x62}, {0x89, 0x5A}, {0x89, 0x5B}, /* 0xE8-0xEB */ + {0x89, 0x57}, {0x89, 0x61}, {0x89, 0x5C}, {0x89, 0x58}, /* 0xEC-0xEF */ + {0x89, 0x5D}, {0x89, 0x59}, {0x89, 0x88}, {0x89, 0xB7}, /* 0xF0-0xF3 */ + {0x89, 0xB6}, {0x89, 0xF6}, {0x8B, 0x50}, {0x8B, 0x48}, /* 0xF4-0xF7 */ + {0x8B, 0x4A}, {0x8B, 0x40}, {0x8B, 0x53}, {0x8B, 0x56}, /* 0xF8-0xFB */ + {0x8B, 0x54}, {0x8B, 0x4B}, {0x8B, 0x55}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F3[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8B, 0x51}, {0x8B, 0x42}, {0x8B, 0x52}, {0x8B, 0x57}, /* 0x40-0x43 */ + {0x8C, 0x43}, {0x8C, 0x77}, {0x8C, 0x76}, {0x8C, 0x9A}, /* 0x44-0x47 */ + {0x8D, 0x06}, {0x8D, 0x07}, {0x8D, 0x09}, {0x8D, 0xAC}, /* 0x48-0x4B */ + {0x8D, 0xAA}, {0x8D, 0xAD}, {0x8D, 0xAB}, {0x8E, 0x6D}, /* 0x4C-0x4F */ + {0x8E, 0x78}, {0x8E, 0x73}, {0x8E, 0x6A}, {0x8E, 0x6F}, /* 0x50-0x53 */ + {0x8E, 0x7B}, {0x8E, 0xC2}, {0x8F, 0x52}, {0x8F, 0x51}, /* 0x54-0x57 */ + {0x8F, 0x4F}, {0x8F, 0x50}, {0x8F, 0x53}, {0x8F, 0xB4}, /* 0x58-0x5B */ + {0x91, 0x40}, {0x91, 0x3F}, {0x91, 0xB0}, {0x91, 0xAD}, /* 0x5C-0x5F */ + {0x93, 0xDE}, {0x93, 0xC7}, {0x93, 0xCF}, {0x93, 0xC2}, /* 0x60-0x63 */ + {0x93, 0xDA}, {0x93, 0xD0}, {0x93, 0xF9}, {0x93, 0xEC}, /* 0x64-0x67 */ + {0x93, 0xCC}, {0x93, 0xD9}, {0x93, 0xA9}, {0x93, 0xE6}, /* 0x68-0x6B */ + {0x93, 0xCA}, {0x93, 0xD4}, {0x93, 0xEE}, {0x93, 0xE3}, /* 0x6C-0x6F */ + {0x93, 0xD5}, {0x93, 0xC4}, {0x93, 0xCE}, {0x93, 0xC0}, /* 0x70-0x73 */ + {0x93, 0xD2}, {0x93, 0xE7}, {0x95, 0x7D}, {0x95, 0xDA}, /* 0x74-0x77 */ + {0x95, 0xDB}, {0x96, 0xE1}, {0x97, 0x29}, {0x97, 0x2B}, /* 0x78-0x7B */ + {0x97, 0x2C}, {0x97, 0x28}, {0x97, 0x26}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x97, 0xB3}, {0x97, 0xB7}, {0x97, 0xB6}, /* 0xA0-0xA3 */ + {0x97, 0xDD}, {0x97, 0xDE}, {0x97, 0xDF}, {0x98, 0x5C}, /* 0xA4-0xA7 */ + {0x98, 0x59}, {0x98, 0x5D}, {0x98, 0x57}, {0x98, 0xBF}, /* 0xA8-0xAB */ + {0x98, 0xBD}, {0x98, 0xBB}, {0x98, 0xBE}, {0x99, 0x48}, /* 0xAC-0xAF */ + {0x99, 0x47}, {0x99, 0x43}, {0x99, 0xA6}, {0x99, 0xA7}, /* 0xB0-0xB3 */ + {0x9A, 0x1A}, {0x9A, 0x15}, {0x9A, 0x25}, {0x9A, 0x1D}, /* 0xB4-0xB7 */ + {0x9A, 0x24}, {0x9A, 0x1B}, {0x9A, 0x22}, {0x9A, 0x20}, /* 0xB8-0xBB */ + {0x9A, 0x27}, {0x9A, 0x23}, {0x9A, 0x1E}, {0x9A, 0x1C}, /* 0xBC-0xBF */ + {0x9A, 0x14}, {0x9A, 0xC2}, {0x9B, 0x0B}, {0x9B, 0x0A}, /* 0xC0-0xC3 */ + {0x9B, 0x0E}, {0x9B, 0x0C}, {0x9B, 0x37}, {0x9B, 0xEA}, /* 0xC4-0xC7 */ + {0x9B, 0xEB}, {0x9B, 0xE0}, {0x9B, 0xDE}, {0x9B, 0xE4}, /* 0xC8-0xCB */ + {0x9B, 0xE6}, {0x9B, 0xE2}, {0x9B, 0xF0}, {0x9B, 0xD4}, /* 0xCC-0xCF */ + {0x9B, 0xD7}, {0x9B, 0xEC}, {0x9B, 0xDC}, {0x9B, 0xD9}, /* 0xD0-0xD3 */ + {0x9B, 0xE5}, {0x9B, 0xD5}, {0x9B, 0xE1}, {0x9B, 0xDA}, /* 0xD4-0xD7 */ + {0x9D, 0x77}, {0x9D, 0x81}, {0x9D, 0x8A}, {0x9D, 0x84}, /* 0xD8-0xDB */ + {0x9D, 0x88}, {0x9D, 0x71}, {0x9D, 0x80}, {0x9D, 0x78}, /* 0xDC-0xDF */ + {0x9D, 0x86}, {0x9D, 0x8B}, {0x9D, 0x8C}, {0x9D, 0x7D}, /* 0xE0-0xE3 */ + {0x9D, 0x6B}, {0x9D, 0x74}, {0x9D, 0x75}, {0x9D, 0x70}, /* 0xE4-0xE7 */ + {0x9D, 0x69}, {0x9D, 0x85}, {0x9D, 0x73}, {0x9D, 0x7B}, /* 0xE8-0xEB */ + {0x9D, 0x82}, {0x9D, 0x6F}, {0x9D, 0x79}, {0x9D, 0x7F}, /* 0xEC-0xEF */ + {0x9D, 0x87}, {0x9D, 0x68}, {0x9E, 0x94}, {0x9E, 0x91}, /* 0xF0-0xF3 */ + {0x9E, 0xC0}, {0x9E, 0xFC}, {0x9F, 0x2D}, {0x9F, 0x40}, /* 0xF4-0xF7 */ + {0x9F, 0x41}, {0x9F, 0x4D}, {0x9F, 0x56}, {0x9F, 0x57}, /* 0xF8-0xFB */ + {0x9F, 0x58}, {0x53, 0x37}, {0x56, 0xB2}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F4[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x56, 0xB5}, {0x56, 0xB3}, {0x58, 0xE3}, {0x5B, 0x45}, /* 0x40-0x43 */ + {0x5D, 0xC6}, {0x5D, 0xC7}, {0x5E, 0xEE}, {0x5E, 0xEF}, /* 0x44-0x47 */ + {0x5F, 0xC0}, {0x5F, 0xC1}, {0x61, 0xF9}, {0x65, 0x17}, /* 0x48-0x4B */ + {0x65, 0x16}, {0x65, 0x15}, {0x65, 0x13}, {0x65, 0xDF}, /* 0x4C-0x4F */ + {0x66, 0xE8}, {0x66, 0xE3}, {0x66, 0xE4}, {0x6A, 0xF3}, /* 0x50-0x53 */ + {0x6A, 0xF0}, {0x6A, 0xEA}, {0x6A, 0xE8}, {0x6A, 0xF9}, /* 0x54-0x57 */ + {0x6A, 0xF1}, {0x6A, 0xEE}, {0x6A, 0xEF}, {0x70, 0x3C}, /* 0x58-0x5B */ + {0x70, 0x35}, {0x70, 0x2F}, {0x70, 0x37}, {0x70, 0x34}, /* 0x5C-0x5F */ + {0x70, 0x31}, {0x70, 0x42}, {0x70, 0x38}, {0x70, 0x3F}, /* 0x60-0x63 */ + {0x70, 0x3A}, {0x70, 0x39}, {0x70, 0x40}, {0x70, 0x3B}, /* 0x64-0x67 */ + {0x70, 0x33}, {0x70, 0x41}, {0x72, 0x13}, {0x72, 0x14}, /* 0x68-0x6B */ + {0x72, 0xA8}, {0x73, 0x7D}, {0x73, 0x7C}, {0x74, 0xBA}, /* 0x6C-0x6F */ + {0x76, 0xAB}, {0x76, 0xAA}, {0x76, 0xBE}, {0x76, 0xED}, /* 0x70-0x73 */ + {0x77, 0xCC}, {0x77, 0xCE}, {0x77, 0xCF}, {0x77, 0xCD}, /* 0x74-0x77 */ + {0x77, 0xF2}, {0x79, 0x25}, {0x79, 0x23}, {0x79, 0x27}, /* 0x78-0x7B */ + {0x79, 0x28}, {0x79, 0x24}, {0x79, 0x29}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x79, 0xB2}, {0x7A, 0x6E}, {0x7A, 0x6C}, /* 0xA0-0xA3 */ + {0x7A, 0x6D}, {0x7A, 0xF7}, {0x7C, 0x49}, {0x7C, 0x48}, /* 0xA4-0xA7 */ + {0x7C, 0x4A}, {0x7C, 0x47}, {0x7C, 0x45}, {0x7C, 0xEE}, /* 0xA8-0xAB */ + {0x7E, 0x7B}, {0x7E, 0x7E}, {0x7E, 0x81}, {0x7E, 0x80}, /* 0xAC-0xAF */ + {0x7F, 0xBA}, {0x7F, 0xFF}, {0x80, 0x79}, {0x81, 0xDB}, /* 0xB0-0xB3 */ + {0x81, 0xD9}, {0x82, 0x0B}, {0x82, 0x68}, {0x82, 0x69}, /* 0xB4-0xB7 */ + {0x86, 0x22}, {0x85, 0xFF}, {0x86, 0x01}, {0x85, 0xFE}, /* 0xB8-0xBB */ + {0x86, 0x1B}, {0x86, 0x00}, {0x85, 0xF6}, {0x86, 0x04}, /* 0xBC-0xBF */ + {0x86, 0x09}, {0x86, 0x05}, {0x86, 0x0C}, {0x85, 0xFD}, /* 0xC0-0xC3 */ + {0x88, 0x19}, {0x88, 0x10}, {0x88, 0x11}, {0x88, 0x17}, /* 0xC4-0xC7 */ + {0x88, 0x13}, {0x88, 0x16}, {0x89, 0x63}, {0x89, 0x66}, /* 0xC8-0xCB */ + {0x89, 0xB9}, {0x89, 0xF7}, {0x8B, 0x60}, {0x8B, 0x6A}, /* 0xCC-0xCF */ + {0x8B, 0x5D}, {0x8B, 0x68}, {0x8B, 0x63}, {0x8B, 0x65}, /* 0xD0-0xD3 */ + {0x8B, 0x67}, {0x8B, 0x6D}, {0x8D, 0xAE}, {0x8E, 0x86}, /* 0xD4-0xD7 */ + {0x8E, 0x88}, {0x8E, 0x84}, {0x8F, 0x59}, {0x8F, 0x56}, /* 0xD8-0xDB */ + {0x8F, 0x57}, {0x8F, 0x55}, {0x8F, 0x58}, {0x8F, 0x5A}, /* 0xDC-0xDF */ + {0x90, 0x8D}, {0x91, 0x43}, {0x91, 0x41}, {0x91, 0xB7}, /* 0xE0-0xE3 */ + {0x91, 0xB5}, {0x91, 0xB2}, {0x91, 0xB3}, {0x94, 0x0B}, /* 0xE4-0xE7 */ + {0x94, 0x13}, {0x93, 0xFB}, {0x94, 0x20}, {0x94, 0x0F}, /* 0xE8-0xEB */ + {0x94, 0x14}, {0x93, 0xFE}, {0x94, 0x15}, {0x94, 0x10}, /* 0xEC-0xEF */ + {0x94, 0x28}, {0x94, 0x19}, {0x94, 0x0D}, {0x93, 0xF5}, /* 0xF0-0xF3 */ + {0x94, 0x00}, {0x93, 0xF7}, {0x94, 0x07}, {0x94, 0x0E}, /* 0xF4-0xF7 */ + {0x94, 0x16}, {0x94, 0x12}, {0x93, 0xFA}, {0x94, 0x09}, /* 0xF8-0xFB */ + {0x93, 0xF8}, {0x94, 0x0A}, {0x93, 0xFF}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F5[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x93, 0xFC}, {0x94, 0x0C}, {0x93, 0xF6}, {0x94, 0x11}, /* 0x40-0x43 */ + {0x94, 0x06}, {0x95, 0xDE}, {0x95, 0xE0}, {0x95, 0xDF}, /* 0x44-0x47 */ + {0x97, 0x2E}, {0x97, 0x2F}, {0x97, 0xB9}, {0x97, 0xBB}, /* 0x48-0x4B */ + {0x97, 0xFD}, {0x97, 0xFE}, {0x98, 0x60}, {0x98, 0x62}, /* 0x4C-0x4F */ + {0x98, 0x63}, {0x98, 0x5F}, {0x98, 0xC1}, {0x98, 0xC2}, /* 0x50-0x53 */ + {0x99, 0x50}, {0x99, 0x4E}, {0x99, 0x59}, {0x99, 0x4C}, /* 0x54-0x57 */ + {0x99, 0x4B}, {0x99, 0x53}, {0x9A, 0x32}, {0x9A, 0x34}, /* 0x58-0x5B */ + {0x9A, 0x31}, {0x9A, 0x2C}, {0x9A, 0x2A}, {0x9A, 0x36}, /* 0x5C-0x5F */ + {0x9A, 0x29}, {0x9A, 0x2E}, {0x9A, 0x38}, {0x9A, 0x2D}, /* 0x60-0x63 */ + {0x9A, 0xC7}, {0x9A, 0xCA}, {0x9A, 0xC6}, {0x9B, 0x10}, /* 0x64-0x67 */ + {0x9B, 0x12}, {0x9B, 0x11}, {0x9C, 0x0B}, {0x9C, 0x08}, /* 0x68-0x6B */ + {0x9B, 0xF7}, {0x9C, 0x05}, {0x9C, 0x12}, {0x9B, 0xF8}, /* 0x6C-0x6F */ + {0x9C, 0x40}, {0x9C, 0x07}, {0x9C, 0x0E}, {0x9C, 0x06}, /* 0x70-0x73 */ + {0x9C, 0x17}, {0x9C, 0x14}, {0x9C, 0x09}, {0x9D, 0x9F}, /* 0x74-0x77 */ + {0x9D, 0x99}, {0x9D, 0xA4}, {0x9D, 0x9D}, {0x9D, 0x92}, /* 0x78-0x7B */ + {0x9D, 0x98}, {0x9D, 0x90}, {0x9D, 0x9B}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9D, 0xA0}, {0x9D, 0x94}, {0x9D, 0x9C}, /* 0xA0-0xA3 */ + {0x9D, 0xAA}, {0x9D, 0x97}, {0x9D, 0xA1}, {0x9D, 0x9A}, /* 0xA4-0xA7 */ + {0x9D, 0xA2}, {0x9D, 0xA8}, {0x9D, 0x9E}, {0x9D, 0xA3}, /* 0xA8-0xAB */ + {0x9D, 0xBF}, {0x9D, 0xA9}, {0x9D, 0x96}, {0x9D, 0xA6}, /* 0xAC-0xAF */ + {0x9D, 0xA7}, {0x9E, 0x99}, {0x9E, 0x9B}, {0x9E, 0x9A}, /* 0xB0-0xB3 */ + {0x9E, 0xE5}, {0x9E, 0xE4}, {0x9E, 0xE7}, {0x9E, 0xE6}, /* 0xB4-0xB7 */ + {0x9F, 0x30}, {0x9F, 0x2E}, {0x9F, 0x5B}, {0x9F, 0x60}, /* 0xB8-0xBB */ + {0x9F, 0x5E}, {0x9F, 0x5D}, {0x9F, 0x59}, {0x9F, 0x91}, /* 0xBC-0xBF */ + {0x51, 0x3A}, {0x51, 0x39}, {0x52, 0x98}, {0x52, 0x97}, /* 0xC0-0xC3 */ + {0x56, 0xC3}, {0x56, 0xBD}, {0x56, 0xBE}, {0x5B, 0x48}, /* 0xC4-0xC7 */ + {0x5B, 0x47}, {0x5D, 0xCB}, {0x5D, 0xCF}, {0x5E, 0xF1}, /* 0xC8-0xCB */ + {0x61, 0xFD}, {0x65, 0x1B}, {0x6B, 0x02}, {0x6A, 0xFC}, /* 0xCC-0xCF */ + {0x6B, 0x03}, {0x6A, 0xF8}, {0x6B, 0x00}, {0x70, 0x43}, /* 0xD0-0xD3 */ + {0x70, 0x44}, {0x70, 0x4A}, {0x70, 0x48}, {0x70, 0x49}, /* 0xD4-0xD7 */ + {0x70, 0x45}, {0x70, 0x46}, {0x72, 0x1D}, {0x72, 0x1A}, /* 0xD8-0xDB */ + {0x72, 0x19}, {0x73, 0x7E}, {0x75, 0x17}, {0x76, 0x6A}, /* 0xDC-0xDF */ + {0x77, 0xD0}, {0x79, 0x2D}, {0x79, 0x31}, {0x79, 0x2F}, /* 0xE0-0xE3 */ + {0x7C, 0x54}, {0x7C, 0x53}, {0x7C, 0xF2}, {0x7E, 0x8A}, /* 0xE4-0xE7 */ + {0x7E, 0x87}, {0x7E, 0x88}, {0x7E, 0x8B}, {0x7E, 0x86}, /* 0xE8-0xEB */ + {0x7E, 0x8D}, {0x7F, 0x4D}, {0x7F, 0xBB}, {0x80, 0x30}, /* 0xEC-0xEF */ + {0x81, 0xDD}, {0x86, 0x18}, {0x86, 0x2A}, {0x86, 0x26}, /* 0xF0-0xF3 */ + {0x86, 0x1F}, {0x86, 0x23}, {0x86, 0x1C}, {0x86, 0x19}, /* 0xF4-0xF7 */ + {0x86, 0x27}, {0x86, 0x2E}, {0x86, 0x21}, {0x86, 0x20}, /* 0xF8-0xFB */ + {0x86, 0x29}, {0x86, 0x1E}, {0x86, 0x25}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F6[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x88, 0x29}, {0x88, 0x1D}, {0x88, 0x1B}, {0x88, 0x20}, /* 0x40-0x43 */ + {0x88, 0x24}, {0x88, 0x1C}, {0x88, 0x2B}, {0x88, 0x4A}, /* 0x44-0x47 */ + {0x89, 0x6D}, {0x89, 0x69}, {0x89, 0x6E}, {0x89, 0x6B}, /* 0x48-0x4B */ + {0x89, 0xFA}, {0x8B, 0x79}, {0x8B, 0x78}, {0x8B, 0x45}, /* 0x4C-0x4F */ + {0x8B, 0x7A}, {0x8B, 0x7B}, {0x8D, 0x10}, {0x8D, 0x14}, /* 0x50-0x53 */ + {0x8D, 0xAF}, {0x8E, 0x8E}, {0x8E, 0x8C}, {0x8F, 0x5E}, /* 0x54-0x57 */ + {0x8F, 0x5B}, {0x8F, 0x5D}, {0x91, 0x46}, {0x91, 0x44}, /* 0x58-0x5B */ + {0x91, 0x45}, {0x91, 0xB9}, {0x94, 0x3F}, {0x94, 0x3B}, /* 0x5C-0x5F */ + {0x94, 0x36}, {0x94, 0x29}, {0x94, 0x3D}, {0x94, 0x3C}, /* 0x60-0x63 */ + {0x94, 0x30}, {0x94, 0x39}, {0x94, 0x2A}, {0x94, 0x37}, /* 0x64-0x67 */ + {0x94, 0x2C}, {0x94, 0x40}, {0x94, 0x31}, {0x95, 0xE5}, /* 0x68-0x6B */ + {0x95, 0xE4}, {0x95, 0xE3}, {0x97, 0x35}, {0x97, 0x3A}, /* 0x6C-0x6F */ + {0x97, 0xBF}, {0x97, 0xE1}, {0x98, 0x64}, {0x98, 0xC9}, /* 0x70-0x73 */ + {0x98, 0xC6}, {0x98, 0xC0}, {0x99, 0x58}, {0x99, 0x56}, /* 0x74-0x77 */ + {0x9A, 0x39}, {0x9A, 0x3D}, {0x9A, 0x46}, {0x9A, 0x44}, /* 0x78-0x7B */ + {0x9A, 0x42}, {0x9A, 0x41}, {0x9A, 0x3A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9A, 0x3F}, {0x9A, 0xCD}, {0x9B, 0x15}, /* 0xA0-0xA3 */ + {0x9B, 0x17}, {0x9B, 0x18}, {0x9B, 0x16}, {0x9B, 0x3A}, /* 0xA4-0xA7 */ + {0x9B, 0x52}, {0x9C, 0x2B}, {0x9C, 0x1D}, {0x9C, 0x1C}, /* 0xA8-0xAB */ + {0x9C, 0x2C}, {0x9C, 0x23}, {0x9C, 0x28}, {0x9C, 0x29}, /* 0xAC-0xAF */ + {0x9C, 0x24}, {0x9C, 0x21}, {0x9D, 0xB7}, {0x9D, 0xB6}, /* 0xB0-0xB3 */ + {0x9D, 0xBC}, {0x9D, 0xC1}, {0x9D, 0xC7}, {0x9D, 0xCA}, /* 0xB4-0xB7 */ + {0x9D, 0xCF}, {0x9D, 0xBE}, {0x9D, 0xC5}, {0x9D, 0xC3}, /* 0xB8-0xBB */ + {0x9D, 0xBB}, {0x9D, 0xB5}, {0x9D, 0xCE}, {0x9D, 0xB9}, /* 0xBC-0xBF */ + {0x9D, 0xBA}, {0x9D, 0xAC}, {0x9D, 0xC8}, {0x9D, 0xB1}, /* 0xC0-0xC3 */ + {0x9D, 0xAD}, {0x9D, 0xCC}, {0x9D, 0xB3}, {0x9D, 0xCD}, /* 0xC4-0xC7 */ + {0x9D, 0xB2}, {0x9E, 0x7A}, {0x9E, 0x9C}, {0x9E, 0xEB}, /* 0xC8-0xCB */ + {0x9E, 0xEE}, {0x9E, 0xED}, {0x9F, 0x1B}, {0x9F, 0x18}, /* 0xCC-0xCF */ + {0x9F, 0x1A}, {0x9F, 0x31}, {0x9F, 0x4E}, {0x9F, 0x65}, /* 0xD0-0xD3 */ + {0x9F, 0x64}, {0x9F, 0x92}, {0x4E, 0xB9}, {0x56, 0xC6}, /* 0xD4-0xD7 */ + {0x56, 0xC5}, {0x56, 0xCB}, {0x59, 0x71}, {0x5B, 0x4B}, /* 0xD8-0xDB */ + {0x5B, 0x4C}, {0x5D, 0xD5}, {0x5D, 0xD1}, {0x5E, 0xF2}, /* 0xDC-0xDF */ + {0x65, 0x21}, {0x65, 0x20}, {0x65, 0x26}, {0x65, 0x22}, /* 0xE0-0xE3 */ + {0x6B, 0x0B}, {0x6B, 0x08}, {0x6B, 0x09}, {0x6C, 0x0D}, /* 0xE4-0xE7 */ + {0x70, 0x55}, {0x70, 0x56}, {0x70, 0x57}, {0x70, 0x52}, /* 0xE8-0xEB */ + {0x72, 0x1E}, {0x72, 0x1F}, {0x72, 0xA9}, {0x73, 0x7F}, /* 0xEC-0xEF */ + {0x74, 0xD8}, {0x74, 0xD5}, {0x74, 0xD9}, {0x74, 0xD7}, /* 0xF0-0xF3 */ + {0x76, 0x6D}, {0x76, 0xAD}, {0x79, 0x35}, {0x79, 0xB4}, /* 0xF4-0xF7 */ + {0x7A, 0x70}, {0x7A, 0x71}, {0x7C, 0x57}, {0x7C, 0x5C}, /* 0xF8-0xFB */ + {0x7C, 0x59}, {0x7C, 0x5B}, {0x7C, 0x5A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F7[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7C, 0xF4}, {0x7C, 0xF1}, {0x7E, 0x91}, {0x7F, 0x4F}, /* 0x40-0x43 */ + {0x7F, 0x87}, {0x81, 0xDE}, {0x82, 0x6B}, {0x86, 0x34}, /* 0x44-0x47 */ + {0x86, 0x35}, {0x86, 0x33}, {0x86, 0x2C}, {0x86, 0x32}, /* 0x48-0x4B */ + {0x86, 0x36}, {0x88, 0x2C}, {0x88, 0x28}, {0x88, 0x26}, /* 0x4C-0x4F */ + {0x88, 0x2A}, {0x88, 0x25}, {0x89, 0x71}, {0x89, 0xBF}, /* 0x50-0x53 */ + {0x89, 0xBE}, {0x89, 0xFB}, {0x8B, 0x7E}, {0x8B, 0x84}, /* 0x54-0x57 */ + {0x8B, 0x82}, {0x8B, 0x86}, {0x8B, 0x85}, {0x8B, 0x7F}, /* 0x58-0x5B */ + {0x8D, 0x15}, {0x8E, 0x95}, {0x8E, 0x94}, {0x8E, 0x9A}, /* 0x5C-0x5F */ + {0x8E, 0x92}, {0x8E, 0x90}, {0x8E, 0x96}, {0x8E, 0x97}, /* 0x60-0x63 */ + {0x8F, 0x60}, {0x8F, 0x62}, {0x91, 0x47}, {0x94, 0x4C}, /* 0x64-0x67 */ + {0x94, 0x50}, {0x94, 0x4A}, {0x94, 0x4B}, {0x94, 0x4F}, /* 0x68-0x6B */ + {0x94, 0x47}, {0x94, 0x45}, {0x94, 0x48}, {0x94, 0x49}, /* 0x6C-0x6F */ + {0x94, 0x46}, {0x97, 0x3F}, {0x97, 0xE3}, {0x98, 0x6A}, /* 0x70-0x73 */ + {0x98, 0x69}, {0x98, 0xCB}, {0x99, 0x54}, {0x99, 0x5B}, /* 0x74-0x77 */ + {0x9A, 0x4E}, {0x9A, 0x53}, {0x9A, 0x54}, {0x9A, 0x4C}, /* 0x78-0x7B */ + {0x9A, 0x4F}, {0x9A, 0x48}, {0x9A, 0x4A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9A, 0x49}, {0x9A, 0x52}, {0x9A, 0x50}, /* 0xA0-0xA3 */ + {0x9A, 0xD0}, {0x9B, 0x19}, {0x9B, 0x2B}, {0x9B, 0x3B}, /* 0xA4-0xA7 */ + {0x9B, 0x56}, {0x9B, 0x55}, {0x9C, 0x46}, {0x9C, 0x48}, /* 0xA8-0xAB */ + {0x9C, 0x3F}, {0x9C, 0x44}, {0x9C, 0x39}, {0x9C, 0x33}, /* 0xAC-0xAF */ + {0x9C, 0x41}, {0x9C, 0x3C}, {0x9C, 0x37}, {0x9C, 0x34}, /* 0xB0-0xB3 */ + {0x9C, 0x32}, {0x9C, 0x3D}, {0x9C, 0x36}, {0x9D, 0xDB}, /* 0xB4-0xB7 */ + {0x9D, 0xD2}, {0x9D, 0xDE}, {0x9D, 0xDA}, {0x9D, 0xCB}, /* 0xB8-0xBB */ + {0x9D, 0xD0}, {0x9D, 0xDC}, {0x9D, 0xD1}, {0x9D, 0xDF}, /* 0xBC-0xBF */ + {0x9D, 0xE9}, {0x9D, 0xD9}, {0x9D, 0xD8}, {0x9D, 0xD6}, /* 0xC0-0xC3 */ + {0x9D, 0xF5}, {0x9D, 0xD5}, {0x9D, 0xDD}, {0x9E, 0xB6}, /* 0xC4-0xC7 */ + {0x9E, 0xF0}, {0x9F, 0x35}, {0x9F, 0x33}, {0x9F, 0x32}, /* 0xC8-0xCB */ + {0x9F, 0x42}, {0x9F, 0x6B}, {0x9F, 0x95}, {0x9F, 0xA2}, /* 0xCC-0xCF */ + {0x51, 0x3D}, {0x52, 0x99}, {0x58, 0xE8}, {0x58, 0xE7}, /* 0xD0-0xD3 */ + {0x59, 0x72}, {0x5B, 0x4D}, {0x5D, 0xD8}, {0x88, 0x2F}, /* 0xD4-0xD7 */ + {0x5F, 0x4F}, {0x62, 0x01}, {0x62, 0x03}, {0x62, 0x04}, /* 0xD8-0xDB */ + {0x65, 0x29}, {0x65, 0x25}, {0x65, 0x96}, {0x66, 0xEB}, /* 0xDC-0xDF */ + {0x6B, 0x11}, {0x6B, 0x12}, {0x6B, 0x0F}, {0x6B, 0xCA}, /* 0xE0-0xE3 */ + {0x70, 0x5B}, {0x70, 0x5A}, {0x72, 0x22}, {0x73, 0x82}, /* 0xE4-0xE7 */ + {0x73, 0x81}, {0x73, 0x83}, {0x76, 0x70}, {0x77, 0xD4}, /* 0xE8-0xEB */ + {0x7C, 0x67}, {0x7C, 0x66}, {0x7E, 0x95}, {0x82, 0x6C}, /* 0xEC-0xEF */ + {0x86, 0x3A}, {0x86, 0x40}, {0x86, 0x39}, {0x86, 0x3C}, /* 0xF0-0xF3 */ + {0x86, 0x31}, {0x86, 0x3B}, {0x86, 0x3E}, {0x88, 0x30}, /* 0xF4-0xF7 */ + {0x88, 0x32}, {0x88, 0x2E}, {0x88, 0x33}, {0x89, 0x76}, /* 0xF8-0xFB */ + {0x89, 0x74}, {0x89, 0x73}, {0x89, 0xFE}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F8[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x8B, 0x8C}, {0x8B, 0x8E}, {0x8B, 0x8B}, {0x8B, 0x88}, /* 0x40-0x43 */ + {0x8C, 0x45}, {0x8D, 0x19}, {0x8E, 0x98}, {0x8F, 0x64}, /* 0x44-0x47 */ + {0x8F, 0x63}, {0x91, 0xBC}, {0x94, 0x62}, {0x94, 0x55}, /* 0x48-0x4B */ + {0x94, 0x5D}, {0x94, 0x57}, {0x94, 0x5E}, {0x97, 0xC4}, /* 0x4C-0x4F */ + {0x97, 0xC5}, {0x98, 0x00}, {0x9A, 0x56}, {0x9A, 0x59}, /* 0x50-0x53 */ + {0x9B, 0x1E}, {0x9B, 0x1F}, {0x9B, 0x20}, {0x9C, 0x52}, /* 0x54-0x57 */ + {0x9C, 0x58}, {0x9C, 0x50}, {0x9C, 0x4A}, {0x9C, 0x4D}, /* 0x58-0x5B */ + {0x9C, 0x4B}, {0x9C, 0x55}, {0x9C, 0x59}, {0x9C, 0x4C}, /* 0x5C-0x5F */ + {0x9C, 0x4E}, {0x9D, 0xFB}, {0x9D, 0xF7}, {0x9D, 0xEF}, /* 0x60-0x63 */ + {0x9D, 0xE3}, {0x9D, 0xEB}, {0x9D, 0xF8}, {0x9D, 0xE4}, /* 0x64-0x67 */ + {0x9D, 0xF6}, {0x9D, 0xE1}, {0x9D, 0xEE}, {0x9D, 0xE6}, /* 0x68-0x6B */ + {0x9D, 0xF2}, {0x9D, 0xF0}, {0x9D, 0xE2}, {0x9D, 0xEC}, /* 0x6C-0x6F */ + {0x9D, 0xF4}, {0x9D, 0xF3}, {0x9D, 0xE8}, {0x9D, 0xED}, /* 0x70-0x73 */ + {0x9E, 0xC2}, {0x9E, 0xD0}, {0x9E, 0xF2}, {0x9E, 0xF3}, /* 0x74-0x77 */ + {0x9F, 0x06}, {0x9F, 0x1C}, {0x9F, 0x38}, {0x9F, 0x37}, /* 0x78-0x7B */ + {0x9F, 0x36}, {0x9F, 0x43}, {0x9F, 0x4F}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9F, 0x71}, {0x9F, 0x70}, {0x9F, 0x6E}, /* 0xA0-0xA3 */ + {0x9F, 0x6F}, {0x56, 0xD3}, {0x56, 0xCD}, {0x5B, 0x4E}, /* 0xA4-0xA7 */ + {0x5C, 0x6D}, {0x65, 0x2D}, {0x66, 0xED}, {0x66, 0xEE}, /* 0xA8-0xAB */ + {0x6B, 0x13}, {0x70, 0x5F}, {0x70, 0x61}, {0x70, 0x5D}, /* 0xAC-0xAF */ + {0x70, 0x60}, {0x72, 0x23}, {0x74, 0xDB}, {0x74, 0xE5}, /* 0xB0-0xB3 */ + {0x77, 0xD5}, {0x79, 0x38}, {0x79, 0xB7}, {0x79, 0xB6}, /* 0xB4-0xB7 */ + {0x7C, 0x6A}, {0x7E, 0x97}, {0x7F, 0x89}, {0x82, 0x6D}, /* 0xB8-0xBB */ + {0x86, 0x43}, {0x88, 0x38}, {0x88, 0x37}, {0x88, 0x35}, /* 0xBC-0xBF */ + {0x88, 0x4B}, {0x8B, 0x94}, {0x8B, 0x95}, {0x8E, 0x9E}, /* 0xC0-0xC3 */ + {0x8E, 0x9F}, {0x8E, 0xA0}, {0x8E, 0x9D}, {0x91, 0xBE}, /* 0xC4-0xC7 */ + {0x91, 0xBD}, {0x91, 0xC2}, {0x94, 0x6B}, {0x94, 0x68}, /* 0xC8-0xCB */ + {0x94, 0x69}, {0x96, 0xE5}, {0x97, 0x46}, {0x97, 0x43}, /* 0xCC-0xCF */ + {0x97, 0x47}, {0x97, 0xC7}, {0x97, 0xE5}, {0x9A, 0x5E}, /* 0xD0-0xD3 */ + {0x9A, 0xD5}, {0x9B, 0x59}, {0x9C, 0x63}, {0x9C, 0x67}, /* 0xD4-0xD7 */ + {0x9C, 0x66}, {0x9C, 0x62}, {0x9C, 0x5E}, {0x9C, 0x60}, /* 0xD8-0xDB */ + {0x9E, 0x02}, {0x9D, 0xFE}, {0x9E, 0x07}, {0x9E, 0x03}, /* 0xDC-0xDF */ + {0x9E, 0x06}, {0x9E, 0x05}, {0x9E, 0x00}, {0x9E, 0x01}, /* 0xE0-0xE3 */ + {0x9E, 0x09}, {0x9D, 0xFF}, {0x9D, 0xFD}, {0x9E, 0x04}, /* 0xE4-0xE7 */ + {0x9E, 0xA0}, {0x9F, 0x1E}, {0x9F, 0x46}, {0x9F, 0x74}, /* 0xE8-0xEB */ + {0x9F, 0x75}, {0x9F, 0x76}, {0x56, 0xD4}, {0x65, 0x2E}, /* 0xEC-0xEF */ + {0x65, 0xB8}, {0x6B, 0x18}, {0x6B, 0x19}, {0x6B, 0x17}, /* 0xF0-0xF3 */ + {0x6B, 0x1A}, {0x70, 0x62}, {0x72, 0x26}, {0x72, 0xAA}, /* 0xF4-0xF7 */ + {0x77, 0xD8}, {0x77, 0xD9}, {0x79, 0x39}, {0x7C, 0x69}, /* 0xF8-0xFB */ + {0x7C, 0x6B}, {0x7C, 0xF6}, {0x7E, 0x9A}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode c2u_F9[256] = { + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x00-0x03 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x04-0x07 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x08-0x0B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x0C-0x0F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x10-0x13 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x14-0x17 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x18-0x1B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x1C-0x1F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x20-0x23 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x24-0x27 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x28-0x2B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x2C-0x2F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x30-0x33 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x34-0x37 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x38-0x3B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x3C-0x3F */ + {0x7E, 0x98}, {0x7E, 0x9B}, {0x7E, 0x99}, {0x81, 0xE0}, /* 0x40-0x43 */ + {0x81, 0xE1}, {0x86, 0x46}, {0x86, 0x47}, {0x86, 0x48}, /* 0x44-0x47 */ + {0x89, 0x79}, {0x89, 0x7A}, {0x89, 0x7C}, {0x89, 0x7B}, /* 0x48-0x4B */ + {0x89, 0xFF}, {0x8B, 0x98}, {0x8B, 0x99}, {0x8E, 0xA5}, /* 0x4C-0x4F */ + {0x8E, 0xA4}, {0x8E, 0xA3}, {0x94, 0x6E}, {0x94, 0x6D}, /* 0x50-0x53 */ + {0x94, 0x6F}, {0x94, 0x71}, {0x94, 0x73}, {0x97, 0x49}, /* 0x54-0x57 */ + {0x98, 0x72}, {0x99, 0x5F}, {0x9C, 0x68}, {0x9C, 0x6E}, /* 0x58-0x5B */ + {0x9C, 0x6D}, {0x9E, 0x0B}, {0x9E, 0x0D}, {0x9E, 0x10}, /* 0x5C-0x5F */ + {0x9E, 0x0F}, {0x9E, 0x12}, {0x9E, 0x11}, {0x9E, 0xA1}, /* 0x60-0x63 */ + {0x9E, 0xF5}, {0x9F, 0x09}, {0x9F, 0x47}, {0x9F, 0x78}, /* 0x64-0x67 */ + {0x9F, 0x7B}, {0x9F, 0x7A}, {0x9F, 0x79}, {0x57, 0x1E}, /* 0x68-0x6B */ + {0x70, 0x66}, {0x7C, 0x6F}, {0x88, 0x3C}, {0x8D, 0xB2}, /* 0x6C-0x6F */ + {0x8E, 0xA6}, {0x91, 0xC3}, {0x94, 0x74}, {0x94, 0x78}, /* 0x70-0x73 */ + {0x94, 0x76}, {0x94, 0x75}, {0x9A, 0x60}, {0x9C, 0x74}, /* 0x74-0x77 */ + {0x9C, 0x73}, {0x9C, 0x71}, {0x9C, 0x75}, {0x9E, 0x14}, /* 0x78-0x7B */ + {0x9E, 0x13}, {0x9E, 0xF6}, {0x9F, 0x0A}, {0x00, 0x3F}, /* 0x7C-0x7F */ + + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x80-0x83 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x84-0x87 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x88-0x8B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x8C-0x8F */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x90-0x93 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x94-0x97 */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x98-0x9B */ + {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, {0x00, 0x3F}, /* 0x9C-0x9F */ + {0x00, 0x3F}, {0x9F, 0xA4}, {0x70, 0x68}, {0x70, 0x65}, /* 0xA0-0xA3 */ + {0x7C, 0xF7}, {0x86, 0x6A}, {0x88, 0x3E}, {0x88, 0x3D}, /* 0xA4-0xA7 */ + {0x88, 0x3F}, {0x8B, 0x9E}, {0x8C, 0x9C}, {0x8E, 0xA9}, /* 0xA8-0xAB */ + {0x8E, 0xC9}, {0x97, 0x4B}, {0x98, 0x73}, {0x98, 0x74}, /* 0xAC-0xAF */ + {0x98, 0xCC}, {0x99, 0x61}, {0x99, 0xAB}, {0x9A, 0x64}, /* 0xB0-0xB3 */ + {0x9A, 0x66}, {0x9A, 0x67}, {0x9B, 0x24}, {0x9E, 0x15}, /* 0xB4-0xB7 */ + {0x9E, 0x17}, {0x9F, 0x48}, {0x62, 0x07}, {0x6B, 0x1E}, /* 0xB8-0xBB */ + {0x72, 0x27}, {0x86, 0x4C}, {0x8E, 0xA8}, {0x94, 0x82}, /* 0xBC-0xBF */ + {0x94, 0x80}, {0x94, 0x81}, {0x9A, 0x69}, {0x9A, 0x68}, /* 0xC0-0xC3 */ + {0x9B, 0x2E}, {0x9E, 0x19}, {0x72, 0x29}, {0x86, 0x4B}, /* 0xC4-0xC7 */ + {0x8B, 0x9F}, {0x94, 0x83}, {0x9C, 0x79}, {0x9E, 0xB7}, /* 0xC8-0xCB */ + {0x76, 0x75}, {0x9A, 0x6B}, {0x9C, 0x7A}, {0x9E, 0x1D}, /* 0xCC-0xCF */ + {0x70, 0x69}, {0x70, 0x6A}, {0x9E, 0xA4}, {0x9F, 0x7E}, /* 0xD0-0xD3 */ + {0x9F, 0x49}, {0x9F, 0x98}, {0x78, 0x81}, {0x92, 0xB9}, /* 0xD4-0xD7 */ + {0x88, 0xCF}, {0x58, 0xBB}, {0x60, 0x52}, {0x7C, 0xA7}, /* 0xD8-0xDB */ + {0x5A, 0xFA}, {0x25, 0x54}, {0x25, 0x66}, {0x25, 0x57}, /* 0xDC-0xDF */ + {0x25, 0x60}, {0x25, 0x6C}, {0x25, 0x63}, {0x25, 0x5A}, /* 0xE0-0xE3 */ + {0x25, 0x69}, {0x25, 0x5D}, {0x25, 0x52}, {0x25, 0x64}, /* 0xE4-0xE7 */ + {0x25, 0x55}, {0x25, 0x5E}, {0x25, 0x6A}, {0x25, 0x61}, /* 0xE8-0xEB */ + {0x25, 0x58}, {0x25, 0x67}, {0x25, 0x5B}, {0x25, 0x53}, /* 0xEC-0xEF */ + {0x25, 0x65}, {0x25, 0x56}, {0x25, 0x5F}, {0x25, 0x6B}, /* 0xF0-0xF3 */ + {0x25, 0x62}, {0x25, 0x59}, {0x25, 0x68}, {0x25, 0x5C}, /* 0xF4-0xF7 */ + {0x25, 0x51}, {0x25, 0x50}, {0x25, 0x6D}, {0x25, 0x6E}, /* 0xF8-0xFB */ + {0x25, 0x70}, {0x25, 0x6F}, {0x25, 0x93}, {0x00, 0x3F}, /* 0xFC-0xFF */ +}; + +static struct nls_unicode *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_A1, c2u_A2, c2u_A3, c2u_A4, c2u_A5, c2u_A6, c2u_A7, + c2u_A8, c2u_A9, c2u_AA, c2u_AB, c2u_AC, c2u_AD, c2u_AE, c2u_AF, + c2u_B0, c2u_B1, c2u_B2, c2u_B3, c2u_B4, c2u_B5, c2u_B6, c2u_B7, + c2u_B8, c2u_B9, c2u_BA, c2u_BB, c2u_BC, c2u_BD, c2u_BE, c2u_BF, + c2u_C0, c2u_C1, c2u_C2, c2u_C3, c2u_C4, c2u_C5, c2u_C6, NULL, + NULL, c2u_C9, c2u_CA, c2u_CB, c2u_CC, c2u_CD, c2u_CE, c2u_CF, + c2u_D0, c2u_D1, c2u_D2, c2u_D3, c2u_D4, c2u_D5, c2u_D6, c2u_D7, + c2u_D8, c2u_D9, c2u_DA, c2u_DB, c2u_DC, c2u_DD, c2u_DE, c2u_DF, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, c2u_EB, c2u_EC, c2u_ED, c2u_EE, c2u_EF, + c2u_F0, c2u_F1, c2u_F2, c2u_F3, c2u_F4, c2u_F5, c2u_F6, c2u_F7, + c2u_F8, c2u_F9, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char u2c_02[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA3, 0xBE, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xA3, 0xBC, 0xA3, 0xBD, 0xA3, 0xBF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xA1, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xA3, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_03[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xA3, 0x44, 0xA3, 0x45, 0xA3, 0x46, /* 0x90-0x93 */ + 0xA3, 0x47, 0xA3, 0x48, 0xA3, 0x49, 0xA3, 0x4A, /* 0x94-0x97 */ + 0xA3, 0x4B, 0xA3, 0x4C, 0xA3, 0x4D, 0xA3, 0x4E, /* 0x98-0x9B */ + 0xA3, 0x4F, 0xA3, 0x50, 0xA3, 0x51, 0xA3, 0x52, /* 0x9C-0x9F */ + 0xA3, 0x53, 0xA3, 0x54, 0x3F, 0x3F, 0xA3, 0x55, /* 0xA0-0xA3 */ + 0xA3, 0x56, 0xA3, 0x57, 0xA3, 0x58, 0xA3, 0x59, /* 0xA4-0xA7 */ + 0xA3, 0x5A, 0xA3, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xA3, 0x5C, 0xA3, 0x5D, 0xA3, 0x5E, /* 0xB0-0xB3 */ + 0xA3, 0x5F, 0xA3, 0x60, 0xA3, 0x61, 0xA3, 0x62, /* 0xB4-0xB7 */ + 0xA3, 0x63, 0xA3, 0x64, 0xA3, 0x65, 0xA3, 0x66, /* 0xB8-0xBB */ + 0xA3, 0x67, 0xA3, 0x68, 0xA3, 0x69, 0xA3, 0x6A, /* 0xBC-0xBF */ + 0xA3, 0x6B, 0xA3, 0x6C, 0x3F, 0x3F, 0xA3, 0x6D, /* 0xC0-0xC3 */ + 0xA3, 0x6E, 0xA3, 0x6F, 0xA3, 0x70, 0xA3, 0x71, /* 0xC4-0xC7 */ + 0xA3, 0x72, 0xA3, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_20[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0x56, /* 0x10-0x13 */ + 0xA1, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xA1, 0xA5, 0xA1, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xA1, 0xA7, 0xA1, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xA1, 0x4C, 0xA1, 0x4B, 0xA1, 0x45, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xAC, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xA1, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xB0, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_21[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0x4A, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA1, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xA2, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA2, 0xB9, 0xA2, 0xBA, 0xA2, 0xBB, 0xA2, 0xBC, /* 0x60-0x63 */ + 0xA2, 0xBD, 0xA2, 0xBE, 0xA2, 0xBF, 0xA2, 0xC0, /* 0x64-0x67 */ + 0xA2, 0xC1, 0xA2, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xA1, 0xF6, 0xA1, 0xF4, 0xA1, 0xF7, 0xA1, 0xF5, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xF8, 0xA1, 0xF9, /* 0x94-0x97 */ + 0xA1, 0xFB, 0xA1, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_22[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xA2, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD4, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xDB, 0xA1, 0xE8, /* 0x1C-0x1F */ + 0xA1, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xFD, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xA1, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xA1, 0xE4, 0xA1, 0xE5, 0xA1, 0xEC, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xED, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xA1, 0xEF, 0xA1, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xDC, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA1, 0xDA, 0xA1, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xD8, 0xA1, 0xD9, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xA1, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xA1, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xA1, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xE9, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_25[512] = { + 0xA2, 0x77, 0x3F, 0x3F, 0xA2, 0x78, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xA2, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xA2, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xA2, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xA2, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xA2, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xA2, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xA2, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xA2, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xA2, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF9, 0xF9, 0xF9, 0xF8, 0xF9, 0xE6, 0xF9, 0xEF, /* 0x50-0x53 */ + 0xF9, 0xDD, 0xF9, 0xE8, 0xF9, 0xF1, 0xF9, 0xDF, /* 0x54-0x57 */ + 0xF9, 0xEC, 0xF9, 0xF5, 0xF9, 0xE3, 0xF9, 0xEE, /* 0x58-0x5B */ + 0xF9, 0xF7, 0xF9, 0xE5, 0xF9, 0xE9, 0xF9, 0xF2, /* 0x5C-0x5F */ + 0xF9, 0xE0, 0xF9, 0xEB, 0xF9, 0xF4, 0xF9, 0xE2, /* 0x60-0x63 */ + 0xF9, 0xE7, 0xF9, 0xF0, 0xF9, 0xDE, 0xF9, 0xED, /* 0x64-0x67 */ + 0xF9, 0xF6, 0xF9, 0xE4, 0xF9, 0xEA, 0xF9, 0xF3, /* 0x68-0x6B */ + 0xF9, 0xE1, 0xF9, 0xFA, 0xF9, 0xFB, 0xF9, 0xFD, /* 0x6C-0x6F */ + 0xF9, 0xFC, 0xA2, 0xAC, 0xA2, 0xAD, 0xA2, 0xAE, /* 0x70-0x73 */ + 0xA1, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xA2, 0x62, 0xA2, 0x63, 0xA2, 0x64, /* 0x80-0x83 */ + 0xA2, 0x65, 0xA2, 0x66, 0xA2, 0x67, 0xA2, 0x68, /* 0x84-0x87 */ + 0xA2, 0x69, 0xA2, 0x70, 0xA2, 0x6F, 0xA2, 0x6E, /* 0x88-0x8B */ + 0xA2, 0x6D, 0xA2, 0x6C, 0xA2, 0x6B, 0xA2, 0x6A, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xFE, /* 0x90-0x93 */ + 0xA2, 0x76, 0xA2, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xA1, 0xBD, 0xA1, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xB6, 0xA1, 0xB5, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xA1, 0xBF, 0xA1, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xBB, 0xA1, 0xBA, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xB3, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xB7, 0xA1, 0xB4, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0xA8, 0xA2, 0xA9, /* 0xE0-0xE3 */ + 0xA2, 0xAB, 0xA2, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_26[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA1, 0xB9, 0xA1, 0xB8, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xA1, 0xF0, 0x3F, 0x3F, 0xA1, 0xF1, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_30[512] = { + 0xA1, 0x40, 0xA1, 0x42, 0xA1, 0x43, 0xA1, 0xB2, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xA1, 0x71, 0xA1, 0x72, 0xA1, 0x6D, 0xA1, 0x6E, /* 0x08-0x0B */ + 0xA1, 0x75, 0xA1, 0x76, 0xA1, 0x79, 0xA1, 0x7A, /* 0x0C-0x0F */ + 0xA1, 0x69, 0xA1, 0x6A, 0xA2, 0x45, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xA1, 0x65, 0xA1, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xA1, 0xA9, 0xA1, 0xAA, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xA2, 0xC3, 0xA2, 0xC4, 0xA2, 0xC5, /* 0x20-0x23 */ + 0xA2, 0xC6, 0xA2, 0xC7, 0xA2, 0xC8, 0xA2, 0xC9, /* 0x24-0x27 */ + 0xA2, 0xCA, 0xA2, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_31[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA3, 0x74, 0xA3, 0x75, 0xA3, 0x76, /* 0x04-0x07 */ + 0xA3, 0x77, 0xA3, 0x78, 0xA3, 0x79, 0xA3, 0x7A, /* 0x08-0x0B */ + 0xA3, 0x7B, 0xA3, 0x7C, 0xA3, 0x7D, 0xA3, 0x7E, /* 0x0C-0x0F */ + 0xA3, 0xA1, 0xA3, 0xA2, 0xA3, 0xA3, 0xA3, 0xA4, /* 0x10-0x13 */ + 0xA3, 0xA5, 0xA3, 0xA6, 0xA3, 0xA7, 0xA3, 0xA8, /* 0x14-0x17 */ + 0xA3, 0xA9, 0xA3, 0xAA, 0xA3, 0xAB, 0xA3, 0xAC, /* 0x18-0x1B */ + 0xA3, 0xAD, 0xA3, 0xAE, 0xA3, 0xAF, 0xA3, 0xB0, /* 0x1C-0x1F */ + 0xA3, 0xB1, 0xA3, 0xB2, 0xA3, 0xB3, 0xA3, 0xB4, /* 0x20-0x23 */ + 0xA3, 0xB5, 0xA3, 0xB6, 0xA3, 0xB7, 0xA3, 0xB8, /* 0x24-0x27 */ + 0xA3, 0xB9, 0xA3, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_32[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xC0, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_33[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0x55, 0xA2, 0x56, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xA2, 0x50, 0xA2, 0x51, 0xA2, 0x52, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xA2, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xA2, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA2, 0x53, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xA1, 0xEB, 0xA1, 0xEA, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xA2, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4E[512] = { + 0xA4, 0x40, 0xA4, 0x42, 0x3F, 0x3F, 0xA4, 0x43, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0x45, /* 0x04-0x07 */ + 0xA4, 0x56, 0xA4, 0x54, 0xA4, 0x57, 0xA4, 0x55, /* 0x08-0x0B */ + 0xC9, 0x46, 0xA4, 0xA3, 0xC9, 0x4F, 0xC9, 0x4D, /* 0x0C-0x0F */ + 0xA4, 0xA2, 0xA4, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xA5, 0x42, 0xA5, 0x41, 0xA5, 0x40, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xA5, 0x43, 0xA4, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0xE0, 0xA5, 0xE1, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xC3, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA4, 0x58, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xA4, 0xA4, 0xC9, 0x50, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xA4, 0xA5, 0xC9, 0x63, 0xA6, 0xEA, 0xCB, 0xB1, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xA4, 0x59, 0xA4, 0xA6, 0x3F, 0x3F, 0xA5, 0x44, /* 0x38-0x3B */ + 0xC9, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0x40, 0xA4, 0x44, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xA4, 0x5B, 0x3F, 0x3F, 0xC9, 0x47, /* 0x44-0x47 */ + 0xA4, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0xA4, 0xA7, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xA5, 0x45, 0xA5, 0x47, 0xA5, 0x46, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0xE2, 0xA5, 0xE3, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xC4, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xAD, 0xBC, 0xA4, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xC9, 0x41, 0xA4, 0x45, 0xA4, 0x5E, 0xA4, 0x5D, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xA5, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xC5, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xAE, 0xD4, 0x4B, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xC3, 0xDC, 0xB1, /* 0x80-0x83 */ + 0xDC, 0xB2, 0x3F, 0x3F, 0xA4, 0x46, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xA4, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xC6, /* 0x88-0x8B */ + 0xA4, 0x47, 0xC9, 0x48, 0xA4, 0x5F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xA4, 0xAA, 0xA4, 0xAC, 0xC9, 0x51, /* 0x90-0x93 */ + 0xA4, 0xAD, 0xA4, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xA5, 0xE5, 0x3F, 0x3F, 0xA8, 0xC7, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xC8, 0xAB, 0x45, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xA4, 0x60, 0xA4, 0xAE, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xA5, 0xE6, 0xA5, 0xE8, 0xA5, 0xE7, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xA6, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xC9, /* 0xA8-0xAB */ + 0xA8, 0xCA, 0xAB, 0x46, 0xAB, 0x47, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xBD, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xB3, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xF6, 0xD6, 0xA4, 0x48, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xA4, 0xB0, 0xA4, 0xAF, 0xC9, 0x52, 0xA4, 0xB1, /* 0xC0-0xC3 */ + 0xA4, 0xB7, 0x3F, 0x3F, 0xA4, 0xB2, 0xA4, 0xB3, /* 0xC4-0xC7 */ + 0xC9, 0x54, 0xC9, 0x53, 0xA4, 0xB5, 0xA4, 0xB6, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xA4, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xA5, 0x4A, 0xA5, 0x4B, 0xA5, 0x4C, 0xA5, 0x4D, /* 0xD4-0xD7 */ + 0xA5, 0x49, 0xA5, 0x50, 0xC9, 0x6A, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xC9, 0x66, 0xC9, 0x69, 0xA5, 0x51, 0xA5, 0x61, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xC9, 0x68, 0x3F, 0x3F, 0xA5, 0x4E, /* 0xE0-0xE3 */ + 0xA5, 0x4F, 0xA5, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xC9, 0x65, 0xC9, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xA5, 0xF5, 0xC9, 0xB0, 0xA5, 0xF2, 0xA5, 0xF6, /* 0xF0-0xF3 */ + 0xC9, 0xBA, 0xC9, 0xAE, 0xA5, 0xF3, 0xC9, 0xB2, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0xF4, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xA5, 0xF7, 0x3F, 0x3F, 0xA5, 0xE9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0xC9, 0xB1, 0xA5, 0xF8, 0xC9, 0xB5, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xC9, 0xB9, 0xC9, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xC9, 0xB3, 0xA5, 0xEA, 0xA5, 0xEC, 0xA5, 0xF9, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xA5, 0xEE, 0xC9, 0xAB, 0xA5, 0xF1, /* 0x0C-0x0F */ + 0xA5, 0xEF, 0xA5, 0xF0, 0xC9, 0xBB, 0xC9, 0xB8, /* 0x10-0x13 */ + 0xC9, 0xAF, 0xA5, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xC9, 0xAC, 0xA5, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xC9, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0xB7, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xC9, 0xAD, 0xCA, 0x66, 0x3F, 0x3F, 0xA7, 0x42, /* 0x2C-0x2F */ + 0xA6, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0x67, /* 0x30-0x33 */ + 0xA6, 0xF1, 0x3F, 0x3F, 0xA7, 0x44, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xA6, 0xF9, 0x3F, 0x3F, 0xA6, 0xF8, 0xCA, 0x5B, /* 0x38-0x3B */ + 0xA6, 0xFC, 0xA6, 0xF7, 0xCA, 0x60, 0xCA, 0x68, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xCA, 0x64, 0x3F, 0x3F, 0xA6, 0xFA, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0xFD, 0xA6, 0xEE, /* 0x44-0x47 */ + 0xA7, 0x47, 0xCA, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xCB, 0xBD, 0xA6, 0xEC, 0xA7, 0x43, 0xA6, 0xED, /* 0x4C-0x4F */ + 0xA6, 0xF5, 0xA6, 0xF6, 0xCA, 0x62, 0xCA, 0x5E, /* 0x50-0x53 */ + 0xA6, 0xFB, 0xA6, 0xF3, 0xCA, 0x5A, 0xA6, 0xEF, /* 0x54-0x57 */ + 0xCA, 0x65, 0xA7, 0x45, 0xA7, 0x48, 0xA6, 0xF2, /* 0x58-0x5B */ + 0xA7, 0x40, 0xA7, 0x46, 0xA6, 0xF0, 0xCA, 0x63, /* 0x5C-0x5F */ + 0xA7, 0x41, 0xCA, 0x69, 0xCA, 0x5C, 0xA6, 0xFE, /* 0x60-0x63 */ + 0xCA, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0x61, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xA8, 0xD8, 0xCB, 0xBF, 0xCB, 0xCB, /* 0x68-0x6B */ + 0xA8, 0xD0, 0x3F, 0x3F, 0xCB, 0xCC, 0xA8, 0xCB, /* 0x6C-0x6F */ + 0xA8, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xCE, /* 0x70-0x73 */ + 0xCB, 0xB9, 0xA8, 0xD6, 0xCB, 0xB8, 0xCB, 0xBC, /* 0x74-0x77 */ + 0xCB, 0xC3, 0xCB, 0xC1, 0xA8, 0xDE, 0xA8, 0xD9, /* 0x78-0x7B */ + 0xCB, 0xB3, 0xCB, 0xB5, 0xA8, 0xDB, 0xA8, 0xCF, /* 0x7C-0x7F */ + + 0xCB, 0xB6, 0xCB, 0xC2, 0xCB, 0xC9, 0xA8, 0xD4, /* 0x80-0x83 */ + 0xCB, 0xBB, 0xCB, 0xB4, 0xA8, 0xD3, 0xCB, 0xB7, /* 0x84-0x87 */ + 0xA8, 0xD7, 0xCB, 0xBA, 0x3F, 0x3F, 0xA8, 0xD2, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xA8, 0xCD, 0x3F, 0x3F, 0xA8, 0xDC, /* 0x8C-0x8F */ + 0xCB, 0xC4, 0xA8, 0xDD, 0xCB, 0xC8, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xCB, 0xC6, 0xCB, 0xCA, 0xA8, 0xDA, 0xCB, 0xBE, /* 0x94-0x97 */ + 0xCB, 0xB2, 0x3F, 0x3F, 0xCB, 0xC0, 0xA8, 0xD1, /* 0x98-0x9B */ + 0xCB, 0xC5, 0xA8, 0xCC, 0xCB, 0xC7, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x56, 0xAB, 0x4A, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xE0, 0xCD, 0xE8, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xAB, 0x49, 0xAB, 0x51, 0xAB, 0x5D, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xCD, 0xEE, 0xCD, 0xEC, 0xCD, 0xE7, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x4B, /* 0xBC-0xBF */ + 0xCD, 0xED, 0xCD, 0xE3, 0xAB, 0x59, 0xAB, 0x50, /* 0xC0-0xC3 */ + 0xAB, 0x58, 0xCD, 0xDE, 0x3F, 0x3F, 0xCD, 0xEA, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xCD, 0xE1, 0xAB, 0x54, 0xCD, 0xE2, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xCD, 0xDD, 0xAB, 0x5B, 0xAB, 0x4E, /* 0xCC-0xCF */ + 0xAB, 0x57, 0xAB, 0x4D, 0x3F, 0x3F, 0xCD, 0xDF, /* 0xD0-0xD3 */ + 0xCD, 0xE4, 0x3F, 0x3F, 0xCD, 0xEB, 0xAB, 0x55, /* 0xD4-0xD7 */ + 0xAB, 0x52, 0xCD, 0xE6, 0xAB, 0x5A, 0xCD, 0xE9, /* 0xD8-0xDB */ + 0xCD, 0xE5, 0xAB, 0x4F, 0xAB, 0x5C, 0xAB, 0x53, /* 0xDC-0xDF */ + 0xAB, 0x4C, 0xAB, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xCD, 0xEF, 0x3F, 0x3F, 0xAD, 0xD7, 0xAD, 0xC1, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xAD, 0xD1, 0x3F, 0x3F, 0xAD, 0xD6, /* 0xF0-0xF3 */ + 0xD0, 0xD0, 0xD0, 0xCF, 0xD0, 0xD4, 0xD0, 0xD5, /* 0xF4-0xF7 */ + 0xAD, 0xC4, 0x3F, 0x3F, 0xAD, 0xCD, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xDA, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0xAD, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xD0, 0xC9, 0xAD, 0xC7, 0xD0, 0xCA, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xAD, 0xDC, 0x3F, 0x3F, 0xAD, 0xD3, /* 0x08-0x0B */ + 0xAD, 0xBE, 0xAD, 0xBF, 0xD0, 0xDD, 0xB0, 0xBF, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xAD, 0xCC, 0xAD, 0xCB, 0xD0, 0xCB, /* 0x10-0x13 */ + 0xAD, 0xCF, 0xD4, 0x5B, 0xAD, 0xC6, 0xD0, 0xD6, /* 0x14-0x17 */ + 0xAD, 0xD5, 0xAD, 0xD4, 0xAD, 0xCA, 0xD0, 0xCE, /* 0x18-0x1B */ + 0xD0, 0xD7, 0x3F, 0x3F, 0xD0, 0xC8, 0xAD, 0xC9, /* 0x1C-0x1F */ + 0xD0, 0xD8, 0xAD, 0xD2, 0xD0, 0xCC, 0xAD, 0xC0, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xAD, 0xC3, 0xAD, 0xC2, 0xD0, 0xD9, /* 0x24-0x27 */ + 0xAD, 0xD0, 0xAD, 0xC5, 0xAD, 0xD9, 0xAD, 0xDB, /* 0x28-0x2B */ + 0xD0, 0xD3, 0xAD, 0xD8, 0x3F, 0x3F, 0xD0, 0xDB, /* 0x2C-0x2F */ + 0xD0, 0xCD, 0xD0, 0xDC, 0x3F, 0x3F, 0xD0, 0xD1, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xD0, 0xDA, 0x3F, 0x3F, 0xD0, 0xD2, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xAD, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xD4, 0x63, 0xD4, 0x57, 0x3F, 0x3F, 0xB0, 0xB3, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xD4, 0x5C, 0xD4, 0x62, 0xB0, 0xB2, /* 0x44-0x47 */ + 0xD4, 0x55, 0xB0, 0xB6, 0xD4, 0x59, 0xD4, 0x52, /* 0x48-0x4B */ + 0xB0, 0xB4, 0xD4, 0x56, 0xB0, 0xB9, 0xB0, 0xBE, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xD4, 0x67, 0x3F, 0x3F, 0xD4, 0x51, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xB0, 0xBA, 0x3F, 0x3F, 0xD4, 0x66, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xB5, 0xD4, 0x58, /* 0x58-0x5B */ + 0xB0, 0xB1, 0xD4, 0x53, 0xD4, 0x4F, 0xD4, 0x5D, /* 0x5C-0x5F */ + 0xD4, 0x50, 0xD4, 0x4E, 0xD4, 0x5A, 0xD4, 0x60, /* 0x60-0x63 */ + 0xD4, 0x61, 0xB0, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xD8, 0x5B, 0xD4, 0x5E, 0xD4, 0x4D, 0xD4, 0x5F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xB0, 0xC1, 0xD4, 0x64, 0xB0, 0xC0, /* 0x6C-0x6F */ + 0xD4, 0x4C, 0x3F, 0x3F, 0xD4, 0x54, 0xD4, 0x65, /* 0x70-0x73 */ + 0xB0, 0xBC, 0xB0, 0xBB, 0xB0, 0xB8, 0xB0, 0xBD, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xAF, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xB0, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xB3, 0xC8, 0x3F, 0x3F, 0xD8, 0x5E, 0xD8, 0x57, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xB3, 0xC5, 0x3F, 0x3F, 0xD8, 0x5F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0x55, /* 0x88-0x8B */ + 0xD8, 0x58, 0xB3, 0xC4, 0xD8, 0x59, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xB3, 0xC7, 0xD8, 0x5D, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xD8, 0x53, 0xD8, 0x52, 0xB3, 0xC9, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xB3, 0xCA, 0xB3, 0xC6, 0xB3, 0xCB, 0xD8, 0x51, /* 0x98-0x9B */ + 0xD8, 0x5C, 0xD8, 0x5A, 0xD8, 0x54, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xC3, 0xD8, 0x56, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xB6, 0xCA, 0xB6, 0xC4, 0xDC, 0xB7, 0xB6, 0xCD, /* 0xAC-0xAF */ + 0xDC, 0xBD, 0xDC, 0xC0, 0xB6, 0xC6, 0xB6, 0xC7, /* 0xB0-0xB3 */ + 0xDC, 0xBA, 0xB6, 0xC5, 0xDC, 0xC3, 0xB6, 0xCB, /* 0xB4-0xB7 */ + 0xDC, 0xC4, 0x3F, 0x3F, 0xDC, 0xBF, 0xB6, 0xCC, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xDC, 0xB4, 0xB6, 0xC9, 0xDC, 0xB5, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xDC, 0xBE, 0xDC, 0xBC, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xDC, 0xB8, 0xB6, 0xC8, 0xDC, 0xB6, 0xB6, 0xCE, /* 0xC4-0xC7 */ + 0xDC, 0xBB, 0xDC, 0xC2, 0xDC, 0xB9, 0xDC, 0xC1, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0xB6, 0xB9, 0xB3, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xB9, 0xB4, 0x3F, 0x3F, 0xE0, 0xF9, /* 0xD0-0xD3 */ + 0xE0, 0xF1, 0xB9, 0xB2, 0xB9, 0xAF, 0xE0, 0xF2, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0xB1, 0xE0, 0xF5, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xE0, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xE0, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xFD, /* 0xE0-0xE3 */ + 0xE0, 0xF8, 0xB9, 0xAE, 0xE0, 0xF0, 0xB9, 0xAC, /* 0xE4-0xE7 */ + 0xE0, 0xF3, 0xB9, 0xB7, 0xE0, 0xF6, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xE0, 0xFA, 0xB9, 0xB0, 0xB9, 0xAD, 0xE0, 0xFC, /* 0xEC-0xEF */ + 0xE0, 0xFB, 0xB9, 0xB5, 0x3F, 0x3F, 0xE0, 0xF4, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xBB, 0xF8, 0xE4, 0xEC, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xE4, 0xE9, 0xBB, 0xF9, 0x3F, 0x3F, 0xBB, 0xF7, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE4, 0xF0, 0xE4, 0xED, 0xE4, 0xE6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0xBB, 0xF6, 0x3F, 0x3F, 0xBB, 0xFA, 0xE4, 0xE7, /* 0x00-0x03 */ + 0xBB, 0xF5, 0xBB, 0xFD, 0xE4, 0xEA, 0xE4, 0xEB, /* 0x04-0x07 */ + 0xBB, 0xFB, 0xBB, 0xFC, 0xE4, 0xF1, 0xE4, 0xEE, /* 0x08-0x0B */ + 0xE4, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xBE, 0xAA, 0xE8, 0xF8, 0xBE, 0xA7, 0xE8, 0xF5, /* 0x10-0x13 */ + 0xBE, 0xA9, 0xBE, 0xAB, 0x3F, 0x3F, 0xE8, 0xF6, /* 0x14-0x17 */ + 0xBE, 0xA8, 0x3F, 0x3F, 0xE8, 0xF7, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xE8, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0x76, /* 0x1C-0x1F */ + 0xEC, 0xBD, 0xC0, 0x77, 0xEC, 0xBB, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xEC, 0xBC, 0xEC, 0xBA, 0xEC, 0xB9, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xEC, 0xBE, 0xC0, 0x75, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xEF, 0xB8, 0xEF, 0xB9, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xE4, 0xE8, 0xEF, 0xB7, 0xC0, 0x78, 0xC3, 0x5F, /* 0x30-0x33 */ + 0xF1, 0xEB, 0xF1, 0xEC, 0x3F, 0x3F, 0xC4, 0xD7, /* 0x34-0x37 */ + 0xC4, 0xD8, 0xF5, 0xC1, 0xF5, 0xC0, 0xC5, 0x6C, /* 0x38-0x3B */ + 0xC5, 0x6B, 0xF7, 0xD0, 0x3F, 0x3F, 0xA4, 0x49, /* 0x3C-0x3F */ + 0xA4, 0x61, 0xA4, 0xB9, 0x3F, 0x3F, 0xA4, 0xB8, /* 0x40-0x43 */ + 0xA5, 0x53, 0xA5, 0x52, 0xA5, 0xFC, 0xA5, 0xFB, /* 0x44-0x47 */ + 0xA5, 0xFD, 0xA5, 0xFA, 0x3F, 0x3F, 0xA7, 0x4A, /* 0x48-0x4B */ + 0xA7, 0x49, 0xA7, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xE0, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xA8, 0xDF, 0xA8, 0xE1, 0x3F, 0x3F, 0xAB, 0x5E, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xA2, 0x59, 0xD0, 0xDE, 0xA2, 0x5A, /* 0x58-0x5B */ + 0xB0, 0xC2, 0xA2, 0x5C, 0xA2, 0x5B, 0xD8, 0x60, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xA2, 0x5D, 0xB9, 0xB8, 0xA2, 0x5E, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xA4, 0x4A, 0x3F, 0x3F, 0xA4, 0xBA, /* 0x64-0x67 */ + 0xA5, 0xFE, 0xA8, 0xE2, 0x3F, 0x3F, 0xA4, 0x4B, /* 0x68-0x6B */ + 0xA4, 0xBD, 0xA4, 0xBB, 0xA4, 0xBC, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xA6, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xA7, 0x4C, 0xA8, 0xE4, 0xA8, 0xE3, /* 0x74-0x77 */ + 0xA8, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xAD, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xBE, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0x4E, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xA5, 0x54, 0xA5, 0x55, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xA6, 0x41, 0x3F, 0x3F, 0xCA, 0x6A, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xAB, 0x60, 0xAB, 0x5F, 0xD0, 0xE0, /* 0x90-0x93 */ + 0xD0, 0xDF, 0xB0, 0xC3, 0x3F, 0x3F, 0xA4, 0xBE, /* 0x94-0x97 */ + 0xC9, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xCD, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xAB, 0x61, 0x3F, 0x3F, 0xAD, 0xE0, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xAD, 0xDE, 0xAD, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0xAD, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xA5, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xA6, 0x42, 0xC9, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0x4D, 0xA7, 0x4E, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xCA, 0x6B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xCB, 0xCE, 0xA8, 0xE6, 0xCB, 0xCF, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xD0, 0xE2, 0xD0, 0xE3, 0xAD, 0xE3, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xD0, 0xE4, 0x3F, 0x3F, 0xD0, 0xE1, 0xAD, 0xE4, /* 0xC8-0xCB */ + 0xAD, 0xE2, 0xAD, 0xE1, 0xD0, 0xE5, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xD4, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xD8, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xC5, /* 0xD4-0xD7 */ + 0xE1, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xBB, 0xFE, 0xBE, 0xAE, 0xE8, 0xF9, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xA4, 0x4C, 0xA4, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xB0, 0xC4, 0xB3, 0xCD, 0x3F, 0x3F, 0xB9, 0xB9, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xC9, 0x42, 0xA4, 0xBF, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xA5, 0x59, 0xA5, 0x57, 0xA5, 0x58, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xA8, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0xA4, 0x4D, 0xA4, 0x4E, 0x3F, 0x3F, 0xA4, 0x62, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA4, 0xC0, 0xA4, 0xC1, /* 0x04-0x07 */ + 0xA4, 0xC2, 0xC9, 0xBE, 0xA5, 0x5A, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xC9, 0x6B, 0x3F, 0x3F, 0xA6, 0x46, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xC9, 0xBF, 0xA6, 0x44, 0xA6, 0x45, 0xC9, 0xBD, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0x47, 0xA6, 0x43, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xCA, 0x6C, 0xAA, 0xEC, 0xCA, 0x6D, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xCA, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xA7, 0x50, 0xA7, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xA7, 0x53, 0xA7, 0x51, 0xA7, 0x52, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xED, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xA8, 0xEC, 0xCB, 0xD4, 0xCB, 0xD1, 0xCB, 0xD2, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xCB, 0xD0, 0xA8, 0xEE, 0xA8, 0xEA, /* 0x34-0x37 */ + 0xA8, 0xE9, 0x3F, 0x3F, 0xA8, 0xEB, 0xA8, 0xE8, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xA8, 0xEF, 0x3F, 0x3F, 0xAB, 0x63, /* 0x40-0x43 */ + 0xCD, 0xF0, 0x3F, 0x3F, 0xCB, 0xD3, 0xAB, 0x68, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xCD, 0xF1, 0xAB, 0x64, 0xAB, 0x67, /* 0x48-0x4B */ + 0xAB, 0x66, 0xAB, 0x65, 0xAB, 0x62, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xE8, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xAD, 0xE7, 0xD0, 0xEB, 0xAD, 0xE5, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xE7, 0xAD, 0xE8, /* 0x58-0x5B */ + 0xAD, 0xE6, 0xAD, 0xE9, 0xD0, 0xE9, 0xD0, 0xEA, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xD0, 0xE6, 0xD0, 0xEC, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xB3, 0xD1, 0xB0, 0xC5, 0xD4, 0x69, /* 0x68-0x6B */ + 0xD4, 0x6B, 0xD4, 0x6A, 0xD4, 0x6C, 0xB0, 0xC6, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xCE, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xB3, 0xCF, 0xB3, 0xD0, 0x3F, 0x3F, 0xB6, 0xD0, /* 0x74-0x77 */ + 0xDC, 0xC7, 0x3F, 0x3F, 0xDC, 0xC6, 0xDC, 0xC8, /* 0x78-0x7B */ + 0xDC, 0xC9, 0xB6, 0xD1, 0x3F, 0x3F, 0xB6, 0xCF, /* 0x7C-0x7F */ + + 0xE1, 0x41, 0xE1, 0x42, 0xB9, 0xBB, 0xB9, 0xBA, /* 0x80-0x83 */ + 0xE3, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0x40, /* 0x84-0x87 */ + 0xBC, 0x41, 0xBC, 0x42, 0xBC, 0x44, 0xE4, 0xF2, /* 0x88-0x8B */ + 0xE4, 0xF3, 0xBC, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xBE, 0xAF, 0x3F, 0x3F, 0xBE, 0xB0, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xED, 0xF5, 0xC3, /* 0x94-0x97 */ + 0xF5, 0xC2, 0xF7, 0xD1, 0x3F, 0x3F, 0xA4, 0x4F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0x5C, /* 0x9C-0x9F */ + 0xA5, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0x48, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0xC0, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xA7, 0x55, 0xA7, 0x56, 0xA7, 0x54, /* 0xA8-0xAB */ + 0xA7, 0x57, 0xCA, 0x6F, 0xCA, 0x70, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xF1, /* 0xB8-0xBB */ + 0xCB, 0xD5, 0x3F, 0x3F, 0xA8, 0xF0, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCD, 0xF2, 0xAB, 0x6C, 0xCD, 0xF3, 0xAB, 0x6B, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x69, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xAB, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xD0, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xC7, 0xD4, 0x6E, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xB0, 0xCA, 0xD4, 0x6D, 0xB1, 0xE5, /* 0xD4-0xD7 */ + 0xB0, 0xC9, 0xB0, 0xC8, 0x3F, 0x3F, 0xB3, 0xD4, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xB3, 0xD3, 0xB3, 0xD2, 0xB6, 0xD2, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xD5, 0xB6, 0xD6, /* 0xE0-0xE3 */ + 0xB6, 0xD4, 0x3F, 0x3F, 0xB6, 0xD3, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xE1, 0x43, 0x3F, 0x3F, 0xE1, 0x44, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xF5, /* 0xEC-0xEF */ + 0xBC, 0x45, 0xE4, 0xF4, 0x3F, 0x3F, 0xBE, 0xB1, /* 0xF0-0xF3 */ + 0xEC, 0xBF, 0xC0, 0x79, 0x3F, 0x3F, 0xF1, 0xEE, /* 0xF4-0xF7 */ + 0xC4, 0x55, 0x3F, 0x3F, 0xA4, 0x63, 0xA4, 0xC3, /* 0xF8-0xFB */ + 0xC9, 0x56, 0x3F, 0x3F, 0xA4, 0xC4, 0xA4, 0xC5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xA5, 0x5D, 0xA5, 0x5E, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xA6, 0x49, 0xCA, 0x71, 0xCB, 0xD6, 0xCB, 0xD7, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xAB, 0x6D, 0xD0, 0xEE, 0xB0, 0xCC, /* 0x0C-0x0F */ + 0xB0, 0xCB, 0xD8, 0x63, 0xD8, 0x62, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xA4, 0x50, 0xA4, 0xC6, 0xA5, 0x5F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xB0, 0xCD, 0xC9, 0x43, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xC9, 0x6C, 0xA5, 0x60, 0x3F, 0x3F, 0xC9, 0xC2, /* 0x1C-0x1F */ + 0xA6, 0x4B, 0xA6, 0x4A, 0xC9, 0xC1, 0xA7, 0x58, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xEA, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD4, 0x6F, 0x3F, 0x3F, 0xB6, 0xD7, /* 0x2C-0x2F */ + 0xE1, 0x45, 0xB9, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xE8, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xFD, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xA4, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xCB, 0xD8, 0xCD, 0xF4, 0xB0, 0xD0, 0xB0, 0xCE, /* 0x3C-0x3F */ + 0xB0, 0xCF, 0xA4, 0x51, 0x3F, 0x3F, 0xA4, 0x64, /* 0x40-0x43 */ + 0xA2, 0xCD, 0xA4, 0xCA, 0x3F, 0x3F, 0xA4, 0xC9, /* 0x44-0x47 */ + 0xA4, 0xC8, 0xA5, 0x63, 0xA5, 0x62, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xC9, 0x6D, 0xC9, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xA8, 0xF5, 0xA8, 0xF2, 0xA8, 0xF4, /* 0x50-0x53 */ + 0xA8, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x6E, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xD5, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xA4, 0x52, 0x3F, 0x3F, 0xA4, 0xCB, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xA5, 0x65, 0xA5, 0x64, 0x3F, 0x3F, 0xCA, 0x72, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xF6, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xC9, 0x57, 0x3F, 0x3F, 0xA5, 0x67, 0xA5, 0x66, /* 0x6C-0x6F */ + 0xA6, 0x4C, 0xA6, 0x4D, 0xCA, 0x73, 0xA7, 0x59, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xA7, 0x5A, 0x3F, 0x3F, 0xA8, 0xF7, /* 0x74-0x77 */ + 0xA8, 0xF8, 0xA8, 0xF9, 0x3F, 0x3F, 0xAB, 0x6F, /* 0x78-0x7B */ + 0xCD, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xEB, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0x44, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xA4, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0xC4, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0x74, 0xCA, 0x75, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xD9, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xCB, 0xDA, 0x3F, 0x3F, 0xCD, 0xF7, 0xCD, 0xF6, /* 0x94-0x97 */ + 0xCD, 0xF9, 0xCD, 0xF8, 0xAB, 0x70, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xD4, 0x70, 0xAD, 0xED, 0xD0, 0xEF, 0xAD, 0xEC, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xD8, 0x64, 0xB3, 0xD6, 0x3F, 0x3F, 0xD8, 0x65, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE1, 0x46, 0xB9, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0x46, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xF1, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xC9, 0x58, 0x3F, 0x3F, 0xA5, 0x68, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xD1, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xA4, 0x53, 0xA4, 0x65, 0xA4, 0xCE, 0xA4, 0xCD, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xA4, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xA8, 0xFB, 0x3F, 0x3F, 0xA8, 0xFA, 0xA8, 0xFC, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x71, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xEE, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xE8, 0xFB, 0xC2, 0x4F, 0xA4, 0x66, /* 0xE0-0xE3 */ + 0xA5, 0x6A, 0xA5, 0x79, 0xA5, 0x74, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xA5, 0x6F, 0xA5, 0x6E, 0xA5, 0x75, 0xA5, 0x73, /* 0xE8-0xEB */ + 0xA5, 0x6C, 0xA5, 0x7A, 0xA5, 0x6D, 0xA5, 0x69, /* 0xEC-0xEF */ + 0xA5, 0x78, 0xA5, 0x77, 0xA5, 0x76, 0xA5, 0x6B, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xA5, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xA5, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0x7B, /* 0xF8-0xFB */ + 0xA5, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_54[512] = { + 0x3F, 0x3F, 0xA6, 0x53, 0x3F, 0x3F, 0xA6, 0x59, /* 0x00-0x03 */ + 0xA6, 0x55, 0x3F, 0x3F, 0xA6, 0x5B, 0xC9, 0xC5, /* 0x04-0x07 */ + 0xA6, 0x58, 0xA6, 0x4E, 0xA6, 0x51, 0xA6, 0x54, /* 0x08-0x0B */ + 0xA6, 0x50, 0xA6, 0x57, 0xA6, 0x5A, 0xA6, 0x4F, /* 0x0C-0x0F */ + 0xA6, 0x52, 0xA6, 0x56, 0xA6, 0x5C, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xCA, 0x7E, 0xCA, 0x7B, 0x3F, 0x3F, 0xA7, 0x67, /* 0x18-0x1B */ + 0xCA, 0x7C, 0xA7, 0x5B, 0xA7, 0x5D, 0xA7, 0x75, /* 0x1C-0x1F */ + 0xA7, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xCA, 0xA5, 0xCA, 0x7D, 0xA7, 0x5F, 0xA7, 0x61, /* 0x24-0x27 */ + 0xCA, 0xA4, 0xA7, 0x68, 0xCA, 0x78, 0xA7, 0x74, /* 0x28-0x2B */ + 0xA7, 0x76, 0xA7, 0x5C, 0xA7, 0x6D, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xCA, 0x76, 0xA7, 0x73, 0x3F, 0x3F, 0xA7, 0x64, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xA7, 0x6E, 0xA7, 0x6F, 0xCA, 0x77, /* 0x34-0x37 */ + 0xA7, 0x6C, 0xA7, 0x6A, 0x3F, 0x3F, 0xA7, 0x6B, /* 0x38-0x3B */ + 0xA7, 0x71, 0xCA, 0xA1, 0xA7, 0x5E, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xA7, 0x72, 0xCA, 0xA3, 0xA7, 0x66, 0xA7, 0x63, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCA, 0x7A, 0xA7, 0x62, 0xCA, 0xA6, /* 0x44-0x47 */ + 0xA7, 0x65, 0x3F, 0x3F, 0xA7, 0x69, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0x60, 0xCA, 0xA2, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xCA, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xCB, 0xEB, 0xCB, 0xEA, 0xA9, 0x4F, 0xCB, 0xED, /* 0x60-0x63 */ + 0xCB, 0xEF, 0xCB, 0xE4, 0xCB, 0xE7, 0xCB, 0xEE, /* 0x64-0x67 */ + 0xA9, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xE1, /* 0x68-0x6B */ + 0xCB, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xE9, /* 0x6C-0x6F */ + 0xCE, 0x49, 0xA9, 0x4B, 0xCE, 0x4D, 0xA8, 0xFD, /* 0x70-0x73 */ + 0xCB, 0xE6, 0xA8, 0xFE, 0xA9, 0x4C, 0xA9, 0x45, /* 0x74-0x77 */ + 0xA9, 0x41, 0x3F, 0x3F, 0xCB, 0xE2, 0xA9, 0x44, /* 0x78-0x7B */ + 0xA9, 0x49, 0xA9, 0x52, 0xCB, 0xE3, 0xCB, 0xDC, /* 0x7C-0x7F */ + + 0xA9, 0x43, 0xCB, 0xDD, 0xCB, 0xDF, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xA9, 0x46, 0x3F, 0x3F, 0xA9, 0x48, 0xCB, 0xDB, /* 0x84-0x87 */ + 0xCB, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x51, /* 0x88-0x8B */ + 0xA9, 0x4D, 0xCB, 0xE8, 0xA9, 0x53, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xA9, 0x4A, 0xCB, 0xDE, 0xA9, 0x47, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xA9, 0x42, 0xA9, 0x40, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCB, 0xEC, 0x3F, 0x3F, 0xA9, 0x4E, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCE, 0x48, 0xCD, 0xFB, 0xCE, 0x4B, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xCD, 0xFD, 0xAB, 0x78, 0xAB, 0xA8, /* 0xA4-0xA7 */ + 0xAB, 0x74, 0xAB, 0xA7, 0xAB, 0x7D, 0xAB, 0xA4, /* 0xA8-0xAB */ + 0xAB, 0x72, 0xCD, 0xFC, 0xCE, 0x43, 0xAB, 0xA3, /* 0xAC-0xAF */ + 0xCE, 0x4F, 0xAB, 0xA5, 0x3F, 0x3F, 0xAB, 0x79, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0x45, 0xCE, 0x42, /* 0xB4-0xB7 */ + 0xAB, 0x77, 0x3F, 0x3F, 0xCD, 0xFA, 0xAB, 0xA6, /* 0xB8-0xBB */ + 0xCE, 0x4A, 0xAB, 0x7C, 0xCE, 0x4C, 0xAB, 0xA9, /* 0xBC-0xBF */ + 0xAB, 0x73, 0xAB, 0x7E, 0xAB, 0x7B, 0xCE, 0x40, /* 0xC0-0xC3 */ + 0xAB, 0xA1, 0xCE, 0x46, 0xCE, 0x47, 0xAB, 0x7A, /* 0xC4-0xC7 */ + 0xAB, 0xA2, 0xAB, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x75, 0xCD, 0xFE, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0x44, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0x4E, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xD1, 0x44, 0xAD, 0xFB, 0xD0, 0xF1, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xD0, 0xF6, 0xAD, 0xF4, 0xAE, 0x40, 0xD0, 0xF4, /* 0xE4-0xE7 */ + 0xAD, 0xEF, 0xAD, 0xF9, 0xAD, 0xFE, 0xD0, 0xFB, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xAD, 0xFA, 0xAD, 0xFD, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xD0, 0xFE, 0xAD, 0xF5, 0xD0, 0xF5, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0x42, /* 0xF4-0xF7 */ + 0xD1, 0x43, 0x3F, 0x3F, 0xAD, 0xF7, 0xD1, 0x41, /* 0xF8-0xFB */ + 0xAD, 0xF3, 0xAE, 0x43, 0x3F, 0x3F, 0xD0, 0xF8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x3F, 0x3F, 0xAD, 0xF1, 0x3F, 0x3F, 0xD1, 0x46, /* 0x00-0x03 */ + 0xD0, 0xF9, 0xD0, 0xFD, 0xAD, 0xF6, 0xAE, 0x42, /* 0x04-0x07 */ + 0xD0, 0xFA, 0xAD, 0xFC, 0xD1, 0x40, 0xD1, 0x47, /* 0x08-0x0B */ + 0xD4, 0xA1, 0x3F, 0x3F, 0xD1, 0x45, 0xAE, 0x44, /* 0x0C-0x0F */ + 0xAD, 0xF0, 0xD0, 0xFC, 0xD0, 0xF3, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xAD, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xF2, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xF7, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xF0, 0xAE, 0x41, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0x77, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xB0, 0xE4, 0xD4, 0xA7, 0xB0, 0xE2, 0xB0, 0xDF, /* 0x2C-0x2F */ + 0xD4, 0x7C, 0xB0, 0xDB, 0xD4, 0xA2, 0xB0, 0xE6, /* 0x30-0x33 */ + 0xD4, 0x76, 0xD4, 0x7B, 0xD4, 0x7A, 0xAD, 0xF2, /* 0x34-0x37 */ + 0xB0, 0xE1, 0xD4, 0xA5, 0x3F, 0x3F, 0xD4, 0xA8, /* 0x38-0x3B */ + 0xD4, 0x73, 0x3F, 0x3F, 0xB3, 0xE8, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xD4, 0xA9, 0xB0, 0xE7, 0x3F, 0x3F, 0xB0, 0xD9, /* 0x40-0x43 */ + 0xB0, 0xD6, 0xD4, 0x7E, 0xB0, 0xD3, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xD4, 0xA6, 0x3F, 0x3F, 0xB0, 0xDA, 0xD4, 0xAA, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xD4, 0x74, 0xD4, 0xA4, 0xB0, 0xDD, /* 0x4C-0x4F */ + 0xD4, 0x75, 0xD4, 0x78, 0xD4, 0x7D, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xB0, 0xDE, 0xB0, 0xDC, 0xB0, 0xE8, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xB0, 0xE3, 0x3F, 0x3F, 0xB0, 0xD7, 0xB1, 0xD2, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xB0, 0xD8, 0xD4, 0x79, 0xB0, 0xE5, /* 0x60-0x63 */ + 0xB0, 0xE0, 0xD4, 0xA3, 0xB0, 0xD5, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xD4, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD4, 0x71, 0xD4, 0x72, 0xD8, 0x6A, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xD7, /* 0x78-0x7B */ + 0xB3, 0xDA, 0xD8, 0x75, 0xB3, 0xEE, 0xD8, 0x78, /* 0x7C-0x7F */ + + 0xB3, 0xD8, 0xD8, 0x71, 0xB3, 0xDE, 0xB3, 0xE4, /* 0x80-0x83 */ + 0xB5, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xE2, /* 0x84-0x87 */ + 0xD8, 0x6E, 0xB3, 0xEF, 0xB3, 0xDB, 0xB3, 0xE3, /* 0x88-0x8B */ + 0xD8, 0x76, 0xDC, 0xD7, 0xD8, 0x7B, 0xD8, 0x6F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xD8, 0x66, 0xD8, 0x73, 0xD8, 0x6D, /* 0x90-0x93 */ + 0xB3, 0xE1, 0xD8, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xB3, 0xDD, 0xB3, 0xF1, 0xB3, 0xEA, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xB3, 0xDF, 0xB3, 0xDC, 0x3F, 0x3F, 0xB3, 0xE7, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xD8, 0x7A, 0xD8, 0x6C, 0xD8, 0x72, /* 0xA0-0xA3 */ + 0xD8, 0x74, 0xD8, 0x68, 0xD8, 0x77, 0xB3, 0xD9, /* 0xA4-0xA7 */ + 0xD8, 0x67, 0x3F, 0x3F, 0xB3, 0xE0, 0xB3, 0xF0, /* 0xA8-0xAB */ + 0xB3, 0xEC, 0xD8, 0x69, 0xB3, 0xE6, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xB3, 0xED, 0xB3, 0xE9, 0xB3, 0xE5, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xD8, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xEB, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xD5, /* 0xBC-0xBF */ + 0xDC, 0xD1, 0x3F, 0x3F, 0xDC, 0xE0, 0xDC, 0xCA, /* 0xC0-0xC3 */ + 0xDC, 0xD3, 0xB6, 0xE5, 0xB6, 0xE6, 0xB6, 0xDE, /* 0xC4-0xC7 */ + 0xDC, 0xDC, 0xB6, 0xE8, 0xDC, 0xCF, 0xDC, 0xCE, /* 0xC8-0xCB */ + 0xDC, 0xCC, 0xDC, 0xDE, 0xB6, 0xDC, 0xDC, 0xD8, /* 0xCC-0xCF */ + 0xDC, 0xCD, 0xB6, 0xDF, 0xDC, 0xD6, 0xB6, 0xDA, /* 0xD0-0xD3 */ + 0xDC, 0xD2, 0xDC, 0xD9, 0xDC, 0xDB, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xDC, 0xDF, 0xB6, 0xE3, 0xDC, 0xCB, /* 0xD8-0xDB */ + 0xB6, 0xDD, 0xDC, 0xD0, 0x3F, 0x3F, 0xB6, 0xD8, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xB6, 0xE4, 0xDC, 0xDA, 0xB6, 0xE0, /* 0xE0-0xE3 */ + 0xB6, 0xE1, 0xB6, 0xE7, 0xB6, 0xDB, 0xA2, 0x5F, /* 0xE4-0xE7 */ + 0xB6, 0xD9, 0xDC, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xE2, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xDD, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0xCD, 0xB9, 0xC8, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xE1, 0x55, 0xE1, 0x51, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xE1, 0x4B, 0xB9, 0xC2, 0xB9, 0xBE, 0xE1, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0xB9, 0xBF, 0xE1, 0x4E, 0xE1, 0x50, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xE1, 0x53, 0x3F, 0x3F, 0xB9, 0xC4, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xB9, 0xCB, 0xB9, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xE1, 0x49, 0xB9, 0xC6, 0xB9, 0xC7, 0xE1, 0x4C, /* 0x0C-0x0F */ + 0xB9, 0xCC, 0x3F, 0x3F, 0xE1, 0x4A, 0xE1, 0x4F, /* 0x10-0x13 */ + 0xB9, 0xC3, 0xE1, 0x48, 0xB9, 0xC9, 0xB9, 0xC1, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0xC0, /* 0x18-0x1B */ + 0xE1, 0x4D, 0xE1, 0x52, 0x3F, 0x3F, 0xB9, 0xCA, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0x47, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xBC, 0x4D, 0xE5, 0x47, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xE5, 0x44, 0x3F, 0x3F, 0xBC, 0x47, 0xBC, 0x53, /* 0x2C-0x2F */ + 0xBC, 0x54, 0x3F, 0x3F, 0xBC, 0x4A, 0xE5, 0x42, /* 0x30-0x33 */ + 0xBC, 0x4C, 0xE4, 0xF9, 0xBC, 0x52, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xE5, 0x46, 0xBC, 0x49, 0xE5, 0x48, 0xBC, 0x48, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xE5, 0x43, 0xE5, 0x45, 0xBC, 0x4B, /* 0x3C-0x3F */ + 0xE5, 0x41, 0xE4, 0xFA, 0xE4, 0xF7, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xD8, 0x6B, 0xE4, 0xFD, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xE4, 0xF6, 0xE4, 0xFC, 0xE4, 0xFB, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xE4, 0xF8, 0x3F, 0x3F, 0xBC, 0x4F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0x4E, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0x50, /* 0x54-0x57 */ + 0xE4, 0xFE, 0xBE, 0xB2, 0xE5, 0x40, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0x45, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xE8, 0xFD, 0x3F, 0x3F, 0xBE, 0xBE, 0xE9, 0x42, /* 0x60-0x63 */ + 0xBE, 0xB6, 0xBE, 0xBA, 0xE9, 0x41, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xBE, 0xB9, 0xBE, 0xB5, 0xBE, 0xB8, 0xBE, 0xB3, /* 0x68-0x6B */ + 0xBE, 0xBD, 0xE9, 0x43, 0xE8, 0xFE, 0xBE, 0xBC, /* 0x6C-0x6F */ + 0xE8, 0xFC, 0xBE, 0xBB, 0xE9, 0x44, 0xE9, 0x40, /* 0x70-0x73 */ + 0xBC, 0x51, 0x3F, 0x3F, 0xBE, 0xBF, 0xE9, 0x46, /* 0x74-0x77 */ + 0xBE, 0xB7, 0xBE, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xC6, 0xEC, 0xC8, /* 0x7C-0x7F */ + + 0xC0, 0x7B, 0xEC, 0xC9, 0xEC, 0xC7, 0xEC, 0xC5, /* 0x80-0x83 */ + 0xEC, 0xC4, 0xC0, 0x7D, 0xEC, 0xC3, 0xC0, 0x7E, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xEC, 0xC1, 0xEC, 0xC2, 0xC0, 0x7A, 0xC0, 0xA1, /* 0x8C-0x8F */ + 0xC0, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xC0, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xC2, 0x50, 0x3F, 0x3F, 0xEF, 0xBC, /* 0x94-0x97 */ + 0xEF, 0xBA, 0xEF, 0xBF, 0xEF, 0xBD, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xEF, 0xBB, 0xEF, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xC3, 0x60, 0xF1, 0xF2, 0xF1, 0xF3, /* 0xA4-0xA7 */ + 0xC4, 0x56, 0x3F, 0x3F, 0xF1, 0xF4, 0xF1, 0xF0, /* 0xA8-0xAB */ + 0xF1, 0xF5, 0xF1, 0xF1, 0xC2, 0x51, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xFE, 0xF4, 0x41, /* 0xB0-0xB3 */ + 0xC4, 0x59, 0xF4, 0x40, 0xC4, 0x58, 0xC4, 0x57, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xC4, 0x5A, 0xF5, 0xC5, 0xF5, 0xC6, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xC4, 0xDA, 0xC4, 0xD9, 0xC4, 0xDB, 0xF5, 0xC4, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xF6, 0xD8, 0xF6, 0xD7, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xC5, 0x6D, 0xC5, 0x6F, 0xC5, 0x6E, 0xF6, 0xD9, /* 0xC8-0xCB */ + 0xC5, 0xC8, 0xF8, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xC5, 0xF1, 0x3F, 0x3F, 0xF8, 0xA5, /* 0xD0-0xD3 */ + 0xF8, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0x49, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0x7D, 0xA5, 0x7C, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xA6, 0x5F, 0xA6, 0x5E, 0xC9, 0xC7, /* 0xDC-0xDF */ + 0xA6, 0x5D, 0xC9, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xA7, 0x79, 0xCA, 0xA9, 0x3F, 0x3F, 0xCA, 0xA8, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0x77, 0xA7, 0x7A, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xA7, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xA7, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xF0, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xCB, 0xF1, 0xA9, 0x54, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xAA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x3F, 0x3F, 0xD1, 0x48, 0xD1, 0x49, 0xAE, 0x45, /* 0x00-0x03 */ + 0xAE, 0x46, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xAC, /* 0x04-0x07 */ + 0xB0, 0xE9, 0xB0, 0xEB, 0xD4, 0xAB, 0xB0, 0xEA, /* 0x08-0x0B */ + 0xD8, 0x7C, 0xB3, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xE9, 0xB6, 0xEA, /* 0x10-0x13 */ + 0xDC, 0xE1, 0x3F, 0x3F, 0xB9, 0xCF, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xB9, 0xCE, 0x3F, 0x3F, 0xE5, 0x49, 0xE9, 0x48, /* 0x18-0x1B */ + 0xE9, 0x47, 0x3F, 0x3F, 0xF9, 0x6B, 0xA4, 0x67, /* 0x1C-0x1F */ + 0xC9, 0x59, 0x3F, 0x3F, 0xC9, 0x6E, 0xC9, 0x6F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xA6, 0x62, 0xA6, 0x66, 0xC9, 0xC9, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xA6, 0x64, 0xA6, 0x63, 0xC9, 0xC8, 0xA6, 0x65, /* 0x2C-0x2F */ + 0xA6, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0x60, /* 0x30-0x33 */ + 0xC9, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xA6, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xA3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xA7, 0x7D, 0xCA, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCA, 0xAB, 0x3F, 0x3F, 0xA7, 0xA1, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xCA, 0xAD, 0xA7, 0x7B, 0xCA, 0xAE, /* 0x48-0x4B */ + 0xCA, 0xAC, 0xA7, 0x7E, 0xA7, 0xA2, 0xA7, 0xA5, /* 0x4C-0x4F */ + 0xA7, 0xA4, 0xA7, 0x7C, 0xCA, 0xAF, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xA9, 0x59, 0xCB, 0xFE, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xA9, 0x5B, 0x3F, 0x3F, 0xA9, 0x5A, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xCC, 0x40, 0xA9, 0x58, 0xA9, 0x57, 0xCB, 0xF5, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xCB, 0xF4, 0x3F, 0x3F, 0xCB, 0xF2, /* 0x6C-0x6F */ + 0xCB, 0xF7, 0xCB, 0xF6, 0xCB, 0xF3, 0xCB, 0xFC, /* 0x70-0x73 */ + 0xCB, 0xFD, 0xCB, 0xFA, 0xCB, 0xF8, 0xA9, 0x56, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xFB, /* 0x78-0x7B */ + 0xA9, 0x5C, 0xCC, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xCB, 0xF9, 0x3F, 0x3F, 0xAB, 0xAB, 0xA9, 0x55, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xAC, /* 0x88-0x8B */ + 0xCE, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0x5A, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xB2, /* 0x90-0x93 */ + 0xCE, 0x58, 0xCE, 0x5E, 0x3F, 0x3F, 0xCE, 0x55, /* 0x94-0x97 */ + 0xCE, 0x59, 0xCE, 0x5B, 0xCE, 0x5D, 0xCE, 0x57, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xCE, 0x56, 0xCE, 0x51, 0xCE, 0x52, /* 0x9C-0x9F */ + 0xAB, 0xAD, 0x3F, 0x3F, 0xAB, 0xAF, 0xAB, 0xAE, /* 0xA0-0xA3 */ + 0xCE, 0x53, 0xCE, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xB1, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xCE, 0x50, 0xD1, 0x53, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xD1, 0x52, 0xD1, 0x57, 0xD1, 0x4E, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xD1, 0x51, 0xD1, 0x50, 0x3F, 0x3F, 0xD1, 0x54, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xD1, 0x58, 0xAE, 0x47, 0xAE, 0x4A, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0x4F, 0xD1, 0x55, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAE, 0x49, /* 0xC8-0xCB */ + 0xD1, 0x4A, 0x3F, 0x3F, 0xAB, 0xB0, 0xD4, 0xBA, /* 0xCC-0xCF */ + 0xD1, 0x56, 0x3F, 0x3F, 0xD1, 0x4D, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xAE, 0x48, 0xD1, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD4, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xEC, /* 0xDC-0xDF */ + 0xB0, 0xF0, 0xD4, 0xC1, 0xD4, 0xAF, 0xD4, 0xBD, /* 0xE0-0xE3 */ + 0xB0, 0xF1, 0xD4, 0xBF, 0x3F, 0x3F, 0xD4, 0xC5, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xD4, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xD4, 0xC0, 0xD4, 0xB4, 0xD4, 0xBC, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xD4, 0xCA, 0xD4, 0xC8, 0xD4, 0xBE, 0xD4, 0xB9, /* 0xF0-0xF3 */ + 0xD4, 0xB2, 0xD8, 0xA6, 0xD4, 0xB0, 0xB0, 0xF5, /* 0xF4-0xF7 */ + 0xD4, 0xB7, 0xB0, 0xF6, 0xB0, 0xF2, 0xD4, 0xAD, /* 0xF8-0xFB */ + 0xD4, 0xC3, 0xD4, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0xD4, 0xB3, 0xD4, 0xC6, 0xB0, 0xF3, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD4, 0xCC, 0xB0, 0xED, 0xB0, 0xEF, 0xD4, 0xBB, /* 0x04-0x07 */ + 0xD4, 0xB6, 0xAE, 0x4B, 0xB0, 0xEE, 0xD4, 0xB8, /* 0x08-0x0B */ + 0xD4, 0xC7, 0xD4, 0xCB, 0xD4, 0xC2, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD4, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xD4, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xD8, 0xA1, 0x3F, 0x3F, 0xD8, 0xAA, /* 0x18-0x1B */ + 0xD8, 0xA9, 0xB3, 0xFA, 0xD8, 0xA2, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xB3, 0xFB, 0xB3, 0xF9, 0x3F, 0x3F, 0xD8, 0xA4, /* 0x20-0x23 */ + 0xB3, 0xF6, 0xD8, 0xA8, 0x3F, 0x3F, 0xD8, 0xA3, /* 0x24-0x27 */ + 0xD8, 0xA5, 0xD8, 0x7D, 0xB3, 0xF4, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xD8, 0xB2, 0xD8, 0xB1, 0xD8, 0xAE, 0xB3, 0xF3, /* 0x2C-0x2F */ + 0xB3, 0xF7, 0xB3, 0xF8, 0xD1, 0x4B, 0xD8, 0xAB, /* 0x30-0x33 */ + 0xB3, 0xF5, 0xB0, 0xF4, 0xD8, 0xAD, 0xD8, 0x7E, /* 0x34-0x37 */ + 0xD8, 0xB0, 0xD8, 0xAF, 0x3F, 0x3F, 0xD8, 0xB3, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xDC, 0xEF, 0x3F, 0x3F, 0xD8, 0xAC, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xD8, 0xA7, 0xDC, 0xE7, 0xB6, 0xF4, 0xB6, 0xF7, /* 0x48-0x4B */ + 0xB6, 0xF2, 0xDC, 0xE6, 0xDC, 0xEA, 0xDC, 0xE5, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xB6, 0xEC, 0xB6, 0xF6, 0xDC, 0xE2, /* 0x50-0x53 */ + 0xB6, 0xF0, 0xDC, 0xE9, 0x3F, 0x3F, 0xB6, 0xEE, /* 0x54-0x57 */ + 0xB6, 0xED, 0xDC, 0xEC, 0xB6, 0xEF, 0xDC, 0xEE, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xDC, 0xEB, 0xB6, 0xEB, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xF5, 0xDC, 0xF0, /* 0x60-0x63 */ + 0xDC, 0xE4, 0xDC, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xDC, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xF1, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xB6, 0xF3, 0x3F, 0x3F, 0xDC, 0xE8, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xDC, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xE1, 0x5D, 0xB9, 0xD0, 0xE1, 0x63, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xB9, 0xD5, 0xE1, 0x5F, 0xE1, 0x66, /* 0x78-0x7B */ + 0xE1, 0x57, 0xB9, 0xD7, 0xB9, 0xD1, 0xE1, 0x5C, /* 0x7C-0x7F */ + + 0xBC, 0x55, 0xE1, 0x5B, 0xE1, 0x64, 0xB9, 0xD2, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xB9, 0xD6, 0xE1, 0x5A, 0xE1, 0x60, /* 0x84-0x87 */ + 0xE1, 0x65, 0xE1, 0x56, 0xB9, 0xD4, 0xE1, 0x5E, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0x62, 0xE1, 0x68, /* 0x8C-0x8F */ + 0xE1, 0x58, 0xE1, 0x61, 0x3F, 0x3F, 0xB9, 0xD3, /* 0x90-0x93 */ + 0xE1, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xE1, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xBC, 0x59, 0xE5, 0x4B, 0xBC, 0x57, 0xBC, 0x56, /* 0x9C-0x9F */ + 0xE5, 0x4D, 0xE5, 0x52, 0x3F, 0x3F, 0xE5, 0x4E, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xE5, 0x51, 0xBC, 0x5C, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xBE, 0xA5, 0xBC, 0x5B, 0x3F, 0x3F, 0xE5, 0x4A, /* 0xA8-0xAB */ + 0xE5, 0x50, 0x3F, 0x3F, 0xBC, 0x5A, 0xE5, 0x4F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xE5, 0x4C, 0x3F, 0x3F, 0xBC, 0x58, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0x4D, 0xF9, 0xD9, /* 0xB8-0xBB */ + 0xE9, 0x4F, 0xE9, 0x4A, 0xBE, 0xC1, 0xE9, 0x4C, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xBE, 0xC0, 0xE9, 0x4E, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xBE, 0xC3, 0xE9, 0x50, 0xBE, 0xC2, /* 0xC4-0xC7 */ + 0xE9, 0x49, 0xE9, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xA5, 0xEC, 0xCC, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xC0, 0xA4, 0xEC, 0xCD, 0xC0, 0xA3, /* 0xD0-0xD3 */ + 0xEC, 0xCB, 0xC0, 0xA2, 0xEC, 0xCA, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xC2, 0x53, 0xC2, 0x52, 0xF1, 0xF6, 0xF1, 0xF8, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF1, 0xF7, 0xC3, 0x61, 0xC3, 0x62, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0x63, 0xF4, 0x42, /* 0xE0-0xE3 */ + 0xC4, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xD3, /* 0xE4-0xE7 */ + 0xF7, 0xD2, 0xC5, 0xF2, 0x3F, 0x3F, 0xA4, 0x68, /* 0xE8-0xEB */ + 0xA4, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xA7, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xCE, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xB3, 0xFC, 0xB3, 0xFD, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xDC, 0xF2, 0xB9, 0xD8, 0xE1, 0x69, 0xE5, 0x53, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0x5A, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xB0, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xCC, 0x42, 0xCE, 0x60, 0xD1, 0x59, 0xAE, 0x4C, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xF9, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xC4, 0xDC, 0xA4, 0x69, 0xA5, 0x7E, 0xC9, 0x70, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xA6, 0x67, 0xA6, 0x68, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xA9, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xB0, 0xF7, 0x3F, 0x3F, 0xB9, 0xDA, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xB9, 0xDB, 0xB9, 0xD9, 0x3F, 0x3F, 0xA4, 0x6A, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xA4, 0xD1, 0xA4, 0xD3, 0xA4, 0xD2, /* 0x28-0x2B */ + 0xC9, 0x5B, 0xA4, 0xD4, 0xA5, 0xA1, 0xC9, 0x71, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xA5, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0x69, /* 0x34-0x37 */ + 0xA6, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xC9, 0xCB, 0x3F, 0x3F, 0xA7, 0xA8, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xCA, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xA9, 0x61, 0xCC, 0x43, 0x3F, 0x3F, 0xA9, 0x5F, /* 0x44-0x47 */ + 0xA9, 0x60, 0xA9, 0x5E, 0xD1, 0x5A, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xB6, 0xAB, 0xB5, /* 0x4C-0x4F */ + 0xAB, 0xB7, 0xAB, 0xB4, 0x3F, 0x3F, 0xCE, 0x61, /* 0x50-0x53 */ + 0xA9, 0x62, 0xAB, 0xB3, 0x3F, 0x3F, 0xAE, 0x4D, /* 0x54-0x57 */ + 0xAE, 0x4E, 0x3F, 0x3F, 0xAE, 0x4F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xD4, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xB3, 0xFE, 0xD8, 0xB4, 0xB0, 0xF8, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xF8, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xB9, 0xDD, 0xB9, 0xDC, 0xE1, 0x6A, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xBC, 0x5D, 0xBE, 0xC4, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xEF, 0xC0, 0xF6, 0xDA, 0xF7, 0xD4, 0xA4, 0x6B, /* 0x70-0x73 */ + 0xA5, 0xA3, 0x3F, 0x3F, 0xA5, 0xA4, 0xC9, 0xD1, /* 0x74-0x77 */ + 0xA6, 0x6C, 0xA6, 0x6F, 0x3F, 0x3F, 0xC9, 0xCF, /* 0x78-0x7B */ + 0xC9, 0xCD, 0xA6, 0x6E, 0xC9, 0xD0, 0xC9, 0xD2, /* 0x7C-0x7F */ + + 0xC9, 0xCC, 0xA6, 0x71, 0xA6, 0x70, 0xA6, 0x6D, /* 0x80-0x83 */ + 0xA6, 0x6B, 0xC9, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xB3, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xA7, 0xB0, 0xCA, 0xB6, 0xCA, 0xB9, /* 0x8C-0x8F */ + 0xCA, 0xB8, 0x3F, 0x3F, 0xA7, 0xAA, 0xA7, 0xB2, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xAF, 0xCA, 0xB5, /* 0x94-0x97 */ + 0xCA, 0xB3, 0xA7, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xA7, 0xA9, 0xA7, 0xAC, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xCA, 0xB4, 0xCA, 0xBB, 0xCA, 0xB7, 0xA7, 0xAD, /* 0xA0-0xA3 */ + 0xA7, 0xB1, 0xA7, 0xB4, 0xCA, 0xB2, 0xCA, 0xBA, /* 0xA4-0xA7 */ + 0xA7, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x67, 0xA9, 0x6F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xCC, 0x4F, 0xCC, 0x48, 0xA9, 0x70, /* 0xB0-0xB3 */ + 0xCC, 0x53, 0xCC, 0x44, 0xCC, 0x4B, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xA9, 0x66, 0xCC, 0x45, 0xA9, 0x64, /* 0xB8-0xBB */ + 0xCC, 0x4C, 0xCC, 0x50, 0xA9, 0x63, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCC, 0x51, 0xCC, 0x4A, 0x3F, 0x3F, 0xCC, 0x4D, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xA9, 0x72, 0xA9, 0x69, 0xCC, 0x54, /* 0xC4-0xC7 */ + 0xCC, 0x52, 0x3F, 0x3F, 0xA9, 0x6E, 0xA9, 0x6C, /* 0xC8-0xCB */ + 0xCC, 0x49, 0xA9, 0x6B, 0xCC, 0x47, 0xCC, 0x46, /* 0xCC-0xCF */ + 0xA9, 0x6A, 0xA9, 0x68, 0xA9, 0x71, 0xA9, 0x6D, /* 0xD0-0xD3 */ + 0xA9, 0x65, 0x3F, 0x3F, 0xCC, 0x4E, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xAB, 0xB9, 0x3F, 0x3F, 0xAB, 0xC0, 0xCE, 0x6F, /* 0xD8-0xDB */ + 0xAB, 0xB8, 0xCE, 0x67, 0xCE, 0x63, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xCE, 0x73, 0xCE, 0x62, 0x3F, 0x3F, 0xAB, 0xBB, /* 0xE0-0xE3 */ + 0xCE, 0x6C, 0xAB, 0xBE, 0xAB, 0xC1, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xAB, 0xBC, 0xCE, 0x70, 0xAB, 0xBF, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xAE, 0x56, 0xCE, 0x76, 0xCE, 0x64, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xCE, 0x66, 0xCE, 0x6D, 0xCE, 0x71, /* 0xF0-0xF3 */ + 0xCE, 0x75, 0xCE, 0x72, 0xCE, 0x6B, 0xCE, 0x6E, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0x68, 0xAB, 0xC3, /* 0xF8-0xFB */ + 0xCE, 0x6A, 0xCE, 0x69, 0xCE, 0x74, 0xAB, 0xBA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0xCE, 0x65, 0xAB, 0xC2, 0x3F, 0x3F, 0xAB, 0xBD, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xAE, 0x5C, 0xD1, 0x62, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xAE, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0x60, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xAE, 0x50, 0x3F, 0x3F, 0xAE, 0x55, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xD1, 0x5F, 0xD1, 0x5C, 0xD1, 0x61, /* 0x14-0x17 */ + 0xAE, 0x51, 0xD1, 0x5B, 0x3F, 0x3F, 0xAE, 0x54, /* 0x18-0x1B */ + 0xAE, 0x52, 0x3F, 0x3F, 0xD1, 0x63, 0xAE, 0x53, /* 0x1C-0x1F */ + 0xAE, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0xAE, 0x58, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xAE, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xAE, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD1, 0x5D, 0xD1, 0x5E, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0x64, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xD4, 0xD4, 0xB0, 0xF9, 0xD8, 0xC2, /* 0x34-0x37 */ + 0xD4, 0xD3, 0xD4, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xB1, 0x40, 0x3F, 0x3F, 0xD4, 0xE4, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xB0, 0xFE, 0xB0, 0xFA, 0xD4, 0xED, 0xD4, 0xDD, /* 0x40-0x43 */ + 0xD4, 0xE0, 0x3F, 0x3F, 0xB1, 0x43, 0xD4, 0xEA, /* 0x44-0x47 */ + 0xD4, 0xE2, 0xB0, 0xFB, 0xB1, 0x44, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xD4, 0xE7, 0xD4, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xD4, 0xD6, 0xD4, 0xEB, 0xD4, 0xDF, 0xD4, 0xDA, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xD4, 0xD0, 0xD4, 0xEC, 0xD4, 0xDC, /* 0x54-0x57 */ + 0xD4, 0xCF, 0x3F, 0x3F, 0xB1, 0x42, 0xD4, 0xE1, /* 0x58-0x5B */ + 0xD4, 0xEE, 0xD4, 0xDE, 0xD4, 0xD2, 0xD4, 0xD7, /* 0x5C-0x5F */ + 0xD4, 0xCE, 0x3F, 0x3F, 0xB1, 0x41, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xD4, 0xDB, 0xD4, 0xD8, 0xB0, 0xFC, 0xD4, 0xD1, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xD4, 0xE9, 0xB0, 0xFD, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xD4, 0xD9, 0xD4, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xD4, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0x40, /* 0x74-0x77 */ + 0xD8, 0xBB, 0x3F, 0x3F, 0xD8, 0xB8, 0xD8, 0xC9, /* 0x78-0x7B */ + 0xD8, 0xBD, 0xD8, 0xCA, 0x3F, 0x3F, 0xB4, 0x42, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xC6, /* 0x80-0x83 */ + 0xD8, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xC4, 0xD8, 0xC7, /* 0x88-0x8B */ + 0xD8, 0xCB, 0x3F, 0x3F, 0xD4, 0xE3, 0xD8, 0xCD, /* 0x8C-0x8F */ + 0xDD, 0x47, 0x3F, 0x3F, 0xB4, 0x43, 0xD8, 0xCE, /* 0x90-0x93 */ + 0xD8, 0xB6, 0xD8, 0xC0, 0x3F, 0x3F, 0xD8, 0xC5, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0x41, 0xB4, 0x44, /* 0x98-0x9B */ + 0xD8, 0xCC, 0xD8, 0xCF, 0xD8, 0xBA, 0xD8, 0xB7, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xB9, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xD8, 0xBE, 0xD8, 0xBC, 0xB4, 0x45, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xD8, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xD8, 0xBF, 0x3F, 0x3F, 0xD8, 0xC1, 0xD8, 0xB5, /* 0xAC-0xAF */ + 0xDC, 0xFA, 0xDC, 0xF8, 0xB7, 0x42, 0xB7, 0x40, /* 0xB0-0xB3 */ + 0xDD, 0x43, 0xDC, 0xF9, 0xDD, 0x44, 0xDD, 0x40, /* 0xB4-0xB7 */ + 0xDC, 0xF7, 0xDD, 0x46, 0xDC, 0xF6, 0xDC, 0xFD, /* 0xB8-0xBB */ + 0xB6, 0xFE, 0xB6, 0xFD, 0xB6, 0xFC, 0xDC, 0xFB, /* 0xBC-0xBF */ + 0xDD, 0x41, 0xB6, 0xF9, 0xB7, 0x41, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xDC, 0xF4, 0x3F, 0x3F, 0xDC, 0xFE, 0xDC, 0xF3, /* 0xC4-0xC7 */ + 0xDC, 0xFC, 0xB6, 0xFA, 0xDD, 0x42, 0xDC, 0xF5, /* 0xC8-0xCB */ + 0xB6, 0xFB, 0xDD, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xE1, 0x6E, 0xB9, 0xE2, 0xB9, 0xE1, /* 0xD4-0xD7 */ + 0xB9, 0xE3, 0xE1, 0x7A, 0xE1, 0x70, 0xE1, 0x76, /* 0xD8-0xDB */ + 0xE1, 0x6B, 0xE1, 0x79, 0xE1, 0x78, 0xE1, 0x7C, /* 0xDC-0xDF */ + 0xE1, 0x75, 0xB9, 0xDE, 0xE1, 0x74, 0xB9, 0xE4, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE1, 0x6D, 0xB9, 0xDF, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xE1, 0x7B, 0xB9, 0xE0, 0xE1, 0x6F, 0xE1, 0x72, /* 0xE8-0xEB */ + 0xE1, 0x77, 0xE1, 0x71, 0xE1, 0x6C, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0x73, /* 0xF0-0xF3 */ + 0xE5, 0x55, 0xBC, 0x61, 0xE5, 0x58, 0xE5, 0x57, /* 0xF4-0xF7 */ + 0xE5, 0x5A, 0xE5, 0x5C, 0xF9, 0xDC, 0xBC, 0x5F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE5, 0x56, 0x3F, 0x3F, 0xE5, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5B[512] = { + 0x3F, 0x3F, 0xE5, 0x5D, 0xE5, 0x5B, 0xE5, 0x59, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xE5, 0x5F, 0x3F, 0x3F, 0xE5, 0x5E, /* 0x04-0x07 */ + 0xBC, 0x63, 0xBC, 0x5E, 0x3F, 0x3F, 0xBC, 0x60, /* 0x08-0x0B */ + 0xBC, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0x60, /* 0x0C-0x0F */ + 0xE9, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0x56, /* 0x10-0x13 */ + 0xE9, 0x55, 0x3F, 0x3F, 0xE9, 0x58, 0xE9, 0x51, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE9, 0x52, 0xE9, 0x5A, 0xE9, 0x53, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xBE, 0xC5, 0xE9, 0x5C, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xE9, 0x5B, 0xE9, 0x54, 0x3F, 0x3F, 0xEC, 0xD1, /* 0x20-0x23 */ + 0xC0, 0xA8, 0xEC, 0xCF, 0xEC, 0xD4, 0xEC, 0xD3, /* 0x24-0x27 */ + 0xE9, 0x59, 0x3F, 0x3F, 0xC0, 0xA7, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xEC, 0xD2, 0xEC, 0xCE, 0xEC, 0xD6, 0xEC, 0xD5, /* 0x2C-0x2F */ + 0xC0, 0xA6, 0x3F, 0x3F, 0xEC, 0xD0, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xBE, 0xC6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xC2, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xEF, 0xC1, 0xF1, 0xFA, 0xF1, 0xFB, 0xF1, 0xFC, /* 0x3C-0x3F */ + 0xC4, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0x5D, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xF4, 0x43, 0x3F, 0x3F, 0xF5, 0xC8, /* 0x44-0x47 */ + 0xF5, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xDB, /* 0x48-0x4B */ + 0xF6, 0xDC, 0xF7, 0xD5, 0xF8, 0xA7, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xA4, 0x6C, 0xA4, 0x6D, 0x3F, 0x3F, 0xA4, 0x6E, /* 0x50-0x53 */ + 0xA4, 0xD5, 0xA5, 0xA5, 0xC9, 0xD3, 0xA6, 0x72, /* 0x54-0x57 */ + 0xA6, 0x73, 0x3F, 0x3F, 0xA7, 0xB7, 0xA7, 0xB8, /* 0x58-0x5B */ + 0xA7, 0xB6, 0xA7, 0xB5, 0x3F, 0x3F, 0xA9, 0x73, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0x55, 0xA9, 0x75, /* 0x60-0x63 */ + 0xA9, 0x74, 0xCC, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xAB, 0xC4, 0x3F, 0x3F, 0xAE, 0x5D, /* 0x68-0x6B */ + 0xD1, 0x65, 0x3F, 0x3F, 0xD4, 0xF0, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xB1, 0x45, 0xB4, 0x47, 0xD4, 0xEF, 0xB4, 0x46, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xB9, 0xE5, 0x3F, 0x3F, 0xE1, 0x7D, /* 0x74-0x77 */ + 0xBE, 0xC7, 0x3F, 0x3F, 0xC0, 0xA9, 0xEC, 0xD7, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xC4, 0x5E, 0x3F, 0x3F, 0xC5, 0x70, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xC9, 0x72, 0x3F, 0x3F, 0xA5, 0xA6, /* 0x80-0x83 */ + 0xC9, 0x73, 0xA6, 0x76, 0x3F, 0x3F, 0xA6, 0x74, /* 0x84-0x87 */ + 0xA6, 0x75, 0xA6, 0x77, 0x3F, 0x3F, 0xA7, 0xBA, /* 0x88-0x8B */ + 0xA7, 0xB9, 0x3F, 0x3F, 0xCA, 0xBC, 0xA7, 0xBB, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xBD, 0xCC, 0x57, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xCC, 0x58, 0x3F, 0x3F, 0xA9, 0x76, /* 0x94-0x97 */ + 0xA9, 0x78, 0xA9, 0x7A, 0xA9, 0x77, 0xA9, 0x7B, /* 0x98-0x9B */ + 0xA9, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xC8, 0xAB, 0xC5, /* 0xA0-0xA3 */ + 0xAB, 0xC7, 0xAB, 0xC9, 0xAB, 0xC6, 0xD1, 0x66, /* 0xA4-0xA7 */ + 0xCE, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xD1, 0x68, 0xD1, 0x67, 0xAE, 0x63, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xAE, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAE, 0x60, /* 0xB0-0xB3 */ + 0xAE, 0x62, 0xAE, 0x64, 0xAE, 0x61, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xAE, 0x66, 0xAE, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0x4A, /* 0xBC-0xBF */ + 0xD4, 0xF2, 0xD4, 0xF1, 0xB1, 0x49, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xB1, 0x48, 0xB1, 0x47, 0xB1, 0x4B, 0xB1, 0x46, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0xD5, 0xD8, 0xD2, /* 0xC8-0xCB */ + 0xB4, 0x49, 0xD8, 0xD1, 0xD8, 0xD6, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xB4, 0x4B, 0xD8, 0xD4, 0xB4, 0x48, 0xB4, 0x4A, /* 0xD0-0xD3 */ + 0xD8, 0xD3, 0x3F, 0x3F, 0xDD, 0x48, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xDD, 0x49, 0xDD, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0xE6, 0xB9, 0xEE, /* 0xDC-0xDF */ + 0xE1, 0x7E, 0xB9, 0xE8, 0xB9, 0xEC, 0xE1, 0xA1, /* 0xE0-0xE3 */ + 0xB9, 0xED, 0xB9, 0xE9, 0xB9, 0xEA, 0xB9, 0xE7, /* 0xE4-0xE7 */ + 0xB9, 0xEB, 0xBC, 0x66, 0xD8, 0xD0, 0xBC, 0x67, /* 0xE8-0xEB */ + 0xBC, 0x65, 0x3F, 0x3F, 0xBC, 0x64, 0xE9, 0x5D, /* 0xEC-0xEF */ + 0xBE, 0xC8, 0xEC, 0xD8, 0xEC, 0xD9, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xC3, 0x64, 0xC4, 0x5F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xA4, 0x6F, 0x3F, 0x3F, 0xA6, 0x78, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x3F, 0x3F, 0xAB, 0xCA, 0x3F, 0x3F, 0xD1, 0x69, /* 0x00-0x03 */ + 0xAE, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0x4E, /* 0x04-0x07 */ + 0xB1, 0x4D, 0xB1, 0x4C, 0xB4, 0x4C, 0xB4, 0x4D, /* 0x08-0x0B */ + 0xD8, 0xD7, 0xB9, 0xEF, 0xBE, 0xC9, 0xA4, 0x70, /* 0x0C-0x0F */ + 0xC9, 0x5C, 0xA4, 0xD6, 0xC9, 0x74, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xC9, 0xD4, 0xA6, 0x79, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0x7C, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0x4B, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA4, 0x71, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xA4, 0xD7, 0xC9, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xCA, 0xBE, 0x3F, 0x3F, 0xCA, 0xBF, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xA7, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xD8, 0xD8, 0xB4, 0x4E, 0x3F, 0x3F, 0xDD, 0x4C, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xAA, /* 0x34-0x37 */ + 0xA4, 0x72, 0xA4, 0xA8, 0xA4, 0xD8, 0xC9, 0x75, /* 0x38-0x3B */ + 0xA5, 0xA7, 0x3F, 0x3F, 0xA7, 0xC0, 0xA7, 0xBF, /* 0x3C-0x3F */ + 0xA7, 0xBD, 0xA7, 0xBE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xCC, 0x59, 0xA9, 0x7E, 0xA9, 0xA1, 0xCC, 0x5A, /* 0x44-0x47 */ + 0xA9, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xCE, /* 0x48-0x4B */ + 0xCE, 0x78, 0xAB, 0xCD, 0xAB, 0xCB, 0xAB, 0xCC, /* 0x4C-0x4F */ + 0xAE, 0x6A, 0xAE, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xD1, 0x6B, 0xAE, 0x69, 0xD1, 0x6A, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xAE, 0x5E, 0xD4, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xB1, 0x50, 0xB1, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xB1, 0x4F, 0x3F, 0x3F, 0xB9, 0xF0, 0xE1, 0xA2, /* 0x60-0x63 */ + 0xBC, 0x68, 0xBC, 0x69, 0x3F, 0x3F, 0xE5, 0x61, /* 0x64-0x67 */ + 0xC0, 0xAB, 0xEF, 0xC2, 0xEF, 0xC3, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xC4, 0xDD, 0xF8, 0xA8, 0xC9, 0x4B, 0xA4, 0xD9, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xA4, 0x73, 0x3F, 0x3F, 0xC9, 0x77, /* 0x70-0x73 */ + 0xC9, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xA6, 0x7A, 0xC9, 0xD7, 0xC9, 0xD8, /* 0x78-0x7B */ + 0xC9, 0xD6, 0x3F, 0x3F, 0xC9, 0xD9, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xC7, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xCA, 0xC2, 0xCA, 0xC4, 0xCA, 0xC6, 0xCA, 0xC3, /* 0x88-0x8B */ + 0xA7, 0xC4, 0xCA, 0xC0, 0x3F, 0x3F, 0xCA, 0xC1, /* 0x8C-0x8F */ + 0xA7, 0xC1, 0xA7, 0xC2, 0xCA, 0xC5, 0xCA, 0xC8, /* 0x90-0x93 */ + 0xA7, 0xC3, 0xCA, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xCC, 0x68, 0x3F, 0x3F, 0xCC, 0x62, /* 0x9C-0x9F */ + 0xCC, 0x5D, 0xA9, 0xA3, 0xCC, 0x65, 0xCC, 0x63, /* 0xA0-0xA3 */ + 0xCC, 0x5C, 0xCC, 0x69, 0xCC, 0x6C, 0xCC, 0x67, /* 0xA4-0xA7 */ + 0xCC, 0x60, 0xA9, 0xA5, 0xCC, 0x66, 0xA9, 0xA6, /* 0xA8-0xAB */ + 0xCC, 0x61, 0xCC, 0x64, 0xCC, 0x5B, 0xCC, 0x5F, /* 0xAC-0xAF */ + 0xCC, 0x6B, 0xA9, 0xA7, 0x3F, 0x3F, 0xA9, 0xA8, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xCC, 0x5E, 0xCC, 0x6A, 0xA9, 0xA2, /* 0xB4-0xB7 */ + 0xA9, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xAB, 0xCE, 0xA4, /* 0xC4-0xC7 */ + 0xCE, 0xAA, 0xCE, 0xA3, 0xCE, 0xA5, 0xCE, 0x7D, /* 0xC8-0xCB */ + 0xCE, 0x7B, 0x3F, 0x3F, 0xCE, 0xAC, 0xCE, 0xA9, /* 0xCC-0xCF */ + 0xCE, 0x79, 0x3F, 0x3F, 0xAB, 0xD0, 0xCE, 0xA7, /* 0xD0-0xD3 */ + 0xCE, 0xA8, 0x3F, 0x3F, 0xCE, 0xA6, 0xCE, 0x7C, /* 0xD4-0xD7 */ + 0xCE, 0x7A, 0xAB, 0xCF, 0xCE, 0xA2, 0xCE, 0x7E, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xA1, 0xCE, 0xAD, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xAE, 0x6F, 0x3F, 0x3F, 0xAE, 0x6E, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xD1, 0x6C, 0xAE, 0x6B, 0xD1, 0x6E, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xAE, 0x70, 0xD1, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xAE, 0x73, 0x3F, 0x3F, 0xAE, 0x71, 0xD1, 0x70, /* 0xF4-0xF7 */ + 0xCE, 0xAE, 0xD1, 0x72, 0x3F, 0x3F, 0xAE, 0x6D, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xAE, 0x6C, 0x3F, 0x3F, 0xD1, 0x6D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0xD1, 0x71, 0xAE, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0x53, 0xB1, 0x52, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0xF5, /* 0x08-0x0B */ + 0xD4, 0xF9, 0xD4, 0xFB, 0xB1, 0x54, 0xD4, 0xFE, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xB1, 0x58, 0xD5, 0x41, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xB1, 0x5A, 0x3F, 0x3F, 0xB1, 0x56, 0xB1, 0x5E, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xB1, 0x5B, 0xD4, 0xF7, 0xB1, 0x55, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xD4, 0xF6, 0xD4, 0xF4, 0xD5, 0x43, /* 0x1C-0x1F */ + 0xD4, 0xF8, 0x3F, 0x3F, 0xB1, 0x57, 0xD5, 0x42, /* 0x20-0x23 */ + 0xB1, 0x5C, 0xD4, 0xFD, 0xD4, 0xFC, 0xB1, 0x5D, /* 0x24-0x27 */ + 0xD4, 0xFA, 0xB1, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0x44, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xD5, 0x40, 0xD8, 0xE7, 0xD8, 0xEE, 0xD8, 0xE3, /* 0x30-0x33 */ + 0xB4, 0x51, 0xD8, 0xDF, 0xD8, 0xEF, 0xD8, 0xD9, /* 0x34-0x37 */ + 0xD8, 0xEC, 0xD8, 0xEA, 0xD8, 0xE4, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xD8, 0xED, 0xD8, 0xE6, 0x3F, 0x3F, 0xD8, 0xDE, /* 0x3C-0x3F */ + 0xD8, 0xF0, 0xD8, 0xDC, 0xD8, 0xE9, 0xD8, 0xDA, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xD8, 0xF1, 0x3F, 0x3F, 0xB4, 0x52, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xD8, 0xEB, 0xDD, 0x4F, 0xD8, 0xDD, /* 0x48-0x4B */ + 0xB4, 0x4F, 0x3F, 0x3F, 0xD8, 0xE1, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xB4, 0x50, 0xD8, 0xE0, 0xD8, 0xE5, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xD8, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xD8, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0x53, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0x56, 0xDD, 0x4E, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xDD, 0x50, 0x3F, 0x3F, 0xDD, 0x55, /* 0x64-0x67 */ + 0xDD, 0x54, 0xB7, 0x43, 0x3F, 0x3F, 0xD8, 0xDB, /* 0x68-0x6B */ + 0xDD, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0x44, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xDD, 0x4D, 0xDD, 0x51, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xA9, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xE1, 0xB0, 0xE1, 0xA7, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xE1, 0xAE, 0xE1, 0xA5, 0xE1, 0xAD, 0xE1, 0xB1, /* 0x7C-0x7F */ + + 0xE1, 0xA4, 0xE1, 0xA8, 0xE1, 0xA3, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xB9, 0xF1, 0x3F, 0x3F, 0xE1, 0xA6, 0xB9, 0xF2, /* 0x84-0x87 */ + 0xE1, 0xAC, 0xE1, 0xAB, 0xE1, 0xAA, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xE1, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0x65, 0xE5, 0x67, /* 0x90-0x93 */ + 0xBC, 0x6B, 0xE5, 0x68, 0x3F, 0x3F, 0xE5, 0x63, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xE5, 0x62, 0xE5, 0x6C, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xE5, 0x6A, 0xBC, 0x6A, 0xE5, 0x6D, 0xE5, 0x64, /* 0x9C-0x9F */ + 0xE5, 0x69, 0xE5, 0x6B, 0xE5, 0x66, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0x61, /* 0xA4-0xA7 */ + 0xE9, 0x66, 0xE9, 0x60, 0xE9, 0x65, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE9, 0x5E, 0xE9, 0x68, 0xE9, 0x64, 0xE9, 0x69, /* 0xAC-0xAF */ + 0xE9, 0x63, 0xE9, 0x5F, 0xE9, 0x67, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xE9, 0x6A, 0xE9, 0x62, 0x3F, 0x3F, 0xEC, 0xDA, /* 0xB4-0xB7 */ + 0xC0, 0xAF, 0x3F, 0x3F, 0xC0, 0xAD, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xC0, 0xAC, 0xC0, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xEF, 0xC4, 0x3F, 0x3F, 0xF1, 0x72, 0xF1, 0xFD, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0x44, 0xF4, 0x45, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xC4, 0x60, 0x3F, 0x3F, 0xF5, 0xC9, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xC4, 0xDE, 0x3F, 0x3F, 0xF5, 0xCA, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xF6, 0xDE, 0xC5, 0x72, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xC5, 0x71, 0xF6, 0xDD, 0xC5, 0xC9, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xF7, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xA4, 0x74, 0xA6, 0x7B, 0xC9, 0xDA, /* 0xDC-0xDF */ + 0xCA, 0xCA, 0xA8, 0xB5, 0xB1, 0x5F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xA4, 0x75, 0xA5, 0xAA, 0xA5, 0xA9, /* 0xE4-0xE7 */ + 0xA5, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xC5, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAE, 0x74, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xDD, 0x57, 0xA4, 0x76, 0xA4, 0x77, 0xA4, 0x78, /* 0xF0-0xF3 */ + 0xA4, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xD1, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xCE, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xB4, 0x53, 0xA4, 0x79, 0xC9, 0x5D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0xAB, 0xA5, 0xAC, /* 0x00-0x03 */ + 0xC9, 0x78, 0x3F, 0x3F, 0xA6, 0x7C, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xCB, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xA7, 0xC6, 0x3F, 0x3F, 0xCA, 0xCC, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xA9, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xCC, 0x6E, 0xA9, 0xAC, 0xA9, 0xAB, 0xCC, 0x6D, /* 0x14-0x17 */ + 0xA9, 0xA9, 0xCC, 0x6F, 0xA9, 0xAA, 0xA9, 0xAD, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xAB, 0xD2, 0x3F, 0x3F, 0xAB, 0xD4, /* 0x1C-0x1F */ + 0xCE, 0xB3, 0xCE, 0xB0, 0xCE, 0xB1, 0xCE, 0xB2, /* 0x20-0x23 */ + 0xCE, 0xB4, 0xAB, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xD1, 0x74, 0xD1, 0x73, 0x3F, 0x3F, 0xAE, 0x76, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xAE, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0x62, /* 0x30-0x33 */ + 0xD5, 0x46, 0x3F, 0x3F, 0xB1, 0x61, 0xB1, 0x63, /* 0x34-0x37 */ + 0xB1, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xB4, 0x55, 0xD5, 0x45, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xB4, 0x56, 0xD8, 0xF3, 0x3F, 0x3F, 0xB4, 0x57, /* 0x40-0x43 */ + 0xD8, 0xF2, 0xB4, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0x5A, 0xDD, 0x5C, /* 0x48-0x4B */ + 0xB7, 0x45, 0xDD, 0x5B, 0xDD, 0x59, 0xDD, 0x58, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xB4, /* 0x50-0x53 */ + 0xB9, 0xF7, 0xB9, 0xF5, 0x3F, 0x3F, 0xB9, 0xF6, /* 0x54-0x57 */ + 0xE1, 0xB2, 0xE1, 0xB3, 0x3F, 0x3F, 0xB9, 0xF3, /* 0x58-0x5B */ + 0xE5, 0x71, 0xE5, 0x6F, 0x3F, 0x3F, 0xBC, 0x6D, /* 0x5C-0x5F */ + 0xE5, 0x70, 0xBC, 0x6E, 0xBC, 0x6C, 0xB9, 0xF4, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0x6D, 0xE9, 0x6B, /* 0x64-0x67 */ + 0xE9, 0x6C, 0xE5, 0x6E, 0xEC, 0xDC, 0xC0, 0xB0, /* 0x68-0x6B */ + 0xEC, 0xDB, 0xEF, 0xC5, 0xEF, 0xC6, 0xE9, 0x6E, /* 0x6C-0x6F */ + 0xF1, 0xFE, 0x3F, 0x3F, 0xA4, 0x7A, 0xA5, 0xAD, /* 0x70-0x73 */ + 0xA6, 0x7E, 0xC9, 0xDB, 0xA6, 0x7D, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xA9, 0xAF, 0xB7, 0x46, 0x3F, 0x3F, 0xA4, 0xDB, /* 0x78-0x7B */ + 0xA5, 0xAE, 0xAB, 0xD5, 0xB4, 0x58, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xC9, 0x79, 0x3F, 0x3F, 0xC9, 0x7A, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xC9, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xC8, /* 0x84-0x87 */ + 0xCA, 0xD0, 0xCA, 0xCE, 0xA7, 0xC9, 0xCA, 0xCD, /* 0x88-0x8B */ + 0xCA, 0xCF, 0xCA, 0xD1, 0x3F, 0x3F, 0xA7, 0xC7, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xA9, 0xB3, 0xA9, 0xB4, 0xA9, 0xB1, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0xB0, 0xCE, 0xB8, /* 0x98-0x9B */ + 0xA9, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xAB, 0xD6, 0x3F, 0x3F, 0xCE, 0xB7, 0xCE, 0xB9, /* 0xA0-0xA3 */ + 0xCE, 0xB6, 0xCE, 0xBA, 0xAB, 0xD7, 0xAE, 0x79, /* 0xA4-0xA7 */ + 0xD1, 0x75, 0x3F, 0x3F, 0xD1, 0x77, 0xAE, 0x77, /* 0xA8-0xAB */ + 0xD1, 0x78, 0xAE, 0x78, 0xD1, 0x76, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xCE, 0xB5, 0xD5, 0x47, 0xD5, 0x4A, 0xD5, 0x4B, /* 0xB0-0xB3 */ + 0xD5, 0x48, 0xB1, 0x67, 0xB1, 0x66, 0xB1, 0x64, /* 0xB4-0xB7 */ + 0xB1, 0x65, 0xD5, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0x68, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xB4, 0x5A, 0xB4, 0x5B, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xB4, 0x5C, 0xDD, 0x5D, 0xDD, 0x5F, 0xDD, 0x61, /* 0xC4-0xC7 */ + 0xB7, 0x48, 0xB7, 0x47, 0xB4, 0x59, 0xDD, 0x60, /* 0xC8-0xCB */ + 0xDD, 0x5E, 0x3F, 0x3F, 0xE1, 0xB8, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xE1, 0xB6, 0xE1, 0xBC, 0xB9, 0xF8, /* 0xD0-0xD3 */ + 0xE1, 0xBD, 0xE1, 0xBA, 0xB9, 0xF9, 0xE1, 0xB7, /* 0xD4-0xD7 */ + 0xE1, 0xB5, 0xE1, 0xBB, 0xBC, 0x70, 0xE5, 0x73, /* 0xD8-0xDB */ + 0xE1, 0xB9, 0xBC, 0x72, 0xE5, 0x74, 0xBC, 0x71, /* 0xDC-0xDF */ + 0xBC, 0x74, 0xE5, 0x75, 0xBC, 0x6F, 0xBC, 0x73, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE9, 0x73, 0xE9, 0x71, 0xE9, 0x70, /* 0xE4-0xE7 */ + 0xE9, 0x72, 0xE9, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xC3, 0x66, 0x3F, 0x3F, 0xF4, 0x46, 0xF4, 0x47, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xF5, 0xCB, 0xF6, 0xDF, 0xC6, 0x55, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0xB5, 0xA7, 0xCA, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xD8, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA4, 0x7B, 0xA4, 0xDC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0x3F, 0x3F, 0xA5, 0xAF, 0xC9, 0xDD, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xA7, 0xCB, 0xCA, 0xD2, 0x3F, 0x3F, 0xCE, 0xBB, /* 0x04-0x07 */ + 0xAB, 0xD9, 0x3F, 0x3F, 0xB9, 0xFA, 0xA4, 0x7C, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0xA1, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0x49, 0xA4, 0x7D, /* 0x10-0x13 */ + 0xA4, 0xDD, 0xA4, 0xDE, 0x3F, 0x3F, 0xA5, 0xB1, /* 0x14-0x17 */ + 0xA5, 0xB0, 0x3F, 0x3F, 0xC9, 0xDE, 0xA6, 0xA2, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xCA, 0xD3, 0x3F, 0x3F, 0xA7, 0xCC, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0x71, 0xCC, 0x72, /* 0x20-0x23 */ + 0xCC, 0x73, 0x3F, 0x3F, 0xA9, 0xB6, 0xA9, 0xB7, /* 0x24-0x27 */ + 0xCC, 0x70, 0xA9, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xAB, 0xDA, 0xCE, 0xBC, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xD1, 0x7A, 0xAE, 0x7A, 0x3F, 0x3F, 0xD1, 0x79, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xB1, 0x69, 0xD5, 0x4C, 0xB1, 0x6A, /* 0x34-0x37 */ + 0xD5, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xB4, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xDD, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xBF, /* 0x40-0x43 */ + 0xE1, 0xBE, 0x3F, 0x3F, 0xB9, 0xFB, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xBC, 0x75, 0xE5, 0x76, 0xBE, 0xCA, 0xE9, 0x74, /* 0x48-0x4B */ + 0xC0, 0xB1, 0x3F, 0x3F, 0xC5, 0x73, 0xF7, 0xD8, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xCC, 0x74, 0x3F, 0x3F, 0xCE, 0xBD, 0xB1, 0x6B, /* 0x54-0x57 */ + 0xD8, 0xF4, 0xB7, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xC2, 0x55, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA7, 0xCE, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xA7, 0xCD, 0xAB, 0xDB, 0x3F, 0x3F, 0xD1, 0x7B, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xB1, 0x6D, 0xB3, 0x43, 0xB1, 0x6E, /* 0x68-0x6B */ + 0xB1, 0x6C, 0xB4, 0x5E, 0x3F, 0x3F, 0xE1, 0xC0, /* 0x6C-0x6F */ + 0xB9, 0xFC, 0xBC, 0x76, 0x3F, 0x3F, 0xC9, 0x4C, /* 0x70-0x73 */ + 0xC9, 0xDF, 0x3F, 0x3F, 0xCA, 0xD5, 0xA7, 0xCF, /* 0x74-0x77 */ + 0xCA, 0xD4, 0xA7, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xA9, 0xBC, 0xCC, 0x77, 0xCC, 0x76, 0xA9, 0xBB, /* 0x7C-0x7F */ + + 0xA9, 0xB9, 0xA9, 0xBA, 0xCC, 0x75, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xAB, 0xDD, 0xCE, 0xBE, 0xAB, 0xE0, /* 0x84-0x87 */ + 0xAB, 0xDC, 0xAB, 0xE2, 0xAB, 0xDE, 0xAB, 0xDF, /* 0x88-0x8B */ + 0xAB, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xAE, 0x7D, 0xAE, 0x7C, 0xAE, 0x7B, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0x4F, 0xB1, 0x6F, /* 0x94-0x97 */ + 0xB1, 0x72, 0xB1, 0x70, 0x3F, 0x3F, 0xD5, 0x4E, /* 0x98-0x9B */ + 0xB1, 0x75, 0x3F, 0x3F, 0xB1, 0x71, 0xD5, 0x50, /* 0x9C-0x9F */ + 0xB1, 0x74, 0xB1, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xD8, 0xF6, 0xD8, 0xF5, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xB4, 0x61, 0xB4, 0x5F, 0xB4, 0x60, 0xD8, 0xF7, /* 0xA8-0xAB */ + 0xB7, 0x4B, 0xDD, 0x64, 0xB7, 0x4C, 0xDD, 0x63, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0x77, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xBC, 0x78, 0xE1, 0xC1, 0xBC, 0x77, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xB9, 0xFD, 0x3F, 0x3F, 0xEC, 0xDE, /* 0xB8-0xBB */ + 0xE9, 0x75, 0xC0, 0xB2, 0xEC, 0xDD, 0xF2, 0x40, /* 0xBC-0xBF */ + 0xF4, 0x48, 0xF4, 0x49, 0x3F, 0x3F, 0xA4, 0xDF, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xA5, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xC9, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xA7, 0xD2, 0xA7, 0xD4, 0x3F, 0x3F, 0xC9, 0xE2, /* 0xCC-0xCF */ + 0xCA, 0xD8, 0xCA, 0xD7, 0xCA, 0xD6, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xC9, 0xE1, 0xC9, 0xE0, 0xA6, 0xA4, 0xA7, 0xD3, /* 0xD4-0xD7 */ + 0xA7, 0xD1, 0xA6, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xA9, 0xBD, 0xCC, 0x78, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xA9, 0xBE, 0xCA, 0xDD, 0x3F, 0x3F, 0xCA, 0xDF, /* 0xE0-0xE3 */ + 0xCA, 0xDE, 0xCC, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xCA, 0xDA, 0x3F, 0x3F, 0xA7, 0xD8, 0xA7, 0xD6, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xCA, 0xD9, 0xCA, 0xDB, 0xCA, 0xE1, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xA7, 0xD5, 0x3F, 0x3F, 0xCA, 0xDC, /* 0xF0-0xF3 */ + 0xCA, 0xE5, 0xA9, 0xC0, 0x3F, 0x3F, 0xCA, 0xE2, /* 0xF4-0xF7 */ + 0xA7, 0xD7, 0x3F, 0x3F, 0xCA, 0xE0, 0xCA, 0xE3, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xA9, 0xBF, 0x3F, 0x3F, 0xA9, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0xCA, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xCC, 0xAF, 0xCC, 0xA2, 0xCC, 0x7E, /* 0x08-0x0B */ + 0xCC, 0xAE, 0xCC, 0xA9, 0xAB, 0xE7, 0xA9, 0xC2, /* 0x0C-0x0F */ + 0xCC, 0xAA, 0xCC, 0xAD, 0xAB, 0xE3, 0xCC, 0xAC, /* 0x10-0x13 */ + 0xA9, 0xC3, 0xA9, 0xC8, 0xA9, 0xC6, 0xCC, 0xA3, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xCC, 0x7C, 0xCC, 0xA5, 0xA9, 0xCD, /* 0x18-0x1B */ + 0xCC, 0xB0, 0xAB, 0xE4, 0xCC, 0xA6, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xAB, 0xE5, 0xA9, 0xC9, 0xCC, 0xA8, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xCE, 0xCD, 0xAB, 0xE6, 0xCC, 0x7B, 0xA9, 0xCA, /* 0x24-0x27 */ + 0xAB, 0xE8, 0xA9, 0xCB, 0xA9, 0xC7, 0xA9, 0xCC, /* 0x28-0x2B */ + 0xCC, 0xA7, 0xCC, 0x7A, 0xCC, 0xAB, 0xA9, 0xC4, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0x7D, 0xCC, 0xA4, /* 0x30-0x33 */ + 0xCC, 0xA1, 0xA9, 0xC5, 0x3F, 0x3F, 0xCE, 0xBF, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xCE, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xCE, 0xCA, 0xD1, 0xA1, 0xCE, 0xCB, 0xAB, 0xEE, /* 0x40-0x43 */ + 0xCE, 0xCE, 0xCE, 0xC4, 0xAB, 0xED, 0xCE, 0xC6, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xCE, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xCE, 0xC9, 0xAB, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xAE, 0xA3, 0x3F, 0x3F, 0xF9, 0xDA, 0xCE, 0xC5, /* 0x50-0x53 */ + 0xCE, 0xC1, 0xAE, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xCE, 0xCF, 0xAE, 0x7E, 0xD1, 0x7D, 0xCE, 0xC8, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xD1, 0x7C, 0xCE, 0xC3, 0xCE, 0xCC, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xEC, 0xAE, 0xA1, /* 0x60-0x63 */ + 0xAB, 0xF2, 0xAE, 0xA2, 0xCE, 0xD0, 0xD1, 0x7E, /* 0x64-0x67 */ + 0xAB, 0xEB, 0xAE, 0xA6, 0xAB, 0xF1, 0xAB, 0xF0, /* 0x68-0x6B */ + 0xAB, 0xEF, 0xAE, 0xA5, 0xCE, 0xD1, 0xAE, 0xA7, /* 0x6C-0x6F */ + 0xAB, 0xEA, 0x3F, 0x3F, 0xCE, 0xC2, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0x76, /* 0x7C-0x7F */ + + 0xD1, 0xA4, 0xD1, 0xA6, 0x3F, 0x3F, 0xD1, 0xA8, /* 0x80-0x83 */ + 0xAE, 0xA8, 0xAE, 0xAE, 0xD5, 0x53, 0xD1, 0xAC, /* 0x84-0x87 */ + 0xD1, 0xA3, 0xB1, 0x78, 0xD5, 0x51, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xAE, 0xAD, 0xAE, 0xAB, 0xD1, 0xAE, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xD5, 0x52, 0x3F, 0x3F, 0xD1, 0xA5, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xAE, 0xAC, 0xD1, 0xA9, 0xAE, 0xAF, 0xD1, 0xAB, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAE, 0xAA, 0xD1, 0xAA, /* 0x98-0x9B */ + 0xD1, 0xAD, 0xD1, 0xA7, 0x3F, 0x3F, 0xAE, 0xA9, /* 0x9C-0x9F */ + 0xB1, 0x79, 0x3F, 0x3F, 0xD1, 0xA2, 0xB1, 0x77, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xB1, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xD5, 0x55, 0xD5, 0x5E, 0xB4, 0x64, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xB1, 0x7C, 0xB1, 0xA3, 0xB4, 0x65, 0xD5, 0x60, /* 0xB4-0xB7 */ + 0xB1, 0xAA, 0xD8, 0xF9, 0xD5, 0x56, 0xB1, 0xA2, /* 0xB8-0xBB */ + 0xB1, 0xA5, 0xB1, 0x7E, 0xD5, 0x54, 0xD5, 0x62, /* 0xBC-0xBF */ + 0xD5, 0x65, 0xD9, 0x49, 0x3F, 0x3F, 0xD5, 0x63, /* 0xC0-0xC3 */ + 0xD8, 0xFD, 0xB1, 0xA1, 0xB1, 0xA8, 0xB1, 0xAC, /* 0xC4-0xC7 */ + 0xD5, 0x5D, 0xD8, 0xF8, 0xD5, 0x61, 0xB1, 0x7B, /* 0xC8-0xCB */ + 0xD8, 0xFA, 0xD5, 0x64, 0xD8, 0xFC, 0xD5, 0x59, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xB4, 0x62, 0x3F, 0x3F, 0xD5, 0x57, /* 0xD0-0xD3 */ + 0xD5, 0x58, 0xB1, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xB1, 0xA6, 0xD5, 0x5B, 0xB1, 0xAB, 0xD5, 0x5F, /* 0xD8-0xDB */ + 0xB1, 0xA4, 0xD5, 0x5C, 0x3F, 0x3F, 0xB1, 0xA9, /* 0xDC-0xDF */ + 0xB4, 0x66, 0xB4, 0x63, 0xD8, 0xFB, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xD5, 0x5A, 0x3F, 0x3F, 0xB1, 0x7D, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xB4, 0x6B, 0xB4, 0x6F, 0xD9, 0x40, 0xB7, 0x51, /* 0xF0-0xF3 */ + 0xB4, 0x6D, 0xD9, 0x44, 0xB4, 0x71, 0xDD, 0x65, /* 0xF4-0xF7 */ + 0xD9, 0x46, 0xB7, 0x53, 0xB4, 0x69, 0xB4, 0x6C, /* 0xF8-0xFB */ + 0xD9, 0x47, 0x3F, 0x3F, 0xD9, 0x48, 0xD9, 0x4E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_61[512] = { + 0xB4, 0x73, 0xB7, 0x54, 0x3F, 0x3F, 0xD9, 0x4A, /* 0x00-0x03 */ + 0xD9, 0x4F, 0xD9, 0x43, 0xB7, 0x5E, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xB7, 0x55, 0xB4, 0x72, 0xD9, 0x41, 0xD9, 0x50, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xB7, 0x5D, 0xB4, 0x70, 0xB7, 0x4E, /* 0x0C-0x0F */ + 0xD9, 0x4D, 0x3F, 0x3F, 0xB4, 0x74, 0xD9, 0x45, /* 0x10-0x13 */ + 0xD8, 0xFE, 0xB4, 0x6A, 0xD9, 0x42, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xD9, 0x4B, 0x3F, 0x3F, 0xB7, 0x4D, 0xB7, 0x52, /* 0x18-0x1B */ + 0xB4, 0x67, 0xD9, 0x4C, 0x3F, 0x3F, 0xB7, 0x50, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0x68, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0x5C, /* 0x24-0x27 */ + 0xE1, 0xC3, 0xDD, 0x70, 0x3F, 0x3F, 0xDD, 0x68, /* 0x28-0x2B */ + 0xE1, 0xC2, 0x3F, 0x3F, 0xDD, 0x6C, 0xDD, 0x6E, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0x6B, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xB7, 0x5B, 0x3F, 0x3F, 0xDD, 0x6A, 0xB7, 0x5F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xD2, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0x5A, 0xBA, 0x40, /* 0x3C-0x3F */ + 0xDD, 0x71, 0xE1, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xB7, 0x58, 0xDD, 0x69, 0xDD, 0x6D, 0xB9, 0xFE, /* 0x44-0x47 */ + 0xB7, 0x4F, 0xDD, 0x66, 0xDD, 0x67, 0xBA, 0x41, /* 0x48-0x4B */ + 0xB7, 0x57, 0xB7, 0x59, 0xB7, 0x56, 0xDD, 0x6F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xC8, 0xE1, 0xC9, /* 0x50-0x53 */ + 0xE1, 0xCE, 0xBC, 0x7D, 0xE1, 0xD5, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xBA, 0x47, 0x3F, 0x3F, 0xBA, 0x46, 0xE1, 0xD0, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xBC, 0x7C, 0xE1, 0xC5, 0xBA, 0x45, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xE1, 0xD4, 0xBA, 0x43, 0xBA, 0x44, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xE1, 0xD1, 0xE5, 0xAA, 0xBC, 0x7A, /* 0x64-0x67 */ + 0xB4, 0x6E, 0x3F, 0x3F, 0xE1, 0xD3, 0xBC, 0xA3, /* 0x68-0x6B */ + 0xE1, 0xCB, 0x3F, 0x3F, 0xBC, 0x7B, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xBC, 0xA2, 0xE1, 0xC6, 0xE1, 0xCA, 0xE1, 0xC7, /* 0x70-0x73 */ + 0xE1, 0xCD, 0xBA, 0x48, 0xBC, 0x79, 0xBA, 0x42, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xE5, 0x7A, 0xE1, 0xCF, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xBC, 0xA1, 0x3F, 0x3F, 0xBC, 0xA4, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xE1, 0xCC, 0x3F, 0x3F, 0xBC, 0x7E, 0xE5, 0x79, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE5, 0x7E, 0xBE, 0xCE, 0xE5, 0x78, /* 0x88-0x8B */ + 0xE9, 0xA3, 0xE5, 0xA9, 0xBC, 0xA8, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xBC, 0xA6, 0xBE, 0xCC, 0xE5, 0xA6, 0xE5, 0xA2, /* 0x90-0x93 */ + 0xBC, 0xAC, 0x3F, 0x3F, 0xE9, 0x78, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0xAA, 0xE5, 0xA1, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xE9, 0x76, 0x3F, 0x3F, 0xE5, 0xA5, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xE5, 0xA8, 0xE5, 0x7D, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xBC, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0xA5, /* 0xA4-0xA7 */ + 0xE9, 0x77, 0xBE, 0xCD, 0xE5, 0xA7, 0xBC, 0xA7, /* 0xA8-0xAB */ + 0xBC, 0xA9, 0xE5, 0xA4, 0xBC, 0xAD, 0xE5, 0xA3, /* 0xAC-0xAF */ + 0xE5, 0x7C, 0xE5, 0x7B, 0xBE, 0xCB, 0xE5, 0xAB, /* 0xB0-0xB3 */ + 0xE9, 0x7A, 0xEC, 0xE0, 0xBE, 0xD0, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xE9, 0xA2, 0x3F, 0x3F, 0xE9, 0x7E, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xEC, 0xE1, 0x3F, 0x3F, 0xBE, 0xD1, 0xE9, 0xA1, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xE9, 0x7C, 0xC0, 0xB4, 0xEC, 0xDF, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xE9, 0x79, 0xE9, 0x7B, 0xC0, 0xB5, /* 0xC4-0xC7 */ + 0xBE, 0xD3, 0xC0, 0xB3, 0xBE, 0xD2, 0xC0, 0xB7, /* 0xC8-0xCB */ + 0xE9, 0x7D, 0xBE, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xCF, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xEF, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xE7, 0xEF, 0xC8, /* 0xDC-0xDF */ + 0xEC, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x56, /* 0xE0-0xE3 */ + 0xEC, 0xE5, 0xEC, 0xE4, 0xC0, 0xB6, 0xEC, 0xE2, /* 0xE4-0xE7 */ + 0xEC, 0xE6, 0xEF, 0xD0, 0xEF, 0xCC, 0xEF, 0xCE, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xEF, 0xC9, 0xEF, 0xCA, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xEF, 0xCD, 0xEF, 0xCB, 0xC3, 0x67, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xC3, 0x6A, 0xC3, 0x69, 0xC3, 0x68, /* 0xF4-0xF7 */ + 0xC4, 0x61, 0xF4, 0x4A, 0xC4, 0x62, 0xF2, 0x41, /* 0xF8-0xFB */ + 0xC4, 0xDF, 0xF5, 0xCC, 0xC4, 0xE0, 0xC5, 0x74, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0xC5, 0xCA, 0xF7, 0xD9, 0x3F, 0x3F, 0xF7, 0xDA, /* 0x00-0x03 */ + 0xF7, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xBA, /* 0x04-0x07 */ + 0xA4, 0xE0, 0xC9, 0x7C, 0xA5, 0xB3, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xA6, 0xA6, 0xA6, 0xA7, 0xA6, 0xA5, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xA6, 0xA8, 0xA7, 0xDA, 0xA7, 0xD9, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xCC, 0xB1, 0xA9, 0xCF, 0xA9, 0xCE, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xD1, 0xAF, 0xB1, 0xAD, 0xB1, 0xAE, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0x75, /* 0x1C-0x1F */ + 0xDD, 0x72, 0xB7, 0x60, 0xB7, 0x61, 0xDD, 0x74, /* 0x20-0x23 */ + 0xDD, 0x76, 0xDD, 0x75, 0x3F, 0x3F, 0xE1, 0xD7, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xE1, 0xD6, 0xBA, 0x49, 0xE1, 0xD8, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xE5, 0xAC, 0xBC, 0xAE, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xBE, 0xD4, 0x3F, 0x3F, 0xC0, 0xB8, 0xC2, 0x57, /* 0x30-0x33 */ + 0xC0, 0xB9, 0x3F, 0x3F, 0xA4, 0xE1, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0xE6, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xCC, 0xB2, 0xA9, 0xD1, 0xA9, 0xD0, /* 0x3C-0x3F */ + 0xA9, 0xD2, 0xAB, 0xF3, 0xCE, 0xD2, 0xCE, 0xD3, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xB0, 0xAE, 0xB0, /* 0x44-0x47 */ + 0xB1, 0xAF, 0xB4, 0x76, 0xD9, 0x51, 0xA4, 0xE2, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xA4, 0x7E, 0xA4, 0xE3, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xC9, 0x7D, 0xA5, 0xB7, 0xA5, 0xB6, 0xA5, 0xB4, /* 0x50-0x53 */ + 0xA5, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xA6, 0xAB, 0xC9, 0xE9, 0xC9, 0xEB, 0xA6, 0xAA, /* 0x58-0x5B */ + 0xC9, 0xE3, 0x3F, 0x3F, 0xC9, 0xE4, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xC9, 0xEA, 0xC9, 0xE6, 0xC9, 0xE8, 0xA6, 0xA9, /* 0x60-0x63 */ + 0xC9, 0xE5, 0xC9, 0xEC, 0xC9, 0xE7, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xA7, 0xE1, 0xA7, 0xEA, 0xA7, 0xE8, /* 0x6C-0x6F */ + 0xCA, 0xF0, 0xCA, 0xED, 0xCA, 0xF5, 0xA7, 0xE6, /* 0x70-0x73 */ + 0xCA, 0xF6, 0x3F, 0x3F, 0xA7, 0xDF, 0xCA, 0xF3, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xA7, 0xE5, 0xCA, 0xEF, 0xCA, 0xEE, /* 0x78-0x7B */ + 0xA7, 0xE3, 0xCA, 0xF4, 0xA7, 0xE4, 0xA9, 0xD3, /* 0x7C-0x7F */ + + 0xA7, 0xDE, 0xCA, 0xF1, 0x3F, 0x3F, 0xCA, 0xE7, /* 0x80-0x83 */ + 0xA7, 0xDB, 0x3F, 0x3F, 0xA7, 0xEE, 0xCA, 0xEC, /* 0x84-0x87 */ + 0xCA, 0xF2, 0xA7, 0xE0, 0xA7, 0xE2, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xCA, 0xE8, 0x3F, 0x3F, 0xCA, 0xE9, 0xCA, 0xEA, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xA7, 0xED, 0xA7, 0xE7, 0xA7, 0xEC, /* 0x90-0x93 */ + 0xCA, 0xEB, 0xA7, 0xEB, 0xA7, 0xDD, 0xA7, 0xDC, /* 0x94-0x97 */ + 0xA7, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xA9, 0xE1, 0xCC, 0xBE, 0xCC, 0xB7, 0xA9, 0xDC, /* 0xA8-0xAB */ + 0xA9, 0xEF, 0xCC, 0xB3, 0xCC, 0xBA, 0xCC, 0xBC, /* 0xAC-0xAF */ + 0xCC, 0xBF, 0xA9, 0xEA, 0x3F, 0x3F, 0xCC, 0xBB, /* 0xB0-0xB3 */ + 0xCC, 0xB4, 0xA9, 0xE8, 0xCC, 0xB8, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xCC, 0xC0, 0xA9, 0xD9, 0x3F, 0x3F, 0xCC, 0xBD, /* 0xB8-0xBB */ + 0xA9, 0xE3, 0xA9, 0xE2, 0xCC, 0xB6, 0xA9, 0xD7, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0xD8, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xA9, 0xD6, 0x3F, 0x3F, 0xA9, 0xEE, 0xA9, 0xE6, /* 0xC4-0xC7 */ + 0xA9, 0xE0, 0xA9, 0xD4, 0xCC, 0xB9, 0xA9, 0xDF, /* 0xC8-0xCB */ + 0xA9, 0xD5, 0xA9, 0xE7, 0xA9, 0xF0, 0xCE, 0xD4, /* 0xCC-0xCF */ + 0xA9, 0xE4, 0xCC, 0xB5, 0xA9, 0xDA, 0xA9, 0xDD, /* 0xD0-0xD3 */ + 0xA9, 0xDE, 0x3F, 0x3F, 0xA9, 0xEC, 0xA9, 0xED, /* 0xD4-0xD7 */ + 0xA9, 0xEB, 0xA9, 0xE5, 0xA9, 0xE9, 0xA9, 0xDB, /* 0xD8-0xDB */ + 0xAB, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xDA, /* 0xE8-0xEB */ + 0xAC, 0x41, 0xAB, 0xF8, 0xAB, 0xFA, 0xAC, 0x40, /* 0xEC-0xEF */ + 0xCE, 0xE6, 0xAB, 0xFD, 0xD1, 0xB1, 0xAE, 0xB1, /* 0xF0-0xF3 */ + 0xAC, 0x43, 0xCE, 0xD7, 0xCE, 0xDF, 0xAB, 0xFE, /* 0xF4-0xF7 */ + 0xCE, 0xDE, 0xCE, 0xDB, 0xCE, 0xE3, 0xCE, 0xE5, /* 0xF8-0xFB */ + 0xAB, 0xF7, 0xAB, 0xFB, 0xAC, 0x42, 0xAE, 0xB3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0xCE, 0xE0, 0xAB, 0xF9, 0xAC, 0x45, 0xCE, 0xD9, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0xFC, /* 0x04-0x07 */ + 0xAE, 0xB2, 0xAB, 0xF6, 0x3F, 0x3F, 0xCE, 0xD6, /* 0x08-0x0B */ + 0xCE, 0xDD, 0xCE, 0xD5, 0xCE, 0xD8, 0xCE, 0xDC, /* 0x0C-0x0F */ + 0xD1, 0xB2, 0xAC, 0x44, 0x3F, 0x3F, 0xCE, 0xE1, /* 0x10-0x13 */ + 0xCE, 0xE2, 0xCE, 0xE4, 0xAB, 0xF5, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xAE, 0xC1, 0xD1, 0xBE, 0xAE, 0xBF, 0xAE, 0xC0, /* 0x28-0x2B */ + 0xD1, 0xB4, 0xD1, 0xC4, 0x3F, 0x3F, 0xAE, 0xB6, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0x66, 0xD1, 0xC6, /* 0x30-0x33 */ + 0xD1, 0xC0, 0x3F, 0x3F, 0xD1, 0xB7, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xD1, 0xC9, 0xD1, 0xBA, 0xAE, 0xBC, 0xD5, 0x7D, /* 0x38-0x3B */ + 0xD1, 0xBD, 0xAE, 0xBE, 0xAE, 0xB5, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xD1, 0xCB, 0xD1, 0xBF, 0xAE, 0xB8, 0xD1, 0xB8, /* 0x40-0x43 */ + 0xD1, 0xB5, 0xD1, 0xB6, 0xAE, 0xB9, 0xD1, 0xC5, /* 0x44-0x47 */ + 0xD1, 0xCC, 0xAE, 0xBB, 0xD1, 0xBC, 0xD1, 0xBB, /* 0x48-0x4B */ + 0xAE, 0xC3, 0xAE, 0xC2, 0xAE, 0xB4, 0xAE, 0xBA, /* 0x4C-0x4F */ + 0xAE, 0xBD, 0xD1, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xD1, 0xC2, 0xAE, 0xB7, 0xD1, 0xB3, 0xD1, 0xCA, /* 0x54-0x57 */ + 0xD1, 0xC1, 0xD1, 0xC3, 0xD1, 0xC7, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xD5, 0x67, 0x3F, 0x3F, 0xB1, 0xB7, /* 0x64-0x67 */ + 0xB1, 0xCB, 0xB1, 0xCA, 0x3F, 0x3F, 0xB1, 0xBF, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xD5, 0x79, 0xD5, 0x75, 0xD5, 0x72, /* 0x6C-0x6F */ + 0xD5, 0xA6, 0xB1, 0xBA, 0xB1, 0xB2, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xD5, 0x77, 0xB4, 0xA8, 0xB1, 0xB6, /* 0x74-0x77 */ + 0xD5, 0xA1, 0x3F, 0x3F, 0xB1, 0xCC, 0xB1, 0xC9, /* 0x78-0x7B */ + 0xD5, 0x7B, 0xD5, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xB1, 0xC8, 0xD5, 0xA3, 0xD5, 0x69, 0xB1, 0xBD, /* 0x80-0x83 */ + 0xB1, 0xC1, 0xD5, 0xA2, 0x3F, 0x3F, 0xD5, 0x73, /* 0x84-0x87 */ + 0xB1, 0xC2, 0xB1, 0xBC, 0xD5, 0x68, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xB4, 0x78, 0xD5, 0xA5, 0xD5, 0x71, 0xB1, 0xC7, /* 0x8C-0x8F */ + 0xD5, 0x74, 0xD5, 0xA4, 0xB1, 0xC6, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xD9, 0x52, 0x3F, 0x3F, 0xB1, 0xB3, 0xD5, 0x6F, /* 0x94-0x97 */ + 0xB1, 0xB8, 0xB1, 0xC3, 0x3F, 0x3F, 0xB1, 0xBE, /* 0x98-0x9B */ + 0xD5, 0x78, 0xD5, 0x6E, 0xD5, 0x6C, 0xD5, 0x7E, /* 0x9C-0x9F */ + 0xB1, 0xB0, 0xB1, 0xC4, 0xB1, 0xB4, 0xB4, 0x77, /* 0xA0-0xA3 */ + 0xD5, 0x7C, 0xB1, 0xB5, 0x3F, 0x3F, 0xB1, 0xB1, /* 0xA4-0xA7 */ + 0xB1, 0xC0, 0xB1, 0xBB, 0xB1, 0xB9, 0xD5, 0x70, /* 0xA8-0xAB */ + 0xB1, 0xC5, 0xD5, 0x6D, 0xD5, 0x7A, 0xD5, 0x76, /* 0xAC-0xAF */ + 0xD9, 0x54, 0xD9, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD5, 0x6B, 0xD9, 0x64, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xB4, 0x7A, 0x3F, 0x3F, 0xD9, 0x6A, 0xD9, 0x59, /* 0xC0-0xC3 */ + 0xD9, 0x67, 0xDD, 0x77, 0xB4, 0x7D, 0xD9, 0x6B, /* 0xC4-0xC7 */ + 0xD9, 0x6E, 0xB4, 0x7C, 0xD9, 0x5C, 0xD9, 0x6D, /* 0xC8-0xCB */ + 0xD9, 0x6C, 0xB4, 0x7E, 0xD9, 0x55, 0xB4, 0x79, /* 0xCC-0xCF */ + 0xB4, 0xA3, 0x3F, 0x3F, 0xB4, 0xA1, 0xD9, 0x69, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xD9, 0x5F, 0xB4, 0xA5, 0xD9, 0x70, /* 0xD4-0xD7 */ + 0xD9, 0x68, 0xD9, 0x71, 0xB4, 0xAD, 0xB4, 0xAB, /* 0xD8-0xDB */ + 0xD9, 0x66, 0xD9, 0x65, 0x3F, 0x3F, 0xD9, 0x63, /* 0xDC-0xDF */ + 0xD9, 0x5D, 0xB4, 0xA4, 0x3F, 0x3F, 0xB4, 0xA2, /* 0xE0-0xE3 */ + 0xD1, 0xB9, 0xD9, 0x56, 0x3F, 0x3F, 0xDD, 0xB7, /* 0xE4-0xE7 */ + 0xD9, 0x57, 0xB4, 0x7B, 0xB4, 0xAA, 0xDD, 0x79, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xB4, 0xA6, 0xB4, 0xA7, 0xD9, 0x58, /* 0xEC-0xEF */ + 0xD9, 0x6F, 0xDD, 0x78, 0xD9, 0x60, 0xD9, 0x5B, /* 0xF0-0xF3 */ + 0xB4, 0xA9, 0xD9, 0x61, 0xD9, 0x5E, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xB4, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_64[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0x70, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xDD, 0x7C, 0xDD, 0xB1, 0xDD, 0xB6, /* 0x08-0x0B */ + 0xDD, 0xAA, 0xB7, 0x6C, 0xDD, 0xBB, 0xB7, 0x69, /* 0x0C-0x0F */ + 0xDD, 0x7A, 0x3F, 0x3F, 0xDD, 0x7B, 0xB7, 0x62, /* 0x10-0x13 */ + 0xB7, 0x6B, 0xDD, 0xA4, 0xB7, 0x6E, 0xB7, 0x6F, /* 0x14-0x17 */ + 0xDD, 0xA5, 0x3F, 0x3F, 0xDD, 0xB2, 0xDD, 0xB8, /* 0x18-0x1B */ + 0xB7, 0x6A, 0x3F, 0x3F, 0xB7, 0x64, 0xDD, 0xA3, /* 0x1C-0x1F */ + 0xDD, 0x7D, 0xDD, 0xBA, 0xDD, 0xA8, 0xDD, 0xA9, /* 0x20-0x23 */ + 0xDD, 0x7E, 0xDD, 0xB4, 0xDD, 0xAB, 0xDD, 0xB5, /* 0x24-0x27 */ + 0xDD, 0xAD, 0x3F, 0x3F, 0xB7, 0x65, 0xE1, 0xD9, /* 0x28-0x2B */ + 0xB7, 0x68, 0xB7, 0x66, 0xDD, 0xB9, 0xDD, 0xB0, /* 0x2C-0x2F */ + 0xDD, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xA1, /* 0x30-0x33 */ + 0xBA, 0x53, 0xDD, 0xAF, 0xB7, 0x6D, 0xDD, 0xA7, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xDD, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xB7, 0x67, 0xB7, 0x63, 0xE1, 0xEE, /* 0x3C-0x3F */ + 0xDD, 0xB3, 0xDD, 0xAE, 0x3F, 0x3F, 0xDD, 0xA2, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xE9, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xE1, 0xDA, 0xE1, 0xE5, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xE1, 0xEC, 0xBA, 0x51, 0xB4, 0xAC, 0xE1, 0xEA, /* 0x50-0x53 */ + 0xBA, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xBA, 0x4B, 0xE1, 0xF1, 0x3F, 0x3F, 0xE1, 0xDB, /* 0x58-0x5B */ + 0xE1, 0xE8, 0xE1, 0xDC, 0xE1, 0xE7, 0xBA, 0x4F, /* 0x5C-0x5F */ + 0xE1, 0xEB, 0xD9, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xE1, 0xF2, 0xE1, 0xE3, 0xBA, 0x52, /* 0x64-0x67 */ + 0xE5, 0xBA, 0xBC, 0xAF, 0x3F, 0x3F, 0xE1, 0xF0, /* 0x68-0x6B */ + 0xE1, 0xEF, 0xBA, 0x54, 0xE5, 0xAD, 0xBC, 0xB0, /* 0x6C-0x6F */ + 0xE5, 0xAE, 0x3F, 0x3F, 0xE1, 0xDF, 0xE1, 0xE0, /* 0x70-0x73 */ + 0xE1, 0xDD, 0xE1, 0xE2, 0xE1, 0xDE, 0xE1, 0xF3, /* 0x74-0x77 */ + 0xBA, 0x4E, 0xBC, 0xB1, 0xBA, 0x50, 0xBA, 0x55, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE1, 0xE1, 0x3F, 0x3F, 0xE1, 0xED, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xE1, 0xE6, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xE5, 0xB1, 0x3F, 0x3F, 0xBA, 0x4A, /* 0x84-0x87 */ + 0xBC, 0xB4, 0xE9, 0xAA, 0xE5, 0xB6, 0xE5, 0xB5, /* 0x88-0x8B */ + 0xE5, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xB4, /* 0x8C-0x8F */ + 0xBC, 0xB5, 0x3F, 0x3F, 0xBC, 0xBB, 0xBC, 0xB8, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xBC, 0xB9, 0xE5, 0xAF, 0xE5, 0xB2, /* 0x94-0x97 */ + 0xE5, 0xBC, 0xBC, 0xC1, 0xBC, 0xBF, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xE5, 0xB3, 0xD9, 0x5A, 0xBC, 0xB2, 0xE5, 0xB9, /* 0x9C-0x9F */ + 0xE5, 0xB0, 0x3F, 0x3F, 0xBC, 0xC2, 0xE5, 0xB8, /* 0xA0-0xA3 */ + 0xBA, 0x4D, 0xBC, 0xB7, 0xE1, 0xE4, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xBC, 0xBA, 0x3F, 0x3F, 0xBC, 0xBE, /* 0xA8-0xAB */ + 0xBC, 0xC0, 0xBC, 0xBD, 0xBC, 0xBC, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xBC, 0xB6, 0xE5, 0xBB, 0xBC, 0xB3, 0xBC, 0xC3, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0xD8, /* 0xB8-0xBB */ + 0xBE, 0xD9, 0xE9, 0xA9, 0xBE, 0xE2, 0xBE, 0xDF, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xBE, 0xD6, 0xBE, 0xDD, 0xE9, 0xAB, /* 0xC0-0xC3 */ + 0xBE, 0xDB, 0xBE, 0xD5, 0x3F, 0x3F, 0xBE, 0xDC, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xE9, 0xA8, 0xC0, 0xBB, 0xBE, 0xD7, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xBE, 0xDE, 0xC0, 0xBA, 0xE9, 0xA7, /* 0xCC-0xCF */ + 0xE9, 0xA6, 0x3F, 0x3F, 0xBE, 0xE0, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xBE, 0xE1, 0x3F, 0x3F, 0xE9, 0xA5, 0xE9, 0xA4, /* 0xD4-0xD7 */ + 0xC0, 0xBC, 0xE9, 0xAE, 0xBE, 0xDA, 0xE9, 0xAC, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xC0, 0xBD, 0x3F, 0x3F, 0xC0, 0xC2, 0xEC, 0xEA, /* 0xE0-0xE3 */ + 0xEC, 0xEC, 0x3F, 0x3F, 0xC0, 0xBF, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xEC, 0xED, 0xEC, 0xE9, 0x3F, 0x3F, 0xEC, 0xEB, /* 0xE8-0xEB */ + 0xC0, 0xC0, 0xC0, 0xC3, 0x3F, 0x3F, 0xEC, 0xE8, /* 0xEC-0xEF */ + 0xC0, 0xBE, 0xC0, 0xC1, 0xC2, 0x59, 0xE9, 0xAD, /* 0xF0-0xF3 */ + 0xC2, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x5E, /* 0xF4-0xF7 */ + 0xEF, 0xD4, 0x3F, 0x3F, 0xC2, 0x5C, 0xC2, 0x5D, /* 0xF8-0xFB */ + 0xEF, 0xD7, 0xEF, 0xD3, 0xC2, 0x5A, 0xEF, 0xD1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0xC3, 0x6B, 0xEF, 0xD5, 0x3F, 0x3F, 0xEF, 0xD6, /* 0x00-0x03 */ + 0xEF, 0xD2, 0x3F, 0x3F, 0xC2, 0x5B, 0xF2, 0x42, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF2, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xF2, 0x46, 0xF2, 0x44, 0xF2, 0x47, 0xC3, 0x6C, /* 0x0C-0x0F */ + 0xF2, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0x4E, /* 0x10-0x13 */ + 0xC4, 0x64, 0xF4, 0x4D, 0xF4, 0x4C, 0xF4, 0x4B, /* 0x14-0x17 */ + 0xC4, 0x63, 0xC4, 0x65, 0x3F, 0x3F, 0xF5, 0xCD, /* 0x18-0x1B */ + 0xC4, 0xE2, 0xC4, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xF6, 0xE1, 0xF6, 0xE0, 0xF6, 0xE3, 0xC5, 0xCB, /* 0x20-0x23 */ + 0xC5, 0x75, 0xF7, 0xDD, 0xF6, 0xE2, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xF7, 0xDC, 0xC5, 0xCD, 0xC5, 0xCC, /* 0x28-0x2B */ + 0xC5, 0xF3, 0xF8, 0xA9, 0xF8, 0xEF, 0xA4, 0xE4, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0x72, 0xE9, 0xAF, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0xAC, 0xCA, 0xF7, /* 0x34-0x37 */ + 0xA7, 0xF1, 0xA7, 0xEF, 0x3F, 0x3F, 0xA7, 0xF0, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xCC, 0xC1, 0xA9, 0xF1, 0xAC, 0x46, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xCE, 0xE7, 0x3F, 0x3F, 0xCE, 0xE8, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xAC, 0x47, 0xD1, 0xCE, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xAE, 0xC4, 0xAE, 0xC5, 0xD1, 0xCD, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0xD3, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xB1, 0xCF, 0x3F, 0x3F, 0xD5, 0xA7, /* 0x50-0x53 */ + 0xB1, 0xD6, 0xB1, 0xD5, 0xB1, 0xCE, 0xB1, 0xD1, /* 0x54-0x57 */ + 0xB1, 0xD4, 0xB1, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xD9, 0x76, 0xB1, 0xCD, 0xB4, 0xAF, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0xB1, 0xB4, 0xB2, /* 0x60-0x63 */ + 0xD9, 0x75, 0xD9, 0x78, 0xB4, 0xB0, 0xD9, 0x73, /* 0x64-0x67 */ + 0xD9, 0x77, 0x3F, 0x3F, 0xD9, 0x74, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xB7, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xBC, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBA, 0x56, 0xE1, 0xF4, /* 0x70-0x73 */ + 0xBE, 0xE3, 0xBC, 0xC4, 0xE5, 0xBD, 0xBC, 0xC5, /* 0x74-0x77 */ + 0xBC, 0xC6, 0xE5, 0xBF, 0xE5, 0xBE, 0xE5, 0xC0, /* 0x78-0x7B */ + 0xE9, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xB0, /* 0x7C-0x7F */ + + 0xEC, 0xEF, 0xEC, 0xEE, 0xC0, 0xC4, 0xC0, 0xC5, /* 0x80-0x83 */ + 0xF2, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0xA4, 0xE5, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xD9, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xB4, 0xB4, 0xB4, 0xB3, 0xDD, 0xBD, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xEF, 0xD8, 0xC4, 0xE3, 0xF7, 0xDE, 0xA4, 0xE6, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xAE, 0xC6, 0x3F, 0x3F, 0xB1, 0xD8, /* 0x98-0x9B */ + 0xB1, 0xD7, 0xD9, 0x7A, 0xD9, 0x7B, 0xB7, 0x72, /* 0x9C-0x9F */ + 0xE1, 0xF5, 0xBA, 0x57, 0xE9, 0xB2, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xA4, 0xE7, 0xA5, 0xB8, 0x3F, 0x3F, 0xA9, 0xF2, /* 0xA4-0xA7 */ + 0xCC, 0xC2, 0x3F, 0x3F, 0xCE, 0xE9, 0xAC, 0x48, /* 0xA8-0xAB */ + 0xB1, 0xD9, 0x3F, 0x3F, 0xD9, 0x7C, 0xB4, 0xB5, /* 0xAC-0xAF */ + 0xB7, 0x73, 0x3F, 0x3F, 0xE5, 0xC1, 0xE5, 0xC2, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xF0, 0xC2, 0x5F, /* 0xB4-0xB7 */ + 0xF8, 0xF0, 0xA4, 0xE8, 0x3F, 0x3F, 0xCC, 0xC3, /* 0xB8-0xBB */ + 0xA9, 0xF3, 0xAC, 0x49, 0x3F, 0x3F, 0xCE, 0xEA, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xAE, 0xC7, 0xD1, 0xD2, 0xD1, 0xD0, /* 0xC0-0xC3 */ + 0xD1, 0xD1, 0xAE, 0xC8, 0xD1, 0xCF, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0xDB, /* 0xC8-0xCB */ + 0xB1, 0xDC, 0xD5, 0xA8, 0xB1, 0xDD, 0xB1, 0xDA, /* 0xCC-0xCF */ + 0xD9, 0x7D, 0x3F, 0x3F, 0xD9, 0x7E, 0xDD, 0xBE, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBA, 0x59, 0xBA, 0x58, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xF1, 0xEF, 0xD9, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF2, 0x4A, 0xF2, 0x49, 0xF4, 0x4F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xC9, 0x5E, 0xAC, 0x4A, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xA4, 0xE9, 0xA5, 0xB9, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xA6, 0xAE, 0xA6, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xA6, 0xAF, 0xA6, 0xB0, 0xC9, 0xEE, 0xC9, 0xED, /* 0xEC-0xEF */ + 0xCA, 0xF8, 0xA7, 0xF2, 0xCA, 0xFB, 0xCA, 0xFA, /* 0xF0-0xF3 */ + 0xCA, 0xF9, 0xCA, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA9, 0xF4, 0xCC, 0xC9, /* 0xF8-0xFB */ + 0xCC, 0xC5, 0xCC, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0xA9, 0xFB, 0x3F, 0x3F, 0xA9, 0xF9, 0xCC, 0xCA, /* 0x00-0x03 */ + 0xCC, 0xC6, 0xCC, 0xCD, 0xA9, 0xF8, 0xAA, 0x40, /* 0x04-0x07 */ + 0xCC, 0xC8, 0xCC, 0xC4, 0xA9, 0xFE, 0xCC, 0xCB, /* 0x08-0x0B */ + 0xA9, 0xF7, 0xCC, 0xCC, 0xA9, 0xFA, 0xA9, 0xFC, /* 0x0C-0x0F */ + 0xCC, 0xD0, 0xCC, 0xCF, 0xCC, 0xC7, 0xA9, 0xF6, /* 0x10-0x13 */ + 0xA9, 0xF5, 0xA9, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xCE, 0xEF, 0xCE, 0xF5, 0x3F, 0x3F, 0xAC, 0x50, /* 0x1C-0x1F */ + 0xAC, 0x4D, 0xCE, 0xEC, 0xCE, 0xF1, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xAC, 0x53, 0xAC, 0x4B, 0xCE, 0xF0, 0xAC, 0x4E, /* 0x24-0x27 */ + 0xAC, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, 0xCE, 0xF3, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xAC, 0x4C, 0xCE, 0xF8, 0xAC, 0x4F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xAC, 0x52, 0xCE, 0xED, 0xCE, 0xF2, /* 0x30-0x33 */ + 0xCE, 0xF6, 0xCE, 0xEE, 0xCE, 0xEB, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xCE, 0xF7, 0xCE, 0xF4, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xAE, 0xD0, 0xAE, 0xC9, 0xAE, 0xCC, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xAE, 0xCF, 0x3F, 0x3F, 0xD1, 0xD5, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xAE, 0xCA, 0xD1, 0xD3, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xAE, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0xAE, 0xCB, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xD1, 0xD6, 0xAE, 0xCD, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xD5, 0xAC, 0xB1, 0xDF, 0xD5, 0xAB, /* 0x58-0x5B */ + 0xD5, 0xAD, 0xB1, 0xDE, 0xB1, 0xE3, 0xD1, 0xD4, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xD5, 0xAA, 0xD5, 0xAE, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xB1, 0xE0, 0xD5, 0xA9, 0xB1, 0xE2, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xB1, 0xE1, 0x3F, 0x3F, 0xD9, 0xA7, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xD9, 0xA2, 0x3F, 0x3F, 0xB4, 0xB6, 0xB4, 0xBA, /* 0x6C-0x6F */ + 0xB4, 0xB7, 0xD9, 0xA5, 0xD9, 0xA8, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xB4, 0xB8, 0x3F, 0x3F, 0xB4, 0xB9, 0xB4, 0xBE, /* 0x74-0x77 */ + 0xDD, 0xC7, 0xD9, 0xA6, 0xB4, 0xBC, 0xD9, 0xA3, /* 0x78-0x7B */ + 0xD9, 0xA1, 0x3F, 0x3F, 0xB4, 0xBD, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xD9, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xB7, 0x79, 0x3F, 0x3F, 0xDD, 0xBF, 0xB7, 0x76, /* 0x84-0x87 */ + 0xB7, 0x77, 0xB7, 0x75, 0xDD, 0xC4, 0xDD, 0xC3, /* 0x88-0x8B */ + 0xDD, 0xC0, 0xB7, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xDD, 0xC2, 0xB4, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xDD, 0xC6, 0xDD, 0xC1, 0xB7, 0x78, 0xB7, 0x74, /* 0x94-0x97 */ + 0xB7, 0x7A, 0xDD, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xBA, 0x5C, 0x3F, 0x3F, 0xE1, 0xF8, /* 0x9C-0x9F */ + 0xE1, 0xF7, 0xE1, 0xF6, 0xBA, 0x5A, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xBA, 0x5B, 0xE5, 0xC5, 0xE5, 0xC8, 0xBC, 0xC8, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0xC7, 0xE5, 0xC9, /* 0xAC-0xAF */ + 0xE5, 0xC4, 0xBC, 0xCA, 0xE5, 0xC6, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xBC, 0xC9, 0xE5, 0xC3, 0x3F, 0x3F, 0xE5, 0xC7, /* 0xB4-0xB7 */ + 0xBE, 0xE9, 0xBE, 0xE6, 0xE9, 0xBB, 0xE9, 0xBA, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xE9, 0xB9, 0xE9, 0xB4, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xE9, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xBE, 0xE7, 0x3F, 0x3F, 0xBE, 0xE4, 0xBE, 0xE8, /* 0xC4-0xC7 */ + 0xE9, 0xB3, 0xBE, 0xE5, 0xE9, 0xB6, 0xE9, 0xB7, /* 0xC8-0xCB */ + 0xE9, 0xBC, 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xB8, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xF2, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xC7, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xEF, 0xDC, 0xC0, 0xC6, 0xEF, 0xDA, 0xEF, 0xDB, /* 0xD8-0xDB */ + 0xC2, 0x60, 0xC3, 0x6E, 0xF2, 0x4B, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xC3, 0x6D, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0x51, /* 0xE0-0xE3 */ + 0xF4, 0x52, 0x3F, 0x3F, 0xC4, 0x66, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF4, 0x50, 0xC4, 0xE4, 0x3F, 0x3F, 0xF7, 0xDF, /* 0xE8-0xEB */ + 0xC5, 0xCE, 0xF8, 0xAA, 0xF8, 0xAB, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xA4, 0xEA, 0x3F, 0x3F, 0xA6, 0xB1, 0xA6, 0xB2, /* 0xF0-0xF3 */ + 0xA7, 0xF3, 0x3F, 0x3F, 0xCC, 0xD1, 0xAC, 0x54, /* 0xF4-0xF7 */ + 0xAE, 0xD1, 0xB1, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xB0, 0xD2, 0x3F, 0x3F, 0xB4, 0xBF, 0xB4, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0xB3, 0xCC, 0xD9, 0xA9, 0x3F, 0x3F, 0xB7, 0x7C, /* 0x00-0x03 */ + 0xE1, 0xFA, 0xE1, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xA4, 0xEB, 0xA6, 0xB3, 0xCC, 0xD2, 0xAA, 0x42, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xAA, 0x41, 0x3F, 0x3F, 0xCE, 0xF9, /* 0x0C-0x0F */ + 0xCE, 0xFA, 0x3F, 0x3F, 0xD1, 0xD7, 0xD1, 0xD8, /* 0x10-0x13 */ + 0xAE, 0xD2, 0xAE, 0xD3, 0x3F, 0x3F, 0xAE, 0xD4, /* 0x14-0x17 */ + 0xD5, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0xE6, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xB4, 0xC2, 0x3F, 0x3F, 0xB4, 0xC1, /* 0x1C-0x1F */ + 0xDD, 0xC8, 0xDF, 0x7A, 0xE1, 0xFB, 0xE9, 0xBD, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x61, 0xC4, 0x67, /* 0x24-0x27 */ + 0xA4, 0xEC, 0x3F, 0x3F, 0xA5, 0xBC, 0xA5, 0xBD, /* 0x28-0x2B */ + 0xA5, 0xBB, 0xA5, 0xBE, 0xA5, 0xBA, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xA6, 0xB6, 0x3F, 0x3F, 0xC9, 0xF6, /* 0x30-0x33 */ + 0xA6, 0xB5, 0xA6, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xC9, 0xF1, 0xC9, 0xF0, 0xC9, 0xF3, 0xC9, 0xF2, /* 0x38-0x3B */ + 0xC9, 0xF5, 0xA6, 0xB4, 0xC9, 0xEF, 0xC9, 0xF4, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xCA, 0xFD, 0xA7, 0xFD, 0xCA, 0xFE, /* 0x44-0x47 */ + 0xCB, 0x43, 0xA7, 0xFC, 0x3F, 0x3F, 0xCB, 0x47, /* 0x48-0x4B */ + 0xCB, 0x42, 0xCB, 0x45, 0xA7, 0xF5, 0xA7, 0xF6, /* 0x4C-0x4F */ + 0xA7, 0xF7, 0xA7, 0xF8, 0x3F, 0x3F, 0xA8, 0x40, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xCB, 0x41, 0xA7, 0xFA, 0xA8, 0x41, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xCB, 0x40, 0xCB, 0x46, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xA7, 0xF9, 0xCB, 0x44, 0xA7, 0xFB, 0xA7, 0xF4, /* 0x5C-0x5F */ + 0xA7, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0x57, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xCC, 0xD4, 0xAA, 0x43, 0x3F, 0x3F, 0xAA, 0x4D, /* 0x6C-0x6F */ + 0xAA, 0x4E, 0xAA, 0x46, 0xAA, 0x58, 0xAA, 0x48, /* 0x70-0x73 */ + 0xCC, 0xDC, 0xAA, 0x53, 0xCC, 0xD7, 0xAA, 0x49, /* 0x74-0x77 */ + 0xCC, 0xE6, 0xCC, 0xE7, 0xCC, 0xDF, 0xCC, 0xD8, /* 0x78-0x7B */ + 0xAA, 0x56, 0xCC, 0xE4, 0xAA, 0x51, 0xAA, 0x4F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xCC, 0xE5, 0x3F, 0x3F, 0xCC, 0xE3, /* 0x80-0x83 */ + 0xCC, 0xDB, 0xCC, 0xD3, 0xCC, 0xDA, 0xAA, 0x4A, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xAA, 0x50, 0x3F, 0x3F, 0xAA, 0x44, /* 0x88-0x8B */ + 0xCC, 0xDE, 0xCC, 0xDD, 0xCC, 0xD5, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xAA, 0x52, 0xCC, 0xE1, 0xCC, 0xD6, 0xAA, 0x55, /* 0x90-0x93 */ + 0xCC, 0xE8, 0xAA, 0x45, 0x3F, 0x3F, 0xAA, 0x4C, /* 0x94-0x97 */ + 0xCC, 0xD9, 0xCC, 0xE2, 0xAA, 0x54, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xAA, 0x47, 0xAA, 0x4B, 0x3F, 0x3F, 0xCC, 0xE0, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0x5B, 0xAC, 0x5C, /* 0xAC-0xAF */ + 0xAC, 0x69, 0x3F, 0x3F, 0xCF, 0x56, 0xCF, 0x4C, /* 0xB0-0xB3 */ + 0xAC, 0x62, 0xCF, 0x4A, 0xAC, 0x5B, 0xCF, 0x45, /* 0xB4-0xB7 */ + 0xAC, 0x65, 0xCF, 0x52, 0xCE, 0xFE, 0xCF, 0x41, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCF, 0x44, 0xCE, 0xFB, 0xCF, 0x51, 0xCF, 0x61, /* 0xC0-0xC3 */ + 0xAC, 0x60, 0xCF, 0x46, 0xCF, 0x58, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xCE, 0xFD, 0xCF, 0x5F, 0xCF, 0x60, 0xCF, 0x63, /* 0xC8-0xCB */ + 0xCF, 0x5A, 0xCF, 0x4B, 0xCF, 0x53, 0xAC, 0x66, /* 0xCC-0xCF */ + 0xAC, 0x59, 0xAC, 0x61, 0xAC, 0x6D, 0xAC, 0x56, /* 0xD0-0xD3 */ + 0xAC, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xCF, 0x43, 0xAC, 0x6A, 0xAC, 0x63, 0xCF, 0x5D, /* 0xD8-0xDB */ + 0xCF, 0x40, 0xAC, 0x6C, 0xAC, 0x67, 0xCF, 0x49, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0x6B, 0xCF, 0x50, /* 0xE0-0xE3 */ + 0xCF, 0x48, 0xAC, 0x64, 0xCF, 0x5C, 0xCF, 0x54, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xAC, 0x5E, 0xCF, 0x62, 0xCF, 0x47, /* 0xE8-0xEB */ + 0xAC, 0x5A, 0xCF, 0x59, 0xCF, 0x4F, 0xAC, 0x5F, /* 0xEC-0xEF */ + 0xCF, 0x55, 0xAC, 0x57, 0xCE, 0xFC, 0xAC, 0x68, /* 0xF0-0xF3 */ + 0xAE, 0xE3, 0xAC, 0x5D, 0xCF, 0x4E, 0xCF, 0x4D, /* 0xF4-0xF7 */ + 0xCF, 0x42, 0x3F, 0x3F, 0xCF, 0x5E, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xCF, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0x55, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xEC, 0xAE, 0xEA, /* 0x10-0x13 */ + 0xD1, 0xED, 0x3F, 0x3F, 0xD1, 0xE1, 0xAE, 0xDF, /* 0x14-0x17 */ + 0xAE, 0xEB, 0x3F, 0x3F, 0xD1, 0xDA, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xD1, 0xE3, 0xD1, 0xEB, 0x3F, 0x3F, 0xD1, 0xD9, /* 0x1C-0x1F */ + 0xD1, 0xF4, 0xAE, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xD1, 0xF3, 0xD1, 0xEE, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xD1, 0xEF, 0xAE, 0xDD, 0xAE, 0xE8, 0xD1, 0xE5, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD1, 0xE6, 0xD1, 0xF0, 0xD1, 0xE7, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xD1, 0xE2, 0xD1, 0xDC, 0xD1, 0xDD, /* 0x30-0x33 */ + 0xD1, 0xEA, 0xD1, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xAE, 0xD6, 0xAE, 0xDA, 0xD1, 0xF2, 0xD1, 0xDE, /* 0x38-0x3B */ + 0xAE, 0xE6, 0xAE, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xAE, 0xE5, 0xAE, 0xEC, 0xAE, 0xDB, 0xAE, 0xE7, /* 0x40-0x43 */ + 0xD1, 0xE9, 0xAE, 0xE9, 0xAE, 0xD8, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xAE, 0xD7, 0xD1, 0xDB, 0x3F, 0x3F, 0xD1, 0xDF, /* 0x48-0x4B */ + 0xAE, 0xE0, 0xD1, 0xF1, 0xD1, 0xE8, 0xD1, 0xE0, /* 0x4C-0x4F */ + 0xAE, 0xE4, 0xAE, 0xE1, 0x3F, 0x3F, 0xAE, 0xD9, /* 0x50-0x53 */ + 0xAE, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xC4, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xD5, 0xB4, 0xD5, 0xB5, 0xD5, 0xB9, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xD5, 0xC8, 0xD5, 0xC5, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xD5, 0xBE, 0xD5, 0xBD, 0xB1, 0xED, 0xD5, 0xC1, /* 0x74-0x77 */ + 0xD5, 0xD0, 0xD5, 0xB0, 0x3F, 0x3F, 0xD5, 0xD1, /* 0x78-0x7B */ + 0xD5, 0xC3, 0xD5, 0xD5, 0xD5, 0xC9, 0xB1, 0xEC, /* 0x7C-0x7F */ + + 0xD5, 0xC7, 0xB1, 0xE7, 0xB1, 0xFC, 0xB1, 0xF2, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xB1, 0xF6, 0xB1, 0xF5, 0xD5, 0xB1, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xD5, 0xCE, 0xD5, 0xD4, 0xD5, 0xCC, /* 0x88-0x8B */ + 0xD5, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xC0, /* 0x8C-0x8F */ + 0xD5, 0xB2, 0xD5, 0xD2, 0xD5, 0xC2, 0xB1, 0xEA, /* 0x90-0x93 */ + 0xB1, 0xF7, 0x3F, 0x3F, 0xD5, 0xCB, 0xB1, 0xF0, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD5, 0xCA, /* 0x98-0x9B */ + 0xD5, 0xB3, 0xB1, 0xF8, 0x3F, 0x3F, 0xB1, 0xFA, /* 0x9C-0x9F */ + 0xD5, 0xCD, 0xB1, 0xFB, 0xB1, 0xE9, 0xD5, 0xBA, /* 0xA0-0xA3 */ + 0xD5, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0xEF, /* 0xA4-0xA7 */ + 0xB1, 0xF9, 0xD5, 0xBC, 0xD5, 0xC6, 0xD5, 0xB7, /* 0xA8-0xAB */ + 0xD5, 0xBB, 0xB1, 0xF4, 0xD5, 0xB6, 0xB1, 0xE8, /* 0xAC-0xAF */ + 0xB1, 0xF1, 0xB1, 0xEE, 0xD5, 0xBF, 0xAE, 0xDE, /* 0xB0-0xB3 */ + 0xD9, 0xC0, 0xB1, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xB1, 0xF3, 0x3F, 0x3F, 0xD9, 0xC3, 0xD9, 0xD9, /* 0xC4-0xC7 */ + 0xD9, 0xCE, 0xB4, 0xD6, 0x3F, 0x3F, 0xB4, 0xD1, /* 0xC8-0xCB */ + 0xD9, 0xBD, 0xB4, 0xD2, 0xD9, 0xCD, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xD9, 0xC6, 0xD9, 0xD3, 0xB4, 0xCE, 0xD9, 0xAB, /* 0xD0-0xD3 */ + 0xD9, 0xD5, 0xB4, 0xC4, 0xD9, 0xB3, 0xB4, 0xC7, /* 0xD4-0xD7 */ + 0xB4, 0xC6, 0x3F, 0x3F, 0xB4, 0xD7, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD9, 0xAD, 0xD9, 0xCF, 0xD9, 0xD0, 0xB4, 0xC9, /* 0xDC-0xDF */ + 0xB4, 0xC5, 0xD9, 0xBB, 0x3F, 0x3F, 0xB4, 0xD0, /* 0xE0-0xE3 */ + 0xD9, 0xB6, 0x3F, 0x3F, 0xD9, 0xD1, 0xB4, 0xCC, /* 0xE4-0xE7 */ + 0xD9, 0xC9, 0xD9, 0xD6, 0xD9, 0xB0, 0xD9, 0xB5, /* 0xE8-0xEB */ + 0xD9, 0xAF, 0x3F, 0x3F, 0xB4, 0xCB, 0xD9, 0xC2, /* 0xEC-0xEF */ + 0xDD, 0xDE, 0xD9, 0xB1, 0xB4, 0xCF, 0xD9, 0xBA, /* 0xF0-0xF3 */ + 0xD9, 0xD2, 0xB4, 0xCA, 0xD9, 0xB7, 0xD9, 0xB4, /* 0xF4-0xF7 */ + 0xD9, 0xC5, 0xB4, 0xCD, 0xB4, 0xC3, 0xB4, 0xD9, /* 0xF8-0xFB */ + 0xD9, 0xC8, 0xD9, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_69[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD9, 0xAC, 0xB4, 0xC8, 0xD9, 0xD4, 0xD9, 0xBC, /* 0x04-0x07 */ + 0xD9, 0xBE, 0x3F, 0x3F, 0xD9, 0xCB, 0xD9, 0xCA, /* 0x08-0x0B */ + 0xD9, 0xAA, 0xB4, 0xD3, 0xB4, 0xD5, 0xD9, 0xB2, /* 0x0C-0x0F */ + 0xD9, 0xB9, 0xD9, 0xC1, 0xB4, 0xD4, 0xD9, 0xB8, /* 0x10-0x13 */ + 0xD9, 0xC4, 0xD9, 0xD7, 0x3F, 0x3F, 0xD9, 0xCC, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xD9, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xAE, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDD, 0xF2, /* 0x2C-0x2F */ + 0xB7, 0xA6, 0x3F, 0x3F, 0xDD, 0xF0, 0xDD, 0xDB, /* 0x30-0x33 */ + 0xDD, 0xE0, 0xDD, 0xD9, 0x3F, 0x3F, 0xDD, 0xEC, /* 0x34-0x37 */ + 0xDD, 0xCB, 0xDD, 0xD2, 0x3F, 0x3F, 0xDD, 0xEA, /* 0x38-0x3B */ + 0xDD, 0xF4, 0xDD, 0xDC, 0x3F, 0x3F, 0xDD, 0xCF, /* 0x3C-0x3F */ + 0xDD, 0xE2, 0xDD, 0xE7, 0xDD, 0xD3, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDD, 0xE4, 0xDD, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xDD, 0xD7, 0xDD, 0xD8, 0xB7, 0xA8, 0xDD, 0xEB, /* 0x48-0x4B */ + 0xDD, 0xE9, 0x3F, 0x3F, 0xDD, 0xCC, 0xDD, 0xEE, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xDD, 0xEF, 0xDD, 0xF1, 0xB7, 0xAC, /* 0x50-0x53 */ + 0xB7, 0xA4, 0x3F, 0x3F, 0xD5, 0xB8, 0xDD, 0xD4, /* 0x54-0x57 */ + 0xDD, 0xE6, 0xDD, 0xD5, 0xB7, 0xA1, 0xB7, 0xB1, /* 0x58-0x5B */ + 0xDD, 0xED, 0xB7, 0xAF, 0xB7, 0xAB, 0xDD, 0xCA, /* 0x5C-0x5F */ + 0xB7, 0xA3, 0x3F, 0x3F, 0xDD, 0xCD, 0xB7, 0xB0, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xDD, 0xDD, 0xDD, 0xC9, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xB7, 0xA9, 0xDD, 0xE1, 0xDD, 0xD1, 0xB7, 0xAA, /* 0x68-0x6B */ + 0xDD, 0xDA, 0xB7, 0x7E, 0xB4, 0xD8, 0xDD, 0xE3, /* 0x6C-0x6F */ + 0xD9, 0xBF, 0xDD, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xDD, 0xE8, 0xB7, 0xA5, 0xDD, 0xE5, 0xB7, 0xA2, /* 0x74-0x77 */ + 0xDD, 0xDF, 0xB7, 0xAD, 0xDD, 0xD6, 0xDD, 0xF3, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xA7, 0xDE, 0xC6, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xAE, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xE2, 0x4A, 0xE2, 0x48, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xE2, 0x5E, 0xE2, 0x46, 0x3F, 0x3F, 0xE2, 0x58, /* 0x90-0x93 */ + 0xB7, 0x7D, 0xBA, 0x5F, 0xE2, 0x42, 0xE2, 0x5D, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xE2, 0x47, 0xE2, 0x55, 0xBA, 0x64, /* 0x98-0x9B */ + 0xBA, 0x5D, 0x3F, 0x3F, 0xE2, 0x5B, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xE2, 0x40, 0xE2, 0x5A, 0x3F, 0x3F, 0xBA, 0x6F, /* 0xA0-0xA3 */ + 0xE2, 0x51, 0xE2, 0x61, 0xBA, 0x6D, 0xE2, 0x49, /* 0xA4-0xA7 */ + 0xBA, 0x5E, 0xE2, 0x4B, 0xE2, 0x59, 0xBA, 0x67, /* 0xA8-0xAB */ + 0xE2, 0x44, 0xBA, 0x6B, 0xBA, 0x61, 0xE2, 0x4D, /* 0xAC-0xAF */ + 0xE2, 0x43, 0xE1, 0xFC, 0x3F, 0x3F, 0xE2, 0x57, /* 0xB0-0xB3 */ + 0xBA, 0x68, 0xE2, 0x60, 0xE1, 0xFD, 0xBA, 0x65, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE2, 0x53, 0x3F, 0x3F, 0xBA, 0x66, /* 0xB8-0xBB */ + 0xE2, 0x45, 0xE2, 0x50, 0xE2, 0x4C, 0xE2, 0x4E, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xBA, 0x60, 0xE2, 0x5F, 0xBA, 0x6E, /* 0xC0-0xC3 */ + 0xE2, 0x4F, 0x3F, 0x3F, 0xE2, 0x62, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xE1, 0xFE, 0xE2, 0x54, 0xBA, 0x63, /* 0xC8-0xCB */ + 0xBA, 0x6C, 0xBA, 0x6A, 0xE2, 0x41, 0xE2, 0x56, /* 0xCC-0xCF */ + 0xBA, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0xBA, 0x62, /* 0xD0-0xD3 */ + 0xE2, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xE2, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xD5, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xE5, 0xD1, 0xE5, 0xCD, 0xE5, 0xE1, 0xE5, 0xDE, /* 0xE4-0xE7 */ + 0xBC, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE5, /* 0xE8-0xEB */ + 0xE5, 0xD4, 0xBC, 0xD8, 0xE5, 0xDB, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xE5, 0xD0, 0xE5, 0xDA, 0xBC, 0xD5, /* 0xF0-0xF3 */ + 0xE5, 0xEE, 0x3F, 0x3F, 0xE5, 0xEB, 0xE5, 0xDD, /* 0xF4-0xF7 */ + 0xE5, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0xE5, 0xE2, /* 0xF8-0xFB */ + 0xE5, 0xE4, 0xBC, 0xD1, 0xE5, 0xD8, 0xE5, 0xD3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0xE5, 0xCA, 0xBC, 0xCE, 0xBC, 0xD6, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xE5, 0xE7, 0xBC, 0xD7, 0xE5, 0xCB, 0xE5, 0xED, /* 0x04-0x07 */ + 0xE5, 0xE0, 0xE5, 0xE6, 0xBC, 0xD4, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE5, 0xE3, 0x3F, 0x3F, 0xE5, 0xEA, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xBC, 0xD9, 0x3F, 0x3F, 0xBC, 0xD3, /* 0x10-0x13 */ + 0xE5, 0xDC, 0xE5, 0xCF, 0xE5, 0xEF, 0xE5, 0xCC, /* 0x14-0x17 */ + 0xE5, 0xE8, 0xBC, 0xD0, 0x3F, 0x3F, 0xE5, 0xD6, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xE5, 0xD7, 0xBC, 0xCF, 0xBC, 0xCC, /* 0x1C-0x1F */ + 0xE5, 0xD2, 0xBC, 0xD2, 0x3F, 0x3F, 0xBC, 0xCB, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE5, 0xE9, 0xE5, 0xEC, 0xE5, 0xD9, /* 0x24-0x27 */ + 0xE9, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xC2, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xE9, 0xBE, 0xBE, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xBE, 0xEB, 0xBE, 0xF0, 0xBE, 0xEC, 0xE9, 0xCC, /* 0x38-0x3B */ + 0xE9, 0xD7, 0xBE, 0xEA, 0xE9, 0xC4, 0xE9, 0xCD, /* 0x3C-0x3F */ + 0xE5, 0xDF, 0xE9, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xBE, 0xF1, 0x3F, 0x3F, 0xE9, 0xDD, 0xBE, 0xF5, /* 0x44-0x47 */ + 0xBE, 0xF8, 0xE9, 0xC0, 0x3F, 0x3F, 0xBE, 0xF4, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xE9, 0xDB, 0xE9, 0xDC, 0xE9, 0xD2, /* 0x4C-0x4F */ + 0xE9, 0xD1, 0xE9, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xE9, 0xD3, 0xE9, 0xDA, 0xE9, 0xD9, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xBE, 0xEF, 0xBE, 0xED, 0xE9, 0xCB, 0xE9, 0xC8, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xE9, 0xC5, 0xE9, 0xD8, 0xBE, 0xF7, /* 0x5C-0x5F */ + 0xE9, 0xD6, 0xBE, 0xF3, 0xBE, 0xF2, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xE9, 0xD0, 0x3F, 0x3F, 0xE9, 0xBF, 0xE9, 0xC1, /* 0x64-0x67 */ + 0xE9, 0xC3, 0xE9, 0xD5, 0xE9, 0xCF, 0xBE, 0xEE, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xE9, 0xC6, 0x3F, 0x3F, 0xE9, 0xD4, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xC7, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xCF, 0xED, 0x45, /* 0x7C-0x7F */ + + 0xC0, 0xC8, 0xEC, 0xF5, 0x3F, 0x3F, 0xED, 0x41, /* 0x80-0x83 */ + 0xC0, 0xCA, 0xED, 0x48, 0x3F, 0x3F, 0xEC, 0xFC, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xEC, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xED, 0x49, 0xEC, 0xF3, 0xEC, 0xFE, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xC0, 0xD1, 0xED, 0x44, 0xED, 0x4A, 0xEC, 0xFD, /* 0x90-0x93 */ + 0xC0, 0xC9, 0xED, 0x40, 0xEC, 0xF4, 0xC0, 0xD0, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0x47, 0xEC, 0xF9, /* 0x98-0x9B */ + 0xC0, 0xCC, 0x3F, 0x3F, 0xEC, 0xFB, 0xEC, 0xF8, /* 0x9C-0x9F */ + 0xC0, 0xD2, 0xEC, 0xFA, 0xC0, 0xCB, 0xC0, 0xCE, /* 0xA0-0xA3 */ + 0xED, 0x43, 0xEC, 0xF6, 0xED, 0x46, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xED, 0x42, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xC2, 0x63, 0xEF, 0xE7, 0xC2, 0x68, 0xC2, 0x69, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x62, /* 0xB0-0xB3 */ + 0xEF, 0xE6, 0x3F, 0x3F, 0xEF, 0xE3, 0xEF, 0xE4, /* 0xB4-0xB7 */ + 0xC2, 0x66, 0xEF, 0xDE, 0xEF, 0xE2, 0xC2, 0x65, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xEF, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x67, 0xC2, 0x64, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xEF, 0xDD, 0xEF, 0xE1, 0xEF, 0xE5, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0x51, /* 0xC8-0xCB */ + 0xF2, 0x4E, 0xF2, 0x57, 0x3F, 0x3F, 0xF2, 0x56, /* 0xCC-0xCF */ + 0xF2, 0x54, 0xF2, 0x4F, 0x3F, 0x3F, 0xC3, 0x72, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xF2, 0x50, 0xC3, 0x71, 0xC0, 0xCD, /* 0xD8-0xDB */ + 0xF2, 0x53, 0xC3, 0x70, 0xF2, 0x58, 0xF2, 0x52, /* 0xDC-0xDF */ + 0xF2, 0x4D, 0xEF, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xC3, 0x6F, 0x3F, 0x3F, 0xF2, 0x4C, /* 0xE4-0xE7 */ + 0xF4, 0x56, 0x3F, 0x3F, 0xF4, 0x55, 0xF2, 0x55, /* 0xE8-0xEB */ + 0xC4, 0x68, 0x3F, 0x3F, 0xF4, 0x59, 0xF4, 0x5A, /* 0xEC-0xEF */ + 0xF4, 0x54, 0xF4, 0x58, 0x3F, 0x3F, 0xF4, 0x53, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xF5, 0xD1, 0xF4, 0x57, 0xC4, 0xE7, 0xC4, 0xE5, /* 0xF8-0xFB */ + 0xF5, 0xCF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6B[512] = { + 0xF5, 0xD2, 0x3F, 0x3F, 0xF5, 0xCE, 0xF5, 0xD0, /* 0x00-0x03 */ + 0xC4, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xF6, 0xE5, 0xF6, 0xE6, 0xC5, 0x76, 0xF6, 0xE4, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xE2, /* 0x0C-0x0F */ + 0xC5, 0xCF, 0xF7, 0xE0, 0xF7, 0xE1, 0xF8, 0xAC, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC6, 0x56, 0xF8, 0xF3, /* 0x14-0x17 */ + 0xF8, 0xF1, 0xF8, 0xF2, 0xF8, 0xF4, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xBB, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xA4, 0xED, 0xA6, 0xB8, 0x3F, 0x3F, 0xAA, 0x59, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xCC, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xCF, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xD1, 0xF5, 0xD1, 0xF7, 0x3F, 0x3F, 0xD1, 0xF6, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xD1, 0xF8, 0xB1, 0xFD, 0xD5, 0xD7, /* 0x30-0x33 */ + 0xD1, 0xF9, 0x3F, 0x3F, 0xD5, 0xD6, 0xD5, 0xD8, /* 0x34-0x37 */ + 0xD5, 0xD9, 0xD9, 0xDA, 0xB4, 0xDB, 0xD9, 0xDB, /* 0x38-0x3B */ + 0xD9, 0xDD, 0xB4, 0xDC, 0xB4, 0xDA, 0xD9, 0xDC, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xDD, 0xFA, 0xDD, 0xF8, 0xDD, 0xF7, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xDD, 0xF6, 0xDD, 0xF5, 0xB7, 0xB2, /* 0x44-0x47 */ + 0xDD, 0xF9, 0xBA, 0x70, 0xE2, 0x63, 0xE2, 0x65, /* 0x48-0x4B */ + 0xBA, 0x71, 0xE2, 0x64, 0xBC, 0xDB, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xBC, 0xDA, 0xE5, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xE9, 0xDF, 0xE9, 0xDE, 0xE9, 0xE0, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xBE, 0xF9, 0x3F, 0x3F, 0xED, 0x4B, /* 0x58-0x5B */ + 0xC0, 0xD3, 0x3F, 0x3F, 0xEF, 0xE8, 0xC2, 0x6A, /* 0x5C-0x5F */ + 0xF2, 0x59, 0xC5, 0x77, 0xA4, 0xEE, 0xA5, 0xBF, /* 0x60-0x63 */ + 0xA6, 0xB9, 0xA8, 0x42, 0xAA, 0x5A, 0xAA, 0x5B, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0x6E, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xD1, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xB3, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xD1, 0xBE, 0xFA, /* 0x74-0x77 */ + 0xC2, 0x6B, 0xA4, 0xEF, 0x3F, 0x3F, 0xA6, 0xBA, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xEB, 0xAA, 0x5C, /* 0x7C-0x7F */ + + 0xCC, 0xEA, 0x3F, 0x3F, 0xCF, 0x65, 0xAC, 0x6F, /* 0x80-0x83 */ + 0xCF, 0x66, 0x3F, 0x3F, 0xAC, 0x70, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD1, 0xFC, 0xAE, 0xEE, 0xAE, 0xED, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xD5, 0xDE, 0xD5, 0xDC, 0xD5, 0xDD, 0xD5, 0xDB, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xD5, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xD9, 0xDE, 0xD9, 0xE1, 0xB4, 0xDE, 0xD9, 0xDF, /* 0x94-0x97 */ + 0xB4, 0xDD, 0xD9, 0xE0, 0x3F, 0x3F, 0xDD, 0xFB, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0x66, 0xE2, 0x67, /* 0x9C-0x9F */ + 0xE2, 0x68, 0x3F, 0x3F, 0xE5, 0xF3, 0xE5, 0xF2, /* 0xA0-0xA3 */ + 0xBC, 0xDC, 0xE5, 0xF1, 0xE5, 0xF4, 0xE9, 0xE1, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xE2, 0xE9, 0xE3, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xED, 0x4C, 0xC0, 0xD4, 0xC2, 0x6C, /* 0xAC-0xAF */ + 0xF2, 0x5A, 0x3F, 0x3F, 0xC4, 0xE8, 0xC9, 0x5F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xAC, 0x71, 0xCF, 0x67, 0xAE, 0xEF, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB1, 0xFE, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xB4, 0xDF, 0xD9, 0xE2, 0x3F, 0x3F, 0xB7, 0xB5, /* 0xBC-0xBF */ + 0xB7, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0x69, /* 0xC0-0xC3 */ + 0xE2, 0x6A, 0xBC, 0xDD, 0xBC, 0xDE, 0xE9, 0xE5, /* 0xC4-0xC7 */ + 0xE9, 0xE4, 0xEF, 0xE9, 0xF7, 0xE3, 0xA4, 0xF0, /* 0xC8-0xCB */ + 0xC9, 0x60, 0xA5, 0xC0, 0x3F, 0x3F, 0xA8, 0x43, /* 0xCC-0xCF */ + 0xCB, 0x48, 0x3F, 0x3F, 0xAC, 0x72, 0xB7, 0xB6, /* 0xD0-0xD3 */ + 0xA4, 0xF1, 0x3F, 0x3F, 0xCF, 0x68, 0xAC, 0x73, /* 0xD4-0xD7 */ + 0xCF, 0x69, 0x3F, 0x3F, 0xC0, 0xD5, 0xA4, 0xF2, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCC, 0xEC, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xCF, 0x6A, 0x3F, 0x3F, 0xD2, 0x42, 0xD2, 0x41, /* 0xE0-0xE3 */ + 0xD1, 0xFE, 0x3F, 0x3F, 0xD1, 0xFD, 0xD2, 0x43, /* 0xE4-0xE7 */ + 0xD2, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0x40, /* 0xE8-0xEB */ + 0xB2, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0xE0, /* 0xEC-0xEF */ + 0xD9, 0xE3, 0x3F, 0x3F, 0xD9, 0xE4, 0xD9, 0xE5, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0x41, /* 0xF4-0xF7 */ + 0xDE, 0x42, 0xDE, 0x40, 0x3F, 0x3F, 0xDD, 0xFD, /* 0xF8-0xFB */ + 0xDD, 0xFE, 0xB7, 0xB7, 0xE2, 0x6B, 0xE5, 0xF7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6C[512] = { + 0xE5, 0xF6, 0xE5, 0xF5, 0xE5, 0xF8, 0xE9, 0xE7, /* 0x00-0x03 */ + 0xE9, 0xE6, 0xBE, 0xFB, 0xE9, 0xE8, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xC0, 0xD6, 0xED, 0x4D, 0x3F, 0x3F, 0xEF, 0xEA, /* 0x08-0x0B */ + 0xF2, 0x5B, 0xF6, 0xE7, 0x3F, 0x3F, 0xA4, 0xF3, /* 0x0C-0x0F */ + 0xA5, 0xC2, 0xA5, 0xC1, 0x3F, 0x3F, 0xAA, 0x5D, /* 0x10-0x13 */ + 0xC9, 0x61, 0xC9, 0x7E, 0xA6, 0xBB, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xC9, 0xF7, 0xCB, 0x49, 0xCB, 0x4A, 0xAA, 0x5E, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xCC, 0xED, 0x3F, 0x3F, 0xAC, 0x74, /* 0x1C-0x1F */ + 0xCF, 0x6B, 0xCF, 0x6C, 0x3F, 0x3F, 0xAE, 0xF0, /* 0x20-0x23 */ + 0xAE, 0xF4, 0xD2, 0x44, 0xAE, 0xF3, 0xAE, 0xF1, /* 0x24-0x27 */ + 0xAE, 0xF2, 0x3F, 0x3F, 0xD5, 0xDF, 0xB2, 0x42, /* 0x28-0x2B */ + 0xB4, 0xE3, 0x3F, 0x3F, 0xB4, 0xE1, 0xB4, 0xE2, /* 0x2C-0x2F */ + 0xD9, 0xE6, 0x3F, 0x3F, 0x3F, 0x3F, 0xBA, 0x72, /* 0x30-0x33 */ + 0xA4, 0xF4, 0x3F, 0x3F, 0xC9, 0xA1, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xA5, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0xA4, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA5, 0xC6, 0xC9, 0xA3, /* 0x3C-0x3F */ + 0xA5, 0xC5, 0xA5, 0xC4, 0xA8, 0x44, 0xC9, 0xA2, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0xF8, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC9, 0xFC, 0xC9, 0xFE, /* 0x48-0x4B */ + 0xCA, 0x40, 0xA6, 0xC5, 0xA6, 0xC6, 0xC9, 0xFB, /* 0x4C-0x4F */ + 0xA6, 0xC1, 0x3F, 0x3F, 0xC9, 0xF9, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xC9, 0xFD, 0xA6, 0xC2, 0x3F, 0x3F, 0xA6, 0xBD, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xA6, 0xBE, 0x3F, 0x3F, 0xA6, 0xC4, /* 0x58-0x5B */ + 0xC9, 0xFA, 0xA6, 0xBC, 0xA8, 0x45, 0xA6, 0xBF, /* 0x5C-0x5F */ + 0xA6, 0xC0, 0xA6, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xCB, 0x5B, 0xCB, 0x59, 0xCB, 0x4C, /* 0x64-0x67 */ + 0xA8, 0x51, 0xCB, 0x53, 0xA8, 0x4C, 0xCB, 0x4D, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xCB, 0x55, 0x3F, 0x3F, 0xCB, 0x52, /* 0x6C-0x6F */ + 0xA8, 0x4F, 0xCB, 0x51, 0xA8, 0x56, 0xCB, 0x5A, /* 0x70-0x73 */ + 0xA8, 0x58, 0x3F, 0x3F, 0xA8, 0x5A, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xCB, 0x4B, 0x3F, 0x3F, 0xA8, 0x4D, 0xCB, 0x5C, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xA8, 0x54, 0xA8, 0x57, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xCD, 0x45, 0xA8, 0x47, 0xA8, 0x5E, 0xA8, 0x55, /* 0x80-0x83 */ + 0xCB, 0x4E, 0xA8, 0x4A, 0xA8, 0x59, 0xCB, 0x56, /* 0x84-0x87 */ + 0xA8, 0x48, 0xA8, 0x49, 0xCD, 0x43, 0xCB, 0x4F, /* 0x88-0x8B */ + 0xA8, 0x50, 0xA8, 0x5B, 0xCB, 0x5D, 0xCB, 0x50, /* 0x8C-0x8F */ + 0xA8, 0x4E, 0x3F, 0x3F, 0xA8, 0x53, 0xCC, 0xEE, /* 0x90-0x93 */ + 0xA8, 0x5C, 0xCB, 0x57, 0xA8, 0x52, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xA8, 0x5D, 0xA8, 0x46, 0xCB, 0x54, 0xA8, 0x4B, /* 0x98-0x9B */ + 0xCB, 0x58, 0xCD, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0x6A, /* 0xA8-0xAB */ + 0xAA, 0x7A, 0xCC, 0xF5, 0xAA, 0x71, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xCD, 0x4B, 0xAA, 0x62, 0x3F, 0x3F, 0xAA, 0x65, /* 0xB0-0xB3 */ + 0xCD, 0x42, 0x3F, 0x3F, 0xCC, 0xF3, 0xCC, 0xF7, /* 0xB4-0xB7 */ + 0xAA, 0x6D, 0xAA, 0x6F, 0xCC, 0xFA, 0xAA, 0x76, /* 0xB8-0xBB */ + 0xAA, 0x68, 0xAA, 0x66, 0xAA, 0x67, 0xAA, 0x75, /* 0xBC-0xBF */ + 0xCD, 0x47, 0xAA, 0x70, 0xCC, 0xF9, 0xCC, 0xFB, /* 0xC0-0xC3 */ + 0xAA, 0x6E, 0xAA, 0x73, 0xCC, 0xFC, 0xCD, 0x4A, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xAC, 0x75, 0xAA, 0x79, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xAA, 0x63, 0xCD, 0x49, 0x3F, 0x3F, 0xCD, 0x4D, /* 0xCC-0xCF */ + 0xCC, 0xF8, 0xCD, 0x4F, 0xCD, 0x40, 0xAA, 0x6C, /* 0xD0-0xD3 */ + 0xCC, 0xF4, 0xAA, 0x6B, 0xAA, 0x7D, 0xAA, 0x72, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xCC, 0xF2, 0xCF, 0x75, 0xAA, 0x78, /* 0xD8-0xDB */ + 0xAA, 0x7C, 0xCD, 0x41, 0xCD, 0x46, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xAA, 0x7E, 0xAA, 0x77, 0xAA, 0x69, 0xAA, 0x5F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xAA, 0x64, 0x3F, 0x3F, 0xCC, 0xF6, /* 0xE4-0xE7 */ + 0xAA, 0x60, 0xCD, 0x4E, 0x3F, 0x3F, 0xCC, 0xF0, /* 0xE8-0xEB */ + 0xCC, 0xEF, 0xCC, 0xFD, 0xCC, 0xF1, 0xAA, 0x7B, /* 0xEC-0xEF */ + 0xAE, 0xF5, 0xAA, 0x74, 0xCC, 0xFE, 0xAA, 0x61, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xAC, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xCD, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6D[512] = { + 0xCF, 0x7C, 0xCF, 0xA1, 0x3F, 0x3F, 0xCF, 0xA4, /* 0x00-0x03 */ + 0xCF, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xA7, /* 0x04-0x07 */ + 0xCF, 0xAA, 0xCF, 0xAC, 0xCF, 0x74, 0xAC, 0x76, /* 0x08-0x0B */ + 0xAC, 0x7B, 0xD2, 0x49, 0xAC, 0xAD, 0xCF, 0xA5, /* 0x0C-0x0F */ + 0xCF, 0xAD, 0xCF, 0x7B, 0xCF, 0x73, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0x64, 0xAC, 0x7E, /* 0x14-0x17 */ + 0xCF, 0xA2, 0xCF, 0x78, 0xCF, 0x7A, 0xAC, 0xA5, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xCF, 0x7D, 0xAC, 0x7D, 0xCF, 0x70, /* 0x1C-0x1F */ + 0xCF, 0xA8, 0x3F, 0x3F, 0xCF, 0xAB, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xAC, 0x7A, 0x3F, 0x3F, 0xAC, 0xA8, /* 0x24-0x27 */ + 0xCF, 0x6D, 0xAC, 0xAA, 0xAC, 0x78, 0xAC, 0xAE, /* 0x28-0x2B */ + 0xCF, 0xA9, 0xCF, 0x6F, 0xAC, 0xAB, 0xD2, 0x5E, /* 0x2C-0x2F */ + 0xCD, 0x48, 0xAC, 0x7C, 0xAC, 0x77, 0xCF, 0x76, /* 0x30-0x33 */ + 0xCF, 0x6E, 0xAC, 0xAC, 0xAC, 0xA4, 0xCF, 0xA3, /* 0x34-0x37 */ + 0xAC, 0xA9, 0xAC, 0xA7, 0xCF, 0x79, 0xAC, 0xA1, /* 0x38-0x3B */ + 0xCF, 0x71, 0xAC, 0xA2, 0xAC, 0xA3, 0xCF, 0x72, /* 0x3C-0x3F */ + 0xCF, 0xA6, 0xAC, 0x79, 0xCF, 0x7E, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xD2, 0x4C, 0xAE, 0xFD, 0xAF, 0x43, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0x55, 0xD2, 0x5B, /* 0x5C-0x5F */ + 0xD2, 0x57, 0xD2, 0x4A, 0xD2, 0x4D, 0xD2, 0x46, /* 0x60-0x63 */ + 0xD2, 0x47, 0xAF, 0x4A, 0xAE, 0xFA, 0xD2, 0x56, /* 0x64-0x67 */ + 0xD2, 0x5F, 0xAF, 0x45, 0xAE, 0xF6, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xAF, 0x40, 0xD2, 0x4E, 0xAF, 0x42, 0xD2, 0x4F, /* 0x6C-0x6F */ + 0xD2, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xAF, 0x44, 0xD2, 0x68, 0xD2, 0x48, 0xAE, 0xFC, /* 0x74-0x77 */ + 0xAE, 0xFB, 0xAF, 0x48, 0xD2, 0x45, 0xD2, 0x66, /* 0x78-0x7B */ + 0xD2, 0x5A, 0xD2, 0x67, 0xD2, 0x61, 0xD2, 0x53, /* 0x7C-0x7F */ + + 0xD2, 0x62, 0x3F, 0x3F, 0xD2, 0x5C, 0xD2, 0x65, /* 0x80-0x83 */ + 0xD2, 0x63, 0xAF, 0x49, 0xD2, 0x54, 0xAE, 0xF9, /* 0x84-0x87 */ + 0xAE, 0xF8, 0xAF, 0x41, 0xAF, 0x47, 0xD2, 0x60, /* 0x88-0x8B */ + 0xAF, 0x46, 0xD2, 0x51, 0xB2, 0x43, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xD2, 0x69, 0xD2, 0x50, 0xD2, 0x4B, 0xAE, 0xFE, /* 0x90-0x93 */ + 0xAF, 0x4B, 0xAE, 0xF7, 0x3F, 0x3F, 0xD2, 0x58, /* 0x94-0x97 */ + 0xD2, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0x65, 0xD5, 0xE1, /* 0xA8-0xAB */ + 0xD5, 0xE5, 0x3F, 0x3F, 0xB2, 0x52, 0xB2, 0x50, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0x47, 0xD5, 0xE3, /* 0xB0-0xB3 */ + 0xD5, 0xE2, 0xB2, 0x5B, 0x3F, 0x3F, 0xD5, 0xE8, /* 0xB4-0xB7 */ + 0xB2, 0x55, 0x3F, 0x3F, 0xD5, 0xFA, 0xD6, 0x47, /* 0xB8-0xBB */ + 0xB2, 0x44, 0xD5, 0xF7, 0xD5, 0xF0, 0xB2, 0x67, /* 0xBC-0xBF */ + 0xD5, 0xE0, 0x3F, 0x3F, 0xD5, 0xFC, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xB2, 0x64, 0xB2, 0x58, 0xB2, 0x63, 0xB2, 0x4E, /* 0xC4-0xC7 */ + 0xD5, 0xEC, 0xD5, 0xFE, 0xD5, 0xF6, 0xB2, 0x4F, /* 0xC8-0xCB */ + 0xB2, 0x49, 0xD6, 0x45, 0x3F, 0x3F, 0xD5, 0xFD, /* 0xCC-0xCF */ + 0xD6, 0x40, 0xB2, 0x51, 0xB2, 0x59, 0xD6, 0x42, /* 0xD0-0xD3 */ + 0xD5, 0xEA, 0xD5, 0xFB, 0xD5, 0xEF, 0xD6, 0x44, /* 0xD4-0xD7 */ + 0xB2, 0x5E, 0xB2, 0x46, 0xB2, 0x5C, 0xD5, 0xF4, /* 0xD8-0xDB */ + 0xD5, 0xF2, 0xD5, 0xF3, 0xB2, 0x53, 0xD5, 0xEE, /* 0xDC-0xDF */ + 0xD5, 0xED, 0xB2, 0x48, 0xD5, 0xE7, 0xD6, 0x46, /* 0xE0-0xE3 */ + 0xB2, 0x4A, 0xD5, 0xF1, 0xB2, 0x68, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xB2, 0x62, 0xD5, 0xE6, 0xB2, 0x5F, 0xB2, 0x5D, /* 0xE8-0xEB */ + 0xB2, 0x66, 0xD5, 0xF8, 0xB2, 0x61, 0xD2, 0x52, /* 0xEC-0xEF */ + 0xD5, 0xF9, 0xB2, 0x60, 0xD6, 0x41, 0xB2, 0x45, /* 0xF0-0xF3 */ + 0xD5, 0xF5, 0xB2, 0x57, 0xD5, 0xE9, 0xB2, 0x56, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xB2, 0x54, 0xB2, 0x4C, 0xB2, 0x4B, /* 0xF8-0xFB */ + 0xD9, 0xE7, 0xD6, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0xD5, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xFC, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xB2, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xB5, 0x41, 0xB2, 0x5A, 0xB4, 0xEE, /* 0x18-0x1B */ + 0xD9, 0xF6, 0xB4, 0xFC, 0x3F, 0x3F, 0xD9, 0xEA, /* 0x1C-0x1F */ + 0xB4, 0xEB, 0xB4, 0xE7, 0xDA, 0x49, 0xB4, 0xED, /* 0x20-0x23 */ + 0xB4, 0xF1, 0xB4, 0xEC, 0xB4, 0xF5, 0xDA, 0x4D, /* 0x24-0x27 */ + 0xDA, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, 0xD9, 0xF1, /* 0x28-0x2B */ + 0xB4, 0xFA, 0xB4, 0xF4, 0xD9, 0xFD, 0xB4, 0xE4, /* 0x2C-0x2F */ + 0xDA, 0x4A, 0xDA, 0x43, 0xB4, 0xE8, 0xD9, 0xF7, /* 0x30-0x33 */ + 0xB4, 0xF7, 0xDA, 0x55, 0xDA, 0x56, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xB4, 0xE5, 0xDA, 0x48, 0xB4, 0xF9, 0xD9, 0xFB, /* 0x38-0x3B */ + 0xD9, 0xED, 0xD9, 0xEE, 0xB4, 0xFD, 0xD9, 0xF2, /* 0x3C-0x3F */ + 0xD9, 0xF9, 0xD9, 0xF3, 0x3F, 0x3F, 0xB4, 0xFB, /* 0x40-0x43 */ + 0xB5, 0x44, 0xD9, 0xEF, 0xD9, 0xE8, 0xD9, 0xE9, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xD9, 0xEB, 0xB4, 0xEA, 0xD9, 0xF8, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xB4, 0xF8, 0xB5, 0x42, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xD9, 0xFA, 0xDA, 0x53, 0xDA, 0x4B, /* 0x50-0x53 */ + 0xB4, 0xE6, 0xDA, 0x51, 0xB4, 0xF2, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xB4, 0xF0, 0x3F, 0x3F, 0xDA, 0x57, 0xB4, 0xEF, /* 0x58-0x5B */ + 0xDA, 0x41, 0xD9, 0xF4, 0xD9, 0xFE, 0xB5, 0x47, /* 0x5C-0x5F */ + 0xDA, 0x45, 0xDA, 0x42, 0xD9, 0xF0, 0xB5, 0x43, /* 0x60-0x63 */ + 0xDA, 0x4F, 0xDA, 0x4C, 0xDA, 0x54, 0xB4, 0xE9, /* 0x64-0x67 */ + 0xDA, 0x40, 0xB5, 0x46, 0x3F, 0x3F, 0xDA, 0x47, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB4, 0xF3, 0xB4, 0xF6, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xDA, 0x46, 0xB5, 0x45, 0xD9, 0xF5, /* 0x70-0x73 */ + 0xD5, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0x50, /* 0x74-0x77 */ + 0xDA, 0x4E, 0xDA, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD9, 0xEC, 0xB5, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xDE, 0x61, 0xDE, 0x60, 0xDE, 0x46, /* 0x8C-0x8F */ + 0xB7, 0xBD, 0x3F, 0x3F, 0xDE, 0x5F, 0xDE, 0x49, /* 0x90-0x93 */ + 0xDE, 0x4A, 0x3F, 0x3F, 0xB7, 0xC7, 0xDE, 0x68, /* 0x94-0x97 */ + 0xB7, 0xC2, 0xDE, 0x5E, 0x3F, 0x3F, 0xDE, 0x43, /* 0x98-0x9B */ + 0xB7, 0xC8, 0xB7, 0xBE, 0xDE, 0x52, 0xDE, 0x48, /* 0x9C-0x9F */ + 0xDE, 0x4B, 0xDE, 0x63, 0xB7, 0xB8, 0xDE, 0x6A, /* 0xA0-0xA3 */ + 0xDE, 0x62, 0xB7, 0xC1, 0xDE, 0x57, 0xB7, 0xCC, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xCB, 0xB7, 0xC5, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0x69, 0xB7, 0xB9, /* 0xAC-0xAF */ + 0xDE, 0x55, 0xDE, 0x4C, 0xDE, 0x59, 0xDE, 0x65, /* 0xB0-0xB3 */ + 0xB7, 0xCD, 0x3F, 0x3F, 0xB7, 0xBB, 0xDE, 0x54, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xDE, 0x4D, 0xB7, 0xC4, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xB7, 0xC3, 0xDE, 0x50, 0xDE, 0x5A, 0xDE, 0x64, /* 0xBC-0xBF */ + 0xDE, 0x47, 0xDE, 0x51, 0xB7, 0xBC, 0xDE, 0x5B, /* 0xC0-0xC3 */ + 0xB7, 0xC9, 0xB7, 0xC0, 0xDE, 0x4E, 0xB7, 0xBF, /* 0xC4-0xC7 */ + 0xDE, 0x45, 0xDE, 0x53, 0xDE, 0x67, 0xB4, 0xFE, /* 0xC8-0xCB */ + 0xBA, 0xB0, 0xDE, 0x56, 0xE2, 0x6C, 0xDE, 0x58, /* 0xCC-0xCF */ + 0xDE, 0x66, 0xB7, 0xC6, 0xDE, 0x4F, 0xB7, 0xBA, /* 0xD0-0xD3 */ + 0xB7, 0xCA, 0xBC, 0xF0, 0xDE, 0x44, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xDE, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xDE, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xAA, /* 0xE8-0xEB */ + 0xBA, 0xAD, 0xE2, 0x7D, 0xE2, 0xA4, 0xBA, 0xA2, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xE2, 0x6E, 0xBA, 0xAF, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xBA, 0x77, 0xE2, 0x6D, 0xE2, 0xB0, 0xBA, 0xB1, /* 0xF4-0xF7 */ + 0xE2, 0x71, 0xE2, 0xA3, 0x3F, 0x3F, 0xE2, 0x73, /* 0xF8-0xFB */ + 0xE2, 0xB3, 0xE2, 0xAF, 0xBA, 0x75, 0xBA, 0xA1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0xE6, 0x53, 0xBA, 0xAE, 0xBA, 0x7D, 0xE2, 0x6F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xE2, 0xAE, 0xBA, 0xA3, 0xE2, 0xAB, /* 0x04-0x07 */ + 0xE2, 0xB8, 0xE2, 0x75, 0xE2, 0x7E, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE2, 0xB6, 0xE2, 0xAC, 0xBA, 0x7C, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0x7C, 0xBA, 0x76, /* 0x10-0x13 */ + 0xBA, 0x74, 0xBA, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xE2, 0x7A, 0xE2, 0x77, 0xE2, 0x78, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xE2, 0xB2, 0x3F, 0x3F, 0xE2, 0xB7, 0xE2, 0xB5, /* 0x1C-0x1F */ + 0xBA, 0x7A, 0xE2, 0xB9, 0xBA, 0x7E, 0xBA, 0xA7, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xE2, 0x70, 0xE5, 0xFA, 0xE2, 0x79, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xBA, 0x78, 0xBA, 0xAC, 0xBA, 0xA9, /* 0x28-0x2B */ + 0xBA, 0x7B, 0xE2, 0xA5, 0xE2, 0x74, 0xBA, 0xAA, /* 0x2C-0x2F */ + 0xE2, 0xA7, 0xBA, 0xA4, 0xBA, 0xA6, 0xBA, 0x73, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xE2, 0xA9, 0xE2, 0xA1, 0xE2, 0x72, /* 0x34-0x37 */ + 0xBA, 0xA5, 0xE2, 0xB1, 0xE2, 0xB4, 0xE2, 0x7B, /* 0x38-0x3B */ + 0xE2, 0xA8, 0x3F, 0x3F, 0xBA, 0x79, 0xBC, 0xDF, /* 0x3C-0x3F */ + 0xE2, 0xA6, 0xE5, 0xF9, 0x3F, 0x3F, 0xE2, 0xAD, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0x76, 0xE6, 0x44, /* 0x4C-0x4F */ + 0xE6, 0x4E, 0xBC, 0xE2, 0xE6, 0x4D, 0xE6, 0x59, /* 0x50-0x53 */ + 0xBC, 0xE4, 0xE6, 0x4B, 0x3F, 0x3F, 0xE6, 0x4F, /* 0x54-0x57 */ + 0xBC, 0xEF, 0x3F, 0x3F, 0xE6, 0x46, 0xBC, 0xE7, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xE6, 0x52, 0xE9, 0xF0, 0xBC, 0xF3, /* 0x5C-0x5F */ + 0xBC, 0xF2, 0xE6, 0x54, 0xE6, 0x43, 0xE6, 0x5E, /* 0x60-0x63 */ + 0xBC, 0xED, 0x3F, 0x3F, 0xBC, 0xE3, 0xE6, 0x57, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xE6, 0x5B, 0xE6, 0x60, 0xE6, 0x55, /* 0x68-0x6B */ + 0xE6, 0x49, 0xBC, 0xE6, 0xBC, 0xE9, 0xBC, 0xF1, /* 0x6C-0x6F */ + 0xBC, 0xEC, 0x3F, 0x3F, 0xE6, 0x4C, 0xE2, 0xA2, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0x48, 0xE6, 0x5F, /* 0x74-0x77 */ + 0xBC, 0xE8, 0x3F, 0x3F, 0xBC, 0xEB, 0xE6, 0x61, /* 0x78-0x7B */ + 0xBC, 0xE0, 0xE6, 0x56, 0xE5, 0xFB, 0xE6, 0x5C, /* 0x7C-0x7F */ + + 0xC0, 0xDF, 0x3F, 0x3F, 0xE6, 0x4A, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xBC, 0xE1, 0xE6, 0x45, 0xBC, 0xE5, 0xE5, 0xFC, /* 0x84-0x87 */ + 0xBA, 0xAB, 0xE6, 0x41, 0x3F, 0x3F, 0xE6, 0x5A, /* 0x88-0x8B */ + 0xE6, 0x42, 0xE6, 0x40, 0xBC, 0xEA, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xE6, 0x58, 0x3F, 0x3F, 0xE5, 0xFE, 0xE6, 0x51, /* 0x90-0x93 */ + 0xE6, 0x50, 0xE6, 0x5D, 0xE6, 0x47, 0xBC, 0xEE, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE9, 0xF3, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xBF, 0x49, 0xBE, 0xFE, 0xEA, 0x40, 0xE9, 0xEB, /* 0xA0-0xA3 */ + 0xBF, 0x41, 0xE9, 0xF7, 0xBF, 0x48, 0xBF, 0x43, /* 0xA4-0xA7 */ + 0xE9, 0xF5, 0xED, 0x4F, 0xE9, 0xFB, 0xEA, 0x42, /* 0xA8-0xAB */ + 0xE9, 0xFA, 0xE9, 0xE9, 0xE9, 0xF8, 0xEA, 0x44, /* 0xAC-0xAF */ + 0xEA, 0x46, 0xBE, 0xFD, 0xEA, 0x45, 0xBF, 0x44, /* 0xB0-0xB3 */ + 0xBF, 0x4A, 0x3F, 0x3F, 0xBF, 0x47, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xE9, 0xFE, 0xBF, 0x46, 0xE9, 0xF9, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xE9, 0xED, 0xE9, 0xF2, 0x3F, 0x3F, 0xE9, 0xFD, /* 0xBC-0xBF */ + 0xBF, 0x45, 0xBF, 0x42, 0xBE, 0xFC, 0xBF, 0x40, /* 0xC0-0xC3 */ + 0xE9, 0xF1, 0x3F, 0x3F, 0xE5, 0xFD, 0xE9, 0xEC, /* 0xC4-0xC7 */ + 0xE9, 0xEF, 0xEA, 0x41, 0xE9, 0xF4, 0xE9, 0xEA, /* 0xC8-0xCB */ + 0xED, 0x4E, 0xEA, 0x43, 0xE9, 0xEE, 0xE9, 0xFC, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xED, 0x51, 0xC0, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xC0, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xDB, /* 0xD8-0xDB */ + 0xED, 0x53, 0xED, 0x59, 0xED, 0x57, 0xC0, 0xD9, /* 0xDC-0xDF */ + 0xC0, 0xDA, 0xC0, 0xE1, 0xED, 0x5A, 0xED, 0x52, /* 0xE0-0xE3 */ + 0xC0, 0xDC, 0x3F, 0x3F, 0xED, 0x56, 0xED, 0x55, /* 0xE4-0xE7 */ + 0xED, 0x5B, 0xC0, 0xE2, 0x3F, 0x3F, 0xC0, 0xDD, /* 0xE8-0xEB */ + 0xC0, 0xE0, 0xED, 0x54, 0xC0, 0xE4, 0xC0, 0xDE, /* 0xEC-0xEF */ + 0xC0, 0xE5, 0xC0, 0xD8, 0xED, 0x58, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xED, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0xF7, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x71, 0xEF, 0xF4, /* 0xF8-0xFB */ + 0xEF, 0xF6, 0x3F, 0x3F, 0xC2, 0x6F, 0xEF, 0xF2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0xEF, 0xF3, 0xEF, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xE9, 0xF6, 0xEF, 0xEF, 0xC2, 0x70, 0xEF, 0xEB, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xC2, 0x6D, 0xEF, 0xF8, 0xC2, 0x6E, /* 0x08-0x0B */ + 0xEF, 0xEC, 0xEF, 0xED, 0xEF, 0xF1, 0xC2, 0x73, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xC2, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xEF, 0xF0, 0xC3, 0x78, 0xF2, 0x5F, 0xF2, 0x65, /* 0x14-0x17 */ + 0xC3, 0x79, 0xF2, 0x5C, 0xC3, 0x76, 0xC3, 0x73, /* 0x18-0x1B */ + 0xF2, 0x67, 0xC3, 0x77, 0x3F, 0x3F, 0xC3, 0x74, /* 0x1C-0x1F */ + 0xF2, 0x5E, 0xF2, 0x61, 0xF2, 0x62, 0xF2, 0x63, /* 0x20-0x23 */ + 0xF2, 0x66, 0x3F, 0x3F, 0xEF, 0xF5, 0xF2, 0x5D, /* 0x24-0x27 */ + 0xC3, 0x75, 0xF2, 0x64, 0xF2, 0x68, 0xF2, 0x60, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0x5D, /* 0x2C-0x2F */ + 0xC4, 0x6A, 0xF4, 0x60, 0xC4, 0x6B, 0xF4, 0x68, /* 0x30-0x33 */ + 0xF4, 0x5F, 0xF4, 0x5C, 0x3F, 0x3F, 0xF4, 0x5E, /* 0x34-0x37 */ + 0xF4, 0x62, 0xF4, 0x65, 0xF4, 0x64, 0xF4, 0x67, /* 0x38-0x3B */ + 0xF4, 0x5B, 0x3F, 0x3F, 0xC4, 0x69, 0xF4, 0x63, /* 0x3C-0x3F */ + 0xF4, 0x66, 0xF4, 0x69, 0xF4, 0x61, 0xF5, 0xD3, /* 0x40-0x43 */ + 0xF5, 0xD4, 0xF5, 0xD8, 0xF5, 0xD9, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xF5, 0xD6, 0xF5, 0xD7, 0xF5, 0xD5, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xC4, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xC5, 0x78, 0xF6, 0xEB, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xF6, 0xE8, 0xF6, 0xE9, 0xF6, 0xEA, /* 0x54-0x57 */ + 0xC5, 0x79, 0x3F, 0x3F, 0xF7, 0xE5, 0xF7, 0xE4, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF8, 0xAF, 0xC5, 0xF4, 0xF8, 0xAD, /* 0x5C-0x5F */ + 0xF8, 0xB0, 0xF8, 0xAE, 0xF8, 0xF5, 0xC6, 0x57, /* 0x60-0x63 */ + 0xC6, 0x65, 0xF9, 0xA3, 0xF9, 0x6C, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF9, 0xA2, 0xF9, 0xD0, 0xF9, 0xD1, 0xA4, 0xF5, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xA6, 0xC7, 0xCA, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xCB, 0x5E, 0x3F, 0x3F, 0xA8, 0x5F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xA8, 0x62, 0x3F, 0x3F, 0xCB, 0x5F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xA8, 0x60, 0xA8, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0x58, 0xCD, 0x5A, /* 0x80-0x83 */ + 0xCD, 0x55, 0xCD, 0x52, 0xCD, 0x54, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0xA4, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0xA2, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xCD, 0x56, 0xAA, 0xA3, 0xCD, 0x53, /* 0x90-0x93 */ + 0xCD, 0x50, 0xAA, 0xA1, 0xCD, 0x57, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCD, 0x51, 0xAA, 0xA5, 0xCD, 0x59, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xAF, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xCF, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xAC, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xCF, 0xB6, 0x3F, 0x3F, 0xAC, 0xAF, /* 0xA8-0xAB */ + 0xAC, 0xB2, 0xAC, 0xB4, 0xAC, 0xB6, 0xAC, 0xB3, /* 0xAC-0xAF */ + 0xCF, 0xB2, 0xCF, 0xB1, 0x3F, 0x3F, 0xAC, 0xB1, /* 0xB0-0xB3 */ + 0xCF, 0xB4, 0xCF, 0xB5, 0x3F, 0x3F, 0xCF, 0xAE, /* 0xB4-0xB7 */ + 0xAC, 0xB5, 0x3F, 0x3F, 0xAC, 0xB0, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xB0, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xD2, 0x77, 0xD2, 0x78, 0xD2, 0x79, /* 0xC4-0xC7 */ + 0xAF, 0x50, 0x3F, 0x3F, 0xAF, 0x4C, 0xD2, 0x6E, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xD2, 0x76, 0xD2, 0x7B, 0xAF, 0x51, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xD2, 0x6C, 0xD2, 0x72, 0xD2, 0x6B, /* 0xD0-0xD3 */ + 0xD2, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0x71, /* 0xD4-0xD7 */ + 0xAF, 0x4D, 0xAF, 0x4F, 0xD2, 0x7A, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD2, 0x6A, 0xD2, 0x6D, 0xD2, 0x73, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xD2, 0x74, 0xD2, 0x7C, 0xD2, 0x70, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xAF, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0x6D, /* 0xEC-0xEF */ + 0xD6, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0x50, /* 0xF0-0xF3 */ + 0xD6, 0x4C, 0x3F, 0x3F, 0xD6, 0x58, 0xD6, 0x4A, /* 0xF4-0xF7 */ + 0xD6, 0x57, 0xB2, 0x69, 0xD6, 0x48, 0xDA, 0x5B, /* 0xF8-0xFB */ + 0xD6, 0x52, 0xB2, 0x6C, 0x3F, 0x3F, 0xD6, 0x53, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0xD6, 0x56, 0x3F, 0x3F, 0xD6, 0x5A, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD6, 0x4F, 0x3F, 0x3F, 0xD6, 0x54, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xB2, 0x6A, 0xB2, 0x6B, 0xD6, 0x59, /* 0x08-0x0B */ + 0xD6, 0x4D, 0xD6, 0x49, 0xD6, 0x5B, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD6, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0x55, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0x4B, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xB5, 0x48, 0xB5, 0x49, 0xDA, 0x65, /* 0x18-0x1B */ + 0xB5, 0x4F, 0x3F, 0x3F, 0xDA, 0x59, 0xDA, 0x62, /* 0x1C-0x1F */ + 0xDA, 0x58, 0xB5, 0x4C, 0xDA, 0x60, 0xDA, 0x5E, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xDA, 0x5F, 0xB5, 0x4A, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xDA, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0x5C, 0xDA, 0x5A, /* 0x2C-0x2F */ + 0xB5, 0x4B, 0xDA, 0x5D, 0xDA, 0x61, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0x4D, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0x64, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xDE, 0x70, 0xDE, 0x77, 0xDE, 0x79, /* 0x40-0x43 */ + 0xDE, 0xA1, 0x3F, 0x3F, 0xB7, 0xDA, 0xDE, 0x6B, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xB7, 0xD2, 0x3F, 0x3F, 0xDE, 0x7A, /* 0x48-0x4B */ + 0xB7, 0xD7, 0xDE, 0xA2, 0xB7, 0xCE, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xDE, 0x7D, 0x3F, 0x3F, 0xDE, 0x6D, 0xDE, 0x7E, /* 0x50-0x53 */ + 0xDE, 0x6C, 0x3F, 0x3F, 0xB7, 0xDC, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xDE, 0x78, 0xB7, 0xCF, 0xDE, 0xA3, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xB7, 0xD4, 0xDE, 0x71, 0xB7, 0xD9, 0xDE, 0x7C, /* 0x5C-0x5F */ + 0xDE, 0x6F, 0xDE, 0x76, 0xDE, 0x72, 0xDE, 0x6E, /* 0x60-0x63 */ + 0xB7, 0xD1, 0xB7, 0xD8, 0xB7, 0xD6, 0xB7, 0xD3, /* 0x64-0x67 */ + 0xB7, 0xDB, 0xB7, 0xD0, 0xDE, 0x75, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xB7, 0xD5, 0x3F, 0x3F, 0xB5, 0x4E, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xDE, 0x7B, 0x3F, 0x3F, 0xDE, 0x73, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xDE, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xC1, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xBA, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xE2, 0xBD, 0xE2, 0xC3, 0xE2, 0xBF, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xBA, 0xB6, 0xE2, 0xBE, 0xE2, 0xC2, 0xE2, 0xBA, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xE2, 0xBC, 0xBA, 0xB5, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xC0, /* 0x8C-0x8F */ + 0xE2, 0xBB, 0x3F, 0x3F, 0xBA, 0xB7, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xBA, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xC4, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xBA, 0xB3, 0xE6, 0x67, 0xE6, 0x64, /* 0x98-0x9B */ + 0xE6, 0x70, 0xE6, 0x6A, 0xE6, 0x6C, 0xBC, 0xF4, /* 0x9C-0x9F */ + 0xE6, 0x66, 0xE6, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xE6, 0x6D, 0xE6, 0x6B, 0x3F, 0x3F, 0xE6, 0x71, /* 0xA4-0xA7 */ + 0xBC, 0xF7, 0xE6, 0x68, 0xE6, 0x6F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xBC, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0x63, /* 0xAC-0xAF */ + 0xE6, 0x65, 0xBC, 0xF6, 0xE6, 0x62, 0xE6, 0x72, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xE6, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xEA, 0x4A, 0xBF, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xEA, 0x55, 0xEA, 0x53, 0xBF, 0x4B, 0xEA, 0x49, /* 0xBC-0xBF */ + 0xEA, 0x4C, 0xEA, 0x4D, 0xEA, 0x48, 0xBF, 0x55, /* 0xC0-0xC3 */ + 0xBF, 0x56, 0xEA, 0x47, 0xEA, 0x56, 0xEA, 0x51, /* 0xC4-0xC7 */ + 0xBF, 0x4F, 0xBF, 0x4C, 0xEA, 0x50, 0xEA, 0x4E, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0x52, 0xEA, 0x52, /* 0xCC-0xCF */ + 0xBF, 0x4D, 0x3F, 0x3F, 0xBF, 0x4E, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xEA, 0x4F, 0xBF, 0x50, 0xEA, 0x4B, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xEA, 0x54, 0xBF, 0x53, 0xEA, 0x57, 0xEA, 0x58, /* 0xD8-0xDB */ + 0xBF, 0x54, 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xE7, /* 0xDC-0xDF */ + 0xC0, 0xEE, 0xED, 0x5C, 0xED, 0x62, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xED, 0x60, 0xC0, 0xEA, 0xC0, 0xE9, 0xC0, 0xE6, /* 0xE4-0xE7 */ + 0xED, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xC0, 0xEC, 0xC0, 0xEB, 0xC0, 0xE8, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xED, 0x61, 0xED, 0x5D, 0xED, 0x5F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xC0, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xC2, 0x77, 0xEF, 0xFB, 0x3F, 0x3F, 0xC2, 0x74, /* 0xF8-0xFB */ + 0xC2, 0x75, 0xEF, 0xFD, 0xC2, 0x76, 0xEF, 0xFA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0x3F, 0x3F, 0xEF, 0xF9, 0xF2, 0x6C, 0xEF, 0xFC, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xF2, 0x6D, 0xC3, 0x7A, 0xF2, 0x6B, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0x6A, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xF2, 0x69, 0xC3, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xC4, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0x6A, /* 0x10-0x13 */ + 0xF4, 0x6B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF5, 0xDC, 0xF5, 0xDB, 0xC4, 0xEA, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xF5, 0xDA, 0xF6, 0xEC, 0xF6, 0xED, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0xE6, 0xF8, 0xB1, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xF6, 0xF9, 0xBC, /* 0x24-0x27 */ + 0xC6, 0x79, 0xF9, 0xC6, 0xA4, 0xF6, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xAA, 0xA6, 0xAA, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xAC, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xC0, 0xEF, 0xA4, 0xF7, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xAA, 0xA8, 0xAF, 0x52, 0xB7, 0xDD, 0xA4, 0xF8, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xB2, 0x6E, 0xBA, 0xB8, 0xC9, 0x62, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xCF, 0xB7, 0xD2, 0x7D, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE2, 0xC5, 0x3F, 0x3F, 0xC0, 0xF0, 0xA4, 0xF9, /* 0x44-0x47 */ + 0xAA, 0xA9, 0xCF, 0xB8, 0xCF, 0xB9, 0xDA, 0x66, /* 0x48-0x4B */ + 0xB5, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xA4, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xDE, 0xE2, 0xC6, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0xF8, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xC3, 0x7C, 0xA4, 0xFA, 0xDA, 0x67, 0xA4, 0xFB, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xA6, 0xC9, 0xCA, 0x42, 0xA6, 0xC8, /* 0x5C-0x5F */ + 0xA8, 0x65, 0xA8, 0x64, 0xA8, 0x63, 0xCB, 0x60, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0xAA, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xAA, 0xAB, 0xCD, 0x5B, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xCF, 0xBA, 0x3F, 0x3F, 0xCF, 0xBD, 0xAC, 0xBA, /* 0x6C-0x6F */ + 0xCF, 0xBB, 0x3F, 0x3F, 0xAC, 0xB9, 0xCF, 0xBC, /* 0x70-0x73 */ + 0xAC, 0xBB, 0x3F, 0x3F, 0xD2, 0xA2, 0xD2, 0xA1, /* 0x74-0x77 */ + 0xD2, 0x7E, 0xAF, 0x53, 0x3F, 0x3F, 0xD6, 0x5D, /* 0x78-0x7B */ + 0xD6, 0x5E, 0xB2, 0x6F, 0xD6, 0x5C, 0xD6, 0x5F, /* 0x7C-0x7F */ + + 0xB5, 0x52, 0xB2, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xB5, 0x51, 0xDA, 0x6B, 0xDA, 0x6A, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xDA, 0x68, 0xDA, 0x69, 0x3F, 0x3F, 0xDA, 0x6C, /* 0x88-0x8B */ + 0xDE, 0xA6, 0xDE, 0xA5, 0xDE, 0xA9, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xDE, 0xA8, 0xDE, 0xA7, 0xBA, 0xB9, 0xE2, 0xC9, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xE2, 0xC8, 0xBA, 0xBA, 0xE2, 0xC7, /* 0x94-0x97 */ + 0xE6, 0x73, 0x3F, 0x3F, 0xE6, 0x74, 0xBC, 0xF9, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xEA, 0x59, 0xEA, 0x5A, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xF2, 0x72, 0xC3, 0x7D, 0xF2, 0x71, /* 0xA0-0xA3 */ + 0xF2, 0x70, 0xF2, 0x6E, 0xF2, 0x6F, 0xC4, 0xEB, /* 0xA4-0xA7 */ + 0xF4, 0x6C, 0xF6, 0xEE, 0xF8, 0xF7, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xA4, 0xFC, 0x3F, 0x3F, 0xC9, 0xA5, 0xA5, 0xC7, /* 0xAC-0xAF */ + 0xC9, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xCA, 0x43, 0xCA, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0x66, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xCB, 0x62, 0x3F, 0x3F, 0xCB, 0x61, /* 0xBC-0xBF */ + 0xAA, 0xAC, 0xCB, 0x65, 0xA8, 0x67, 0xCB, 0x63, /* 0xC0-0xC3 */ + 0xA8, 0x66, 0xCB, 0x67, 0xCB, 0x64, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xCD, 0x5F, 0xCF, 0xBE, 0xCD, 0x5D, /* 0xC8-0xCB */ + 0xCD, 0x64, 0x3F, 0x3F, 0xAA, 0xAD, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xAA, 0xB0, 0xCD, 0x65, 0xCD, 0x61, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xCD, 0x62, 0x3F, 0x3F, 0xCD, 0x5C, 0xAA, 0xAF, /* 0xD4-0xD7 */ + 0xCD, 0x5E, 0xAA, 0xAE, 0xCD, 0x63, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xCD, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xC2, /* 0xDC-0xDF */ + 0xAC, 0xBD, 0xAC, 0xBE, 0x3F, 0x3F, 0xCF, 0xC5, /* 0xE0-0xE3 */ + 0xCF, 0xBF, 0x3F, 0x3F, 0xCF, 0xC4, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xCF, 0xC0, 0xAC, 0xBC, 0xCF, 0xC3, 0xCF, 0xC1, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xA8, /* 0xF0-0xF3 */ + 0xD2, 0xA5, 0x3F, 0x3F, 0xD2, 0xA7, 0xAF, 0x58, /* 0xF4-0xF7 */ + 0xAF, 0x57, 0xAF, 0x55, 0xD2, 0xA4, 0xD2, 0xA9, /* 0xF8-0xFB */ + 0xAF, 0x54, 0xAF, 0x56, 0xD2, 0xA6, 0xD6, 0x67, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0xD2, 0xA3, 0xD2, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0x62, /* 0x04-0x07 */ + 0xD6, 0x66, 0x3F, 0x3F, 0xD6, 0x65, 0xDA, 0x6E, /* 0x08-0x0B */ + 0xDA, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0x68, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xD6, 0x63, 0xDA, 0x6D, 0xB2, 0x74, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0x73, 0xD6, 0x61, /* 0x14-0x17 */ + 0xD6, 0x64, 0xB2, 0x75, 0x3F, 0x3F, 0xB2, 0x72, /* 0x18-0x1B */ + 0xB2, 0x71, 0xD6, 0x60, 0xD6, 0x69, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0x70, 0xDA, 0x77, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xB5, 0x54, 0xDA, 0x76, 0xDA, 0x73, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xB5, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xDA, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xDA, 0x6F, 0xDA, 0x71, 0xDA, 0x74, 0xDA, 0x72, /* 0x30-0x33 */ + 0xB5, 0x55, 0xDA, 0x78, 0xB5, 0x53, 0xB7, 0xDF, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xAD, 0xDE, 0xAC, /* 0x38-0x3B */ + 0xDE, 0xAA, 0x3F, 0x3F, 0xB7, 0xE2, 0xB7, 0xE1, /* 0x3C-0x3F */ + 0xDE, 0xAE, 0x3F, 0x3F, 0xDE, 0xAB, 0xE2, 0xCA, /* 0x40-0x43 */ + 0xBA, 0xBB, 0xB7, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xDE, 0xB0, 0xDE, 0xAF, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xE2, 0xCD, 0xE2, 0xCB, 0xBC, 0xFA, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xBA, 0xBC, 0xE2, 0xCC, 0xE6, 0x76, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBC, 0xFB, /* 0x54-0x57 */ + 0xE6, 0x75, 0xE6, 0x7E, 0xE6, 0x7D, 0xE6, 0x7B, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xE6, 0x7A, 0xE6, 0x77, 0xE6, 0x78, /* 0x5C-0x5F */ + 0xE6, 0x79, 0xE6, 0x7C, 0xE6, 0xA1, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xEA, 0x5F, 0xEA, 0x5C, 0xEA, 0x5D, /* 0x64-0x67 */ + 0xBF, 0x57, 0xEA, 0x5B, 0xEA, 0x61, 0xEA, 0x60, /* 0x68-0x6B */ + 0xEA, 0x5E, 0x3F, 0x3F, 0xED, 0x64, 0xED, 0x65, /* 0x6C-0x6F */ + 0xC0, 0xF1, 0x3F, 0x3F, 0xC0, 0xF2, 0xED, 0x63, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xC2, 0x79, 0xEF, 0xFE, 0xC2, 0x78, /* 0x74-0x77 */ + 0xC3, 0x7E, 0x3F, 0x3F, 0xC3, 0xA1, 0xC4, 0x6D, /* 0x78-0x7B */ + 0xF4, 0x6E, 0xF4, 0x6D, 0xF5, 0xDD, 0xF6, 0xEF, /* 0x7C-0x7F */ + + 0xC5, 0x7A, 0xF7, 0xE8, 0xF7, 0xE7, 0xF7, 0xE9, /* 0x80-0x83 */ + 0xA5, 0xC8, 0xCF, 0xC6, 0xAF, 0x59, 0xB2, 0x76, /* 0x84-0x87 */ + 0xD6, 0x6A, 0xA5, 0xC9, 0xC9, 0xA7, 0xA4, 0xFD, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCA, 0x45, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0x6C, 0xCB, 0x6A, /* 0x90-0x93 */ + 0xCB, 0x6B, 0xCB, 0x68, 0xA8, 0x68, 0xCB, 0x69, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xCD, 0x6D, 0x3F, 0x3F, 0xAA, 0xB3, /* 0x9C-0x9F */ + 0xCD, 0x6B, 0xCD, 0x67, 0xCD, 0x6A, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xCD, 0x66, 0xAA, 0xB5, 0xCD, 0x69, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xAA, 0xB2, 0xAA, 0xB1, 0x3F, 0x3F, 0xAA, 0xB4, /* 0xA8-0xAB */ + 0xCD, 0x6C, 0xCD, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0xC2, 0xAC, 0xC5, /* 0xB0-0xB3 */ + 0xCF, 0xCE, 0xCF, 0xCD, 0xCF, 0xCC, 0xAC, 0xBF, /* 0xB4-0xB7 */ + 0xCF, 0xD5, 0xCF, 0xCB, 0x3F, 0x3F, 0xAC, 0xC1, /* 0xB8-0xBB */ + 0xD2, 0xAF, 0x3F, 0x3F, 0xCF, 0xD2, 0xCF, 0xD0, /* 0xBC-0xBF */ + 0xAC, 0xC4, 0x3F, 0x3F, 0xCF, 0xC8, 0xCF, 0xD3, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xCF, 0xCA, 0xCF, 0xD4, 0xCF, 0xD1, /* 0xC4-0xC7 */ + 0xCF, 0xC9, 0x3F, 0x3F, 0xAC, 0xC0, 0xCF, 0xD6, /* 0xC8-0xCB */ + 0xCF, 0xC7, 0xAC, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xB4, 0xD2, 0xAB, /* 0xD0-0xD3 */ + 0xD2, 0xB6, 0x3F, 0x3F, 0xD2, 0xAE, 0xD2, 0xB9, /* 0xD4-0xD7 */ + 0xD2, 0xBA, 0xD2, 0xAC, 0xD2, 0xB8, 0xD2, 0xB5, /* 0xD8-0xDB */ + 0xD2, 0xB3, 0xD2, 0xB7, 0xAF, 0x5F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xAF, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xB1, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xD2, 0xAD, 0x3F, 0x3F, 0xD2, 0xB0, /* 0xE4-0xE7 */ + 0xD2, 0xBB, 0xD2, 0xB2, 0xAF, 0x5E, 0xCF, 0xCF, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xAF, 0x5A, 0xAF, 0x5C, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xD6, 0x78, 0xD6, 0x6D, 0xD6, 0x6B, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xD6, 0x6C, 0x3F, 0x3F, 0xD6, 0x73, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xD6, 0x74, 0xD6, 0x70, 0xB2, 0x7B, 0xD6, 0x75, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0xD6, 0x72, 0xD6, 0x6F, 0x3F, 0x3F, 0xB2, 0x79, /* 0x00-0x03 */ + 0xD6, 0x6E, 0xB2, 0x77, 0xB2, 0x7A, 0xD6, 0x71, /* 0x04-0x07 */ + 0xD6, 0x79, 0xAF, 0x5B, 0xB2, 0x78, 0xD6, 0x77, /* 0x08-0x0B */ + 0xD6, 0x76, 0xB2, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0x7E, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xA1, 0xB5, 0x60, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xDA, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xDA, 0xA9, 0xDA, 0xA2, 0xB5, 0x5A, 0xDA, 0xA6, /* 0x20-0x23 */ + 0xDA, 0xA5, 0xB5, 0x5B, 0xB5, 0x61, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xB5, 0x62, 0xDA, 0xA8, 0xB5, 0x58, 0xDA, 0x7D, /* 0x28-0x2B */ + 0xDA, 0x7B, 0xDA, 0xA3, 0xDA, 0x7A, 0xB5, 0x5F, /* 0x2C-0x2F */ + 0xDA, 0x7C, 0xDA, 0xA4, 0xDA, 0xAA, 0xB5, 0x59, /* 0x30-0x33 */ + 0xB5, 0x5E, 0xB5, 0x5C, 0xB5, 0x5D, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0x57, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xE9, /* 0x3C-0x3F */ + 0xDE, 0xB7, 0xB7, 0xE8, 0xDE, 0xBB, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDE, 0xB1, 0x3F, 0x3F, 0xDE, 0xBC, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xB2, 0xDE, 0xB3, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xDE, 0xBD, 0xDE, 0xBA, 0xDE, 0xB8, /* 0x4C-0x4F */ + 0xDE, 0xB9, 0xDE, 0xB5, 0xDE, 0xB4, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xDE, 0xBE, 0xB7, 0xE5, 0x3F, 0x3F, 0xDE, 0xB6, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xB7, 0xEA, 0xB7, 0xE4, 0xB7, 0xEB, /* 0x58-0x5B */ + 0xB7, 0xEC, 0x3F, 0x3F, 0xB7, 0xE7, 0xB7, 0xE6, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xCE, 0xBA, 0xBE, /* 0x60-0x63 */ + 0xBA, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xD3, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xBC, 0xFC, 0xBA, 0xBF, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xBA, 0xC1, 0xE2, 0xD4, 0xB7, 0xE3, /* 0x6C-0x6F */ + 0xBA, 0xC0, 0xE2, 0xD0, 0xE2, 0xD2, 0xE2, 0xCF, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xE2, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xE6, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xE6, 0xAA, 0xE6, 0xA7, 0xBD, 0x40, 0xEA, 0x62, /* 0x7C-0x7F */ + + 0xBD, 0x41, 0xE6, 0xA6, 0x3F, 0x3F, 0xBC, 0xFE, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xE6, 0xA8, 0xE6, 0xA5, 0xE6, 0xA2, /* 0x84-0x87 */ + 0xE6, 0xA9, 0xE6, 0xA3, 0xE6, 0xA4, 0xBC, 0xFD, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xED, 0x69, 0x3F, 0x3F, 0xEA, 0x66, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xEA, 0x65, 0xEA, 0x67, 0x3F, 0x3F, 0xED, 0x66, /* 0x94-0x97 */ + 0xBF, 0x5A, 0x3F, 0x3F, 0xEA, 0x63, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xBF, 0x58, 0x3F, 0x3F, 0xBF, 0x5C, 0xBF, 0x5B, /* 0x9C-0x9F */ + 0xEA, 0x64, 0xEA, 0x68, 0x3F, 0x3F, 0xBF, 0x59, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xED, 0x6D, 0xC0, 0xF5, 0xC2, 0x7A, /* 0xA4-0xA7 */ + 0xC0, 0xF6, 0xC0, 0xF3, 0xED, 0x6A, 0xED, 0x68, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xED, 0x6B, 0x3F, 0x3F, 0xED, 0x6E, /* 0xAC-0xAF */ + 0xC0, 0xF4, 0xED, 0x6C, 0xED, 0x67, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF0, 0x42, 0xF0, 0x45, 0xF2, 0x75, /* 0xB4-0xB7 */ + 0xF0, 0x40, 0x3F, 0x3F, 0xF4, 0x6F, 0xF0, 0x46, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xC3, 0xA2, 0xF0, 0x44, 0xC2, 0x7B, /* 0xBC-0xBF */ + 0xF0, 0x41, 0xF0, 0x43, 0xF0, 0x47, 0xF2, 0x76, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xF2, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xA3, 0xF2, 0x73, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0x6E, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xC4, 0xED, 0xF6, 0xF1, 0xC4, 0xEC, 0xF6, 0xF3, /* 0xD4-0xD7 */ + 0xF6, 0xF0, 0xF6, 0xF2, 0xC5, 0xD0, 0xF8, 0xB2, /* 0xD8-0xDB */ + 0xA5, 0xCA, 0xCD, 0x6E, 0xD2, 0xBC, 0xD2, 0xBD, /* 0xDC-0xDF */ + 0xB2, 0x7D, 0xDE, 0xBF, 0xBF, 0x5D, 0xC3, 0xA4, /* 0xE0-0xE3 */ + 0xC5, 0x7B, 0xF8, 0xB3, 0xA5, 0xCB, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xCD, 0x6F, 0xA2, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xCF, 0xD7, 0x3F, 0x3F, 0xCF, 0xD8, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xD2, 0xBE, 0xD2, 0xBF, 0xB2, 0x7E, 0xB2, 0xA1, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xAB, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xDE, 0xC2, 0xDE, 0xC1, 0xDE, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_75[512] = { + 0xE2, 0xD5, 0x3F, 0x3F, 0xE2, 0xD6, 0xE2, 0xD7, /* 0x00-0x03 */ + 0xBA, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xAD, /* 0x04-0x07 */ + 0xE6, 0xAC, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x69, /* 0x08-0x0B */ + 0xBF, 0x5E, 0xBF, 0x5F, 0x3F, 0x3F, 0xED, 0x72, /* 0x0C-0x0F */ + 0xED, 0x6F, 0xED, 0x70, 0xED, 0x71, 0xF0, 0x49, /* 0x10-0x13 */ + 0xF0, 0x48, 0xC2, 0x7C, 0xF2, 0x77, 0xF5, 0xDE, /* 0x14-0x17 */ + 0xA5, 0xCC, 0x3F, 0x3F, 0xAC, 0xC6, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xB2, 0xA2, 0xDE, 0xC3, 0x3F, 0x3F, 0xA5, 0xCD, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xD2, 0xC0, 0xB2, 0xA3, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xB5, 0x63, 0xB5, 0x64, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xA5, 0xCE, 0xA5, 0xCF, 0xCA, 0x46, 0xA8, 0x6A, /* 0x28-0x2B */ + 0xA8, 0x69, 0xAC, 0xC7, 0xCF, 0xD9, 0xDA, 0xAC, /* 0x2C-0x2F */ + 0xA5, 0xD0, 0xA5, 0xD1, 0xA5, 0xD2, 0xA5, 0xD3, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x6B, /* 0x34-0x37 */ + 0xA8, 0x6C, 0xCB, 0x6E, 0xCB, 0x6D, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xAA, 0xB6, 0xCD, 0x72, 0xCD, 0x70, /* 0x3C-0x3F */ + 0xCD, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xDA, /* 0x44-0x47 */ + 0xCF, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0xCB, /* 0x48-0x4B */ + 0xAC, 0xC9, 0x3F, 0x3F, 0xAC, 0xCA, 0xAC, 0xC8, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xAF, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xAF, 0x64, 0xAF, 0x63, 0xD2, 0xC1, /* 0x58-0x5B */ + 0xAF, 0x62, 0xAF, 0x61, 0x3F, 0x3F, 0xD2, 0xC2, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xA6, 0xD6, 0x7B, /* 0x60-0x63 */ + 0xD6, 0x7A, 0xB2, 0xA4, 0xB2, 0xA5, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0x66, 0xB5, 0x65, /* 0x68-0x6B */ + 0xDA, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xAD, /* 0x6C-0x6F */ + 0xB2, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB7, 0xED, 0xDE, 0xC5, /* 0x74-0x77 */ + 0xB7, 0xEE, 0xDE, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xE2, 0xD8, 0xE6, 0xAE, 0xBD, 0x42, /* 0x7C-0x7F */ + + 0xEA, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xED, 0x73, 0x3F, 0x3F, 0xC3, 0xA6, 0xC3, 0xA5, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0x7C, 0xA5, 0xD4, /* 0x88-0x8B */ + 0xCD, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xA8, /* 0x8C-0x8F */ + 0xE2, 0xD9, 0xBA, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xCB, 0x6F, 0xCB, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCD, 0x74, 0xAA, 0xB8, 0xAA, 0xB9, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xAA, 0xB7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0xCF, 0xAC, 0xD0, /* 0xA0-0xA3 */ + 0xAC, 0xCD, 0xAC, 0xCE, 0x3F, 0x3F, 0xCF, 0xDC, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCF, 0xDD, 0xAC, 0xCC, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xD2, 0xC3, 0x3F, 0x3F, 0xAF, 0x68, 0xAF, 0x69, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xB2, 0xAB, 0xD2, 0xC9, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xAF, 0x6E, 0xAF, 0x6C, 0xD2, 0xCA, 0xD2, 0xC5, /* 0xB8-0xBB */ + 0xAF, 0x6B, 0xAF, 0x6A, 0xAF, 0x65, 0xD2, 0xC8, /* 0xBC-0xBF */ + 0xD2, 0xC7, 0xD2, 0xC4, 0xAF, 0x6D, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xD2, 0xC6, 0xAF, 0x66, 0x3F, 0x3F, 0xAF, 0x67, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xAC, 0xD6, 0xA1, /* 0xC8-0xCB */ + 0xD6, 0xA2, 0xB2, 0xAD, 0xD6, 0x7C, 0xD6, 0x7E, /* 0xCC-0xCF */ + 0xD6, 0xA4, 0xD6, 0xA3, 0xD6, 0x7D, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xB2, 0xA9, 0xB2, 0xAA, 0x3F, 0x3F, 0xDA, 0xB6, /* 0xD4-0xD7 */ + 0xB5, 0x6B, 0xB5, 0x6A, 0xDA, 0xB0, 0xB5, 0x68, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xDA, 0xB3, 0xB5, 0x6C, 0xDA, 0xB4, /* 0xDC-0xDF */ + 0xB5, 0x6D, 0xDA, 0xB1, 0xB5, 0x67, 0xB5, 0x69, /* 0xE0-0xE3 */ + 0xDA, 0xB5, 0x3F, 0x3F, 0xDA, 0xB2, 0xDA, 0xAF, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xDE, 0xD2, 0x3F, 0x3F, 0xDE, 0xC7, /* 0xEC-0xEF */ + 0xB7, 0xF0, 0xB7, 0xF3, 0xB7, 0xF2, 0xB7, 0xF7, /* 0xF0-0xF3 */ + 0xB7, 0xF6, 0xDE, 0xD3, 0xDE, 0xD1, 0xDE, 0xCA, /* 0xF4-0xF7 */ + 0xDE, 0xCE, 0xDE, 0xCD, 0xB7, 0xF4, 0xDE, 0xD0, /* 0xF8-0xFB */ + 0xDE, 0xCC, 0xDE, 0xD4, 0xDE, 0xCB, 0xB7, 0xF5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0xB7, 0xEF, 0xB7, 0xF1, 0x3F, 0x3F, 0xDE, 0xC9, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xE2, 0xDB, 0xBA, 0xC7, 0xE2, 0xDF, 0xBA, 0xC6, /* 0x08-0x0B */ + 0xE2, 0xDC, 0xBA, 0xC5, 0x3F, 0x3F, 0xDE, 0xC8, /* 0x0C-0x0F */ + 0xDE, 0xCF, 0xE2, 0xDE, 0x3F, 0x3F, 0xBA, 0xC8, /* 0x10-0x13 */ + 0xE2, 0xE0, 0xE2, 0xDD, 0xE2, 0xDA, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xE6, 0xB1, 0xE6, 0xB5, 0xE6, 0xB7, /* 0x18-0x1B */ + 0xE6, 0xB3, 0xE6, 0xB2, 0xE6, 0xB0, 0xBD, 0x45, /* 0x1C-0x1F */ + 0xBD, 0x43, 0xBD, 0x48, 0xBD, 0x49, 0xE6, 0xB4, /* 0x20-0x23 */ + 0xBD, 0x46, 0xE6, 0xAF, 0xBD, 0x47, 0xBA, 0xC4, /* 0x24-0x27 */ + 0xE6, 0xB6, 0xBD, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xEA, 0x6C, 0x3F, 0x3F, 0xEA, 0x6B, /* 0x2C-0x2F */ + 0xEA, 0x73, 0xEA, 0x6D, 0xEA, 0x72, 0xEA, 0x6F, /* 0x30-0x33 */ + 0xBF, 0x60, 0xEA, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xBF, 0x61, 0x3F, 0x3F, 0xBF, 0x62, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xEA, 0x70, 0xEA, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xF8, 0xED, 0x74, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0xF7, 0xED, 0x77, /* 0x44-0x47 */ + 0xED, 0x75, 0xED, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xC0, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF0, 0x4D, 0x3F, 0x3F, 0xC2, 0xA1, 0xF0, 0x4E, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x7D, 0xF0, 0x4F, /* 0x54-0x57 */ + 0xC2, 0x7E, 0xF0, 0x4C, 0xF0, 0x50, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xF0, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xA7, /* 0x5C-0x5F */ + 0xF2, 0x78, 0xC3, 0xA8, 0xC4, 0x6F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xF0, 0x4B, 0xC4, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xC4, 0xEE, 0xF5, 0xDF, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xC5, 0x7E, 0xF6, 0xF4, 0xC5, 0x7D, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xF7, 0xEA, 0xC5, 0xF5, 0xC5, 0xF6, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xF9, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xAC, 0xD1, 0xCF, 0xDE, 0x3F, 0x3F, 0xB5, 0x6E, /* 0x78-0x7B */ + 0xB5, 0x6F, 0xA5, 0xD5, 0xA6, 0xCA, 0xCA, 0x47, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xCB, 0x71, 0xA8, 0x6D, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xAA, 0xBA, 0x3F, 0x3F, 0xAC, 0xD2, 0xAC, 0xD3, /* 0x84-0x87 */ + 0xAC, 0xD4, 0xD6, 0xA6, 0xD2, 0xCB, 0xAF, 0x6F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xAE, 0xD6, 0xA5, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xB8, 0xB5, 0x71, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xDA, 0xB7, 0xB5, 0x70, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xDE, 0xD5, 0xBD, 0x4A, 0xE6, 0xBB, /* 0x98-0x9B */ + 0xE6, 0xB8, 0xE6, 0xB9, 0xE6, 0xBA, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xED, 0x78, 0x3F, 0x3F, 0xF0, 0x51, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0x71, 0xF4, 0x70, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xF6, 0xF5, 0xA5, 0xD6, 0xCD, 0x75, /* 0xAC-0xAF */ + 0xAF, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xB5, 0x72, 0xDE, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xE2, 0xE1, 0x3F, 0x3F, 0xBD, 0x4B, 0xEA, 0x74, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xF0, 0x52, 0xF4, 0x72, 0xA5, 0xD7, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0xBB, 0xAC, 0xD7, /* 0xC0-0xC3 */ + 0xCF, 0xDF, 0xAC, 0xD8, 0xAC, 0xD6, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xAC, 0xD5, 0xD2, 0xCC, 0xAF, 0x71, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xAF, 0x72, 0xAF, 0x73, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xB0, 0xD6, 0xA7, /* 0xD0-0xD3 */ + 0xB2, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xB9, 0xB2, 0xB1, /* 0xD8-0xDB */ + 0xB5, 0x73, 0xDE, 0xD7, 0xB7, 0xF8, 0xB7, 0xF9, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xBA, 0xC9, 0x3F, 0x3F, 0xBA, 0xCA, /* 0xE0-0xE3 */ + 0xBD, 0x4C, 0xBF, 0x64, 0xEA, 0x75, 0xBF, 0x63, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xED, 0x79, 0xC0, 0xFA, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xF0, 0x53, 0xF4, 0x73, 0xA5, 0xD8, 0xA8, 0x6E, /* 0xEC-0xEF */ + 0xCD, 0x78, 0xCD, 0x77, 0xAA, 0xBC, 0xCD, 0x76, /* 0xF0-0xF3 */ + 0xAA, 0xBD, 0xCD, 0x79, 0x3F, 0x3F, 0xCF, 0xE5, /* 0xF4-0xF7 */ + 0xAC, 0xDB, 0xAC, 0xDA, 0xCF, 0xE7, 0xCF, 0xE6, /* 0xF8-0xFB */ + 0xAC, 0xDF, 0x3F, 0x3F, 0xAC, 0xDE, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0x3F, 0x3F, 0xAC, 0xD9, 0x3F, 0x3F, 0xCF, 0xE1, /* 0x00-0x03 */ + 0xCF, 0xE2, 0xCF, 0xE3, 0x3F, 0x3F, 0xAC, 0xE0, /* 0x04-0x07 */ + 0xCF, 0xE0, 0xAC, 0xDC, 0xCF, 0xE4, 0xAC, 0xDD, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xD2, 0xCF, 0xD2, 0xD3, 0xD2, 0xD1, 0xD2, 0xD0, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xD2, 0xD4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xD2, 0xD5, 0xD2, 0xD6, 0xD2, 0xCE, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xD2, 0xCD, 0x3F, 0x3F, 0xAF, 0x75, /* 0x1C-0x1F */ + 0xAF, 0x76, 0x3F, 0x3F, 0xD2, 0xD7, 0xD2, 0xD2, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xD6, 0xB0, 0x3F, 0x3F, 0xD2, 0xD8, /* 0x24-0x27 */ + 0xAF, 0x77, 0xAF, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xD6, 0xAA, 0x3F, 0x3F, 0xD6, 0xA9, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xD6, 0xAB, 0xD6, 0xAC, 0xD6, 0xAE, /* 0x30-0x33 */ + 0xD6, 0xAD, 0xD6, 0xB2, 0xB2, 0xB5, 0xB2, 0xB2, /* 0x34-0x37 */ + 0xB2, 0xB6, 0xD6, 0xA8, 0xB2, 0xB7, 0xD6, 0xB1, /* 0x38-0x3B */ + 0xB2, 0xB4, 0xD6, 0xAF, 0xB2, 0xB3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDA, 0xBC, 0xDA, 0xBE, 0xDA, 0xBA, 0xDA, 0xBB, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xBF, 0xDA, 0xC1, /* 0x48-0x4B */ + 0xDA, 0xC2, 0xDA, 0xBD, 0xDA, 0xC0, 0xB5, 0x74, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDE, 0xDB, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xDE, 0xE0, 0xDE, 0xD8, 0xDE, 0xDC, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xDE, 0xE1, 0xDE, 0xDD, 0xB7, 0xFA, /* 0x58-0x5B */ + 0xB8, 0x43, 0x3F, 0x3F, 0xB7, 0xFD, 0xDE, 0xD9, /* 0x5C-0x5F */ + 0xDE, 0xDA, 0xBA, 0xCE, 0xB8, 0x46, 0xB7, 0xFE, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xB8, 0x44, 0xB7, 0xFC, 0xDE, 0xDF, /* 0x64-0x67 */ + 0xB8, 0x45, 0xDE, 0xDE, 0xB8, 0x41, 0xB7, 0xFB, /* 0x68-0x6B */ + 0xB8, 0x42, 0xDE, 0xE2, 0xE2, 0xE6, 0xE2, 0xE8, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xB8, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xE2, 0xE3, 0xBA, 0xCC, 0xE2, 0xE9, 0xBA, 0xCD, /* 0x7C-0x7F */ + + 0xE2, 0xE7, 0xE2, 0xE2, 0xE2, 0xE5, 0xE2, 0xEA, /* 0x80-0x83 */ + 0xBA, 0xCB, 0xE2, 0xE4, 0x3F, 0x3F, 0xBD, 0x4E, /* 0x84-0x87 */ + 0xE6, 0xBF, 0xE6, 0xBE, 0x3F, 0x3F, 0xBD, 0x51, /* 0x88-0x8B */ + 0xBD, 0x4F, 0xE6, 0xBC, 0xBD, 0x4D, 0xE6, 0xBD, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xBD, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xEA, 0x7D, 0x3F, 0x3F, 0xEA, 0xA1, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xEA, 0x7E, 0xEA, 0x76, 0xEA, 0x7A, /* 0x98-0x9B */ + 0xEA, 0x79, 0xEA, 0x77, 0xBF, 0x66, 0xBF, 0x67, /* 0x9C-0x9F */ + 0xBF, 0x65, 0xEA, 0x78, 0xEA, 0x7B, 0xEA, 0x7C, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xBF, 0x68, 0x3F, 0x3F, 0xC1, 0x40, /* 0xA4-0xA7 */ + 0xED, 0xA3, 0x3F, 0x3F, 0xC0, 0xFC, 0xED, 0x7B, /* 0xA8-0xAB */ + 0xC0, 0xFE, 0xC1, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xC0, 0xFD, 0xED, 0xA2, 0xED, 0x7C, 0xC0, 0xFB, /* 0xB0-0xB3 */ + 0xED, 0xA1, 0xED, 0x7A, 0xED, 0x7E, 0xED, 0x7D, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0x55, 0xC2, 0xA4, /* 0xB8-0xBB */ + 0xC2, 0xA5, 0xC2, 0xA2, 0x3F, 0x3F, 0xC2, 0xA3, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0x54, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xF2, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xA9, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF2, 0x79, 0xF2, 0x7A, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xF4, 0x74, 0xF4, 0x77, 0xF4, 0x75, 0xF4, 0x76, /* 0xCC-0xCF */ + 0xF5, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0xEF, /* 0xD0-0xD3 */ + 0xF7, 0xEB, 0xF8, 0xB4, 0x3F, 0x3F, 0xC5, 0xF7, /* 0xD4-0xD7 */ + 0xF8, 0xF8, 0xF8, 0xF9, 0xC6, 0x66, 0xA5, 0xD9, /* 0xD8-0xDB */ + 0xAC, 0xE1, 0x3F, 0x3F, 0xDA, 0xC3, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xDE, 0xE3, 0x3F, 0x3F, 0xA5, 0xDA, 0xA8, 0x6F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xAA, 0xBE, 0x3F, 0x3F, 0xCF, 0xE8, /* 0xE4-0xE7 */ + 0xCF, 0xE9, 0xAF, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xDA, 0xC4, 0xB5, 0x75, 0xB8, 0x47, 0xC1, 0x42, /* 0xEC-0xEF */ + 0xED, 0xA4, 0xF2, 0x7C, 0xF4, 0x78, 0xA5, 0xDB, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xA1, /* 0xF4-0xF7 */ + 0xCD, 0x7A, 0xCD, 0x7C, 0xCD, 0x7E, 0xCD, 0x7D, /* 0xF8-0xFB */ + 0xCD, 0x7B, 0xAA, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0xAC, 0xE2, 0xCF, 0xF2, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xCF, 0xED, 0xCF, 0xEA, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xCF, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xAC, 0xE4, 0xAC, 0xE5, 0xCF, 0xF0, 0xCF, 0xEF, /* 0x0C-0x0F */ + 0xCF, 0xEE, 0xCF, 0xEB, 0xCF, 0xEC, 0xCF, 0xF3, /* 0x10-0x13 */ + 0xAC, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xAF, 0x7C, 0x3F, 0x3F, 0xAF, 0xA4, /* 0x1C-0x1F */ + 0xAF, 0xA3, 0xD2, 0xE1, 0xD2, 0xDB, 0xD2, 0xD9, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xAF, 0xA1, 0xD6, 0xB9, 0xAF, 0x7A, /* 0x24-0x27 */ + 0xD2, 0xDE, 0xD2, 0xE2, 0xD2, 0xE4, 0xD2, 0xE0, /* 0x28-0x2B */ + 0xD2, 0xDA, 0xAF, 0xA2, 0xD2, 0xDF, 0xD2, 0xDD, /* 0x2C-0x2F */ + 0xAF, 0x79, 0xD2, 0xE5, 0xAF, 0xA5, 0xD2, 0xE3, /* 0x30-0x33 */ + 0xAF, 0x7D, 0xD2, 0xDC, 0x3F, 0x3F, 0xAF, 0x7E, /* 0x34-0x37 */ + 0xAF, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xB9, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xD6, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xD6, 0xB3, 0xD6, 0xB5, 0xD6, 0xB7, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xD6, 0xB8, 0xD6, 0xB6, 0xB2, 0xBA, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xD6, 0xBB, 0x3F, 0x3F, 0xD6, 0xB4, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xDA, 0xC8, 0xB5, 0x76, 0xDA, 0xD0, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xDA, 0xC5, 0x3F, 0x3F, 0xDA, 0xD1, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xDA, 0xC6, 0xDA, 0xC7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xDA, 0xCF, 0xDA, 0xCE, 0xDA, 0xCB, 0xB2, 0xB8, /* 0x68-0x6B */ + 0xB5, 0x77, 0xDA, 0xC9, 0xDA, 0xCC, 0xB5, 0x78, /* 0x6C-0x6F */ + 0xDA, 0xCD, 0xDA, 0xCA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xDE, 0xEE, 0x3F, 0x3F, 0xDE, 0xF2, /* 0x78-0x7B */ + 0xB8, 0x4E, 0x3F, 0x3F, 0xE2, 0xF0, 0xB8, 0x51, /* 0x7C-0x7F */ + + 0xDE, 0xF0, 0xF9, 0xD6, 0x3F, 0x3F, 0xDE, 0xED, /* 0x80-0x83 */ + 0xDE, 0xE8, 0xDE, 0xEA, 0xDE, 0xEB, 0xDE, 0xE4, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xB8, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xB8, 0x4C, 0x3F, 0x3F, 0xB8, 0x48, 0xDE, 0xE7, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xB8, 0x4F, 0x3F, 0x3F, 0xB8, 0x50, /* 0x90-0x93 */ + 0xDE, 0xE6, 0xDE, 0xE9, 0xDE, 0xF1, 0xB8, 0x4A, /* 0x94-0x97 */ + 0xB8, 0x4B, 0xDE, 0xEF, 0xDE, 0xE5, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE2, 0xF2, 0xBA, 0xD0, /* 0x9C-0x9F */ + 0xE2, 0xF4, 0xDE, 0xEC, 0xE2, 0xF6, 0xBA, 0xD4, /* 0xA0-0xA3 */ + 0xE2, 0xF7, 0xE2, 0xF3, 0x3F, 0x3F, 0xBA, 0xD1, /* 0xA4-0xA7 */ + 0xE2, 0xEF, 0xBA, 0xD3, 0xE2, 0xEC, 0xE2, 0xF1, /* 0xA8-0xAB */ + 0xE2, 0xF5, 0xE2, 0xEE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xB8, 0x49, 0x3F, 0x3F, 0xE2, 0xEB, 0xBA, 0xD2, /* 0xB0-0xB3 */ + 0xE2, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBD, 0x54, 0xE6, 0xC1, /* 0xB8-0xBB */ + 0xBD, 0x58, 0x3F, 0x3F, 0xBD, 0x56, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xBA, 0xCF, 0x3F, 0x3F, 0xE6, 0xC8, /* 0xC0-0xC3 */ + 0xE6, 0xC9, 0xBD, 0x53, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xE6, 0xC7, 0xE6, 0xCA, 0xBD, 0x55, 0xBD, 0x52, /* 0xC8-0xCB */ + 0xE6, 0xC3, 0xE6, 0xC0, 0xE6, 0xC5, 0xE6, 0xC2, /* 0xCC-0xCF */ + 0xBD, 0x59, 0xE6, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xE6, 0xC6, 0xBD, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0x6A, 0xEA, 0xA8, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xEA, 0xA2, 0xEA, 0xA6, 0xEA, 0xAC, /* 0xDC-0xDF */ + 0xEA, 0xAD, 0xEA, 0xA9, 0xEA, 0xAA, 0xEA, 0xA7, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xEA, 0xA4, 0x3F, 0x3F, 0xBF, 0x6C, /* 0xE4-0xE7 */ + 0xBF, 0x69, 0xEA, 0xA3, 0xEA, 0xA5, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xBF, 0x6B, 0xEA, 0xAB, 0x3F, 0x3F, 0xC1, 0x46, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xAA, 0xED, 0xA5, /* 0xF0-0xF3 */ + 0xC1, 0x45, 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0x43, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xED, 0xAC, 0xC1, 0x44, 0xED, 0xA8, /* 0xF8-0xFB */ + 0xED, 0xA9, 0xED, 0xA6, 0xED, 0xAD, 0xF0, 0x56, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0x3F, 0x3F, 0xC1, 0x47, 0xED, 0xA7, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xED, 0xAE, 0xED, 0xAB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF0, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xF0, 0x57, 0x3F, 0x3F, 0xC2, 0xA6, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xF0, 0x5B, 0xF0, 0x5D, 0xF0, 0x5C, 0xF0, 0x58, /* 0x10-0x13 */ + 0xF0, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA3, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xC3, 0xAA, 0x3F, 0x3F, 0xF2, 0x7E, /* 0x18-0x1B */ + 0xF2, 0xA2, 0xF2, 0x7D, 0xF2, 0xA4, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xF2, 0xA1, 0x3F, 0x3F, 0xF4, 0x7A, /* 0x20-0x23 */ + 0xF4, 0x7D, 0xF4, 0x79, 0xC4, 0x71, 0xF4, 0x7B, /* 0x24-0x27 */ + 0xF4, 0x7C, 0xF4, 0x7E, 0xC4, 0x72, 0xC4, 0x74, /* 0x28-0x2B */ + 0xC4, 0x73, 0xF5, 0xE1, 0x3F, 0x3F, 0xF5, 0xE3, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF5, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF6, 0xF6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xF8, 0xB5, 0xF8, 0xFA, 0xA5, 0xDC, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xCB, 0x72, 0xAA, 0xC0, 0xCD, 0xA3, /* 0x3C-0x3F */ + 0xAA, 0xC1, 0xAA, 0xC2, 0xCD, 0xA2, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xCF, 0xF8, 0xCF, 0xF7, 0xAC, 0xE6, 0xAC, 0xE9, /* 0x44-0x47 */ + 0xAC, 0xE8, 0xAC, 0xE7, 0xCF, 0xF4, 0xCF, 0xF6, /* 0x48-0x4B */ + 0xCF, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0xD2, 0xE8, /* 0x4C-0x4F */ + 0xAF, 0xA7, 0xD2, 0xEC, 0xD2, 0xEB, 0xD2, 0xEA, /* 0x50-0x53 */ + 0xD2, 0xE6, 0xAF, 0xA6, 0xAF, 0xAA, 0xAF, 0xAD, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAF, 0xAE, 0xD2, 0xE7, /* 0x58-0x5B */ + 0xD2, 0xE9, 0xAF, 0xAC, 0xAF, 0xAB, 0xAF, 0xA9, /* 0x5C-0x5F */ + 0xAF, 0xA8, 0xD6, 0xC2, 0x3F, 0x3F, 0xD6, 0xC0, /* 0x60-0x63 */ + 0xD6, 0xBC, 0xB2, 0xBB, 0x3F, 0x3F, 0xD6, 0xBD, /* 0x64-0x67 */ + 0xB2, 0xBC, 0xD6, 0xBE, 0xD6, 0xBF, 0xD6, 0xC1, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xB2, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xDA, 0xD5, 0x3F, 0x3F, 0xDA, 0xD4, 0xDA, 0xD3, /* 0x70-0x73 */ + 0xDA, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xDE, 0xF6, 0xB8, 0x52, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xDE, 0xF3, 0xDE, 0xF5, 0x3F, 0x3F, 0xB8, 0x53, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xB8, 0x54, 0xDE, 0xF4, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xE3, 0x41, 0x3F, 0x3F, 0xE2, 0xF9, 0xE2, 0xFA, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xBA, 0xD7, 0xBA, 0xD5, 0xBA, 0xD6, /* 0x8C-0x8F */ + 0xE3, 0x43, 0x3F, 0x3F, 0xE3, 0x42, 0xE2, 0xFE, /* 0x90-0x93 */ + 0xE2, 0xFD, 0xE2, 0xFC, 0xE2, 0xFB, 0xE3, 0x40, /* 0x94-0x97 */ + 0xE2, 0xF8, 0x3F, 0x3F, 0xE6, 0xCB, 0xE6, 0xD0, /* 0x98-0x9B */ + 0xE6, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xE6, 0xCD, 0xE6, 0xCC, 0xE6, 0xCF, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xEA, 0xAE, 0x3F, 0x3F, 0xBF, 0x6D, 0xC1, 0x48, /* 0xA4-0xA7 */ + 0xED, 0xB0, 0x3F, 0x3F, 0xC1, 0x49, 0xED, 0xAF, /* 0xA8-0xAB */ + 0xF0, 0x5F, 0xF0, 0x5E, 0xC2, 0xA7, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xF2, 0xA5, 0xC3, 0xAB, 0xF4, 0xA1, 0xC5, 0xA1, /* 0xB0-0xB3 */ + 0xF6, 0xF7, 0x3F, 0x3F, 0xF8, 0xB7, 0xF8, 0xB6, /* 0xB4-0xB7 */ + 0xC9, 0xA8, 0xAC, 0xEA, 0xAC, 0xEB, 0xD6, 0xC3, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xB8, 0x56, 0xA5, 0xDD, 0xA8, 0x72, /* 0xBC-0xBF */ + 0xA8, 0x71, 0xA8, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xCD, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xAA, 0xC4, 0xAA, 0xC3, 0x3F, 0x3F, 0xAC, 0xEE, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xCF, 0xFA, 0xCF, 0xFD, 0xCF, 0xFB, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xAC, 0xEC, 0xAC, 0xED, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xCF, 0xF9, 0xCF, 0xFC, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xAF, 0xB5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xD2, 0xF3, 0xD2, 0xF5, 0xD2, 0xF4, 0xAF, 0xB2, /* 0xDC-0xDF */ + 0xD2, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xAF, 0xB0, /* 0xE0-0xE3 */ + 0xAF, 0xAF, 0x3F, 0x3F, 0xAF, 0xB3, 0xAF, 0xB1, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xAF, 0xB4, 0xD2, 0xF2, 0xD2, 0xED, /* 0xE8-0xEB */ + 0xD2, 0xEE, 0xD2, 0xF1, 0xD2, 0xF0, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xC6, 0xD6, 0xC7, /* 0xF4-0xF7 */ + 0xD6, 0xC5, 0x3F, 0x3F, 0xD6, 0xC4, 0xB2, 0xBE, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7A[512] = { + 0xB5, 0x7D, 0x3F, 0x3F, 0xDA, 0xD6, 0xDA, 0xD8, /* 0x00-0x03 */ + 0xDA, 0xDA, 0xB5, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xB5, 0x7A, 0x3F, 0x3F, 0xDA, 0xD7, 0xB5, 0x7B, /* 0x08-0x0B */ + 0xDA, 0xD9, 0xB5, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xDF, 0x41, 0xDE, 0xF7, 0xDE, 0xFA, 0xDE, 0xFE, /* 0x10-0x13 */ + 0xB8, 0x5A, 0xDE, 0xFC, 0x3F, 0x3F, 0xDE, 0xFB, /* 0x14-0x17 */ + 0xDE, 0xF8, 0xDE, 0xF9, 0xB8, 0x58, 0xDF, 0x40, /* 0x18-0x1B */ + 0xB8, 0x57, 0x3F, 0x3F, 0xB8, 0x5C, 0xB8, 0x5B, /* 0x1C-0x1F */ + 0xB8, 0x59, 0x3F, 0x3F, 0xDE, 0xFD, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0x49, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xE3, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0x44, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBA, 0xD8, 0xE3, 0x47, /* 0x2C-0x2F */ + 0xE3, 0x46, 0xBA, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBD, 0x5E, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xE6, 0xD2, 0x3F, 0x3F, 0xBD, 0x5F, /* 0x38-0x3B */ + 0xBD, 0x5B, 0xBD, 0x5D, 0x3F, 0x3F, 0xBD, 0x5A, /* 0x3C-0x3F */ + 0xBD, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xEA, 0xAF, 0x3F, 0x3F, 0xBF, 0x70, 0xEA, 0xB1, /* 0x44-0x47 */ + 0xEA, 0xB0, 0x3F, 0x3F, 0xE3, 0x45, 0xBF, 0x72, /* 0x48-0x4B */ + 0xBF, 0x71, 0xBF, 0x6E, 0xBF, 0x6F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xED, 0xB5, 0x3F, 0x3F, 0xED, 0xB3, 0xC1, 0x4A, /* 0x54-0x57 */ + 0xED, 0xB4, 0x3F, 0x3F, 0xED, 0xB6, 0xED, 0xB2, /* 0x58-0x5B */ + 0xED, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0x60, /* 0x5C-0x5F */ + 0xC2, 0xAA, 0xC2, 0xA8, 0xC2, 0xA9, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA6, /* 0x64-0x67 */ + 0xF2, 0xA7, 0xC3, 0xAD, 0x3F, 0x3F, 0xC3, 0xAC, /* 0x68-0x6B */ + 0xF4, 0xA3, 0xF4, 0xA4, 0xF4, 0xA2, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xF6, 0xF8, 0xF6, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xA5, 0xDE, 0xCA, 0x48, 0xA8, 0x73, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xCD, 0xA5, 0xAA, 0xC6, 0xAA, 0xC5, 0xCD, 0xA6, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0x40, 0xAC, 0xEF, /* 0x7C-0x7F */ + + 0xCF, 0xFE, 0xAC, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xAF, 0xB6, 0xD2, 0xF8, 0xD2, 0xF6, 0xD2, 0xFC, /* 0x84-0x87 */ + 0xAF, 0xB7, 0xD2, 0xF7, 0xD2, 0xFB, 0xD2, 0xF9, /* 0x88-0x8B */ + 0xD2, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xC8, /* 0x8C-0x8F */ + 0xD6, 0xCA, 0x3F, 0x3F, 0xB2, 0xBF, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xD6, 0xC9, 0xB2, 0xC0, 0xB5, 0xA2, 0xB5, 0xA1, /* 0x94-0x97 */ + 0xB5, 0x7E, 0xDA, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0x44, 0xB8, 0x5D, /* 0x9C-0x9F */ + 0xB8, 0x5E, 0x3F, 0x3F, 0xDF, 0x43, 0xDF, 0x42, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xE3, 0x4A, 0xBA, 0xDB, 0xBA, 0xDA, 0xE3, 0x4B, /* 0xA8-0xAB */ + 0xE3, 0x4C, 0x3F, 0x3F, 0xBD, 0x61, 0xBD, 0x60, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xEA, 0xB5, 0xE6, 0xD3, 0xE6, 0xD5, /* 0xB0-0xB3 */ + 0xE6, 0xD4, 0xEA, 0xB4, 0xEA, 0xB2, 0xEA, 0xB6, /* 0xB4-0xB7 */ + 0xEA, 0xB3, 0x3F, 0x3F, 0xBF, 0x73, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xED, 0xB7, 0xC1, 0x4B, /* 0xBC-0xBF */ + 0xED, 0xB8, 0xED, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xC2, 0xAB, 0xC2, 0xAC, 0x3F, 0x3F, 0xC4, 0x75, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0xD1, 0xA5, 0xDF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xD0, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xD2, 0xFD, 0xAF, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xBA, /* 0xDC-0xDF */ + 0xB3, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0xA4, /* 0xE0-0xE3 */ + 0xDA, 0xDD, 0xB5, 0xA3, 0xDA, 0xDC, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0x45, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xBA, 0xDC, 0xE3, 0x4D, 0xBA, 0xDD, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0x76, 0xF4, 0xA5, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xA6, 0xCB, 0xAA, 0xC7, 0xCD, 0xA7, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xAC, 0xF2, 0x3F, 0x3F, 0xAC, 0xF1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0xD0, 0x42, 0xD0, 0x43, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xD3, 0x40, 0xD3, 0x42, 0xAF, 0xB9, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xD3, 0x44, 0xD3, 0x47, 0xD3, 0x45, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0x46, 0xD3, 0x43, /* 0x0C-0x0F */ + 0xD2, 0xFE, 0xAF, 0xBA, 0xD3, 0x48, 0xD3, 0x41, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xD6, 0xD3, 0xB2, 0xC6, 0xD6, 0xDC, 0xB2, 0xC3, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xD6, 0xD5, 0xB2, 0xC7, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xB2, 0xC1, 0x3F, 0x3F, 0xD6, 0xD0, 0xD6, 0xDD, /* 0x20-0x23 */ + 0xD6, 0xD1, 0xD6, 0xCE, 0xB2, 0xC5, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xB2, 0xC2, 0x3F, 0x3F, 0xD6, 0xD4, 0xD6, 0xD7, /* 0x28-0x2B */ + 0xB2, 0xC4, 0xD6, 0xD8, 0xB2, 0xC8, 0xD6, 0xD9, /* 0x2C-0x2F */ + 0xD6, 0xCF, 0xD6, 0xD6, 0xD6, 0xDA, 0xD6, 0xD2, /* 0x30-0x33 */ + 0xD6, 0xCD, 0xD6, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xD6, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xDF, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xDA, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDA, 0xE0, 0xDA, 0xE6, 0xB5, 0xA7, 0xD6, 0xCC, /* 0x44-0x47 */ + 0xDA, 0xE1, 0xB5, 0xA5, 0xDA, 0xDE, 0xB5, 0xAC, /* 0x48-0x4B */ + 0xDA, 0xE2, 0xB5, 0xAB, 0xDA, 0xE3, 0xB5, 0xAD, /* 0x4C-0x4F */ + 0xB5, 0xA8, 0xB5, 0xAE, 0xB5, 0xA9, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xB5, 0xAA, 0x3F, 0x3F, 0xB5, 0xA6, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xDA, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xB8, 0x61, 0xDF, 0x50, 0x3F, 0x3F, 0xDF, 0x53, /* 0x60-0x63 */ + 0xDF, 0x47, 0xDF, 0x4C, 0xDF, 0x46, 0xB8, 0x63, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xDF, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xDF, 0x48, 0xB8, 0x62, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xDF, 0x4F, 0xDF, 0x4E, 0xDF, 0x4B, 0xDF, 0x4D, /* 0x70-0x73 */ + 0xDF, 0x49, 0xBA, 0xE1, 0xDF, 0x52, 0xB8, 0x5F, /* 0x74-0x77 */ + 0xDF, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0x5D, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xBA, 0xE8, 0xE3, 0x58, 0x3F, 0x3F, 0xBA, 0xE7, /* 0x84-0x87 */ + 0xE3, 0x4E, 0x3F, 0x3F, 0xE3, 0x50, 0xBA, 0xE0, /* 0x88-0x8B */ + 0xE3, 0x55, 0xE3, 0x54, 0xE3, 0x57, 0xBA, 0xE5, /* 0x8C-0x8F */ + 0xE3, 0x52, 0xE3, 0x51, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xBA, 0xE4, 0xBA, 0xDF, 0xE3, 0x53, 0xBA, 0xE2, /* 0x94-0x97 */ + 0xE3, 0x59, 0xE3, 0x5B, 0x3F, 0x3F, 0xE3, 0x56, /* 0x98-0x9B */ + 0xE3, 0x4F, 0xBA, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xBD, 0x69, 0xBA, 0xDE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xE3, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE6, 0xD9, 0xBD, 0x62, 0x3F, 0x3F, 0xE6, 0xDB, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xBD, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xBD, 0x65, 0xE6, 0xDE, 0x3F, 0x3F, 0xE6, 0xD6, /* 0xB4-0xB7 */ + 0xBA, 0xE6, 0xE6, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xD8, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xB8, 0x60, 0xBD, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xBD, 0x64, 0x3F, 0x3F, 0xBD, 0x66, 0xBD, 0x67, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xBF, 0x76, 0xE6, 0xDD, 0xE6, 0xD7, /* 0xC8-0xCB */ + 0xBD, 0x6A, 0x3F, 0x3F, 0xE6, 0xDA, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xEA, 0xC0, 0xEA, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xEA, 0xC5, 0xBF, 0x74, 0xEA, 0xBD, 0xBF, 0x78, /* 0xD8-0xDB */ + 0xEA, 0xC3, 0xEA, 0xBA, 0xEA, 0xB7, 0xEA, 0xC6, /* 0xDC-0xDF */ + 0xC1, 0x51, 0xBF, 0x79, 0xEA, 0xC2, 0xEA, 0xB8, /* 0xE0-0xE3 */ + 0xBF, 0x77, 0xEA, 0xBC, 0xBF, 0x7B, 0xEA, 0xB9, /* 0xE4-0xE7 */ + 0xEA, 0xBE, 0xBF, 0x7A, 0xEA, 0xC1, 0xEA, 0xC4, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xED, 0xCB, 0xED, 0xCC, 0xED, 0xBC, 0xED, 0xC3, /* 0xF0-0xF3 */ + 0xED, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0x4F, /* 0xF4-0xF7 */ + 0xED, 0xC8, 0xEA, 0xBF, 0x3F, 0x3F, 0xED, 0xBF, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xED, 0xC9, 0xC1, 0x4E, 0xED, 0xBE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7C[512] = { + 0xED, 0xBD, 0xED, 0xC7, 0xED, 0xC4, 0xED, 0xC6, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xED, 0xBA, 0xED, 0xCA, 0xC1, 0x4C, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xED, 0xC5, 0xED, 0xCE, 0xED, 0xC2, /* 0x08-0x0B */ + 0xC1, 0x50, 0xC1, 0x4D, 0xED, 0xC0, 0xED, 0xBB, /* 0x0C-0x0F */ + 0xED, 0xCD, 0xBF, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF0, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xF0, 0x61, 0xF0, 0x67, 0xC2, 0xB0, 0xF0, 0x65, /* 0x1C-0x1F */ + 0xF0, 0x64, 0xC2, 0xB2, 0xF0, 0x6A, 0xC2, 0xB1, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xF0, 0x6B, 0xF0, 0x68, 0xC2, 0xAE, /* 0x24-0x27 */ + 0xF0, 0x69, 0xF0, 0x62, 0xC2, 0xAF, 0xC2, 0xAD, /* 0x28-0x2B */ + 0xF2, 0xAB, 0xF0, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xF0, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xA8, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xB2, /* 0x34-0x37 */ + 0xC3, 0xB0, 0xF2, 0xAA, 0x3F, 0x3F, 0xF2, 0xAC, /* 0x38-0x3B */ + 0xF2, 0xA9, 0xC3, 0xB1, 0xC3, 0xAE, 0xC3, 0xAF, /* 0x3C-0x3F */ + 0xC3, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0x78, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xF4, 0xAA, 0x3F, 0x3F, 0xF4, 0xA9, /* 0x44-0x47 */ + 0xF4, 0xA7, 0xF4, 0xA6, 0xF4, 0xA8, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xC4, 0x77, 0xC4, 0x79, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xC4, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xE5, /* 0x50-0x53 */ + 0xF5, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xFA, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xF6, 0xFC, 0xF6, 0xFE, 0xF6, 0xFD, /* 0x58-0x5B */ + 0xF6, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0xA3, /* 0x5C-0x5F */ + 0xC5, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0xD3, /* 0x60-0x63 */ + 0xC5, 0xD2, 0xC5, 0xD4, 0xF7, 0xED, 0xF7, 0xEC, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xF8, 0xFB, 0xF8, 0xB8, 0xF8, 0xFC, /* 0x68-0x6B */ + 0xC6, 0x58, 0x3F, 0x3F, 0xC6, 0x59, 0xF9, 0x6D, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC6, 0x7E, 0xA6, 0xCC, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xCD, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xD0, 0x45, 0xD0, 0x46, 0xD0, 0x44, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xAC, 0xF3, 0x3F, 0x3F, 0xD0, 0x47, /* 0x7C-0x7F */ + + 0xD0, 0x48, 0xD0, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xD3, 0x49, 0xD3, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD3, 0x4D, 0xAF, 0xBB, 0xD3, 0x4B, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xD3, 0x4C, 0xD3, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xD3, 0x4A, 0xB2, 0xC9, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xD6, 0xDE, 0xB2, 0xCB, 0xD6, 0xE0, 0xB2, 0xCA, /* 0x94-0x97 */ + 0xD6, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xE8, 0xB5, 0xAF, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xDA, 0xEA, 0xDA, 0xE7, 0xD6, 0xE1, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xB5, 0xB0, 0x3F, 0x3F, 0xF9, 0xDB, /* 0xA4-0xA7 */ + 0xDA, 0xE9, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0x56, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xB8, 0x64, 0xDF, 0x54, 0xB8, 0x65, /* 0xB0-0xB3 */ + 0xDF, 0x55, 0xB8, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xBA, 0xE9, 0xE3, 0x61, 0xE3, 0x5E, /* 0xB8-0xBB */ + 0xE3, 0x60, 0xBA, 0xEA, 0xBA, 0xEB, 0xE3, 0x5F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xE6, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xE6, 0xE0, 0x3F, 0x3F, 0xBD, 0x6B, 0xE6, 0xE2, /* 0xC8-0xCB */ + 0xE6, 0xE1, 0x3F, 0x3F, 0xA2, 0x61, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xEA, 0xCA, 0xEA, 0xCB, 0xEA, 0xC7, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xEA, 0xC8, 0xBF, 0x7C, 0xBF, 0x7D, 0xEA, 0xC9, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xC1, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xC1, 0x53, 0xC1, 0x58, 0xC1, 0x54, 0xC1, 0x56, /* 0xDC-0xDF */ + 0xC1, 0x52, 0x3F, 0x3F, 0xC1, 0x55, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0xB3, /* 0xE4-0xE7 */ + 0xED, 0xCF, 0x3F, 0x3F, 0xF2, 0xAE, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xF2, 0xAD, 0x3F, 0x3F, 0xF4, 0xAB, 0xC4, 0x7A, /* 0xEC-0xEF */ + 0xC4, 0x7B, 0xF7, 0x41, 0xF5, 0xE6, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xF7, 0x40, 0x3F, 0x3F, 0xF8, 0xFD, 0xF9, 0xA4, /* 0xF4-0xF7 */ + 0xA6, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0x74, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xCD, 0xA9, 0xAA, 0xC8, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0xAC, 0xF6, 0xD0, 0x4C, 0xAC, 0xF4, 0xD0, 0x4A, /* 0x00-0x03 */ + 0xAC, 0xF9, 0xAC, 0xF5, 0xAC, 0xFA, 0xAC, 0xF8, /* 0x04-0x07 */ + 0xD0, 0x4B, 0xAC, 0xF7, 0xAF, 0xBF, 0xAF, 0xBE, /* 0x08-0x0B */ + 0xD3, 0x5A, 0xAF, 0xC7, 0xD3, 0x53, 0xD3, 0x59, /* 0x0C-0x0F */ + 0xAF, 0xC3, 0xD3, 0x52, 0xD3, 0x58, 0xD3, 0x56, /* 0x10-0x13 */ + 0xAF, 0xC2, 0xAF, 0xC4, 0xD3, 0x55, 0xAF, 0xBD, /* 0x14-0x17 */ + 0xD3, 0x54, 0xAF, 0xC8, 0xAF, 0xC5, 0xAF, 0xC9, /* 0x18-0x1B */ + 0xAF, 0xC6, 0xD3, 0x51, 0xD3, 0x50, 0xD3, 0x57, /* 0x1C-0x1F */ + 0xAF, 0xC0, 0xAF, 0xBC, 0xAF, 0xC1, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xD6, 0xF0, 0xD6, 0xE9, 0x3F, 0x3F, 0xB5, 0xB5, /* 0x28-0x2B */ + 0xD6, 0xE8, 0x3F, 0x3F, 0xB2, 0xCF, 0xB2, 0xD6, /* 0x2C-0x2F */ + 0xB2, 0xD3, 0xB2, 0xD9, 0xB2, 0xD8, 0xB2, 0xD4, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xD6, 0xE2, 0xD6, 0xE5, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xD6, 0xE4, 0xB2, 0xD0, 0xD6, 0xE6, 0xD6, 0xEF, /* 0x38-0x3B */ + 0xB2, 0xD1, 0xD6, 0xE3, 0xD6, 0xEC, 0xD6, 0xED, /* 0x3C-0x3F */ + 0xB2, 0xD2, 0xD6, 0xEA, 0xB2, 0xD7, 0xB2, 0xCD, /* 0x40-0x43 */ + 0xB2, 0xD5, 0xD6, 0xE7, 0xB2, 0xCC, 0xD6, 0xEB, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD6, 0xEE, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDA, 0xFB, 0xDA, 0xF2, /* 0x4C-0x4F */ + 0xB5, 0xB2, 0xDA, 0xF9, 0xDA, 0xF6, 0xDA, 0xEE, /* 0x50-0x53 */ + 0xDA, 0xF7, 0xB5, 0xB4, 0xDA, 0xEF, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xDA, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0x6C, /* 0x58-0x5B */ + 0xDA, 0xF4, 0x3F, 0x3F, 0xB5, 0xB1, 0xDA, 0xFA, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xB5, 0xB8, 0xB5, 0xBA, 0xDA, 0xED, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0xB9, 0xDA, 0xF0, /* 0x64-0x67 */ + 0xB5, 0xB3, 0xDA, 0xF8, 0xDA, 0xF1, 0xDA, 0xF5, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xDA, 0xF3, 0xB5, 0xB6, 0xDA, 0xEC, /* 0x6C-0x6F */ + 0xB5, 0xBB, 0xB2, 0xCE, 0xB5, 0xB7, 0xB5, 0xBC, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xB8, 0x68, 0xDF, 0x5D, 0xDF, 0x5F, /* 0x78-0x7B */ + 0xDF, 0x61, 0xDF, 0x65, 0x3F, 0x3F, 0xDF, 0x5B, /* 0x7C-0x7F */ + + 0xDF, 0x59, 0xB8, 0x6A, 0x3F, 0x3F, 0xDF, 0x60, /* 0x80-0x83 */ + 0xDF, 0x64, 0xDF, 0x5C, 0xDF, 0x58, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xDF, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xDF, 0x62, 0xDF, 0x5A, 0xDF, 0x5E, 0xB8, 0x6B, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xB8, 0x69, 0xDF, 0x66, 0xB8, 0x67, /* 0x90-0x93 */ + 0xDF, 0x63, 0x3F, 0x3F, 0xE3, 0x72, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xBA, 0xEE, 0xE3, 0x6A, 0xBD, 0x78, 0xE3, 0x74, /* 0x9C-0x9F */ + 0xBA, 0xF1, 0xE3, 0x78, 0xBA, 0xF7, 0xE3, 0x65, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0x75, 0xE3, 0x62, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xE3, 0x77, 0xE3, 0x66, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xBA, 0xFE, 0xBA, 0xFB, 0xE3, 0x76, 0xE3, 0x70, /* 0xAC-0xAF */ + 0xBA, 0xED, 0xBA, 0xF5, 0xBA, 0xF4, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xBA, 0xF3, 0xBA, 0xF9, 0x3F, 0x3F, 0xE3, 0x63, /* 0xB4-0xB7 */ + 0xBA, 0xFA, 0xE3, 0x71, 0xBA, 0xF6, 0xBA, 0xEC, /* 0xB8-0xBB */ + 0xE3, 0x73, 0xBA, 0xEF, 0xBA, 0xF0, 0xBA, 0xF8, /* 0xBC-0xBF */ + 0xE3, 0x68, 0xE3, 0x67, 0xE3, 0x64, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xE3, 0x6C, 0xE3, 0x69, 0xE3, 0x6D, 0xBA, 0xFD, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xE3, 0x79, 0xBA, 0xF2, 0xE3, 0x6E, /* 0xC8-0xCB */ + 0xE3, 0x6F, 0x3F, 0x3F, 0xE3, 0x6B, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBA, 0xFC, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xE7, /* 0xD4-0xD7 */ + 0xBD, 0x70, 0xBD, 0x79, 0xBD, 0x75, 0xE6, 0xE4, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xBD, 0x72, 0xBD, 0x76, 0xE6, 0xF0, /* 0xDC-0xDF */ + 0xBD, 0x6C, 0xE6, 0xE8, 0x3F, 0x3F, 0xBD, 0x74, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xEB, 0xE6, 0xE6, /* 0xE4-0xE7 */ + 0xBD, 0x73, 0xBD, 0x77, 0xE6, 0xE5, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xBD, 0x71, 0x3F, 0x3F, 0xE6, 0xEF, 0xBD, 0x6E, /* 0xEC-0xEF */ + 0xE6, 0xEE, 0xE6, 0xED, 0xBD, 0x7A, 0xE5, 0x72, /* 0xF0-0xF3 */ + 0xBD, 0x6D, 0x3F, 0x3F, 0xE6, 0xEC, 0xE6, 0xE3, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xBD, 0x7B, 0xE6, 0xEA, 0xBD, 0x6F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7E[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xE9, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xBF, 0xA2, 0xBF, 0xA7, 0xBF, 0x7E, 0xEA, 0xD8, /* 0x08-0x0B */ + 0xEA, 0xCF, 0xEA, 0xDB, 0xEA, 0xD3, 0xEA, 0xD9, /* 0x0C-0x0F */ + 0xBF, 0xA8, 0xBF, 0xA1, 0xEA, 0xCC, 0xEA, 0xD2, /* 0x10-0x13 */ + 0xEA, 0xDC, 0xEA, 0xD5, 0xEA, 0xDA, 0xEA, 0xCE, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xD6, 0xBF, 0xA3, /* 0x18-0x1B */ + 0xEA, 0xD4, 0xBF, 0xA6, 0xBF, 0xA5, 0xEA, 0xD0, /* 0x1C-0x1F */ + 0xEA, 0xD1, 0xEA, 0xCD, 0xEA, 0xD7, 0xBF, 0xA4, /* 0x20-0x23 */ + 0xEA, 0xDE, 0xEA, 0xDD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xED, 0xDA, 0xED, 0xD6, 0xC1, 0x5F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xED, 0xD0, 0xC1, 0x59, 0xC1, 0x69, /* 0x2C-0x2F */ + 0xED, 0xDC, 0xC1, 0x61, 0xC1, 0x5D, 0xED, 0xD3, /* 0x30-0x33 */ + 0xC1, 0x64, 0xC1, 0x67, 0xED, 0xDE, 0xC1, 0x5C, /* 0x34-0x37 */ + 0xED, 0xD5, 0xC1, 0x65, 0xED, 0xE0, 0xED, 0xDD, /* 0x38-0x3B */ + 0xED, 0xD1, 0xC1, 0x60, 0xC1, 0x5A, 0xC1, 0x68, /* 0x3C-0x3F */ + 0xED, 0xD8, 0xC1, 0x63, 0xED, 0xD2, 0xC1, 0x5E, /* 0x40-0x43 */ + 0xED, 0xDF, 0xC1, 0x62, 0xC1, 0x5B, 0xED, 0xD9, /* 0x44-0x47 */ + 0xC1, 0x66, 0xED, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xED, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF0, 0x6E, 0xF0, 0x74, 0xC2, 0xB9, 0xF0, 0x77, /* 0x50-0x53 */ + 0xC2, 0xB4, 0xC2, 0xB5, 0xF0, 0x6F, 0xF0, 0x76, /* 0x54-0x57 */ + 0xF0, 0x71, 0xC2, 0xBA, 0xC2, 0xB7, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xF0, 0x6D, 0x3F, 0x3F, 0xC2, 0xB6, 0xF0, 0x73, /* 0x5C-0x5F */ + 0xF0, 0x75, 0xC2, 0xB8, 0xF0, 0x72, 0xF0, 0x70, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF2, 0xB8, 0xC3, 0xB7, 0xC3, 0xB8, 0xC3, 0xB4, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xC3, 0xB5, 0x3F, 0x3F, 0xF2, 0xB4, /* 0x6C-0x6F */ + 0xF2, 0xB2, 0x3F, 0x3F, 0xF2, 0xB6, 0xC3, 0xBA, /* 0x70-0x73 */ + 0xF2, 0xB7, 0xF2, 0xB0, 0xF2, 0xAF, 0xF2, 0xB3, /* 0x74-0x77 */ + 0xF2, 0xB1, 0xC3, 0xB6, 0xF2, 0xB5, 0xF4, 0xAC, /* 0x78-0x7B */ + 0xC4, 0x7E, 0xC4, 0x7D, 0xF4, 0xAD, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xF4, 0xAF, 0xF4, 0xAE, 0xC4, 0xA1, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0xEB, 0xF5, 0xE8, /* 0x84-0x87 */ + 0xF5, 0xE9, 0x3F, 0x3F, 0xF5, 0xE7, 0xF5, 0xEA, /* 0x88-0x8B */ + 0xC4, 0xF2, 0xF5, 0xEC, 0x3F, 0x3F, 0xC4, 0xF1, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF7, 0x42, 0x3F, 0x3F, 0xC5, 0xD5, /* 0x90-0x93 */ + 0xC5, 0xD7, 0xF7, 0xEE, 0xC5, 0xD6, 0xF8, 0xB9, /* 0x94-0x97 */ + 0xF9, 0x40, 0xF9, 0x42, 0xF8, 0xFE, 0xF9, 0x41, /* 0x98-0x9B */ + 0xC6, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7F[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0xCE, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xAC, 0xFB, 0xD2, 0x6F, 0xAF, 0xCA, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xB2, 0xDA, 0xDA, 0xFC, 0xDA, 0xFD, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xDF, /* 0x40-0x43 */ + 0xC1, 0x6A, 0xED, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xC2, 0xBB, 0x3F, 0x3F, 0xF2, 0xBA, 0xF2, 0xB9, /* 0x48-0x4B */ + 0xC4, 0xA2, 0xF5, 0xED, 0x3F, 0x3F, 0xF7, 0x43, /* 0x4C-0x4F */ + 0xC5, 0xF8, 0xCA, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xAA, 0xC9, 0xA8, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xD0, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0x60, /* 0x58-0x5B */ + 0xD3, 0x5B, 0xD3, 0x5F, 0xD3, 0x5D, 0xAF, 0xCB, /* 0x5C-0x5F */ + 0xD3, 0x5E, 0xD3, 0x5C, 0x3F, 0x3F, 0xD6, 0xF1, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xDA, 0xFE, 0xDB, 0x40, 0xDF, 0x69, /* 0x64-0x67 */ + 0xDF, 0x6A, 0xB8, 0x6E, 0xB8, 0x6F, 0xDF, 0x68, /* 0x68-0x6B */ + 0xDF, 0x6B, 0xDF, 0x67, 0xB8, 0x6D, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xBB, 0x40, 0x3F, 0x3F, 0xB8, 0x70, 0xE3, 0x7A, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xBD, 0x7C, 0xE6, 0xF1, 0xBD, 0x7D, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xBF, 0xA9, 0xEA, 0xE2, 0xEA, 0xE0, /* 0x78-0x7B */ + 0xEA, 0xE1, 0xED, 0xE4, 0xED, 0xE3, 0xED, 0xE2, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xBB, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xC3, 0xB9, 0xF2, 0xBC, 0xF7, 0x44, /* 0x84-0x87 */ + 0xC5, 0xF9, 0xF8, 0xBA, 0xA6, 0xCF, 0xAA, 0xCB, /* 0x88-0x8B */ + 0xAA, 0xCA, 0xD0, 0x4F, 0xAC, 0xFC, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xD0, 0x4E, 0xD3, 0x62, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xAF, 0xCC, 0xD6, 0xF2, 0xD3, 0x61, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xDC, 0xD6, 0xF5, /* 0x98-0x9B */ + 0xD6, 0xF3, 0xD6, 0xF4, 0xB2, 0xDB, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xDB, 0x42, 0xDB, 0x43, 0xDB, 0x41, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xB8, 0x73, 0xDF, 0x6D, 0xDF, 0x6C, 0xDF, 0x6E, /* 0xA4-0xA7 */ + 0xB8, 0x72, 0xB8, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE6, 0xF2, 0xE6, 0xF4, 0x3F, 0x3F, 0xBD, 0x7E, /* 0xAC-0xAF */ + 0xE6, 0xF3, 0xEA, 0xE3, 0xBF, 0xAA, 0xF0, 0x79, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF0, 0x78, 0xC3, 0xBB, 0xF2, 0xBD, /* 0xB4-0xB7 */ + 0xC3, 0xBD, 0xC3, 0xBC, 0xF4, 0xB0, 0xF5, 0xEE, /* 0xB8-0xBB */ + 0xC4, 0xF3, 0xA6, 0xD0, 0xD0, 0x50, 0xAC, 0xFD, /* 0xBC-0xBF */ + 0xD3, 0x65, 0xAF, 0xCE, 0xD3, 0x64, 0xD3, 0x63, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xAF, 0xCD, 0x3F, 0x3F, 0xD6, 0xFB, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xD6, 0xFD, 0xD6, 0xF6, 0xD6, 0xF7, /* 0xC8-0xCB */ + 0xB2, 0xDD, 0xD6, 0xF8, 0xB2, 0xDE, 0xD6, 0xFC, /* 0xCC-0xCF */ + 0xD6, 0xF9, 0xD6, 0xFA, 0xB2, 0xDF, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xB5, 0xBE, 0xB5, 0xBF, 0x3F, 0x3F, 0xDB, 0x44, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0x6F, /* 0xD8-0xDB */ + 0xDF, 0x70, 0x3F, 0x3F, 0xE3, 0x7E, 0xBB, 0x43, /* 0xDC-0xDF */ + 0xBB, 0x41, 0xBB, 0x42, 0xE3, 0x7B, 0xE3, 0x7C, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xE3, 0x7D, 0xE6, 0xF9, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xE6, 0xFA, 0xBD, 0xA1, 0xE6, 0xF7, 0xE6, 0xF6, /* 0xE8-0xEB */ + 0xE6, 0xF8, 0xE6, 0xF5, 0xBF, 0xAD, 0xEA, 0xE4, /* 0xEC-0xEF */ + 0xBF, 0xAB, 0xBF, 0xAC, 0xED, 0xE6, 0xC1, 0x6B, /* 0xF0-0xF3 */ + 0xED, 0xE5, 0xEF, 0xA8, 0x3F, 0x3F, 0xF0, 0x7A, /* 0xF4-0xF7 */ + 0xF0, 0x7B, 0xC2, 0xBC, 0x3F, 0x3F, 0xC2, 0xBD, /* 0xF8-0xFB */ + 0xC1, 0x6C, 0xF2, 0xBE, 0xF2, 0xBF, 0xF4, 0xB1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0xC4, 0xA3, 0xA6, 0xD1, 0x3F, 0x3F, 0xA6, 0xD2, /* 0x00-0x03 */ + 0xAC, 0xFE, 0xAA, 0xCC, 0xAF, 0xCF, 0xD0, 0x51, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0xC0, /* 0x08-0x0B */ + 0xA6, 0xD3, 0xAD, 0x41, 0xD0, 0x52, 0xD0, 0x53, /* 0x0C-0x0F */ + 0xAD, 0x40, 0xAD, 0x42, 0xA6, 0xD4, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xD0, 0x54, 0xAF, 0xD1, 0xD3, 0x66, 0xAF, 0xD3, /* 0x14-0x17 */ + 0xAF, 0xD0, 0xAF, 0xD2, 0x3F, 0x3F, 0xD7, 0x41, /* 0x18-0x1B */ + 0xB2, 0xE0, 0x3F, 0x3F, 0xD7, 0x40, 0xD6, 0xFE, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xDF, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xE3, 0xA1, 0x3F, 0x3F, 0xBD, 0xA2, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xBF, 0xAE, 0xEA, 0xE6, 0xEA, 0xE5, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xED, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xF5, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0xD5, /* 0x30-0x33 */ + 0xCB, 0x73, 0xCD, 0xAA, 0xAD, 0x43, 0xD0, 0x55, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xD3, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xAF, 0xD4, 0xD3, 0x67, 0xAF, 0xD5, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0x43, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB2, 0xE2, 0xD7, 0x42, /* 0x44-0x47 */ + 0xD7, 0x44, 0x3F, 0x3F, 0xB2, 0xE1, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0x46, /* 0x4C-0x4F */ + 0xDB, 0x47, 0xDB, 0x45, 0xB5, 0xC1, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0x74, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xB8, 0x75, 0x3F, 0x3F, 0xBB, 0x45, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xE3, 0xA3, 0xE3, 0xA2, 0xBB, 0x44, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xE6, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, 0xE6, 0xFC, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xEA, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0x70, /* 0x6C-0x6F */ + 0xC1, 0x6F, 0xC1, 0x6D, 0xC1, 0x6E, 0xC1, 0x71, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xF0, 0x7C, 0xC2, 0xBF, 0xC2, 0xBE, /* 0x74-0x77 */ + 0xF2, 0xC0, 0xF4, 0xB2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xC5, 0xA5, 0xC5, 0xA4, 0xA6, 0xD6, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xD1, 0xFB, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xB8, 0x77, 0xB5, 0xC2, 0xB8, 0x76, 0xBB, 0x46, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xA6, 0xD7, 0xC9, 0xA9, 0xA6, 0xD8, /* 0x88-0x8B */ + 0xA6, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xAB, /* 0x8C-0x8F */ + 0xCB, 0x76, 0x3F, 0x3F, 0xCB, 0x77, 0xA8, 0x77, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xCB, 0x74, 0xA8, 0x76, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xA8, 0x79, 0xCB, 0x75, 0xA8, 0x7B, 0xA8, 0x7A, /* 0x98-0x9B */ + 0xCB, 0x78, 0xA8, 0x78, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xAA, 0xD1, 0xAA, 0xCF, 0xCD, 0xAD, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xAA, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xAA, 0xD3, 0xAA, 0xD5, 0xAA, 0xD2, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xCD, 0xB0, 0xCD, 0xAC, 0xAA, 0xD6, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xAA, 0xD0, 0xA8, 0x7C, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xAA, 0xD4, 0xCD, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xCD, 0xAE, 0x3F, 0x3F, 0xAA, 0xCD, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0x5B, 0xAD, 0x47, /* 0xC0-0xC3 */ + 0xAD, 0x48, 0xD0, 0x5D, 0x3F, 0x3F, 0xD0, 0x57, /* 0xC4-0xC7 */ + 0xD0, 0x5A, 0xD0, 0x63, 0xD0, 0x61, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xAD, 0x49, 0xD0, 0x67, 0xAD, 0x4C, 0xD0, 0x64, /* 0xCC-0xCF */ + 0xD0, 0x5C, 0xD0, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xDB, 0x49, 0xD0, 0x62, 0xAD, 0x44, 0xD0, 0x65, /* 0xD4-0xD7 */ + 0xD0, 0x56, 0xD0, 0x5F, 0xAD, 0x46, 0xAD, 0x4B, /* 0xD8-0xDB */ + 0xD0, 0x60, 0xAD, 0x4F, 0xAD, 0x4D, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xD0, 0x58, 0xAD, 0x4A, 0x3F, 0x3F, 0xD0, 0x5E, /* 0xE0-0xE3 */ + 0xAD, 0x4E, 0xAD, 0x45, 0xD0, 0x66, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xAF, 0xDA, 0x3F, 0x3F, 0xAF, 0xE3, /* 0xEC-0xEF */ + 0xAF, 0xD8, 0xAF, 0xD6, 0xD3, 0x6A, 0xAF, 0xDE, /* 0xF0-0xF3 */ + 0xAF, 0xDB, 0xD3, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xAF, 0xDD, 0xD3, 0x6B, 0xD3, 0x69, 0xD3, 0x6E, /* 0xF8-0xFB */ + 0xAF, 0xE2, 0xAF, 0xE0, 0xDB, 0x48, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0xD3, 0x6F, 0xD3, 0x6D, 0xAF, 0xD7, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xAF, 0xD9, 0xAF, 0xDC, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xAF, 0xDF, 0x3F, 0x3F, 0xAF, 0xE1, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xD7, 0x4E, 0xB2, 0xE4, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xD7, 0x45, 0xD7, 0x47, 0x3F, 0x3F, 0xD7, 0x48, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xD7, 0x50, 0xD7, 0x4C, 0xD7, 0x4A, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xD7, 0x4D, 0xD7, 0x51, 0xB2, 0xE5, /* 0x20-0x23 */ + 0xB2, 0xE9, 0xD7, 0x46, 0x3F, 0x3F, 0xD7, 0x4F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xB2, 0xE7, 0x3F, 0x3F, 0xB2, 0xE6, /* 0x28-0x2B */ + 0xD7, 0x4B, 0xD7, 0x49, 0x3F, 0x3F, 0xB2, 0xE3, /* 0x2C-0x2F */ + 0xB2, 0xE8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xB5, 0xC8, 0xDB, 0x51, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xDB, 0x4F, 0xB5, 0xCA, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0x4A, /* 0x40-0x43 */ + 0xDF, 0xA1, 0x3F, 0x3F, 0xB5, 0xC9, 0xDB, 0x4E, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0x4B, 0xB5, 0xC5, /* 0x48-0x4B */ + 0xB5, 0xCB, 0xDB, 0x50, 0xB5, 0xC7, 0xDB, 0x4D, /* 0x4C-0x4F */ + 0xBB, 0x47, 0xB5, 0xC6, 0xDB, 0x4C, 0xB5, 0xCC, /* 0x50-0x53 */ + 0xB5, 0xC4, 0xB5, 0xC3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0x77, /* 0x58-0x5B */ + 0xDF, 0x75, 0x3F, 0x3F, 0xDF, 0x7B, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xDF, 0x73, 0xDF, 0xA2, 0xDF, 0x78, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xDF, 0x72, 0xB8, 0x7B, 0xB8, 0xA3, 0xDF, 0x7D, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xDF, 0x76, 0x3F, 0x3F, 0xB8, 0x7E, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0x7C, 0xDF, 0x7E, /* 0x6C-0x6F */ + 0xB8, 0x79, 0xB8, 0x78, 0xDF, 0x79, 0xB8, 0x7D, /* 0x70-0x73 */ + 0xB5, 0xCD, 0x3F, 0x3F, 0xDF, 0x7C, 0xDF, 0x74, /* 0x74-0x77 */ + 0xB8, 0x7A, 0xB8, 0xA1, 0xB8, 0xA2, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0x4C, /* 0x7C-0x7F */ + + 0xBB, 0x48, 0x3F, 0x3F, 0xBB, 0x4D, 0xE3, 0xA6, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xA5, 0xE3, 0xA7, /* 0x84-0x87 */ + 0xBB, 0x4A, 0xE3, 0xA4, 0xBB, 0x4B, 0xE3, 0xAA, /* 0x88-0x8B */ + 0xE3, 0xA9, 0xE3, 0xA8, 0x3F, 0x3F, 0xBB, 0x49, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xE7, 0x41, 0x3F, 0x3F, 0xE7, 0x44, /* 0x94-0x97 */ + 0xBD, 0xA8, 0xE7, 0x43, 0xBD, 0xA7, 0xBD, 0xA3, /* 0x98-0x9B */ + 0xBD, 0xA4, 0xBD, 0xA5, 0xE7, 0x40, 0xE6, 0xFE, /* 0x9C-0x9F */ + 0xBD, 0xA6, 0x3F, 0x3F, 0xE7, 0x42, 0xE6, 0xFD, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xE9, 0xEA, 0xF3, /* 0xA4-0xA7 */ + 0xBF, 0xB1, 0xBF, 0xB0, 0x3F, 0x3F, 0xEA, 0xED, /* 0xA8-0xAB */ + 0xEA, 0xEF, 0x3F, 0x3F, 0xEA, 0xEA, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xEA, 0xEE, 0xEA, 0xE8, 0xEA, 0xF1, 0xBF, 0xAF, /* 0xB0-0xB3 */ + 0xEA, 0xF0, 0xEA, 0xEC, 0x3F, 0x3F, 0xEA, 0xF2, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xEA, 0xEB, 0xC1, 0x74, 0xED, 0xE8, /* 0xB8-0xBB */ + 0xED, 0xEE, 0xC1, 0x78, 0xC1, 0x7A, 0xC1, 0x77, /* 0xBC-0xBF */ + 0xC1, 0x76, 0x3F, 0x3F, 0xC1, 0x75, 0xC1, 0x73, /* 0xC0-0xC3 */ + 0xED, 0xE9, 0xED, 0xEC, 0xC1, 0x72, 0xED, 0xED, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xC1, 0x79, 0xED, 0xEB, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xED, 0xEA, 0xC2, 0xC0, 0x3F, 0x3F, 0xC2, 0xC1, /* 0xCC-0xCF */ + 0xF0, 0xA1, 0xF0, 0x7D, 0xF0, 0x7E, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xF2, 0xC2, 0x3F, 0x3F, 0xF2, 0xC1, /* 0xD4-0xD7 */ + 0xC3, 0xBE, 0xF4, 0xB4, 0xC4, 0xA4, 0xF4, 0xB3, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xF5, 0xF0, 0xF7, 0x45, 0xC5, 0xA6, /* 0xDC-0xDF */ + 0xF9, 0x43, 0xF9, 0x44, 0xC5, 0xD8, 0xA6, 0xDA, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xAA, 0xD7, 0xDB, 0x52, 0xBB, 0x4E, /* 0xE4-0xE7 */ + 0xC1, 0x7B, 0xED, 0xEF, 0xA6, 0xDB, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xAF, 0xE5, 0xAF, 0xE4, 0xDB, 0x53, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0xF4, 0xA6, 0xDC, /* 0xF0-0xF3 */ + 0xAD, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0x54, /* 0xF4-0xF7 */ + 0xDB, 0x55, 0xDB, 0x56, 0xBB, 0x4F, 0xBF, 0xB2, /* 0xF8-0xFB */ + 0xA6, 0xDD, 0x3F, 0x3F, 0xAA, 0xD8, 0xD0, 0x68, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0xAF, 0xE6, 0xD3, 0x70, 0xB2, 0xEA, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xDB, 0x57, 0xB8, 0xA4, 0x3F, 0x3F, 0xBB, 0x50, /* 0x04-0x07 */ + 0xBF, 0xB3, 0xC1, 0x7C, 0xC2, 0xC2, 0xF4, 0xB5, /* 0x08-0x0B */ + 0xA6, 0xDE, 0xAA, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xAF, 0xE7, 0xD7, 0x52, 0xB5, 0xCE, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xBB, 0x51, 0xE3, 0xAB, 0xE7, 0x45, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA6, 0xDF, /* 0x18-0x1B */ + 0xB5, 0xCF, 0xDF, 0xA3, 0xBB, 0x52, 0xA6, 0xE0, /* 0x1C-0x1F */ + 0xCD, 0xB1, 0xD0, 0x69, 0xAD, 0x51, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xD3, 0x72, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xAF, 0xEA, 0x3F, 0x3F, 0xAF, 0xE8, 0xAF, 0xE9, /* 0x28-0x2B */ + 0xAF, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0x71, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0x57, 0xD7, 0x54, /* 0x30-0x33 */ + 0xD7, 0x56, 0xB2, 0xEB, 0xB2, 0xED, 0xB2, 0xEC, /* 0x34-0x37 */ + 0xD7, 0x53, 0xB2, 0xEE, 0xD7, 0x55, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xDB, 0x58, 0xDB, 0x59, 0x3F, 0x3F, 0xDB, 0x5A, /* 0x3C-0x3F */ + 0xDF, 0xA6, 0x3F, 0x3F, 0xDF, 0xA7, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDF, 0xA5, 0xDF, 0xA8, 0x3F, 0x3F, 0xB8, 0xA5, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xDF, 0xA4, 0x3F, 0x3F, 0xBB, 0x53, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0x4A, 0xE7, 0x46, /* 0x4C-0x4F */ + 0xE7, 0x49, 0xE7, 0x4B, 0xE7, 0x48, 0xE7, 0x47, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xEA, 0xF5, 0xEA, 0xF6, 0xEA, 0xF7, /* 0x54-0x57 */ + 0xBF, 0xB4, 0xBF, 0xB5, 0xED, 0xF1, 0xED, 0xF0, /* 0x58-0x5B */ + 0xED, 0xF2, 0x3F, 0x3F, 0xF0, 0xA3, 0xF0, 0xA2, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xF2, 0xC4, 0x3F, 0x3F, 0xF2, 0xC5, /* 0x60-0x63 */ + 0xF2, 0xC3, 0x3F, 0x3F, 0xC4, 0xA5, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF4, 0xB6, 0xF4, 0xB7, 0x3F, 0x3F, 0xF7, 0x46, /* 0x68-0x6B */ + 0xF7, 0xEF, 0xF8, 0xBB, 0xA6, 0xE1, 0xA8, 0x7D, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xC1, 0x7D, 0xA6, 0xE2, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xD7, 0x58, 0xDB, 0x5B, 0x3F, 0x3F, 0xC6, 0x41, /* 0x74-0x77 */ + 0xCA, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xCA, 0x4B, 0xCA, 0x4D, 0xA6, 0xE3, 0xCA, 0x4E, /* 0x7C-0x7F */ + + 0xCA, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xA2, /* 0x80-0x83 */ + 0xCB, 0xA3, 0xCB, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xA1, 0xA8, 0xA1, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xA8, 0xA2, 0xCB, 0x7C, 0xCB, 0x7A, /* 0x8C-0x8F */ + 0xCB, 0x79, 0xCB, 0x7D, 0xA8, 0x7E, 0xCB, 0x7E, /* 0x90-0x93 */ + 0xD0, 0x6A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xCD, 0xB6, 0xAA, 0xDC, 0xCD, 0xB5, 0xCD, 0xB7, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xAA, 0xDB, 0xCD, 0xBC, 0xAA, 0xDF, /* 0x9C-0x9F */ + 0xCD, 0xB2, 0xCD, 0xC0, 0xCD, 0xC6, 0xAA, 0xE6, /* 0xA0-0xA3 */ + 0xCD, 0xC3, 0xAA, 0xE3, 0x3F, 0x3F, 0xCD, 0xB9, /* 0xA4-0xA7 */ + 0xCD, 0xBF, 0xCD, 0xC1, 0x3F, 0x3F, 0xCD, 0xB4, /* 0xA8-0xAB */ + 0xAA, 0xE2, 0xAA, 0xDD, 0xCD, 0xBA, 0xAA, 0xE4, /* 0xAC-0xAF */ + 0xAA, 0xE7, 0xAA, 0xE1, 0x3F, 0x3F, 0xAA, 0xDA, /* 0xB0-0xB3 */ + 0xCD, 0xBE, 0xCD, 0xB8, 0xCD, 0xC5, 0xAA, 0xE9, /* 0xB4-0xB7 */ + 0xAA, 0xE5, 0xAA, 0xE0, 0xCD, 0xBD, 0xAF, 0xEC, /* 0xB8-0xBB */ + 0xCD, 0xBB, 0xAA, 0xDE, 0xAA, 0xE8, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xCD, 0xB3, 0x3F, 0x3F, 0xCD, 0xC2, 0xCD, 0xC4, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xAD, 0x62, 0xAD, 0x5C, 0xAD, 0x64, /* 0xD0-0xD3 */ + 0xAD, 0x61, 0xD0, 0x71, 0xD0, 0x74, 0xAD, 0x5D, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xD0, 0x6B, 0x3F, 0x3F, 0xAD, 0x56, /* 0xD8-0xDB */ + 0xAD, 0x60, 0x3F, 0x3F, 0xAD, 0x63, 0xAD, 0x65, /* 0xDC-0xDF */ + 0xD0, 0xA2, 0xD0, 0x77, 0x3F, 0x3F, 0xAD, 0x55, /* 0xE0-0xE3 */ + 0xD0, 0xA1, 0xAD, 0x59, 0xAD, 0x57, 0xAD, 0x52, /* 0xE4-0xE7 */ + 0xD0, 0x6F, 0x3F, 0x3F, 0xD0, 0x7E, 0xD0, 0x73, /* 0xE8-0xEB */ + 0xD0, 0x76, 0xD0, 0xA5, 0x3F, 0x3F, 0xAD, 0x66, /* 0xEC-0xEF */ + 0xD0, 0x7D, 0xAD, 0x5E, 0xD0, 0x78, 0xD0, 0xA4, /* 0xF0-0xF3 */ + 0xD0, 0x75, 0xD0, 0x79, 0xD0, 0x7C, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xD0, 0x6D, 0xD0, 0xA3, 0xD0, 0x7B, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0x6C, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0xD0, 0x70, 0xAD, 0x5F, 0xAD, 0x5A, 0xAD, 0x53, /* 0x00-0x03 */ + 0xAD, 0x58, 0xAD, 0x54, 0xAD, 0x67, 0xD0, 0x6E, /* 0x04-0x07 */ + 0xD3, 0xA5, 0xAD, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xD0, 0x7A, 0xCE, 0x41, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0xA8, 0xAF, 0xFA, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xD3, 0x76, 0x3F, 0x3F, 0xD3, 0xA3, /* 0x18-0x1B */ + 0xD3, 0x7D, 0x3F, 0x3F, 0xD3, 0xB2, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xD3, 0xAA, 0x3F, 0x3F, 0xD3, 0x7E, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xD3, 0xA9, 0xD3, 0x78, 0xD3, 0x7C, 0xD3, 0xB5, /* 0x24-0x27 */ + 0xAF, 0xFD, 0xD3, 0xAD, 0xD3, 0xA4, 0xAF, 0xED, /* 0x28-0x2B */ + 0xD3, 0xB3, 0xD3, 0x74, 0x3F, 0x3F, 0xD3, 0xAC, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xAF, 0xFC, 0xAF, 0xF7, 0xD3, 0x73, /* 0x30-0x33 */ + 0xAF, 0xF5, 0xAF, 0xF4, 0xAF, 0xF9, 0xD3, 0xAB, /* 0x34-0x37 */ + 0xAF, 0xF1, 0xAF, 0xF8, 0xD0, 0x72, 0xDB, 0x5C, /* 0x38-0x3B */ + 0xD3, 0xA6, 0x3F, 0x3F, 0x3F, 0x3F, 0xD3, 0x7A, /* 0x3C-0x3F */ + 0xAF, 0xFB, 0xD3, 0x7B, 0xD3, 0xA1, 0xAF, 0xFE, /* 0x40-0x43 */ + 0xD3, 0x75, 0xD3, 0xAF, 0x3F, 0x3F, 0xD3, 0xAE, /* 0x44-0x47 */ + 0xD3, 0xB6, 0xAF, 0xF3, 0xAF, 0xF0, 0xD3, 0xB4, /* 0x48-0x4B */ + 0xD3, 0xB0, 0xD3, 0xA7, 0xD3, 0xA2, 0xAF, 0xF6, /* 0x4C-0x4F */ + 0xAF, 0xF2, 0xD3, 0x77, 0xAF, 0xEE, 0xD3, 0xB1, /* 0x50-0x53 */ + 0xAF, 0xEF, 0x3F, 0x3F, 0xD3, 0x79, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0x5E, /* 0x70-0x73 */ + 0xD7, 0x60, 0xD7, 0x65, 0xD7, 0x79, 0xB2, 0xFC, /* 0x74-0x77 */ + 0xB2, 0xF2, 0x3F, 0x3F, 0xD7, 0x5D, 0xB2, 0xFD, /* 0x78-0x7B */ + 0xB2, 0xFE, 0xD7, 0x68, 0xD7, 0x6F, 0xD7, 0x75, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xD7, 0x62, 0x3F, 0x3F, 0xD7, 0x69, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x40, 0xD7, 0x77, /* 0x84-0x87 */ + 0xD7, 0x72, 0xB2, 0xFA, 0xB2, 0xF8, 0xD7, 0x6E, /* 0x88-0x8B */ + 0xD7, 0x6A, 0xD7, 0x5C, 0xB2, 0xEF, 0xD7, 0x61, /* 0x8C-0x8F */ + 0xD7, 0x59, 0x3F, 0x3F, 0xB2, 0xF7, 0xB2, 0xF9, /* 0x90-0x93 */ + 0xD7, 0x66, 0xD7, 0x63, 0xB2, 0xF4, 0xD7, 0x73, /* 0x94-0x97 */ + 0xB2, 0xF1, 0xD7, 0x64, 0xD7, 0x7A, 0xD7, 0x6C, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xD7, 0x6B, 0xB2, 0xF0, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xB2, 0xFB, 0x3F, 0x3F, 0xB2, 0xF3, 0xD7, 0x5A, /* 0xA0-0xA3 */ + 0xD7, 0x5F, 0xD7, 0x70, 0xD7, 0x76, 0xB3, 0x41, /* 0xA4-0xA7 */ + 0xD7, 0x5B, 0xD7, 0x67, 0xD7, 0x6D, 0xB2, 0xF6, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0x78, 0xD7, 0x71, /* 0xAC-0xAF */ + 0xD7, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xB2, 0xF5, 0x3F, 0x3F, 0xDB, 0x6C, /* 0xBC-0xBF */ + 0xDB, 0x60, 0xB5, 0xD7, 0xDB, 0x7D, 0xDB, 0xA7, /* 0xC0-0xC3 */ + 0xDB, 0xAA, 0xB5, 0xD5, 0xDB, 0x68, 0xDB, 0xA3, /* 0xC4-0xC7 */ + 0xDB, 0x69, 0xDB, 0x77, 0xB5, 0xE2, 0xDB, 0x73, /* 0xC8-0xCB */ + 0xB5, 0xDF, 0x3F, 0x3F, 0xDB, 0x74, 0xDB, 0x5D, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xDB, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xB5, 0xE8, 0xDB, 0xA1, 0xDB, 0x75, 0xDB, 0xAC, /* 0xD4-0xD7 */ + 0xDB, 0x70, 0xDF, 0xC8, 0x3F, 0x3F, 0xDB, 0xAF, /* 0xD8-0xDB */ + 0xB5, 0xE6, 0xDB, 0x6E, 0xDB, 0x7A, 0xB5, 0xE9, /* 0xDC-0xDF */ + 0xB5, 0xD4, 0xDB, 0x72, 0xDB, 0xAD, 0xDB, 0x6B, /* 0xE0-0xE3 */ + 0xDB, 0x64, 0xDB, 0x6F, 0x3F, 0x3F, 0xDB, 0x63, /* 0xE4-0xE7 */ + 0xDB, 0x61, 0xB5, 0xD0, 0xDB, 0xA5, 0xDB, 0x6A, /* 0xE8-0xEB */ + 0xDB, 0xA8, 0x3F, 0x3F, 0xDB, 0xA9, 0xB5, 0xD8, /* 0xEC-0xEF */ + 0xB5, 0xDD, 0xB5, 0xD9, 0xB5, 0xE1, 0xDB, 0x7E, /* 0xF0-0xF3 */ + 0xB5, 0xDA, 0xDB, 0x76, 0xDB, 0x66, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xB5, 0xD2, 0xDB, 0x5E, 0xDB, 0xA2, 0xDB, 0xAB, /* 0xF8-0xFB */ + 0xDB, 0x65, 0xB5, 0xE0, 0xDB, 0xB0, 0xDB, 0x71, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0x3F, 0x3F, 0xDB, 0x6D, 0x3F, 0x3F, 0xB5, 0xD1, /* 0x00-0x03 */ + 0xB5, 0xE5, 0x3F, 0x3F, 0xDB, 0x7C, 0xB5, 0xE7, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xDB, 0x78, 0xB5, 0xDC, 0xB5, 0xD6, /* 0x08-0x0B */ + 0xB5, 0xDE, 0xB5, 0xD3, 0xB5, 0xE4, 0xDB, 0x79, /* 0x0C-0x0F */ + 0xDB, 0x67, 0xDB, 0x7B, 0xDB, 0x62, 0xDB, 0xA6, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xAE, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0x5F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xDF, 0xC7, 0x3F, 0x3F, 0xDF, 0xDD, /* 0x28-0x2B */ + 0xB8, 0x55, 0xDF, 0xCC, 0x3F, 0x3F, 0xDF, 0xCA, /* 0x2C-0x2F */ + 0xDF, 0xB5, 0xB8, 0xA9, 0xDF, 0xC5, 0xDF, 0xD9, /* 0x30-0x33 */ + 0xDF, 0xC1, 0xB8, 0xB1, 0xDF, 0xD8, 0xDF, 0xBF, /* 0x34-0x37 */ + 0xB5, 0xE3, 0xDF, 0xCF, 0xDF, 0xC0, 0xDF, 0xD6, /* 0x38-0x3B */ + 0xB8, 0xB0, 0xB8, 0xA8, 0x3F, 0x3F, 0xDF, 0xAA, /* 0x3C-0x3F */ + 0xDF, 0xB2, 0x3F, 0x3F, 0xDF, 0xCB, 0xDF, 0xC3, /* 0x40-0x43 */ + 0xDF, 0xDC, 0xDF, 0xC6, 0xB8, 0xB6, 0xDF, 0xD7, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xB8, 0xAD, 0x3F, 0x3F, 0xDF, 0xC9, /* 0x48-0x4B */ + 0xDF, 0xD1, 0xDF, 0xB6, 0xDF, 0xD0, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xDF, 0xE1, 0xDF, 0xB1, 0xDF, 0xD2, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xDF, 0xDF, 0x3F, 0x3F, 0xDF, 0xAB, 0xB5, 0xDB, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xDF, 0xB9, 0xDF, 0xB8, 0xB8, 0xAF, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xDF, 0xBC, 0xDF, 0xBE, 0xDF, 0xCD, /* 0x5C-0x5F */ + 0xDF, 0xDE, 0xB8, 0xB2, 0x3F, 0x3F, 0xB8, 0xB3, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xDF, 0xB0, 0xB8, 0xAB, 0xDF, 0xB4, /* 0x64-0x67 */ + 0xDF, 0xDA, 0xB8, 0xB4, 0x3F, 0x3F, 0xB8, 0xAC, /* 0x68-0x6B */ + 0xB8, 0xAE, 0xB8, 0xB5, 0xDF, 0xE0, 0xDF, 0xD3, /* 0x6C-0x6F */ + 0xDF, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xBB, /* 0x70-0x73 */ + 0xDF, 0xBA, 0xB8, 0xAA, 0xDF, 0xAC, 0xB8, 0xA7, /* 0x74-0x77 */ + 0xDF, 0xC4, 0xDF, 0xAD, 0xDF, 0xC2, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xDF, 0xB7, 0xDF, 0xDB, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0xA6, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xB3, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xDF, 0xAF, 0xDF, 0xD5, 0xDF, 0xAE, /* 0x8C-0x8F */ + 0xBB, 0x60, 0xE3, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xE3, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xAC, /* 0x94-0x97 */ + 0xE3, 0xCA, 0xBB, 0x58, 0xE3, 0xBB, 0xE3, 0xC5, /* 0x98-0x9B */ + 0xBB, 0x5B, 0xE3, 0xBE, 0xBB, 0x59, 0xE3, 0xAF, /* 0x9C-0x9F */ + 0xE3, 0xCD, 0xE3, 0xAE, 0xE3, 0xC1, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xE3, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xBF, /* 0xA4-0xA7 */ + 0xE3, 0xC8, 0xE3, 0xC6, 0xE3, 0xBA, 0xE3, 0xB5, /* 0xA8-0xAB */ + 0xE3, 0xB3, 0x3F, 0x3F, 0xE3, 0xB4, 0xE3, 0xC7, /* 0xAC-0xAF */ + 0xE3, 0xD2, 0xE3, 0xBC, 0xBB, 0x5A, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xE3, 0xB7, 0x3F, 0x3F, 0xE3, 0xCB, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xBB, 0x5D, 0xE3, 0xB6, 0xE3, 0xB0, 0xE3, 0xC0, /* 0xB8-0xBB */ + 0xBB, 0x61, 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0x55, /* 0xBC-0xBF */ + 0xBB, 0x5E, 0xE3, 0xB8, 0xE3, 0xB2, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xBB, 0x57, 0xDF, 0xD4, 0xBB, 0x56, 0xE3, 0xC3, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xBB, 0x54, 0xBB, 0x63, 0xBB, 0x5C, /* 0xC8-0xCB */ + 0xE3, 0xC4, 0xE3, 0xB9, 0xE3, 0xB1, 0xE3, 0xCC, /* 0xCC-0xCF */ + 0xE3, 0xBD, 0xBB, 0x62, 0xE3, 0xD0, 0xBB, 0x5F, /* 0xD0-0xD3 */ + 0xE3, 0xCF, 0x3F, 0x3F, 0xE3, 0xC9, 0xE3, 0xCE, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xD1, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0x73, /* 0xE4-0xE7 */ + 0xE7, 0x74, 0xE7, 0x67, 0xE7, 0x66, 0xE7, 0x62, /* 0xE8-0xEB */ + 0xBD, 0xB4, 0x3F, 0x3F, 0xBD, 0xAC, 0xE7, 0x76, /* 0xEC-0xEF */ + 0xE7, 0x75, 0xDF, 0xA9, 0xE7, 0x5F, 0xE7, 0x63, /* 0xF0-0xF3 */ + 0xE7, 0x5D, 0x3F, 0x3F, 0xE7, 0x70, 0xE7, 0x61, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xE7, 0x77, 0xE7, 0x5A, 0xE7, 0x58, /* 0xF8-0xFB */ + 0xE7, 0x64, 0xE7, 0x6E, 0xE7, 0x69, 0xBD, 0xB6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0xE7, 0x4F, 0x3F, 0x3F, 0xE7, 0x6D, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBD, 0xB7, 0xDF, 0xBD, /* 0x04-0x07 */ + 0xE7, 0x5B, 0xE7, 0x52, 0xE7, 0x55, 0xE7, 0x7B, /* 0x08-0x0B */ + 0xE7, 0x5C, 0xE7, 0x53, 0xE7, 0x51, 0xE7, 0x4E, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xBD, 0xB0, 0xE7, 0x65, 0xBD, 0xAF, /* 0x10-0x13 */ + 0xBD, 0xB3, 0xE7, 0x60, 0xE7, 0x68, 0xBD, 0xA9, /* 0x14-0x17 */ + 0xE7, 0x78, 0xE7, 0x7C, 0xBD, 0xAB, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xE7, 0x57, 0xE7, 0x6B, 0xE7, 0x6F, 0xE7, 0x54, /* 0x1C-0x1F */ + 0xE7, 0x79, 0xBD, 0xB2, 0x3F, 0x3F, 0xBD, 0xB1, /* 0x20-0x23 */ + 0xE7, 0x4C, 0xBD, 0xB5, 0xE7, 0x72, 0xE7, 0x56, /* 0x24-0x27 */ + 0xE7, 0x6A, 0xE7, 0x50, 0xE7, 0x5E, 0xE7, 0x59, /* 0x28-0x2B */ + 0xBD, 0xAD, 0xBD, 0xAE, 0xE7, 0x6C, 0xE7, 0x7D, /* 0x2C-0x2F */ + 0xE7, 0x7A, 0xE7, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0x4D, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xBD, 0xAA, 0xEB, 0x49, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xEB, 0x40, 0xEB, 0x43, 0x3F, 0x3F, 0xBF, 0xBB, /* 0x40-0x43 */ + 0xEB, 0x45, 0xEA, 0xF9, 0xEB, 0x41, 0xEB, 0x47, /* 0x44-0x47 */ + 0xBF, 0xB8, 0xBF, 0xBC, 0xBF, 0xB6, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xEA, 0xFB, 0xEB, 0x4C, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xEB, 0x46, 0x3F, 0x3F, 0xEA, 0xFC, /* 0x50-0x53 */ + 0xEB, 0x55, 0xEB, 0x4F, 0xEA, 0xF8, 0xEE, 0x46, /* 0x54-0x57 */ + 0xEA, 0xFE, 0xBF, 0xB7, 0x3F, 0x3F, 0xEB, 0x4A, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xEB, 0x54, 0xBF, 0xBF, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xEB, 0x51, 0xEA, 0xFD, 0xEB, 0x44, 0xEB, 0x48, /* 0x60-0x63 */ + 0xEB, 0x42, 0xEB, 0x56, 0xEB, 0x53, 0xEB, 0x50, /* 0x64-0x67 */ + 0xBF, 0xB9, 0xBF, 0xBA, 0xBF, 0xBE, 0xEA, 0xFA, /* 0x68-0x6B */ + 0xEB, 0x57, 0xBF, 0xBD, 0xEB, 0x4D, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xEB, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xEB, 0x4E, 0xEE, 0x53, 0xEE, 0x40, /* 0x74-0x77 */ + 0xEE, 0x45, 0xEE, 0x52, 0xEE, 0x44, 0xED, 0xFB, /* 0x78-0x7B */ + 0xEE, 0x41, 0x3F, 0x3F, 0xC1, 0xA2, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xED, 0xF4, 0xEE, 0x4D, 0xEE, 0x4F, 0xED, 0xF3, /* 0x80-0x83 */ + 0xC1, 0xA1, 0xEE, 0x51, 0xEE, 0x49, 0xC1, 0xA8, /* 0x84-0x87 */ + 0xEE, 0x50, 0xEE, 0x42, 0xC1, 0xAA, 0xED, 0xF9, /* 0x88-0x8B */ + 0xEB, 0x52, 0xEE, 0x4A, 0xEE, 0x47, 0xED, 0xF5, /* 0x8C-0x8F */ + 0xEE, 0x55, 0xC1, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xC1, 0xA5, 0xED, 0xF7, 0xEE, 0x48, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xEE, 0x54, 0xEE, 0x4B, 0xED, 0xFD, 0xC1, 0xA7, /* 0x98-0x9B */ + 0xC1, 0xA3, 0xEE, 0x4C, 0xED, 0xFE, 0xEE, 0x56, /* 0x9C-0x9F */ + 0xED, 0xF8, 0xEE, 0x43, 0xEE, 0x4E, 0xED, 0xFA, /* 0xA0-0xA3 */ + 0xED, 0xFC, 0x3F, 0x3F, 0xC2, 0xCB, 0xED, 0xF6, /* 0xA4-0xA7 */ + 0xC1, 0xA9, 0xC2, 0xC4, 0xC1, 0x7E, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0xA6, /* 0xAC-0xAF */ + 0xC2, 0xC8, 0xF0, 0xB3, 0x3F, 0x3F, 0xF0, 0xA9, /* 0xB0-0xB3 */ + 0xF0, 0xA4, 0xF0, 0xAA, 0xF0, 0xB4, 0xF0, 0xB8, /* 0xB4-0xB7 */ + 0xF0, 0xB7, 0xC2, 0xCA, 0xC2, 0xC9, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xF0, 0xAB, 0xF0, 0xB9, 0xF0, 0xAE, /* 0xBC-0xBF */ + 0xF0, 0xA6, 0x3F, 0x3F, 0xF0, 0xA8, 0xF0, 0xA7, /* 0xC0-0xC3 */ + 0xF0, 0xAD, 0xF0, 0xB2, 0xF0, 0xA5, 0xF0, 0xAC, /* 0xC4-0xC7 */ + 0xF0, 0xB1, 0xC2, 0xC7, 0x3F, 0x3F, 0xF0, 0xAF, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xC2, 0xC5, 0xF0, 0xB0, 0xC2, 0xC3, /* 0xCC-0xCF */ + 0xC2, 0xC6, 0xF2, 0xD5, 0xF0, 0xB5, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xC3, 0xC2, 0x3F, 0x3F, 0xF2, 0xCD, /* 0xD4-0xD7 */ + 0xF2, 0xD1, 0xF2, 0xC9, 0xF2, 0xCC, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xF2, 0xD4, 0xC3, 0xC0, 0xF2, 0xD9, 0xF2, 0xD2, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF2, 0xCA, 0xF2, 0xDA, 0xF2, 0xD3, /* 0xE0-0xE3 */ + 0xC3, 0xC3, 0xC3, 0xC4, 0xF2, 0xD7, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF2, 0xCB, 0xC3, 0xBF, 0xC3, 0xC1, 0xF2, 0xC6, /* 0xE8-0xEB */ + 0xF2, 0xCE, 0xF2, 0xC8, 0x3F, 0x3F, 0xF2, 0xD8, /* 0xEC-0xEF */ + 0xF2, 0xD6, 0xF2, 0xC7, 0xF2, 0xCF, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xBE, 0xC3, 0xC5, /* 0xF4-0xF7 */ + 0xF2, 0xD0, 0xC4, 0xA7, 0xC4, 0xA9, 0xC4, 0xA6, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF4, 0xC3, 0xF4, 0xBB, 0xF4, 0xB9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0xF4, 0xBD, 0xF4, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xF4, 0xBF, 0xF4, 0xC1, 0xC4, 0xAA, 0xC4, 0xAC, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF4, 0xC0, 0xC4, 0xAD, 0xC4, 0xAB, /* 0x08-0x0B */ + 0xF4, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xC4, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0xF4, /* 0x14-0x17 */ + 0xF5, 0xF1, 0xF5, 0xF7, 0xC4, 0xF6, 0xF4, 0xBC, /* 0x18-0x1B */ + 0xF5, 0xF6, 0x3F, 0x3F, 0xF5, 0xFD, 0xF5, 0xF4, /* 0x1C-0x1F */ + 0xF5, 0xFB, 0xF5, 0xFA, 0xF4, 0xB8, 0xF5, 0xF5, /* 0x20-0x23 */ + 0xF0, 0xB6, 0xF5, 0xFE, 0xF5, 0xF3, 0xF5, 0xF8, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xF5, 0xFC, 0xF5, 0xF2, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xF7, 0x4A, 0xC4, 0xF5, 0xF5, 0xF9, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xF7, 0xF4, 0xF7, 0x4B, 0xF7, 0x49, /* 0x30-0x33 */ + 0xF7, 0x47, 0xF7, 0x48, 0xF7, 0x4C, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xC5, 0xD9, 0xF7, 0xF2, 0xF7, 0xF0, 0xF7, 0xF5, /* 0x38-0x3B */ + 0xF7, 0xF3, 0x3F, 0x3F, 0xF7, 0xF6, 0xC5, 0xDA, /* 0x3C-0x3F */ + 0xF7, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xBC, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0x45, 0xF9, 0x46, /* 0x44-0x47 */ + 0xF9, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xC7, /* 0x48-0x4B */ + 0xF9, 0xBD, 0xCA, 0x4F, 0xAA, 0xEA, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xAD, 0x68, 0x3F, 0x3F, 0xD3, 0xB8, 0xD3, 0xB7, /* 0x50-0x53 */ + 0xB0, 0x40, 0xB3, 0x42, 0xD7, 0x7C, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xD7, 0x7B, 0x3F, 0x3F, 0xB5, 0xEA, /* 0x58-0x5B */ + 0xB8, 0xB8, 0x3F, 0x3F, 0xB8, 0xB7, 0xB8, 0xB9, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xE3, 0xD4, 0xE7, 0x7E, 0xEB, 0x58, /* 0x60-0x63 */ + 0xEB, 0x5A, 0xEB, 0x59, 0x3F, 0x3F, 0xC1, 0xAB, /* 0x64-0x67 */ + 0xEE, 0x57, 0xF0, 0xBA, 0xF9, 0xA5, 0xA6, 0xE4, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xCD, 0xC9, 0xCD, 0xCA, 0xCD, 0xC8, /* 0x6C-0x6F */ + 0xCD, 0xC7, 0xAA, 0xEB, 0x3F, 0x3F, 0xD0, 0xA9, /* 0x70-0x73 */ + 0xD0, 0xA7, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xA6, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xAD, 0x69, 0xAD, 0x6B, 0xAD, 0x6A, /* 0x78-0x7B */ + 0xD0, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xD3, 0xC4, 0xD3, 0xC1, 0xD3, 0xBF, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0x41, 0xD3, 0xC2, /* 0x88-0x8B */ + 0xB0, 0x46, 0xD3, 0xBC, 0xD3, 0xCB, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xD3, 0xCD, 0xD3, 0xBD, 0x3F, 0x3F, 0xB0, 0x43, /* 0x90-0x93 */ + 0xD3, 0xCE, 0xD3, 0xC9, 0xD3, 0xBB, 0xD3, 0xC0, /* 0x94-0x97 */ + 0xD3, 0xCA, 0xD3, 0xC6, 0xD3, 0xC3, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xB0, 0x48, 0xD3, 0xCC, 0xD3, 0xBE, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xD3, 0xC7, 0xD3, 0xB9, 0xB0, 0x47, /* 0xA0-0xA3 */ + 0xB0, 0x44, 0xD3, 0xC5, 0x3F, 0x3F, 0xD3, 0xC8, /* 0xA4-0xA7 */ + 0xD3, 0xBA, 0xB0, 0x45, 0xB0, 0x42, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x4C, /* 0xAC-0xAF */ + 0xD7, 0xA5, 0xB3, 0x4B, 0x3F, 0x3F, 0xD7, 0xA8, /* 0xB0-0xB3 */ + 0xD7, 0xAB, 0xB3, 0x48, 0xB3, 0x46, 0xD7, 0x7E, /* 0xB4-0xB7 */ + 0xD7, 0xA9, 0xD7, 0xA7, 0xD7, 0xA4, 0xD7, 0xAC, /* 0xB8-0xBB */ + 0xD7, 0xAD, 0xD7, 0xAF, 0xD7, 0xB0, 0xD7, 0x7D, /* 0xBC-0xBF */ + 0xB3, 0x45, 0xD7, 0xA2, 0xD7, 0xA1, 0xD7, 0xAE, /* 0xC0-0xC3 */ + 0xB3, 0x47, 0xD7, 0xA3, 0xB3, 0x49, 0xB3, 0x44, /* 0xC4-0xC7 */ + 0xD7, 0xA6, 0xB3, 0x4D, 0x3F, 0x3F, 0xB3, 0x4A, /* 0xC8-0xCB */ + 0xD7, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xB5, 0xF1, 0xDB, 0xBF, 0x3F, 0x3F, 0xDB, 0xB4, /* 0xD0-0xD3 */ + 0xB5, 0xEE, 0x3F, 0x3F, 0xDF, 0xE7, 0xDB, 0xBD, /* 0xD4-0xD7 */ + 0xDB, 0xB1, 0xB5, 0xEC, 0xDB, 0xB6, 0xB5, 0xEF, /* 0xD8-0xDB */ + 0xDB, 0xBA, 0xDB, 0xB8, 0xB5, 0xF2, 0xB5, 0xEB, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xB2, 0xDB, 0xB5, /* 0xE0-0xE3 */ + 0xB5, 0xF0, 0x3F, 0x3F, 0xDB, 0xB3, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xDB, 0xBE, 0xDB, 0xBC, 0xDB, 0xB7, 0xDB, 0xB9, /* 0xE8-0xEB */ + 0xDB, 0xBB, 0xB5, 0xED, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xDF, 0xE8, 0xDF, 0xEE, 0xDF, 0xE4, /* 0xF4-0xF7 */ + 0xDF, 0xEA, 0xB8, 0xBA, 0xDF, 0xE6, 0xB8, 0xC0, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0xBF, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xB8, 0xBE, 0xDF, 0xED, 0xB8, 0xC1, 0xB8, 0xC2, /* 0x00-0x03 */ + 0xDF, 0xE3, 0xDF, 0xF0, 0xB8, 0xC3, 0xB8, 0xBD, /* 0x04-0x07 */ + 0xB8, 0xBC, 0xDF, 0xEC, 0xB8, 0xC4, 0xDF, 0xE2, /* 0x08-0x0B */ + 0xDF, 0xE5, 0xDF, 0xEF, 0xDF, 0xEB, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xE3, 0xF4, 0xE3, 0xE9, 0xB8, 0xBB, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xBB, 0x6A, 0xE3, 0xDD, 0xE3, 0xF2, 0xE3, 0xDE, /* 0x18-0x1B */ + 0xBB, 0x65, 0x3F, 0x3F, 0xE3, 0xDB, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xE3, 0xE4, 0xE3, 0xDC, 0xBB, 0x67, 0xE3, 0xD6, /* 0x20-0x23 */ + 0xE3, 0xF1, 0xBB, 0x68, 0xE3, 0xEE, 0xE3, 0xEF, /* 0x24-0x27 */ + 0xE3, 0xD7, 0xBB, 0x6D, 0xE3, 0xE6, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xE3, 0xE0, 0xE3, 0xE7, 0xE3, 0xDA, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xE3, 0xF3, 0xE3, 0xEB, 0xE3, 0xE5, 0xE3, 0xD5, /* 0x30-0x33 */ + 0xBB, 0x69, 0xE3, 0xEC, 0x3F, 0x3F, 0xBB, 0x6C, /* 0x34-0x37 */ + 0xE3, 0xF0, 0x3F, 0x3F, 0xE3, 0xEA, 0xBB, 0x66, /* 0x38-0x3B */ + 0xE3, 0xE8, 0x3F, 0x3F, 0xE3, 0xE2, 0xBB, 0x64, /* 0x3C-0x3F */ + 0xE3, 0xD9, 0xE3, 0xE1, 0xE3, 0xED, 0xE3, 0xDF, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xE3, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xBD, 0xC1, 0xDF, 0xE9, 0xE7, 0xB2, 0xE7, 0xBB, /* 0x4C-0x4F */ + 0xE7, 0xB1, 0xE7, 0xAD, 0xE7, 0xAA, 0xBD, 0xC2, /* 0x50-0x53 */ + 0xE7, 0xA8, 0xBB, 0x6B, 0xE7, 0xA1, 0xBD, 0xC0, /* 0x54-0x57 */ + 0xE7, 0xA7, 0xBD, 0xBF, 0xE7, 0xAC, 0xE7, 0xA9, /* 0x58-0x5B */ + 0xE7, 0xB9, 0xE7, 0xB4, 0xE7, 0xAE, 0xE7, 0xB3, /* 0x5C-0x5F */ + 0xBD, 0xBB, 0xE7, 0xAB, 0xE7, 0xBE, 0xE7, 0xA2, /* 0x60-0x63 */ + 0xE7, 0xA3, 0xE7, 0xBA, 0xBD, 0xBC, 0xE7, 0xBF, /* 0x64-0x67 */ + 0xBD, 0xBE, 0xE7, 0xC0, 0xE7, 0xB0, 0xE3, 0xD8, /* 0x68-0x6B */ + 0xE7, 0xB6, 0xE7, 0xAF, 0xE7, 0xB8, 0xE7, 0xB5, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xA6, /* 0x70-0x73 */ + 0xBD, 0xB9, 0xE7, 0xBD, 0xBD, 0xBA, 0xE7, 0xA4, /* 0x74-0x77 */ + 0xBD, 0xBD, 0xEB, 0x64, 0xE7, 0xB7, 0xE7, 0xBC, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xEB, 0x61, 0xBD, 0xB8, 0xBF, 0xC0, /* 0x80-0x83 */ + 0xEB, 0x6B, 0xEB, 0x67, 0x3F, 0x3F, 0xEB, 0x65, /* 0x84-0x87 */ + 0xEB, 0x60, 0xEB, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xBF, 0xC4, 0x3F, 0x3F, 0xEB, 0x5C, /* 0x8C-0x8F */ + 0xEB, 0x68, 0xEB, 0x69, 0xEB, 0x5F, 0xEB, 0x5E, /* 0x90-0x93 */ + 0xEB, 0x6C, 0x3F, 0x3F, 0xEB, 0x62, 0xEB, 0x5D, /* 0x94-0x97 */ + 0xEB, 0x63, 0x3F, 0x3F, 0xEB, 0x6E, 0xEB, 0x5B, /* 0x98-0x9B */ + 0xEB, 0x6D, 0xEB, 0x6A, 0xBF, 0xC2, 0xBF, 0xC1, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0xC3, 0xEB, 0x66, /* 0xA0-0xA3 */ + 0xF0, 0xCB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0x59, 0xC1, 0xB1, /* 0xA8-0xAB */ + 0xEE, 0x5D, 0xEE, 0x5A, 0xEE, 0x61, 0xEE, 0x67, /* 0xAC-0xAF */ + 0xEE, 0x5C, 0x3F, 0x3F, 0xEE, 0x70, 0xC1, 0xAE, /* 0xB0-0xB3 */ + 0xEE, 0x6A, 0xEE, 0x5F, 0xEE, 0x6B, 0xEE, 0x66, /* 0xB4-0xB7 */ + 0xEE, 0x6D, 0xEE, 0x5E, 0xC1, 0xB3, 0xC1, 0xB2, /* 0xB8-0xBB */ + 0xEE, 0x60, 0xEE, 0x6E, 0xEE, 0x58, 0xEE, 0x6C, /* 0xBC-0xBF */ + 0xC1, 0xAC, 0x3F, 0x3F, 0xEE, 0x64, 0xEE, 0x63, /* 0xC0-0xC3 */ + 0xEE, 0x68, 0xEE, 0x5B, 0xC1, 0xB0, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xC1, 0xB4, 0xEE, 0x62, 0xEE, 0x69, 0xC1, 0xB5, /* 0xC8-0xCB */ + 0xEE, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xC1, 0xAD, 0xC1, 0xAF, 0xF0, 0xC7, /* 0xD0-0xD3 */ + 0xF0, 0xC5, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xCC, /* 0xD4-0xD7 */ + 0xF0, 0xC9, 0xF0, 0xCD, 0x3F, 0x3F, 0xF0, 0xBE, /* 0xD8-0xDB */ + 0xF0, 0xC6, 0xF0, 0xD1, 0xEE, 0x6F, 0xF0, 0xC2, /* 0xDC-0xDF */ + 0xC2, 0xCF, 0xE7, 0xA5, 0xF0, 0xBD, 0xF0, 0xCA, /* 0xE0-0xE3 */ + 0xF0, 0xC4, 0xF0, 0xC1, 0xF0, 0xBC, 0xF0, 0xBB, /* 0xE4-0xE7 */ + 0xF0, 0xD0, 0x3F, 0x3F, 0xF0, 0xC0, 0xF0, 0xBF, /* 0xE8-0xEB */ + 0xC2, 0xCD, 0xF0, 0xC8, 0x3F, 0x3F, 0xC2, 0xCC, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0xCE, 0xF0, 0xC3, /* 0xF0-0xF3 */ + 0xF0, 0xCF, 0x3F, 0x3F, 0xF2, 0xDE, 0xF2, 0xDF, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xC3, 0xC9, 0xF2, 0xDC, 0xC3, 0xC6, /* 0xF8-0xFB */ + 0xF2, 0xE4, 0x3F, 0x3F, 0xC3, 0xCA, 0xF2, 0xE6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0xF2, 0xDB, 0xF0, 0xCE, 0xF2, 0xE8, 0xF2, 0xDD, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xC3, 0xC7, 0xF2, 0xE3, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xF2, 0xE5, 0xF2, 0xE0, 0xF2, 0xE7, 0xF2, 0xE2, /* 0x08-0x0B */ + 0xF2, 0xE1, 0xC3, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xF4, 0xC5, 0xF4, 0xC6, 0x3F, 0x3F, 0xF4, 0xC8, /* 0x10-0x13 */ + 0xC4, 0xAE, 0xC4, 0xAF, 0xF4, 0xC9, 0xF4, 0xC7, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF4, 0xC4, 0x3F, 0x3F, 0xF6, 0x42, /* 0x18-0x1B */ + 0xF6, 0x45, 0xF6, 0x41, 0x3F, 0x3F, 0xC4, 0xFA, /* 0x1C-0x1F */ + 0xF6, 0x43, 0xC4, 0xF9, 0xC4, 0xF8, 0xC4, 0xF7, /* 0x20-0x23 */ + 0xF6, 0x44, 0xF7, 0x51, 0xF7, 0x4F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xF7, 0x4E, 0xF6, 0x40, 0xF7, 0x50, 0xF6, 0x46, /* 0x28-0x2B */ + 0xF7, 0x4D, 0x3F, 0x3F, 0xF7, 0xF9, 0xF7, 0xD7, /* 0x2C-0x2F */ + 0xF7, 0xF7, 0xC5, 0xDB, 0xF7, 0xF8, 0xF7, 0xFA, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF8, 0xBF, 0xC5, 0xFA, 0xF8, 0xBE, /* 0x34-0x37 */ + 0xF8, 0xBD, 0xC5, 0xFB, 0x3F, 0x3F, 0xC6, 0x5A, /* 0x38-0x3B */ + 0xF9, 0x6E, 0xF9, 0xA7, 0xF9, 0xA6, 0xF9, 0xA8, /* 0x3C-0x3F */ + 0xA6, 0xE5, 0xD0, 0xAA, 0x3F, 0x3F, 0xD3, 0xCF, /* 0x40-0x43 */ + 0xD3, 0xD0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xDB, 0xC0, 0x3F, 0x3F, 0xF6, 0x47, 0xF8, 0xC0, /* 0x48-0x4B */ + 0xA6, 0xE6, 0xAD, 0x6C, 0xD0, 0xAB, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xB1, 0xB3, 0x4E, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xDB, 0xC2, 0xDB, 0xC1, 0xB5, 0xF3, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xB8, 0xC5, 0xE7, 0xC1, 0xBD, 0xC3, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xBD, 0xC4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xBF, 0xC5, 0xC5, 0xFC, 0xA6, 0xE7, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xAC, /* 0x64-0x67 */ + 0xAA, 0xED, 0xD0, 0xAE, 0xD0, 0xAD, 0xAD, 0x6D, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xD3, 0xD1, 0x3F, 0x3F, 0xD3, 0xD8, /* 0x6C-0x6F */ + 0xB0, 0x49, 0xD3, 0xD6, 0xD3, 0xD4, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xD3, 0xDB, 0xD3, 0xD2, 0xD3, 0xD3, 0xB0, 0x4A, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xB0, 0x4E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xD3, 0xDC, 0xB0, 0x4D, 0xD3, 0xDA, 0xD3, 0xD7, /* 0x7C-0x7F */ + + 0xD3, 0xD5, 0xB0, 0x4B, 0xB0, 0x4C, 0xD3, 0xD9, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xB3, 0x50, 0xD7, 0xB2, 0x3F, 0x3F, 0xB3, 0x55, /* 0x88-0x8B */ + 0xD7, 0xC2, 0xB3, 0x54, 0xD7, 0xC4, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xD7, 0xB8, 0xB3, 0x52, 0xD7, 0xC3, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xD7, 0xB3, 0xB3, 0x53, 0xD7, 0xBF, /* 0x94-0x97 */ + 0xD7, 0xBB, 0xD7, 0xBD, 0xD7, 0xB7, 0xD7, 0xBE, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x4F, 0xD7, 0xBA, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xD7, 0xB9, 0xD7, 0xB5, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xD7, 0xC0, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xBC, /* 0xA4-0xA7 */ + 0xD7, 0xB4, 0x3F, 0x3F, 0xD7, 0xB6, 0xB3, 0x51, /* 0xA8-0xAB */ + 0xD7, 0xC1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xB5, 0xF6, 0xDB, 0xCD, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xDB, 0xC9, 0xDB, 0xCB, /* 0xB4-0xB7 */ + 0xDB, 0xC6, 0xDB, 0xC5, 0xDB, 0xC3, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xDB, 0xCA, 0xDB, 0xCC, 0xDB, 0xC8, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xDB, 0xC7, 0xB5, 0xF4, 0xB5, 0xF5, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xDB, 0xCF, 0xB8, 0xCD, 0xDF, 0xF2, /* 0xC8-0xCB */ + 0xDF, 0xF8, 0xDF, 0xF3, 0xDF, 0xF4, 0xF9, 0xD8, /* 0xCC-0xCF */ + 0xDF, 0xF9, 0x3F, 0x3F, 0xB8, 0xCF, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xB8, 0xC7, 0xB8, 0xCE, 0xDF, 0xF1, 0xDB, 0xC4, /* 0xD4-0xD7 */ + 0xB8, 0xCA, 0xB8, 0xC8, 0xDF, 0xF7, 0xDF, 0xF6, /* 0xD8-0xDB */ + 0xB8, 0xC9, 0xB8, 0xCB, 0xDF, 0xF5, 0xB8, 0xC6, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xB8, 0xCC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE3, 0xF6, /* 0xE4-0xE7 */ + 0xBB, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0x42, /* 0xE8-0xEB */ + 0xE4, 0x41, 0x3F, 0x3F, 0xE3, 0xFB, 0xBB, 0x76, /* 0xEC-0xEF */ + 0xE4, 0x40, 0xE3, 0xF7, 0xE3, 0xF8, 0xBB, 0x6E, /* 0xF0-0xF3 */ + 0xBB, 0x70, 0x3F, 0x3F, 0xE3, 0xFD, 0xE3, 0xF5, /* 0xF4-0xF7 */ + 0xBB, 0x72, 0xBB, 0x71, 0xE3, 0xF9, 0xE3, 0xFE, /* 0xF8-0xFB */ + 0xE3, 0xFC, 0xBB, 0x73, 0xE3, 0xFA, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0x3F, 0x3F, 0xDB, 0xCE, 0xBB, 0x6F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xE7, 0xC2, 0xE7, 0xC9, 0xBD, 0xC6, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xE7, 0xCD, 0xBD, 0xCA, 0xE7, 0xC5, /* 0x08-0x0B */ + 0xE7, 0xC3, 0x3F, 0x3F, 0xE7, 0xCC, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xBD, 0xC5, 0xE7, 0xCB, 0xBD, 0xC7, 0xBD, 0xC8, /* 0x10-0x13 */ + 0xE7, 0xC4, 0xBD, 0xC9, 0xE7, 0xCA, 0xE7, 0xC6, /* 0x14-0x17 */ + 0xE7, 0xC7, 0xE7, 0xC8, 0xBB, 0x75, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0x70, 0xEB, 0x7C, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xBF, 0xCA, 0xEB, 0x77, 0xEB, 0x79, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xBF, 0xC8, 0xEB, 0x71, 0xEB, 0x75, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xEB, 0x78, 0xBF, 0xC6, 0xBF, 0xC9, /* 0x28-0x2B */ + 0xEB, 0x7B, 0xEB, 0x73, 0xEB, 0x74, 0xEB, 0x7A, /* 0x2C-0x2F */ + 0xEB, 0x72, 0xEB, 0x76, 0xBF, 0xC7, 0xEE, 0x72, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xEE, 0x71, 0xC1, 0xB7, 0xEE, 0x77, /* 0x34-0x37 */ + 0xC1, 0xB9, 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0xB6, /* 0x38-0x3B */ + 0xEE, 0x73, 0xC1, 0xBA, 0xEE, 0x74, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xEE, 0x75, 0xEE, 0x78, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xC1, 0xB8, 0x3F, 0x3F, 0xF0, 0xD6, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xF0, 0xD9, 0x3F, 0x3F, 0xF0, 0xD3, /* 0x48-0x4B */ + 0xF0, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xD4, /* 0x4C-0x4F */ + 0xF0, 0xD7, 0xF0, 0xD8, 0xEE, 0x76, 0xF0, 0xD2, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xCD, 0xF2, 0xEC, /* 0x54-0x57 */ + 0xF2, 0xEF, 0xF2, 0xF1, 0xF2, 0xEA, 0xF2, 0xEB, /* 0x58-0x5B */ + 0xF2, 0xEE, 0xF2, 0xF0, 0xC3, 0xCE, 0xC3, 0xCC, /* 0x5C-0x5F */ + 0xC3, 0xCB, 0xF2, 0xED, 0xF2, 0xE9, 0xF4, 0xCA, /* 0x60-0x63 */ + 0xC4, 0xB0, 0x3F, 0x3F, 0xF4, 0xCB, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xF6, 0x49, 0xC4, 0xFB, 0xF6, 0x4B, /* 0x68-0x6B */ + 0xC4, 0xFC, 0xF6, 0x48, 0xF6, 0x4A, 0xC5, 0xA8, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xF7, 0x52, 0xC5, 0xA7, 0xF7, 0xFD, /* 0x70-0x73 */ + 0xF7, 0xFC, 0x3F, 0x3F, 0xF7, 0xFB, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xF9, 0x48, 0xF9, 0x49, 0xF9, 0x4B, /* 0x78-0x7B */ + 0xF9, 0x4A, 0x3F, 0x3F, 0xCA, 0x50, 0xA6, 0xE8, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xAD, 0x6E, 0xD7, 0xC5, 0xB5, 0xF7, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xDF, 0xFA, 0xC2, 0xD0, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xF2, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA3, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x57, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x56, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xDB, 0xD0, 0xB5, 0xF8, 0xDB, 0xD2, /* 0x94-0x97 */ + 0xDB, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0xDF, 0xFB, /* 0x98-0x9B */ + 0xB8, 0xD0, 0xE4, 0x43, 0xE4, 0x46, 0xE4, 0x45, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xE4, 0x44, 0xE7, 0xCE, 0xE7, 0xD0, /* 0xA0-0xA3 */ + 0xE7, 0xCF, 0x3F, 0x3F, 0xBF, 0xCC, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0xCB, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xC1, 0xBB, 0xEE, 0x79, 0xEE, 0x7B, 0xEE, 0x7A, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0xD1, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF2, 0xF4, 0xF2, 0xF3, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xF4, 0xCC, 0xC4, 0xB1, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xC4, 0xFD, 0xF7, 0x54, 0xF7, 0x53, /* 0xBC-0xBF */ + 0xC6, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA4, 0xD0, 0xAF, /* 0xD0-0xD3 */ + 0xAD, 0x6F, 0xD7, 0xC8, 0xD7, 0xC6, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xD7, 0xC7, 0xDB, 0xD4, 0xDB, 0xD5, /* 0xD8-0xDB */ + 0xE0, 0x43, 0xDB, 0xD3, 0x3F, 0x3F, 0xDF, 0xFC, /* 0xDC-0xDF */ + 0xE0, 0x41, 0xE0, 0x40, 0xE0, 0x42, 0xB8, 0xD1, /* 0xE0-0xE3 */ + 0xDF, 0xFE, 0xDF, 0xFD, 0xE0, 0x44, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xE4, 0x49, 0xE4, 0x47, 0x3F, 0x3F, 0xE4, 0x48, /* 0xE8-0xEB */ + 0xE7, 0xD3, 0xE7, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xE7, 0xD2, 0xEB, 0x7D, 0xEE, 0x7C, 0xEE, 0x7D, /* 0xF0-0xF3 */ + 0xC2, 0xD2, 0x3F, 0x3F, 0xF2, 0xF5, 0xF4, 0xCD, /* 0xF4-0xF7 */ + 0xC4, 0xB2, 0x3F, 0x3F, 0xF6, 0x4C, 0xF7, 0x55, /* 0xF8-0xFB */ + 0xC5, 0xA9, 0x3F, 0x3F, 0xF7, 0xFE, 0xF9, 0x4C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8A[512] = { + 0xA8, 0xA5, 0x3F, 0x3F, 0xAD, 0x71, 0xAD, 0x72, /* 0x00-0x03 */ + 0xD0, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xB1, /* 0x04-0x07 */ + 0xAD, 0x70, 0x3F, 0x3F, 0xB0, 0x54, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xB0, 0x52, 0x3F, 0x3F, 0xB0, 0x51, 0xB0, 0x58, /* 0x0C-0x0F */ + 0xB0, 0x50, 0xB0, 0x59, 0xD3, 0xDD, 0xB0, 0x56, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xB0, 0x53, 0xB0, 0x57, 0xB0, 0x55, /* 0x14-0x17 */ + 0xB0, 0x4F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x5F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xB3, 0x59, 0xD7, 0xCC, 0xB3, 0x5E, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x60, 0xB3, 0x5A, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xB3, 0x5B, 0x3F, 0x3F, 0xD7, 0xCA, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x58, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xD7, 0xCB, 0xB3, 0x5D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xD7, 0xC9, 0xB3, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xB6, 0x44, 0x3F, 0x3F, 0xB6, 0x46, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xDB, 0xD8, 0xB6, 0x45, 0xB5, 0xF9, /* 0x38-0x3B */ + 0xB5, 0xFD, 0x3F, 0x3F, 0xB8, 0xE4, 0xE0, 0x49, /* 0x3C-0x3F */ + 0xDB, 0xDA, 0xB5, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xDB, 0xDD, 0xDB, 0xDE, 0xB6, 0x43, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xDB, 0xE0, 0x3F, 0x3F, 0xDB, 0xE2, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xDB, 0xE3, 0xDB, 0xD7, 0xDB, 0xD6, 0xDB, 0xE4, /* 0x4C-0x4F */ + 0xB6, 0x42, 0xDB, 0xE1, 0xDB, 0xDF, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xB6, 0x40, 0xB5, 0xFB, 0xB6, 0x47, 0xDB, 0xDB, /* 0x54-0x57 */ + 0xDB, 0xDC, 0xDB, 0xD9, 0x3F, 0x3F, 0xB6, 0x41, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB5, 0xFC, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xB5, 0xFA, 0xE0, 0x48, 0xB8, 0xDF, 0xB8, 0xDA, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0xD5, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xB8, 0xE5, 0xB8, 0xD6, 0x3F, 0x3F, 0xB8, 0xD2, /* 0x68-0x6B */ + 0xB8, 0xE1, 0xB8, 0xDE, 0xB8, 0xE0, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xB8, 0xD7, 0xB8, 0xDC, 0xB8, 0xD3, 0xB8, 0xD4, /* 0x70-0x73 */ + 0xE0, 0x50, 0xE0, 0x4D, 0xE0, 0x45, 0xE0, 0x4A, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xB8, 0xE2, 0xE0, 0x51, 0xB8, 0xE3, /* 0x78-0x7B */ + 0xB8, 0xD9, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0x47, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xE0, 0x4F, 0xE0, 0x4B, 0xE0, 0x4E, /* 0x80-0x83 */ + 0xE0, 0x4C, 0xB8, 0xDD, 0xE0, 0x46, 0xB8, 0xD8, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0x4C, /* 0x88-0x8B */ + 0xBB, 0x78, 0xBB, 0x7B, 0x3F, 0x3F, 0xE4, 0x4E, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xBB, 0xA5, 0xE4, 0x4D, 0xBB, 0x7D, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xBD, 0xCF, 0xE4, 0x4F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xBB, 0xA4, 0xE4, 0x4B, 0xBB, 0xA6, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0x79, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xB8, 0xDB, 0xBB, 0x7C, 0x3F, 0x3F, 0xBB, 0x7A, /* 0xA0-0xA3 */ + 0xBB, 0x7E, 0xBB, 0xA2, 0xBB, 0x77, 0xBB, 0xA7, /* 0xA4-0xA7 */ + 0xBB, 0xA3, 0x3F, 0x3F, 0xBB, 0xA1, 0xE4, 0x4A, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xBD, 0xD6, 0x3F, 0x3F, 0xBD, 0xD2, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBD, 0xD9, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xE7, 0xD6, 0xBD, 0xDA, 0xE7, 0xE2, 0xE7, 0xDB, /* 0xB8-0xBB */ + 0xBD, 0xCB, 0xE7, 0xE3, 0xE7, 0xDD, 0xBD, 0xD5, /* 0xBC-0xBF */ + 0xE7, 0xDE, 0x3F, 0x3F, 0xBD, 0xD4, 0xE7, 0xE1, /* 0xC0-0xC3 */ + 0xBD, 0xCE, 0xE7, 0xDF, 0xE7, 0xD5, 0xBD, 0xCD, /* 0xC4-0xC7 */ + 0xEB, 0xAA, 0xBD, 0xD3, 0x3F, 0x3F, 0xBD, 0xD0, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xBD, 0xD8, 0x3F, 0x3F, 0xE7, 0xD4, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xE7, 0xD8, 0xBD, 0xCC, 0xE7, 0xD7, /* 0xD0-0xD3 */ + 0xE7, 0xD9, 0xE7, 0xDA, 0xBD, 0xD7, 0xE7, 0xDC, /* 0xD4-0xD7 */ + 0xE7, 0xE0, 0xE7, 0xE4, 0x3F, 0x3F, 0xBD, 0xDB, /* 0xD8-0xDB */ + 0xBF, 0xD2, 0xEB, 0xA5, 0xEB, 0xAB, 0xEB, 0xA8, /* 0xDC-0xDF */ + 0xEB, 0x7E, 0xEB, 0xAC, 0xEB, 0xA1, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xEB, 0xA7, 0x3F, 0x3F, 0xBF, 0xCD, 0xBF, 0xD3, /* 0xE4-0xE7 */ + 0xEB, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0xCF, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xBF, 0xD9, 0xBF, 0xD4, 0xEB, 0xAF, /* 0xEC-0xEF */ + 0xEB, 0xA9, 0xBF, 0xD0, 0xEB, 0xA2, 0xBF, 0xDA, /* 0xF0-0xF3 */ + 0xEB, 0xA3, 0xEB, 0xA4, 0xBF, 0xDB, 0xBF, 0xD8, /* 0xF4-0xF7 */ + 0xBD, 0xD1, 0x3F, 0x3F, 0xBF, 0xCE, 0xEB, 0xB0, /* 0xF8-0xFB */ + 0xBF, 0xDC, 0x3F, 0x3F, 0xBF, 0xD5, 0xEB, 0xAE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0xBF, 0xD1, 0xBF, 0xD6, 0xBF, 0xD7, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xC1, 0xC3, 0xEE, 0xA4, 0xEE, 0xAD, 0xEE, 0xAA, /* 0x04-0x07 */ + 0xEE, 0xAC, 0x3F, 0x3F, 0xC1, 0xC0, 0xEE, 0xA5, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xEE, 0xAB, 0xC1, 0xBC, 0xEE, 0xA7, /* 0x0C-0x0F */ + 0xC1, 0xC4, 0xEE, 0xA3, 0xEE, 0xA8, 0xEE, 0xAF, /* 0x10-0x13 */ + 0xEB, 0xA6, 0xEE, 0xA9, 0xEE, 0xA2, 0xC1, 0xBD, /* 0x14-0x17 */ + 0xEE, 0xA1, 0xC1, 0xBE, 0xEE, 0xB0, 0xC1, 0xBF, /* 0x18-0x1B */ + 0xEE, 0xAE, 0xC1, 0xC2, 0xEE, 0x7E, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xC1, 0xC1, 0x3F, 0x3F, 0xEE, 0xA6, 0xF0, 0xDC, /* 0x20-0x23 */ + 0xF0, 0xEA, 0xF0, 0xE5, 0xF0, 0xE7, 0xF0, 0xDB, /* 0x24-0x27 */ + 0xC2, 0xD3, 0x3F, 0x3F, 0xF0, 0xDA, 0xC2, 0xD6, /* 0x28-0x2B */ + 0xC2, 0xD5, 0x3F, 0x3F, 0xF0, 0xE9, 0xF0, 0xE1, /* 0x2C-0x2F */ + 0xF0, 0xDE, 0xF0, 0xE4, 0x3F, 0x3F, 0xF0, 0xDD, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF0, 0xDF, 0xF0, 0xE8, 0xF0, 0xE6, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xC2, 0xD4, 0xF0, 0xED, 0xF0, 0xEB, /* 0x38-0x3B */ + 0xF0, 0xE2, 0xF0, 0xEC, 0xF0, 0xE3, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xF2, 0xF9, 0xC3, 0xCF, 0xF3, 0x41, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xF6, 0x4F, 0xC3, 0xD6, 0xF0, 0xE0, /* 0x44-0x47 */ + 0xF2, 0xF7, 0xC3, 0xD2, 0xF2, 0xF8, 0xF2, 0xFD, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xD4, 0xC3, 0xD5, /* 0x4C-0x4F */ + 0xF2, 0xF6, 0xF3, 0x40, 0xF3, 0x42, 0xF2, 0xFA, /* 0x50-0x53 */ + 0xF2, 0xFC, 0xF2, 0xFE, 0xF2, 0xFB, 0xF3, 0x43, /* 0x54-0x57 */ + 0xC3, 0xD1, 0xC3, 0xD7, 0xC3, 0xD3, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xC3, 0xD0, 0xF4, 0xD0, 0x3F, 0x3F, 0xC4, 0xB7, /* 0x5C-0x5F */ + 0xF4, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0xF4, 0xD2, /* 0x60-0x63 */ + 0x3F, 0x3F, 0xF4, 0xD3, 0xC4, 0xB5, 0xF4, 0xD4, /* 0x64-0x67 */ + 0xF4, 0xD1, 0x3F, 0x3F, 0xF4, 0xCF, 0xC4, 0xB8, /* 0x68-0x6B */ + 0xC4, 0xB4, 0xF4, 0xD5, 0x3F, 0x3F, 0xC4, 0xB6, /* 0x6C-0x6F */ + 0xC4, 0xB3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xC4, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0x40, /* 0x74-0x77 */ + 0xF6, 0x4E, 0xF6, 0x4D, 0xF6, 0x50, 0xF6, 0x51, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xC5, 0x41, 0xF7, 0x56, 0xF7, 0x5B, /* 0x7C-0x7F */ + + 0xC5, 0xAA, 0x3F, 0x3F, 0xF7, 0x58, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xF7, 0x57, 0xF7, 0x5A, 0xF7, 0x59, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xF8, 0x43, 0x3F, 0x3F, 0xC5, 0xDC, 0xF8, 0x42, /* 0x88-0x8B */ + 0xF8, 0x40, 0x3F, 0x3F, 0xF8, 0x41, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0xFE, 0xC5, 0xFD, /* 0x90-0x93 */ + 0xF8, 0xC1, 0xF8, 0xC2, 0xC6, 0x40, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xF9, 0x4D, 0xF9, 0x4E, 0xC6, 0x67, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xC6, 0x6D, 0x3F, 0x3F, 0xF9, 0xA9, 0xF9, 0xC8, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xA6, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xD7, 0xCD, 0x3F, 0x3F, 0xD7, 0xCE, /* 0x38-0x3B */ + 0xE0, 0x52, 0xE4, 0x50, 0xE7, 0xE5, 0xC1, 0xC6, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xC1, 0xC5, 0xF0, 0xEE, 0xF3, 0x44, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xF8, 0x44, 0xA8, 0xA7, 0xD3, 0xDE, /* 0x44-0x47 */ + 0xB0, 0x5A, 0xB3, 0x61, 0xE0, 0x54, 0xE0, 0x53, /* 0x48-0x4B */ + 0xBD, 0xDC, 0xE7, 0xE6, 0xBD, 0xDD, 0xEE, 0xB1, /* 0x4C-0x4F */ + 0xC2, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xC6, 0x76, 0xA8, 0xA8, 0xCD, 0xCB, 0xD3, 0xDF, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x62, 0x3F, 0x3F, /* 0x58-0x5B */ + 0xD7, 0xCF, 0xD7, 0xD0, 0x3F, 0x3F, 0xDB, 0xE5, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xB6, 0x48, 0xB8, 0xE6, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xE0, 0x56, 0xE0, 0x55, 0xE0, 0x57, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xE4, 0x51, 0xE4, 0x52, 0xBB, 0xA8, 0xBF, 0xDD, /* 0x68-0x6B */ + 0xBD, 0xDE, 0xBF, 0xDE, 0x3F, 0x3F, 0xEE, 0xB5, /* 0x6C-0x6F */ + 0xEE, 0xB2, 0xEE, 0xB4, 0xEE, 0xB3, 0xC1, 0xC7, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xF0, 0xEF, 0xF3, 0x46, 0xF3, 0x45, /* 0x74-0x77 */ + 0xCB, 0xA4, 0xB0, 0x5C, 0xB0, 0x5B, 0xD3, 0xE0, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xD7, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xDB, 0xE7, 0xDB, 0xE6, 0xB6, 0x49, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xE0, 0x59, 0xE0, 0x5A, 0xE0, 0x58, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xB8, 0xE8, 0xB8, 0xE7, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xBB, 0xAA, 0xBB, 0xA9, 0x3F, 0x3F, 0xE7, 0xE7, /* 0x8C-0x8F */ + 0xEB, 0xB3, 0xEB, 0xB1, 0xEB, 0xB2, 0xBF, 0xDF, /* 0x90-0x93 */ + 0xEE, 0xB7, 0xEE, 0xB6, 0x3F, 0x3F, 0xF0, 0xF2, /* 0x94-0x97 */ + 0xF0, 0xF1, 0xF0, 0xF0, 0xF3, 0x47, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xF9, 0xAA, 0xA8, 0xA9, 0xAD, 0x73, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xAD, 0x74, 0xB0, 0x5D, 0xB0, 0x5E, 0xD3, 0xE2, /* 0xA0-0xA3 */ + 0xD3, 0xE1, 0xD7, 0xD2, 0x3F, 0x3F, 0xB3, 0x68, /* 0xA4-0xA7 */ + 0xB3, 0x66, 0xB3, 0x63, 0xB3, 0x67, 0xB3, 0x65, /* 0xA8-0xAB */ + 0xB3, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0x4A, /* 0xAC-0xAF */ + 0xDB, 0xEA, 0x3F, 0x3F, 0xB8, 0xED, 0xB6, 0x4C, /* 0xB0-0xB3 */ + 0xB6, 0x51, 0xDB, 0xEC, 0xB6, 0x53, 0xB6, 0x52, /* 0xB4-0xB7 */ + 0xB6, 0x55, 0xDB, 0xEB, 0xDB, 0xE8, 0xB6, 0x4F, /* 0xB8-0xBB */ + 0xB6, 0x4B, 0xB6, 0x4D, 0xDB, 0xE9, 0xB6, 0x54, /* 0xBC-0xBF */ + 0xB6, 0x50, 0xB6, 0x4E, 0xB8, 0xEF, 0xB8, 0xEE, /* 0xC0-0xC3 */ + 0xB8, 0xEC, 0xB8, 0xF0, 0x3F, 0x3F, 0xB8, 0xEA, /* 0xC4-0xC7 */ + 0xB8, 0xEB, 0x3F, 0x3F, 0xB8, 0xE9, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xE0, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0x54, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xBB, 0xAC, 0xBB, 0xAD, 0xBB, 0xAB, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xE4, 0x53, 0x3F, 0x3F, 0xE4, 0x55, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xE7, 0xEA, 0xE7, 0xEC, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xBD, 0xE7, 0xE7, 0xED, 0xBD, 0xE0, 0xE7, 0xE9, /* 0xDC-0xDF */ + 0xBD, 0xDF, 0xBD, 0xE9, 0xBD, 0xE5, 0xBD, 0xE6, /* 0xE0-0xE3 */ + 0xBD, 0xE2, 0xE7, 0xE8, 0xBD, 0xE1, 0xE7, 0xEE, /* 0xE4-0xE7 */ + 0xE7, 0xEB, 0x3F, 0x3F, 0xBD, 0xE8, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xBD, 0xE3, 0xBD, 0xE4, 0xEB, 0xB5, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xEB, 0xB7, 0xEB, 0xB6, 0x3F, 0x3F, 0xEB, 0xB8, /* 0xF0-0xF3 */ + 0xBF, 0xE0, 0xEB, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xC1, 0xCB, 0xEE, 0xB8, 0xC1, 0xC8, 0xC1, 0xCC, /* 0xF8-0xFB */ + 0xC1, 0xCA, 0xC1, 0xC9, 0xF0, 0xF3, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0xF0, 0xF6, 0x3F, 0x3F, 0xF0, 0xF5, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xF0, 0xF4, 0xC2, 0xD8, 0xF3, 0x48, 0xF3, 0x49, /* 0x04-0x07 */ + 0xC3, 0xD8, 0xF3, 0x4A, 0xC3, 0xD9, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xC4, 0xBA, 0x3F, 0x3F, 0xC4, 0xB9, /* 0x0C-0x0F */ + 0xF6, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0x42, /* 0x10-0x13 */ + 0xF6, 0x53, 0xF7, 0x5C, 0xC5, 0xAB, 0xC5, 0xAC, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF8, 0x45, 0x3F, 0x3F, 0xC6, 0x42, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xA8, 0xAA, 0x3F, 0x3F, 0xB3, 0x6A, 0xB3, 0x69, /* 0x64-0x67 */ + 0xE0, 0x5C, 0xE0, 0x5D, 0x3F, 0x3F, 0xBB, 0xAE, /* 0x68-0x6B */ + 0xEB, 0xB9, 0xBD, 0xEA, 0xEB, 0xBA, 0xEE, 0xB9, /* 0x6C-0x6F */ + 0xA8, 0xAB, 0x3F, 0x3F, 0xD0, 0xB2, 0xAD, 0x76, /* 0x70-0x73 */ + 0xAD, 0x75, 0x3F, 0x3F, 0xD3, 0xE3, 0xB0, 0x5F, /* 0x74-0x77 */ + 0xD3, 0xE4, 0xD7, 0xD5, 0x3F, 0x3F, 0xD7, 0xD4, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xD7, 0xD3, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xDB, 0xEE, 0xB6, 0x58, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xDB, 0xED, 0xB6, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xDB, 0xEF, 0xB6, 0x56, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xE0, 0x5F, 0xE0, 0x62, 0xE0, 0x60, 0xE0, 0x61, /* 0x8C-0x8F */ + 0xE0, 0x65, 0xE0, 0x5E, 0xE0, 0x66, 0xE0, 0x63, /* 0x90-0x93 */ + 0xE0, 0x64, 0xBB, 0xB0, 0xE4, 0x56, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xBB, 0xAF, 0x3F, 0x3F, 0xE7, 0xF2, /* 0x98-0x9B */ + 0xE7, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0xBD, 0xEB, /* 0x9C-0x9F */ + 0xE7, 0xEF, 0xE7, 0xF1, 0x3F, 0x3F, 0xBD, 0xEC, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xEB, 0xBB, 0x3F, 0x3F, 0xEB, 0xBC, /* 0xA4-0xA7 */ + 0xC1, 0xCD, 0x3F, 0x3F, 0xF3, 0x4C, 0xF3, 0x4E, /* 0xA8-0xAB */ + 0xF3, 0x4B, 0xF3, 0x4D, 0xF4, 0xD6, 0xF6, 0x54, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0x6F, 0xA8, 0xAC, /* 0xB0-0xB3 */ + 0xAD, 0x77, 0xD3, 0xE5, 0xD3, 0xE7, 0xD3, 0xE6, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xD7, 0xD8, 0xB3, 0x6C, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xD7, 0xD6, 0x3F, 0x3F, 0xB3, 0x6B, 0xD7, 0xD9, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xD7, 0xDA, 0xD7, 0xD7, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xDB, 0xFB, 0xB6, 0x60, 0xDB, 0xF3, /* 0xC4-0xC7 */ + 0xDB, 0xF9, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0x5B, /* 0xC8-0xCB */ + 0xB6, 0x5E, 0xDB, 0xF2, 0xB6, 0x59, 0xDB, 0xF6, /* 0xCC-0xCF */ + 0xE0, 0x6C, 0xB6, 0x5D, 0x3F, 0x3F, 0xDB, 0xF1, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xDB, 0xF7, 0xDB, 0xF4, 0xDB, 0xFA, /* 0xD4-0xD7 */ + 0xDB, 0xF0, 0xDB, 0xF8, 0xB6, 0x5C, 0xB6, 0x5F, /* 0xD8-0xDB */ + 0xDB, 0xF5, 0xB6, 0x5A, 0x3F, 0x3F, 0xB8, 0xF2, /* 0xDC-0xDF */ + 0xE0, 0x68, 0xB8, 0xF1, 0xE0, 0x6F, 0xE0, 0x6E, /* 0xE0-0xE3 */ + 0xB8, 0xF8, 0x3F, 0x3F, 0xB8, 0xF9, 0xE0, 0x70, /* 0xE4-0xE7 */ + 0xB8, 0xF3, 0xE0, 0x6D, 0xB8, 0xF7, 0xE0, 0x72, /* 0xE8-0xEB */ + 0xE0, 0x69, 0x3F, 0x3F, 0xE0, 0x6B, 0xB8, 0xF4, /* 0xEC-0xEF */ + 0xE0, 0x67, 0xE0, 0x6A, 0xE0, 0x71, 0xB8, 0xF5, /* 0xF0-0xF3 */ + 0xE0, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0xF6, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xBB, 0xB1, 0xE4, 0x5B, 0xE4, 0x61, 0xE4, 0x59, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0xE4, 0x62, 0x3F, 0x3F, 0xE4, 0x58, 0xE4, 0x5D, /* 0x00-0x03 */ + 0xE4, 0x63, 0xE4, 0x60, 0xE4, 0x5F, 0xE4, 0x5E, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xE4, 0x57, 0xE4, 0x5C, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE4, 0x5A, 0x3F, 0x3F, 0xBD, 0xF1, /* 0x0C-0x0F */ + 0xBD, 0xEE, 0xE7, 0xFB, 0xE8, 0x41, 0xE8, 0x43, /* 0x10-0x13 */ + 0xE8, 0x40, 0xE7, 0xF8, 0xE7, 0xFA, 0xE8, 0x45, /* 0x14-0x17 */ + 0xE8, 0x42, 0xE7, 0xFC, 0xE8, 0x46, 0xE7, 0xF9, /* 0x18-0x1B */ + 0xE8, 0x44, 0xBD, 0xEF, 0xBD, 0xF5, 0xBD, 0xF3, /* 0x1C-0x1F */ + 0xE7, 0xF3, 0xBD, 0xF4, 0xBD, 0xF0, 0xE7, 0xF4, /* 0x20-0x23 */ + 0xE7, 0xF6, 0xE7, 0xF5, 0xE7, 0xFD, 0xE7, 0xFE, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xBD, 0xF2, 0x3F, 0x3F, 0xBD, 0xED, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE7, 0xF7, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xEB, 0xC6, 0xBF, 0xE2, 0x3F, 0x3F, 0xEB, 0xBD, /* 0x30-0x33 */ + 0xBF, 0xE3, 0xBF, 0xE6, 0xEB, 0xC2, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEB, 0xBF, 0xBF, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xEB, 0xC3, 0xEB, 0xC4, 0xEB, 0xBE, 0xEB, 0xC7, /* 0x3C-0x3F */ + 0xEB, 0xC0, 0xEB, 0xC5, 0xBF, 0xE4, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xBF, 0xE1, 0xEB, 0xC1, 0x3F, 0x3F, 0xEE, 0xBF, /* 0x44-0x47 */ + 0xC1, 0xD0, 0xC1, 0xCE, 0xC1, 0xD1, 0xC1, 0xCF, /* 0x48-0x4B */ + 0xEE, 0xBE, 0xEE, 0xBB, 0xEE, 0xBA, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xEE, 0xBD, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xBC, /* 0x50-0x53 */ + 0xF1, 0x45, 0xC2, 0xDE, 0xF0, 0xFB, 0xF0, 0xFA, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xC2, 0xD9, 0xF1, 0x41, 0xF1, 0x40, /* 0x58-0x5B */ + 0xF0, 0xF7, 0xF1, 0x43, 0xF0, 0xFC, 0xC2, 0xDD, /* 0x5C-0x5F */ + 0xF0, 0xF9, 0xF1, 0x42, 0xF0, 0xF8, 0xC2, 0xDA, /* 0x60-0x63 */ + 0xC2, 0xDC, 0xF0, 0xFD, 0xC2, 0xDB, 0xF0, 0xFE, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xF1, 0x44, 0xF3, 0x52, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xC3, 0xDE, 0xF3, 0x4F, 0x3F, 0x3F, 0xF3, 0x53, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC3, 0xDB, 0xF3, 0x51, /* 0x70-0x73 */ + 0xC3, 0xE0, 0x3F, 0x3F, 0xC3, 0xDD, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xF3, 0x50, 0x3F, 0x3F, 0xC3, 0xDF, 0xF3, 0x54, /* 0x78-0x7B */ + 0xC3, 0xDA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0xC4, 0xBC, 0xC4, 0xBE, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xF4, 0xD9, 0xC4, 0xBD, 0xF4, 0xD7, 0xC3, 0xDC, /* 0x84-0x87 */ + 0xF4, 0xD8, 0xC4, 0xBB, 0xC5, 0x43, 0xC5, 0x45, /* 0x88-0x8B */ + 0xF6, 0x56, 0xC5, 0x44, 0xF6, 0x55, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xF7, 0x61, 0xC5, 0xAD, 0xF7, 0x60, 0xC5, 0xAE, /* 0x90-0x93 */ + 0xF7, 0x5E, 0xF7, 0x5D, 0xF7, 0x62, 0xF7, 0x63, /* 0x94-0x97 */ + 0xF8, 0x46, 0x3F, 0x3F, 0xF7, 0x5F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xF8, 0xC6, 0xF8, 0xC3, 0xF8, 0xC4, /* 0x9C-0x9F */ + 0xF8, 0xC5, 0xC6, 0x5C, 0x3F, 0x3F, 0xF9, 0x51, /* 0xA0-0xA3 */ + 0xF9, 0x50, 0xF9, 0x4F, 0xF9, 0x70, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xF9, 0xBE, 0xF9, 0xAB, 0xC6, 0x6E, 0xA8, 0xAD, /* 0xA8-0xAB */ + 0xB0, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB8, 0xFA, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBD, 0xF6, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xEB, 0xC8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xC2, 0xDF, 0x3F, 0x3F, 0xF3, 0x55, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF9, 0xAC, 0xA8, 0xAE, 0xAA, 0xEE, /* 0xC8-0xCB */ + 0xAD, 0x79, 0xAD, 0x78, 0x3F, 0x3F, 0xB0, 0x63, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xD3, 0xE8, 0xB0, 0x61, 0xD3, 0xE9, /* 0xD0-0xD3 */ + 0xB0, 0x62, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xDF, /* 0xD4-0xD7 */ + 0xD7, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0x6D, /* 0xD8-0xDB */ + 0xD7, 0xDE, 0xD7, 0xDD, 0xD7, 0xDC, 0xB3, 0x6E, /* 0xDC-0xDF */ + 0xD7, 0xE0, 0xD7, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xDC, 0x43, 0xDC, 0x41, 0xDC, 0x45, /* 0xE4-0xE7 */ + 0xDC, 0x46, 0xDC, 0x4C, 0x3F, 0x3F, 0xDC, 0x48, /* 0xE8-0xEB */ + 0xDC, 0x4A, 0x3F, 0x3F, 0xDC, 0x42, 0xDB, 0xFC, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xDC, 0x49, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xDC, 0x4B, 0xDC, 0x44, 0xDC, 0x47, 0xDB, 0xFD, /* 0xF4-0xF7 */ + 0xB6, 0x62, 0xDC, 0x40, 0xDB, 0xFE, 0xB6, 0x61, /* 0xF8-0xFB */ + 0xB6, 0x63, 0x3F, 0x3F, 0xB8, 0xFD, 0xE0, 0x75, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0xE0, 0x77, 0xE0, 0x76, 0xE0, 0x7B, 0xB8, 0xFB, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xE0, 0x78, 0xE0, 0x74, 0xE0, 0x79, /* 0x04-0x07 */ + 0xE0, 0x7A, 0xB8, 0xFC, 0xB8, 0xFE, 0xE0, 0x7C, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE4, 0x67, 0xE4, 0x66, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xE4, 0x64, 0xE4, 0x65, 0xBB, 0xB3, 0xBB, 0xB5, /* 0x10-0x13 */ + 0xBB, 0xB2, 0xBB, 0xB4, 0xE8, 0x4D, 0xE8, 0x4E, /* 0x14-0x17 */ + 0xE8, 0x49, 0x3F, 0x3F, 0xE8, 0x4A, 0xBD, 0xF8, /* 0x18-0x1B */ + 0xBD, 0xFD, 0xBD, 0xF7, 0xBD, 0xFE, 0xBD, 0xF9, /* 0x1C-0x1F */ + 0xE8, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0x4C, /* 0x20-0x23 */ + 0xE8, 0x48, 0xBE, 0x40, 0xBD, 0xFB, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xBD, 0xFA, 0xBD, 0xFC, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xE8, 0x47, 0x3F, 0x3F, 0xEB, 0xCA, 0xBF, 0xE8, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xCC, 0xBF, 0xEA, /* 0x30-0x33 */ + 0xEB, 0xCF, 0xEB, 0xCB, 0xEB, 0xC9, 0xEB, 0xCE, /* 0x34-0x37 */ + 0xBF, 0xE9, 0xEB, 0xCD, 0x3F, 0x3F, 0xBF, 0xE7, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0xD3, 0xC1, 0xD6, /* 0x3C-0x3F */ + 0xEE, 0xC1, 0x3F, 0x3F, 0xC1, 0xD4, 0xEE, 0xC0, /* 0x40-0x43 */ + 0xC1, 0xD2, 0xC1, 0xD5, 0xF1, 0x46, 0xF1, 0x47, /* 0x44-0x47 */ + 0xF1, 0x48, 0xC2, 0xE0, 0x3F, 0x3F, 0xF1, 0x49, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xC2, 0xE1, 0xC3, 0xE2, 0xF3, 0x58, /* 0x4C-0x4F */ + 0xF3, 0x59, 0xF3, 0x57, 0xF3, 0x56, 0xF3, 0x5A, /* 0x50-0x53 */ + 0xC3, 0xE1, 0xF4, 0xDD, 0xF4, 0xDB, 0xF4, 0xDC, /* 0x54-0x57 */ + 0xF4, 0xDE, 0xF4, 0xDA, 0xF4, 0xDF, 0xF6, 0x58, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF6, 0x59, 0xF6, 0x57, 0xC5, 0x46, /* 0x5C-0x5F */ + 0xF7, 0x64, 0xC5, 0xAF, 0xF7, 0x65, 0xF8, 0x48, /* 0x60-0x63 */ + 0xF8, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xAF, /* 0x98-0x9B */ + 0xB6, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0x40, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0xB6, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0xEC, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xBF, 0xEB, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xC3, 0xE3, 0xC4, 0x7C, 0xC5, 0x47, /* 0xAC-0xAF */ + 0xA8, 0xB0, 0xB0, 0x64, 0xB9, 0x41, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xF3, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xA6, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xB1, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xA8, 0xB4, 0xA8, 0xB3, 0xA8, 0xB2, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xCB, 0xA5, 0x3F, 0x3F, 0xCD, 0xCD, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xCD, 0xCF, 0xAA, 0xEF, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0xAA, 0xF1, 0xCD, 0xCC, 0xCD, 0xCE, /* 0xD0-0xD3 */ + 0xAA, 0xF0, 0xCD, 0xD1, 0xCD, 0xD0, 0xCD, 0xD2, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xD0, 0xB6, 0xD0, 0xB4, 0xAD, 0x7C, 0xD0, 0xB3, /* 0xE0-0xE3 */ + 0xAD, 0xA3, 0xAD, 0x7E, 0xAD, 0x7B, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xAD, 0xA4, 0x3F, 0x3F, 0xAD, 0x7D, 0xAD, 0xA2, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xAD, 0xA1, 0xD0, 0xB5, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xAD, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xB0, 0x6A, 0xD3, 0xEB, 0xD3, 0xF1, 0xB0, 0x67, /* 0xF4-0xF7 */ + 0xB0, 0x6E, 0x3F, 0x3F, 0xB0, 0x69, 0xD3, 0xEE, /* 0xF8-0xFB */ + 0xD3, 0xF0, 0xB0, 0x6C, 0xD3, 0xEA, 0xD3, 0xED, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0xB0, 0x68, 0xB0, 0x65, 0xD3, 0xEC, 0xB0, 0x6B, /* 0x00-0x03 */ + 0xD3, 0xEF, 0xB0, 0x6D, 0xB0, 0x66, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xD7, 0xE3, /* 0x08-0x0B */ + 0xD7, 0xE6, 0xB3, 0x70, 0x3F, 0x3F, 0xB3, 0x7A, /* 0x0C-0x0F */ + 0xB3, 0x76, 0xD7, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xB3, 0x7E, 0xB3, 0x77, 0xB3, 0x7C, 0xB3, 0x72, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xB3, 0x6F, 0xB3, 0x71, 0xB3, 0x7D, /* 0x18-0x1B */ + 0xD7, 0xE5, 0xB3, 0x75, 0xB3, 0x78, 0xB3, 0x74, /* 0x1C-0x1F */ + 0xB3, 0x79, 0xD7, 0xE7, 0xB3, 0x7B, 0xB3, 0x73, /* 0x20-0x23 */ + 0xD7, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xDC, 0x4D, 0xB6, 0x65, 0xDC, 0x4F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xB6, 0x67, 0xB6, 0x69, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xDC, 0x4E, 0xB6, 0x66, 0xB6, 0x6A, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xB6, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xB9, 0x47, 0xE0, 0xA3, 0xB9, 0x4F, 0xE0, 0x7E, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xB9, 0x50, 0xB9, 0x45, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xE0, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0x4A, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xE0, 0xA2, 0xB9, 0x43, 0xB9, 0x42, /* 0x48-0x4B */ + 0x3F, 0x3F, 0xB9, 0x4D, 0xB9, 0x4C, 0xB9, 0x4B, /* 0x4C-0x4F */ + 0xB9, 0x49, 0xB9, 0x4E, 0xE0, 0x7D, 0xB9, 0x44, /* 0x50-0x53 */ + 0xB9, 0x46, 0xB9, 0x48, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xBB, 0xB8, 0xBB, 0xBB, 0x3F, 0x3F, 0xBB, 0xBF, /* 0x58-0x5B */ + 0xBB, 0xB9, 0xBB, 0xBE, 0xBB, 0xBC, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xBB, 0xB7, 0x3F, 0x3F, 0xBB, 0xBD, 0xBB, 0xBA, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0x52, /* 0x64-0x67 */ + 0xBE, 0x43, 0xBE, 0x41, 0x3F, 0x3F, 0xE8, 0x53, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xBE, 0x44, 0xBE, 0x42, 0xE8, 0x51, /* 0x6C-0x6F */ + 0xE8, 0x50, 0x3F, 0x3F, 0xBF, 0xF0, 0xE8, 0x4F, /* 0x70-0x73 */ + 0xBF, 0xEE, 0xBF, 0xED, 0xEB, 0xD0, 0xBE, 0x45, /* 0x74-0x77 */ + 0xBF, 0xEF, 0xEB, 0xD1, 0xBF, 0xF2, 0xEB, 0xD2, /* 0x78-0x7B */ + 0xBF, 0xF1, 0xC1, 0xD8, 0xEE, 0xC3, 0xC1, 0xD7, /* 0x7C-0x7F */ + + 0xC1, 0xDC, 0xC1, 0xDA, 0xC1, 0xDB, 0xC2, 0xE3, /* 0x80-0x83 */ + 0xC1, 0xD9, 0xEE, 0xC2, 0xEB, 0xD3, 0xC2, 0xE2, /* 0x84-0x87 */ + 0xC2, 0xE4, 0x3F, 0x3F, 0xC3, 0xE4, 0xC3, 0xE5, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xF4, 0xE0, 0x3F, 0x3F, 0xC5, 0xDE, /* 0x8C-0x8F */ + 0xC5, 0xDD, 0xA8, 0xB6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xCA, 0x55, 0xB0, 0x6F, 0x3F, 0x3F, 0xCA, 0x52, /* 0x94-0x97 */ + 0xCA, 0x53, 0xCA, 0x51, 0x3F, 0x3F, 0xCA, 0x54, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xCB, 0xAA, 0xCB, 0xA7, /* 0x9C-0x9F */ + 0xCB, 0xAC, 0xCB, 0xA8, 0xA8, 0xB7, 0xA8, 0xBA, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xCB, 0xA9, 0xA8, 0xB9, 0xCB, 0xAB, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xA8, 0xB8, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xCD, 0xD5, /* 0xAC-0xAF */ + 0xCD, 0xD7, 0xAA, 0xF4, 0xCD, 0xD3, 0xCD, 0xD6, /* 0xB0-0xB3 */ + 0xCD, 0xD4, 0xAA, 0xF2, 0xAA, 0xF5, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xAA, 0xF3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB9, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xAD, 0xA7, 0x3F, 0x3F, 0xAD, 0xA8, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xD0, 0xBB, 0x3F, 0x3F, 0xD0, 0xBD, /* 0xC4-0xC7 */ + 0xD0, 0xBF, 0x3F, 0x3F, 0xAD, 0xA5, 0xD0, 0xBE, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xA6, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xD7, 0xEE, 0xD0, 0xBA, 0xD3, 0xF2, 0xD3, 0xFB, /* 0xD4-0xD7 */ + 0xD3, 0xF9, 0xD3, 0xF4, 0xD3, 0xF5, 0xD3, 0xFA, /* 0xD8-0xDB */ + 0xD3, 0xFC, 0xB0, 0x71, 0x3F, 0x3F, 0xD3, 0xF7, /* 0xDC-0xDF */ + 0xD3, 0xF3, 0xB0, 0x70, 0xB0, 0x72, 0xD3, 0xF6, /* 0xE0-0xE3 */ + 0xD3, 0xFD, 0xD3, 0xF8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xB3, 0xA1, 0xD7, 0xF1, 0xD7, 0xE9, 0xD7, 0xEF, /* 0xE8-0xEB */ + 0xD7, 0xF0, 0xB3, 0xA2, 0x3F, 0x3F, 0xD7, 0xE8, /* 0xEC-0xEF */ + 0xD7, 0xEA, 0xD0, 0xB7, 0xD7, 0xEC, 0xD7, 0xED, /* 0xF0-0xF3 */ + 0xD7, 0xEB, 0xB6, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xDC, 0x56, 0xEB, 0xD4, 0xDC, 0x57, /* 0xF8-0xFB */ + 0xDC, 0x54, 0xB3, 0xA3, 0xB6, 0x6E, 0xDC, 0x53, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0xDC, 0x59, 0xDC, 0x58, 0xB6, 0x6B, 0xDC, 0x5C, /* 0x00-0x03 */ + 0xDC, 0x52, 0xDC, 0x5B, 0xDC, 0x50, 0xDC, 0x5A, /* 0x04-0x07 */ + 0xDC, 0x55, 0xB6, 0x6D, 0x3F, 0x3F, 0xE0, 0xAA, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xE0, 0xA5, 0xE0, 0xAB, 0xE0, 0xA6, /* 0x0C-0x0F */ + 0xE0, 0xA4, 0xE0, 0xA7, 0xB9, 0x51, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xE0, 0xA9, 0x3F, 0x3F, 0xE0, 0xA8, 0xB9, 0x52, /* 0x14-0x17 */ + 0xBB, 0xC1, 0xBB, 0xC0, 0xE4, 0x6E, 0xE4, 0x71, /* 0x18-0x1B */ + 0xE4, 0x69, 0xE4, 0x6D, 0xBB, 0xC2, 0xE4, 0x6C, /* 0x1C-0x1F */ + 0xE4, 0x6A, 0xE4, 0x70, 0xE4, 0x6B, 0xE4, 0x68, /* 0x20-0x23 */ + 0xE4, 0x6F, 0x3F, 0x3F, 0xE8, 0x59, 0xBE, 0x48, /* 0x24-0x27 */ + 0xF1, 0x4A, 0xE8, 0x56, 0xE8, 0x57, 0xE8, 0x55, /* 0x28-0x2B */ + 0xDC, 0x51, 0xBE, 0x47, 0xE8, 0x5A, 0xE8, 0x54, /* 0x2C-0x2F */ + 0xBE, 0x46, 0xBE, 0x49, 0xE8, 0x58, 0xEB, 0xD5, /* 0x30-0x33 */ + 0xBF, 0xF3, 0xEB, 0xD6, 0xEB, 0xD7, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEE, 0xC4, 0xC1, 0xDD, 0xF1, 0x4B, 0xF1, 0x4C, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0x4D, 0xF3, 0x5D, /* 0x3C-0x3F */ + 0xF3, 0x5C, 0xF4, 0xE2, 0x3F, 0x3F, 0xF4, 0xE1, /* 0x40-0x43 */ + 0xF6, 0x5B, 0xF6, 0x5C, 0xF6, 0x5A, 0xF7, 0x66, /* 0x44-0x47 */ + 0xC5, 0xB0, 0xA8, 0xBB, 0xAD, 0xAA, 0xAD, 0xA9, /* 0x48-0x4B */ + 0xB0, 0x75, 0xB0, 0x74, 0xD4, 0x40, 0xD4, 0x41, /* 0x4C-0x4F */ + 0xD3, 0xFE, 0x3F, 0x3F, 0xB0, 0x73, 0xD7, 0xF5, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xD7, 0xF6, 0xD7, 0xF2, 0xB3, 0xA4, /* 0x54-0x57 */ + 0xD7, 0xF3, 0x3F, 0x3F, 0xD7, 0xF4, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0x5F, /* 0x5C-0x5F */ + 0xDC, 0x61, 0xDC, 0x5D, 0xDC, 0x60, 0xB6, 0x6F, /* 0x60-0x63 */ + 0xDC, 0x5E, 0xB6, 0x70, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xDD, 0x73, 0xB9, 0x55, 0xB9, 0x54, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xB9, 0x53, 0x3F, 0x3F, 0xE0, 0xAC, 0xE0, 0xAD, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0x73, 0xE4, 0x75, /* 0x70-0x73 */ + 0xBB, 0xC6, 0xBB, 0xC3, 0x3F, 0x3F, 0xBB, 0xC5, /* 0x74-0x77 */ + 0xBB, 0xC4, 0xE4, 0x74, 0xE4, 0x72, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xE8, 0x61, 0xE8, 0x5E, 0xE8, 0x5F, 0xBE, 0x4D, /* 0x80-0x83 */ + 0xE8, 0x60, 0xE8, 0x5B, 0xE8, 0x5C, 0xBE, 0x4A, /* 0x84-0x87 */ + 0x3F, 0x3F, 0xBE, 0x4B, 0xE8, 0x5D, 0xBE, 0x4C, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xEB, 0xDB, 0x3F, 0x3F, 0xEB, 0xDC, /* 0x8C-0x8F */ + 0xEB, 0xD9, 0xEB, 0xDA, 0xBF, 0xF4, 0xEB, 0xD8, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xEE, 0xC8, 0xEE, 0xC5, 0xEE, 0xC7, /* 0x98-0x9B */ + 0xC1, 0xE0, 0xEE, 0xCB, 0xC1, 0xDF, 0xEE, 0xC9, /* 0x9C-0x9F */ + 0xEE, 0xCC, 0xEE, 0xCA, 0xEE, 0xC6, 0xC1, 0xDE, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xF1, 0x4F, 0x3F, 0x3F, 0xF1, 0x50, /* 0xA4-0xA7 */ + 0xF1, 0x4E, 0x3F, 0x3F, 0xF1, 0x52, 0xC2, 0xE5, /* 0xA8-0xAB */ + 0xC2, 0xE6, 0xF3, 0x5F, 0xC3, 0xE7, 0xF1, 0x51, /* 0xAC-0xAF */ + 0xF3, 0x5E, 0xC3, 0xE6, 0xF4, 0xE5, 0xF4, 0xE6, /* 0xB0-0xB3 */ + 0xC4, 0xBF, 0xF4, 0xE4, 0x3F, 0x3F, 0xF4, 0xE3, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xF6, 0x5D, 0xC5, 0x48, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0xF8, 0x49, 0xF8, 0xC8, 0xF8, 0xC7, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xC6, 0x43, 0xC6, 0x5D, 0xF8, 0xC9, 0xF9, 0x71, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xC6, 0x6F, 0xA8, 0xBC, 0xAA, 0xF6, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xB9, 0x56, 0x3F, 0x3F, 0xC4, 0xC0, /* 0xC8-0xCB */ + 0xA8, 0xBD, 0xAD, 0xAB, 0xB3, 0xA5, 0xB6, 0x71, /* 0xCC-0xCF */ + 0xC2, 0xE7, 0xAA, 0xF7, 0x3F, 0x3F, 0xD0, 0xC1, /* 0xD0-0xD3 */ + 0xD0, 0xC0, 0xD4, 0x42, 0x3F, 0x3F, 0xB0, 0x78, /* 0xD4-0xD7 */ + 0xB0, 0x76, 0xB0, 0x7A, 0xD4, 0x44, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xB0, 0x79, 0xB0, 0x77, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0x43, 0xB3, 0xA8, /* 0xE0-0xE3 */ + 0xD7, 0xFC, 0x3F, 0x3F, 0xB3, 0xA7, 0xB3, 0xA9, /* 0xE4-0xE7 */ + 0xD8, 0x42, 0xB3, 0xAB, 0xD7, 0xFE, 0xD8, 0x40, /* 0xE8-0xEB */ + 0xD7, 0xF7, 0xB3, 0xAA, 0xD8, 0x43, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xD7, 0xF9, 0x3F, 0x3F, 0xD7, 0xFA, /* 0xF0-0xF3 */ + 0xD7, 0xF8, 0xB3, 0xA6, 0x3F, 0x3F, 0xD8, 0x41, /* 0xF4-0xF7 */ + 0xD7, 0xFB, 0xD7, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xDC, 0x6D, 0x3F, 0x3F, 0xDC, 0x6C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0xDC, 0x6A, 0xDC, 0x62, 0xDC, 0x71, 0xDC, 0x65, /* 0x00-0x03 */ + 0xDC, 0x6F, 0xDC, 0x76, 0xDC, 0x6E, 0xB6, 0x79, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xB6, 0x75, 0xDC, 0x63, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xDC, 0x69, 0xB6, 0x77, 0x3F, 0x3F, 0xDC, 0x68, /* 0x0C-0x0F */ + 0xB6, 0x78, 0xB6, 0x7A, 0xDC, 0x6B, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xB6, 0x72, 0xB6, 0x73, 0xDC, 0x77, 0xDC, 0x75, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xDC, 0x74, 0xDC, 0x66, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xDC, 0x72, 0x3F, 0x3F, 0xB6, 0x76, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0x74, /* 0x20-0x23 */ + 0xDC, 0x73, 0xDC, 0x64, 0xDC, 0x67, 0xDC, 0x70, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xE4, 0xBA, 0xE0, 0xB7, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xE0, 0xB0, 0xE0, 0xC3, 0xE0, 0xCC, 0xE0, 0xB3, /* 0x30-0x33 */ + 0xB9, 0x61, 0x3F, 0x3F, 0xE0, 0xC0, 0xB9, 0x57, /* 0x34-0x37 */ + 0xB9, 0x59, 0xB9, 0x65, 0xE0, 0xB1, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xB9, 0x5A, 0xB9, 0x5C, 0xB9, 0x66, /* 0x3C-0x3F */ + 0xB9, 0x5B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xB9, 0x64, 0xE0, 0xB9, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xE0, 0xAE, 0xB9, 0x62, 0xE0, 0xB8, 0xB9, 0x5E, /* 0x48-0x4B */ + 0xE0, 0xCA, 0xB9, 0x63, 0xE0, 0xC8, 0xE0, 0xBC, /* 0x4C-0x4F */ + 0xE0, 0xC6, 0xB9, 0x60, 0xE0, 0xAF, 0xE0, 0xC9, /* 0x50-0x53 */ + 0xE0, 0xC4, 0x3F, 0x3F, 0xE0, 0xCB, 0xB9, 0x58, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0x67, 0xB9, 0x5D, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xB5, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xE0, 0xBD, 0xE0, 0xC1, 0x3F, 0x3F, 0xE0, 0xC5, /* 0x60-0x63 */ + 0xB9, 0x5F, 0xE0, 0xB4, 0xE0, 0xB2, 0xE0, 0xBE, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE0, 0xBB, 0xE0, 0xBA, 0x3F, 0x3F, 0xE0, 0xBF, /* 0x6C-0x6F */ + 0xE0, 0xC2, 0x3F, 0x3F, 0xE0, 0xC7, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0x78, 0x3F, 0x3F, /* 0x74-0x77 */ + 0xBB, 0xC7, 0xE4, 0xA4, 0xE4, 0x7A, 0xBB, 0xCC, /* 0x78-0x7B */ + 0xBB, 0xD0, 0xE4, 0xAD, 0xE4, 0xB5, 0xE4, 0xA6, /* 0x7C-0x7F */ + + 0xBB, 0xC8, 0x3F, 0x3F, 0xE4, 0xAA, 0xE0, 0xB6, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xBB, 0xC9, 0xE4, 0xB1, 0xE4, 0xB6, /* 0x84-0x87 */ + 0xE4, 0xAE, 0x3F, 0x3F, 0xE4, 0xB0, 0xE4, 0xB9, /* 0x88-0x8B */ + 0xE4, 0xB2, 0xE4, 0x7E, 0xE4, 0xA9, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xBB, 0xD1, 0x3F, 0x3F, 0xBB, 0xCD, /* 0x90-0x93 */ + 0xE4, 0x7C, 0xE4, 0xAB, 0xBB, 0xCB, 0xE4, 0xA5, /* 0x94-0x97 */ + 0xBB, 0xCA, 0xE4, 0xB3, 0xE4, 0xA2, 0xE4, 0x79, /* 0x98-0x9B */ + 0xBB, 0xCE, 0xE4, 0xB8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xE4, 0x7B, 0xE4, 0xAF, 0xE4, 0xAC, 0xE4, 0xA7, /* 0xA0-0xA3 */ + 0xE4, 0x77, 0xE4, 0x76, 0xE4, 0xA1, 0xE4, 0xB4, /* 0xA4-0xA7 */ + 0xBB, 0xCF, 0xE4, 0xB7, 0xE4, 0x7D, 0xE4, 0xA3, /* 0xA8-0xAB */ + 0xBE, 0x52, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0x5A, 0xBE, 0x55, /* 0xB0-0xB3 */ + 0xE8, 0xA4, 0xE8, 0xA1, 0xE8, 0x67, 0xBE, 0x50, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xF9, 0xD7, 0x3F, 0x3F, 0xBE, 0x4F, /* 0xB8-0xBB */ + 0xBE, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xE8, 0x65, 0xBE, 0x54, 0xE8, 0x71, 0xE8, 0x63, /* 0xC0-0xC3 */ + 0xE8, 0x64, 0xBE, 0x4E, 0xE8, 0xA3, 0xBE, 0x58, /* 0xC4-0xC7 */ + 0xE8, 0x74, 0xE8, 0x79, 0xE8, 0x73, 0xEB, 0xEE, /* 0xC8-0xCB */ + 0xE8, 0x6F, 0xE8, 0x77, 0xE8, 0x75, 0xE8, 0x68, /* 0xCC-0xCF */ + 0xE8, 0x62, 0xE8, 0x7D, 0xBE, 0x57, 0xE8, 0x7E, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xE8, 0x78, 0x3F, 0x3F, 0xE8, 0x6D, /* 0xD4-0xD7 */ + 0xE8, 0x6B, 0xE8, 0x66, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0xE8, 0x6E, 0xE8, 0x7B, 0xE8, 0x6A, /* 0xDC-0xDF */ + 0xE8, 0x7A, 0xE8, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xBE, 0x53, 0x3F, 0x3F, 0xE8, 0x76, 0xE8, 0x7C, /* 0xE4-0xE7 */ + 0xE8, 0x72, 0xE8, 0x6C, 0xBE, 0x51, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xA8, 0xE8, 0x70, /* 0xEC-0xEF */ + 0xBE, 0x59, 0xE8, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xF4, /* 0xF4-0xF7 */ + 0xBF, 0xF7, 0xEB, 0xF3, 0xEB, 0xF0, 0xEC, 0x44, /* 0xF8-0xFB */ + 0xBF, 0xFB, 0x3F, 0x3F, 0xEC, 0x41, 0xEB, 0xF8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0xEC, 0x43, 0xEB, 0xE9, 0xEB, 0xF6, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xBF, 0xFD, 0x3F, 0x3F, 0xEB, 0xE1, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xEB, 0xDF, 0xEC, 0x42, 0x3F, 0x3F, 0xEC, 0x40, /* 0x08-0x0B */ + 0xEB, 0xFE, 0xEB, 0xED, 0xEB, 0xEC, 0xEB, 0xE2, /* 0x0C-0x0F */ + 0xC0, 0x40, 0x3F, 0x3F, 0xEB, 0xE8, 0xEB, 0xF2, /* 0x10-0x13 */ + 0xEB, 0xFD, 0xC0, 0x43, 0xEC, 0x45, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xC1, 0xE8, 0xC0, 0x45, 0xBF, 0xFE, 0xEB, 0xE6, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xEB, 0xEF, 0xEB, 0xDE, 0xEB, 0xE0, /* 0x1C-0x1F */ + 0xBF, 0xF5, 0xC0, 0x42, 0xBF, 0xFA, 0xEB, 0xE7, /* 0x20-0x23 */ + 0xEB, 0xF7, 0xEB, 0xF1, 0xC0, 0x41, 0xEB, 0xDD, /* 0x24-0x27 */ + 0xC1, 0xE3, 0xEB, 0xF9, 0xEB, 0xFC, 0xBF, 0xFC, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xEB, 0xEB, 0xC0, 0x44, 0xBF, 0xF9, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0xF8, /* 0x30-0x33 */ + 0xEB, 0xF5, 0xEB, 0xFB, 0xBF, 0xF6, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xEB, 0xE4, 0xEB, 0xFA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xEB, 0xE5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEB, 0xEA, 0xEE, 0xD2, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xEE, 0xD7, 0xC1, 0xE5, 0xC1, 0xE7, /* 0x48-0x4B */ + 0xEE, 0xDD, 0xC1, 0xE1, 0xEE, 0xEC, 0xEE, 0xE3, /* 0x4C-0x4F */ + 0xEE, 0xD8, 0xEE, 0xD9, 0xEE, 0xE2, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xC1, 0xEE, 0xEE, 0xE1, 0xEE, 0xD1, 0xEE, 0xE0, /* 0x54-0x57 */ + 0xEE, 0xD4, 0xEE, 0xED, 0xC1, 0xED, 0xC1, 0xEB, /* 0x58-0x5B */ + 0xEE, 0xD5, 0x3F, 0x3F, 0xEE, 0xE8, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xEE, 0xDA, 0xEE, 0xE7, 0x3F, 0x3F, 0xEE, 0xE9, /* 0x60-0x63 */ + 0xEE, 0xD0, 0xC1, 0xE6, 0x3F, 0x3F, 0xEE, 0xEA, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xDE, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xC1, 0xEA, 0xEE, 0xDB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xC1, 0xEC, 0xEE, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xC1, 0xE4, 0xEE, 0xD6, 0xEE, 0xE5, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xEE, 0xDF, 0xEB, 0xE3, 0xEE, 0xE6, /* 0x78-0x7B */ + 0xEE, 0xD3, 0x3F, 0x3F, 0xC1, 0xE9, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xEE, 0xEB, 0x3F, 0x3F, 0xC1, 0xE2, 0xEE, 0xCE, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xF1, 0x60, 0xF1, 0x59, 0xC2, 0xE9, 0x3F, 0x3F, /* 0x88-0x8B */ + 0xF1, 0x54, 0xF1, 0x63, 0xF1, 0x5B, 0xEE, 0xDC, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF1, 0x65, 0xF1, 0x55, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xC2, 0xE8, 0xF1, 0x5F, 0xC2, 0xEA, 0xC2, 0xF2, /* 0x94-0x97 */ + 0xC2, 0xF0, 0xF1, 0x61, 0xC2, 0xF1, 0xF1, 0x57, /* 0x98-0x9B */ + 0x3F, 0x3F, 0xF1, 0x58, 0xF1, 0x5D, 0xF1, 0x62, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xEE, 0xCD, 0xC2, 0xEB, 0xF1, 0x6A, /* 0xA0-0xA3 */ + 0xF1, 0x67, 0xF1, 0x6B, 0xF1, 0x5E, 0xF1, 0x5A, /* 0xA4-0xA7 */ + 0xF1, 0x68, 0xF3, 0x6A, 0xF1, 0x5C, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xC2, 0xEE, 0x3F, 0x3F, 0xC2, 0xED, 0xEE, 0xCF, /* 0xAC-0xAF */ + 0xC2, 0xEF, 0xF1, 0x64, 0xF1, 0x66, 0xC2, 0xEC, /* 0xB0-0xB3 */ + 0xF1, 0x69, 0xF1, 0x53, 0x3F, 0x3F, 0xF1, 0x56, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xF3, 0x73, 0x3F, 0x3F, 0xF3, 0x63, 0xC3, 0xEB, /* 0xC0-0xC3 */ + 0xF3, 0x71, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0x61, /* 0xC4-0xC7 */ + 0xC3, 0xEC, 0x3F, 0x3F, 0xF3, 0x6C, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xF3, 0x68, 0xC3, 0xF1, 0xF3, 0x72, 0xF3, 0x62, /* 0xCC-0xCF */ + 0xF3, 0x65, 0xC3, 0xE9, 0xF3, 0x74, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0xF3, 0x6D, 0xF3, 0x70, 0xC3, 0xEF, 0xC3, 0xF4, /* 0xD4-0xD7 */ + 0xC3, 0xF2, 0xF3, 0x69, 0xF3, 0x64, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xC3, 0xED, 0xC3, 0xEE, 0xF3, 0x60, 0xC3, 0xEA, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xC3, 0xE8, 0xC3, 0xF0, 0xF3, 0x6F, /* 0xE0-0xE3 */ + 0xC3, 0xF3, 0x3F, 0x3F, 0xF3, 0x6B, 0xF3, 0x75, /* 0xE4-0xE7 */ + 0xC3, 0xF5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xF3, 0x67, 0x3F, 0x3F, 0xF3, 0x6E, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xF4, 0xF3, 0xF5, 0x42, 0xF4, 0xF5, /* 0xF4-0xF7 */ + 0xF4, 0xFC, 0xF3, 0x66, 0xF4, 0xFA, 0xF4, 0xE9, /* 0xF8-0xFB */ + 0xF5, 0x40, 0xC4, 0xC3, 0xF4, 0xED, 0xF4, 0xFE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_94[512] = { + 0xF4, 0xF4, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0xC2, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0x44, 0xF4, 0xF6, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF4, 0xFB, 0xF4, 0xFD, 0xF4, 0xE7, /* 0x08-0x0B */ + 0xF5, 0x41, 0xF4, 0xF2, 0xF4, 0xF7, 0xF4, 0xEB, /* 0x0C-0x0F */ + 0xF4, 0xEF, 0xF5, 0x43, 0xF4, 0xF9, 0xF4, 0xE8, /* 0x10-0x13 */ + 0xF4, 0xEC, 0xF4, 0xEE, 0xF4, 0xF8, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xC4, 0xC1, 0xF4, 0xF1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xF4, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xF4, 0xF0, 0xF6, 0x61, 0xF6, 0x66, 0xC5, 0x4F, /* 0x28-0x2B */ + 0xF6, 0x68, 0x3F, 0x3F, 0xC5, 0x49, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xF6, 0x64, 0xF6, 0x6A, 0xC5, 0x4E, 0xC5, 0x4A, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xC5, 0x4B, 0xF6, 0x60, 0xF6, 0x67, /* 0x34-0x37 */ + 0xC5, 0x4D, 0xF6, 0x65, 0xC5, 0x4C, 0xF6, 0x5F, /* 0x38-0x3B */ + 0xF6, 0x63, 0xF6, 0x62, 0x3F, 0x3F, 0xF6, 0x5E, /* 0x3C-0x3F */ + 0xF6, 0x69, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xC5, 0xB1, 0xF7, 0x6D, 0xF7, 0x70, 0xF7, 0x6C, /* 0x44-0x47 */ + 0xF7, 0x6E, 0xF7, 0x6F, 0xF7, 0x69, 0xF7, 0x6A, /* 0x48-0x4B */ + 0xF7, 0x67, 0x3F, 0x3F, 0x3F, 0x3F, 0xF7, 0x6B, /* 0x4C-0x4F */ + 0xF7, 0x68, 0xC5, 0xB2, 0xC5, 0xB3, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0xF8, 0x4B, 0x3F, 0x3F, 0xF8, 0x4D, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0xF8, 0x4C, 0xF8, 0x4E, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xC5, 0xE0, 0x3F, 0x3F, 0xF8, 0x4A, 0xC5, 0xDF, /* 0x60-0x63 */ + 0xC5, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xF8, 0xCB, 0xF8, 0xCC, 0xC6, 0x44, 0xF8, 0xCA, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xF9, 0x53, 0xF9, 0x52, 0xF9, 0x54, /* 0x6C-0x6F */ + 0xC6, 0x5F, 0xF9, 0x55, 0xC6, 0x5E, 0xF9, 0x56, /* 0x70-0x73 */ + 0xF9, 0x72, 0xF9, 0x75, 0xF9, 0x74, 0xC6, 0x68, /* 0x74-0x77 */ + 0xF9, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xC6, 0x72, 0xC6, 0x70, 0xC6, 0x71, 0xC6, 0x77, /* 0x7C-0x7F */ + + 0xF9, 0xC0, 0xF9, 0xC1, 0xF9, 0xBF, 0xF9, 0xC9, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_95[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAA, 0xF8, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0x44, 0xDC, 0x78, /* 0x78-0x7B */ + 0xE8, 0xA5, 0xF3, 0x76, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xAA, 0xF9, 0x3F, 0x3F, 0xAD, 0xAC, 0xB0, 0x7B, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0x45, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xD8, 0x46, 0xB3, 0xAC, 0x3F, 0x3F, 0xB6, 0x7D, /* 0x88-0x8B */ + 0xDC, 0x7A, 0xDC, 0x79, 0xB6, 0xA3, 0xB6, 0x7C, /* 0x8C-0x8F */ + 0xDC, 0x7B, 0xB6, 0x7E, 0xB6, 0xA2, 0xB6, 0xA1, /* 0x90-0x93 */ + 0xB6, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xB9, 0x68, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xD0, /* 0x98-0x9B */ + 0xE0, 0xCE, 0x3F, 0x3F, 0xE0, 0xCF, 0xE0, 0xCD, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xBB, 0xD2, 0x3F, 0x3F, 0xBB, 0xD5, /* 0xA0-0xA3 */ + 0xBB, 0xD7, 0xBB, 0xD6, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xBB, 0xD3, 0xBB, 0xD4, 0x3F, 0x3F, 0xE8, 0xA7, /* 0xA8-0xAB */ + 0xE8, 0xA6, 0xBE, 0x5B, 0xE8, 0xA8, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xE8, 0xA9, 0xBE, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xEC, 0x4D, 0xEC, 0x4B, 0xEE, 0xF3, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xEC, 0x49, 0xEC, 0x4A, 0xC0, 0x46, /* 0xB8-0xBB */ + 0xEC, 0x46, 0xEC, 0x4E, 0xEC, 0x48, 0xEC, 0x4C, /* 0xBC-0xBF */ + 0xEE, 0xEF, 0x3F, 0x3F, 0x3F, 0x3F, 0xEE, 0xF1, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xEE, 0xF2, 0xC1, 0xF3, 0xEE, 0xEE, /* 0xC4-0xC7 */ + 0xC1, 0xF2, 0xEE, 0xF0, 0xC1, 0xEF, 0xC1, 0xF0, /* 0xC8-0xCB */ + 0xC1, 0xF1, 0xEC, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0xC2, 0xF5, 0xF1, 0x6E, 0xF1, 0x6C, 0xF1, 0x6D, /* 0xD0-0xD3 */ + 0xC2, 0xF3, 0xC2, 0xF6, 0xC2, 0xF4, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0x77, 0xF3, 0x78, /* 0xD8-0xDB */ + 0xC3, 0xF6, 0x3F, 0x3F, 0xF5, 0x45, 0xF5, 0x47, /* 0xDC-0xDF */ + 0xF5, 0x46, 0xC4, 0xC4, 0xC5, 0x50, 0xF6, 0x6D, /* 0xE0-0xE3 */ + 0xF6, 0x6C, 0xF6, 0x6B, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_96[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xAA, 0xFA, 0x3F, 0x3F, 0xC9, 0xAA, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xCA, 0x58, 0xA6, 0xE9, 0xCA, 0x56, 0xCA, 0x59, /* 0x20-0x23 */ + 0xCA, 0x57, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xCB, 0xAE, 0x3F, 0x3F, 0xA8, 0xC1, 0x3F, 0x3F, /* 0x28-0x2B */ + 0xA8, 0xC2, 0xCB, 0xB0, 0xA8, 0xBF, 0xCB, 0xAF, /* 0x2C-0x2F */ + 0xCB, 0xAD, 0xA8, 0xC0, 0xA8, 0xBE, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xCD, 0xD8, 0xCD, 0xDB, 0xAA, 0xFD, /* 0x38-0x3B */ + 0xCD, 0xDA, 0xCD, 0xD9, 0x3F, 0x3F, 0xAA, 0xFC, /* 0x3C-0x3F */ + 0xAA, 0xFB, 0x3F, 0x3F, 0xAB, 0x40, 0xCD, 0xDC, /* 0x40-0x43 */ + 0xAA, 0xFE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xD0, 0xC6, 0xAD, 0xAE, /* 0x48-0x4B */ + 0xAD, 0xAF, 0xAD, 0xB0, 0xD0, 0xC7, 0xD0, 0xC3, /* 0x4C-0x4F */ + 0xAD, 0xAD, 0xD0, 0xC4, 0x3F, 0x3F, 0xD0, 0xC5, /* 0x50-0x53 */ + 0xD0, 0xC2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xB0, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xA1, /* 0x58-0x5B */ + 0xD4, 0x45, 0xB0, 0xA2, 0xB0, 0xA5, 0xD4, 0x46, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xB0, 0x7E, 0xB0, 0x7C, 0xB0, 0x7D, /* 0x60-0x63 */ + 0xB0, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xAD, 0xD8, 0x49, /* 0x68-0x6B */ + 0xB3, 0xB5, 0xD8, 0x48, 0x3F, 0x3F, 0xD8, 0x4B, /* 0x6C-0x6F */ + 0xB3, 0xB1, 0xD8, 0x4A, 0xB6, 0xAB, 0xB3, 0xAF, /* 0x70-0x73 */ + 0xB3, 0xB2, 0xB3, 0xAE, 0xB3, 0xB3, 0xB3, 0xB4, /* 0x74-0x77 */ + 0xB3, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xD8, 0x47, 0xB6, 0xA7, 0xDC, 0x7D, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xDC, 0xA3, 0x3F, 0x3F, 0x3F, 0x3F, 0xDC, 0xA2, /* 0x80-0x83 */ + 0xB6, 0xAC, 0xB6, 0xA8, 0xB6, 0xA9, 0xDC, 0x7C, /* 0x84-0x87 */ + 0xDC, 0x7E, 0xDC, 0xA1, 0xB6, 0xA4, 0xB6, 0xA6, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xB6, 0xAA, 0xB6, 0xA5, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xE0, 0xD3, 0xE0, 0xD1, 0xE0, 0xD2, /* 0x90-0x93 */ + 0xB9, 0x6A, 0xB9, 0x6B, 0x3F, 0x3F, 0xE0, 0xD4, /* 0x94-0x97 */ + 0xB9, 0x69, 0xBB, 0xD8, 0x3F, 0x3F, 0xBB, 0xDA, /* 0x98-0x9B */ + 0xBB, 0xD9, 0x3F, 0x3F, 0xE4, 0xBB, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xE4, 0xBC, 0xE8, 0xAB, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xE8, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0x47, /* 0xA4-0xA7 */ + 0xC0, 0x48, 0xEC, 0x4F, 0xC0, 0x49, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xEE, 0xF6, 0x3F, 0x3F, 0xEE, 0xF4, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xEE, 0xF5, 0xC1, 0xF4, 0x3F, 0x3F, 0xF1, 0x6F, /* 0xB0-0xB3 */ + 0xC3, 0xF7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xC1, 0xF5, 0xAB, 0x41, 0x3F, 0x3F, 0xB0, 0xA6, /* 0xB8-0xBB */ + 0xD4, 0x47, 0x3F, 0x3F, 0x3F, 0x3F, 0xD8, 0x4C, /* 0xBC-0xBF */ + 0xB3, 0xB6, 0xB6, 0xAD, 0xDC, 0xA4, 0xDC, 0xA6, /* 0xC0-0xC3 */ + 0xB6, 0xAF, 0xB6, 0xAE, 0xB6, 0xB0, 0xB6, 0xB1, /* 0xC4-0xC7 */ + 0xDC, 0xA5, 0xB9, 0x6E, 0xB9, 0x6F, 0xB9, 0x6D, /* 0xC8-0xCB */ + 0xBB, 0xDB, 0xB9, 0x6C, 0xE0, 0xD5, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0xDC, 0xE8, 0xAC, /* 0xD0-0xD3 */ + 0xEC, 0x50, 0xC0, 0x4A, 0xC1, 0xF6, 0xF1, 0x70, /* 0xD4-0xD7 */ + 0xF1, 0x74, 0xC2, 0xF9, 0xF1, 0x71, 0xC2, 0xFA, /* 0xD8-0xDB */ + 0xC2, 0xF8, 0xF1, 0x75, 0xC2, 0xFB, 0xF1, 0x73, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF3, 0x79, 0xC2, 0xF7, 0xC3, 0xF8, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xF8, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xAB, 0x42, 0xB3, 0xB8, 0xB3, 0xB7, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xB2, /* 0xEC-0xEF */ + 0xDC, 0xA8, 0xDC, 0xA7, 0xB6, 0xB3, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0xE0, 0xD9, 0xB9, 0x73, 0xB9, 0x70, /* 0xF4-0xF7 */ + 0xE0, 0xD8, 0xB9, 0x72, 0xE0, 0xD6, 0xB9, 0x71, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xE0, 0xD7, 0x3F, 0x3F, 0xE4, 0xBD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_97[512] = { + 0xBB, 0xDD, 0x3F, 0x3F, 0xE8, 0xAF, 0x3F, 0x3F, /* 0x00-0x03 */ + 0xBE, 0x5D, 0xE8, 0xAD, 0xBE, 0x5E, 0xBE, 0x5F, /* 0x04-0x07 */ + 0xE8, 0xAE, 0xBE, 0x60, 0x3F, 0x3F, 0xEC, 0x51, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xC0, 0x4E, 0xC0, 0x4B, 0xC0, 0x50, /* 0x0C-0x0F */ + 0xEC, 0x53, 0xC0, 0x4C, 0xEC, 0x52, 0xC0, 0x4F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0x4D, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xEE, 0xF9, 0xEE, 0xFB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xC1, 0xF7, 0xEE, 0xFA, 0xC1, 0xF8, 0xEE, 0xF8, /* 0x1C-0x1F */ + 0xEE, 0xF7, 0x3F, 0x3F, 0xF1, 0x77, 0xF1, 0x76, /* 0x20-0x23 */ + 0xC2, 0xFC, 0xF1, 0x78, 0xF3, 0x7E, 0xC3, 0xFA, /* 0x24-0x27 */ + 0xF3, 0x7D, 0xF3, 0x7A, 0xC3, 0xF9, 0xF3, 0x7B, /* 0x28-0x2B */ + 0xF3, 0x7C, 0x3F, 0x3F, 0xF5, 0x48, 0xF5, 0x49, /* 0x2C-0x2F */ + 0xC4, 0xC5, 0x3F, 0x3F, 0xC5, 0x53, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF6, 0x6E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0xC5, 0x51, 0xC5, 0x52, 0xF6, 0x6F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xC5, 0xB4, 0xC5, 0xB5, 0xF7, 0x71, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC6, 0x45, 0xF8, 0xCF, /* 0x40-0x43 */ + 0xC6, 0x47, 0x3F, 0x3F, 0xF8, 0xCE, 0xF8, 0xD0, /* 0x44-0x47 */ + 0xC6, 0x46, 0xF9, 0x57, 0x3F, 0x3F, 0xF9, 0xAD, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAB, 0x43, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0x74, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xE4, 0xBE, 0x3F, 0x3F, 0xE8, 0xB0, 0xC0, 0x51, /* 0x58-0x5B */ + 0xC0, 0x52, 0x3F, 0x3F, 0xAB, 0x44, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0xBE, 0x61, 0xC3, 0xFB, 0xAD, 0xB1, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0x53, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xC5, 0xE2, 0xAD, 0xB2, 0xD8, 0x4D, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xDC, 0xA9, 0x3F, 0x3F, 0xDC, 0xAB, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0xDC, 0xAA, 0x3F, 0x3F, 0xE0, 0xDD, 0xE0, 0xDA, /* 0x70-0x73 */ + 0xB9, 0x75, 0x3F, 0x3F, 0xB9, 0x76, 0xE0, 0xDB, /* 0x74-0x77 */ + 0xE0, 0xDC, 0x3F, 0x3F, 0xE4, 0xC0, 0xE4, 0xC5, /* 0x78-0x7B */ + 0xBB, 0xDE, 0xE4, 0xBF, 0xE4, 0xC1, 0xE4, 0xC8, /* 0x7C-0x7F */ + + 0xE4, 0xC3, 0xE4, 0xC7, 0xE4, 0xC4, 0xE4, 0xC2, /* 0x80-0x83 */ + 0xE4, 0xC6, 0xBB, 0xDF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0xE8, 0xB3, 0x3F, 0x3F, 0xE8, 0xB1, 0xBE, 0x63, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xBE, 0x62, 0xE8, 0xB2, 0xBE, 0x64, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xEC, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0x55, /* 0x94-0x97 */ + 0xC0, 0x54, 0xEC, 0x54, 0xEE, 0xFC, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xEE, 0xFE, 0xEF, 0x41, 0xEF, 0x40, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xC1, 0xF9, 0xEE, 0xFD, 0xF1, 0xA1, 0xC2, 0xFD, /* 0xA0-0xA3 */ + 0xF1, 0x7D, 0xF1, 0xA2, 0xC2, 0xFE, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xF1, 0x7B, 0x3F, 0x3F, 0xF1, 0x7E, 0xF1, 0x7C, /* 0xA8-0xAB */ + 0xF1, 0x79, 0xC3, 0x40, 0xF1, 0x7A, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xA1, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xA3, 0xF3, 0xA2, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xF5, 0x4A, 0x3F, 0x3F, 0xF5, 0x4B, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0x70, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xC5, 0xB7, 0x3F, 0x3F, 0xC5, 0xB6, /* 0xC0-0xC3 */ + 0xF8, 0x4F, 0xF8, 0x50, 0xC6, 0x48, 0xF8, 0xD1, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xC6, 0x69, 0x3F, 0x3F, 0xAD, 0xB3, /* 0xC8-0xCB */ + 0xB6, 0xB4, 0xE4, 0xCA, 0xE4, 0xC9, 0xE8, 0xB5, /* 0xCC-0xCF */ + 0xE8, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0xFA, /* 0xD0-0xD3 */ + 0xEF, 0x43, 0xEF, 0x42, 0xF1, 0xA5, 0xF1, 0xA3, /* 0xD4-0xD7 */ + 0xF1, 0xA6, 0xF1, 0xA4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xC3, 0xFC, 0xF3, 0xA4, 0xF3, 0xA5, 0xF3, 0xA6, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF6, 0x71, 0x3F, 0x3F, 0xF7, 0x72, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xF8, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xAD, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xEC, 0x57, 0xEF, 0x44, 0x3F, 0x3F, 0xAD, 0xB5, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0xE0, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0xEC, 0x58, 0xC3, 0x41, 0xF1, 0xA7, 0xC3, 0xFD, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF5, 0x4C, 0xF5, 0x4D, 0xC5, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0xF8, 0x51, 0xAD, 0xB6, 0xB3, 0xBB, 0xB3, 0xBC, /* 0x00-0x03 */ + 0xD8, 0x4E, 0xB6, 0xB5, 0xB6, 0xB6, 0xDC, 0xAC, /* 0x04-0x07 */ + 0xB6, 0xB7, 0x3F, 0x3F, 0xB9, 0x7A, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xB9, 0x7C, 0xE0, 0xDF, 0xE0, 0xE0, 0xE0, 0xDE, /* 0x0C-0x0F */ + 0xB9, 0x77, 0xB9, 0x78, 0xB9, 0x7B, 0xB9, 0x79, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xCB, 0xBB, 0xE1, /* 0x14-0x17 */ + 0xBB, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xBC, /* 0x18-0x1B */ + 0xBE, 0x67, 0xE8, 0xB7, 0xE8, 0xB6, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xE8, 0xBB, 0xBE, 0x65, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xC0, 0x5B, 0x3F, 0x3F, 0xE8, 0xB8, 0xE8, 0xBD, /* 0x24-0x27 */ + 0xE8, 0xBA, 0xE8, 0xB9, 0x3F, 0x3F, 0xBE, 0x66, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xC0, 0x59, 0x3F, 0x3F, 0xEC, 0x5A, /* 0x2C-0x2F */ + 0xC0, 0x55, 0x3F, 0x3F, 0xEC, 0x5B, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xEC, 0x59, 0x3F, 0x3F, 0xC0, 0x58, /* 0x34-0x37 */ + 0xC0, 0x56, 0xC0, 0x5A, 0x3F, 0x3F, 0xC0, 0x57, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xEF, 0x45, 0x3F, 0x3F, 0xEF, 0x4A, /* 0x40-0x43 */ + 0xEF, 0x46, 0xEF, 0x49, 0xC1, 0xFB, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xED, 0xD4, 0xEF, 0x48, 0xEF, 0x47, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xC3, 0x44, 0xC3, 0x42, 0xC3, 0x45, 0xC3, 0x43, /* 0x4C-0x4F */ + 0xF1, 0xA8, 0xF1, 0xA9, 0xF1, 0xAA, 0xC3, 0x46, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xAA, /* 0x54-0x57 */ + 0xC4, 0x40, 0xF3, 0xA8, 0x3F, 0x3F, 0xC4, 0x41, /* 0x58-0x5B */ + 0xF3, 0xA7, 0xF3, 0xA9, 0xC3, 0xFE, 0xF5, 0x51, /* 0x5C-0x5F */ + 0xF5, 0x4E, 0x3F, 0x3F, 0xF5, 0x4F, 0xF5, 0x50, /* 0x60-0x63 */ + 0xF6, 0x72, 0xC5, 0x56, 0x3F, 0x3F, 0xC5, 0x55, /* 0x64-0x67 */ + 0x3F, 0x3F, 0xF7, 0x74, 0xF7, 0x73, 0xC5, 0xB8, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0xE3, /* 0x6C-0x6F */ + 0xC6, 0x49, 0xC6, 0x60, 0xF9, 0x58, 0xF9, 0xAE, /* 0x70-0x73 */ + 0xF9, 0xAF, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xAD, 0xB7, 0xDC, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xE0, 0xE1, 0xE4, 0xCC, 0xE4, 0xCD, 0xBB, 0xE3, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xBB, 0xE4, 0xE8, 0xBE, 0xBE, 0x68, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC1, 0xFC, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xF1, 0xAB, 0x3F, 0x3F, 0xC3, 0x47, 0xF3, 0xAD, /* 0xB8-0xBB */ + 0xC4, 0x42, 0xF3, 0xAC, 0xF3, 0xAE, 0xF3, 0xAB, /* 0xBC-0xBF */ + 0xF6, 0x75, 0xF5, 0x52, 0xF5, 0x53, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0xC4, 0xC6, 0x3F, 0x3F, 0xF6, 0x74, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xF6, 0x73, 0x3F, 0x3F, 0xF7, 0x75, /* 0xC8-0xCB */ + 0xF9, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xB8, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xB9, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB0, 0xA7, 0xD4, 0x48, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xD8, 0x4F, 0x3F, 0x3F, 0xB6, 0xB8, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xB6, 0xBB, 0xB6, 0xB9, 0xDC, 0xAE, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xB6, 0xBD, 0x3F, 0x3F, 0xB6, 0xBA, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB6, 0xBC, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xB9, 0x7E, 0x3F, 0x3F, 0xE0, 0xE2, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xE0, 0xE3, 0xE8, 0xC0, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0xB9, 0x7D, 0xB9, 0xA1, 0xB9, 0xA2, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0xE4, 0xCF, 0x3F, 0x3F, 0xE4, 0xCE, 0xBB, 0xE5, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xBB, 0xE6, 0x3F, 0x3F, 0xE4, 0xD0, /* 0x04-0x07 */ + 0xE8, 0xBF, 0xBB, 0xE8, 0xBE, 0x69, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xBB, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xC0, 0x5C, 0xE8, 0xC1, 0xBE, 0x6B, 0xBE, 0x6A, /* 0x10-0x13 */ + 0xE8, 0xC2, 0xE8, 0xC5, 0xE8, 0xC3, 0xE8, 0xC4, /* 0x14-0x17 */ + 0xBE, 0x6C, 0x3F, 0x3F, 0xC0, 0x61, 0xC0, 0x5F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0x5E, 0xEC, 0x5D, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xC0, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0xEC, 0x5C, 0xEF, 0x4B, 0x3F, 0x3F, 0xEC, 0x5E, /* 0x24-0x27 */ + 0xC0, 0x5D, 0xEC, 0x5F, 0xEF, 0x4E, 0xEF, 0x4C, /* 0x28-0x2B */ + 0xEF, 0x4D, 0xEF, 0x52, 0xC3, 0x4B, 0xEF, 0x51, /* 0x2C-0x2F */ + 0xEF, 0x54, 0xEF, 0x53, 0xEF, 0x50, 0xEF, 0x4F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xC1, 0xFD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xAE, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xF1, 0xAD, 0xC3, 0x4A, 0xC3, 0x48, 0xC3, 0x49, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xF1, 0xAC, 0x3F, 0x3F, 0xF3, 0xB1, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xC4, 0x43, 0x3F, 0x3F, 0xF3, 0xB0, /* 0x44-0x47 */ + 0xF3, 0xAF, 0xC4, 0x44, 0x3F, 0x3F, 0xF5, 0x58, /* 0x48-0x4B */ + 0xF5, 0x57, 0x3F, 0x3F, 0xF5, 0x55, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF5, 0x54, 0xC4, 0xC8, 0xC4, 0xC7, 0xF5, 0x59, /* 0x50-0x53 */ + 0xF7, 0x76, 0xC5, 0xB9, 0xF6, 0x77, 0xC5, 0x57, /* 0x54-0x57 */ + 0xF6, 0x76, 0xF5, 0x56, 0x3F, 0x3F, 0xF7, 0x77, /* 0x58-0x5B */ + 0xC5, 0xE4, 0x3F, 0x3F, 0xC6, 0x61, 0xF9, 0x59, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0xF9, 0xB1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xAD, 0xBA, 0xD8, 0x50, /* 0x94-0x97 */ + 0xEF, 0x55, 0xAD, 0xBB, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xE4, 0xD2, 0xE4, 0xD1, 0xEC, 0x60, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0xEF, 0x57, 0x3F, 0x3F, 0xEF, 0x56, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0xC3, 0x4C, 0xF3, 0xB2, 0xF3, 0xB3, /* 0xA4-0xA7 */ + 0xC4, 0xC9, 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xB2, /* 0xA8-0xAB */ + 0xB0, 0xA8, 0xB6, 0xBF, 0xB6, 0xBE, 0xE0, 0xE4, /* 0xAC-0xAF */ + 0xE0, 0xE6, 0xB9, 0xA4, 0xE0, 0xE5, 0xB9, 0xA3, /* 0xB0-0xB3 */ + 0xB9, 0xA5, 0xE0, 0xE7, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0xE4, 0xD4, 0xE4, 0xD6, 0xE4, 0xD5, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xE4, 0xD8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xBB, 0xE9, 0xE4, 0xD7, 0xE4, 0xD3, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xD9, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0xE8, 0xCC, 0x3F, 0x3F, 0xE8, 0xCF, /* 0xC8-0xCB */ + 0xE8, 0xD1, 0xE8, 0xC7, 0xE8, 0xCB, 0xE8, 0xC8, /* 0xCC-0xCF */ + 0xBE, 0x6E, 0xBE, 0x71, 0xBE, 0x73, 0xE8, 0xC9, /* 0xD0-0xD3 */ + 0xE8, 0xCA, 0xBE, 0x72, 0xE8, 0xCD, 0xE8, 0xD0, /* 0xD4-0xD7 */ + 0xE8, 0xCE, 0xBE, 0x74, 0x3F, 0x3F, 0xBE, 0x70, /* 0xD8-0xDB */ + 0xE8, 0xC6, 0xBE, 0x6D, 0x3F, 0x3F, 0xBE, 0x6F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC0, 0x63, 0xEC, 0x66, /* 0xE0-0xE3 */ + 0xEC, 0x64, 0xEC, 0x63, 0x3F, 0x3F, 0xEC, 0x69, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xEC, 0x68, 0xEC, 0x67, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0xEC, 0x62, 0xC0, 0x62, 0xEC, 0x61, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xEC, 0x65, 0xC0, 0x64, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0xEF, 0x5A, 0x3F, 0x3F, 0xEF, 0x5E, 0xEF, 0x5B, /* 0xF4-0xF7 */ + 0xEF, 0x5D, 0xEF, 0x5C, 0xEF, 0x59, 0xEF, 0x5F, /* 0xF8-0xFB */ + 0xEF, 0x62, 0xEF, 0x60, 0xEF, 0x61, 0xC2, 0x40, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0x3F, 0x3F, 0xC1, 0xFE, 0xEF, 0x58, 0xEF, 0x63, /* 0x00-0x03 */ + 0xF1, 0xB3, 0xF1, 0xB6, 0xF1, 0xB8, 0xF1, 0xB7, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF1, 0xB1, 0xF1, 0xB5, 0xF1, 0xB0, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xF1, 0xB2, 0xC3, 0x4D, 0xF1, 0xAF, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0xF1, 0xB4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xF3, 0xC0, 0xF3, 0xB5, 0xC4, 0x45, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xC4, 0x46, 0xF3, 0xB4, 0xF3, 0xB9, /* 0x18-0x1B */ + 0xF3, 0xBF, 0xF3, 0xB7, 0xF3, 0xBE, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xF3, 0xBB, 0x3F, 0x3F, 0xF3, 0xBA, 0xF3, 0xBD, /* 0x20-0x23 */ + 0xF3, 0xB8, 0xF3, 0xB6, 0x3F, 0x3F, 0xF3, 0xBC, /* 0x24-0x27 */ + 0x3F, 0x3F, 0xF5, 0x60, 0xF5, 0x5E, 0xC4, 0xCA, /* 0x28-0x2B */ + 0xF5, 0x5D, 0xF5, 0x63, 0xF5, 0x61, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xC4, 0xCB, 0xF5, 0x5C, 0xF5, 0x5A, 0x3F, 0x3F, /* 0x30-0x33 */ + 0xF5, 0x5B, 0xC4, 0xCD, 0xF5, 0x5F, 0xC4, 0xCC, /* 0x34-0x37 */ + 0xF5, 0x62, 0xF6, 0x78, 0xF6, 0x7E, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xF6, 0x79, 0xC5, 0x5B, 0xF6, 0xA1, /* 0x3C-0x3F */ + 0xC5, 0x5A, 0xF6, 0x7D, 0xF6, 0x7C, 0xC5, 0x59, /* 0x40-0x43 */ + 0xF6, 0x7B, 0xC5, 0x58, 0xF6, 0x7A, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xF7, 0x7D, 0xF7, 0xA1, 0xF7, 0x7E, 0x3F, 0x3F, /* 0x48-0x4B */ + 0xF7, 0x7B, 0xC5, 0xBB, 0xF7, 0x78, 0xF7, 0x7C, /* 0x4C-0x4F */ + 0xF7, 0xA3, 0x3F, 0x3F, 0xF7, 0xA2, 0xF7, 0x79, /* 0x50-0x53 */ + 0xF7, 0x7A, 0xC5, 0xBA, 0xF8, 0x52, 0xC5, 0xE7, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xF8, 0x53, 0xC5, 0xE5, 0xC5, 0xE6, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD3, 0xC6, 0x4A, /* 0x5C-0x5F */ + 0xF9, 0x76, 0x3F, 0x3F, 0xC6, 0x6A, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xF9, 0xB3, 0xC6, 0x6B, 0xF9, 0xB4, 0xF9, 0xB5, /* 0x64-0x67 */ + 0xF9, 0xC3, 0xF9, 0xC2, 0xC6, 0x7A, 0xF9, 0xCD, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xB0, 0xA9, 0x3F, 0x3F, 0x3F, 0x3F, 0xE0, 0xE9, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xE0, 0xE8, 0x3F, 0x3F, 0xBB, 0xEA, /* 0xAC-0xAF */ + 0xBB, 0xEB, 0xE4, 0xDA, 0x3F, 0x3F, 0xE8, 0xD2, /* 0xB0-0xB3 */ + 0xEC, 0x6C, 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0x75, /* 0xB4-0xB7 */ + 0xC0, 0x65, 0xEC, 0x6A, 0x3F, 0x3F, 0xEC, 0x6D, /* 0xB8-0xBB */ + 0xC0, 0x66, 0x3F, 0x3F, 0xEF, 0x64, 0xEC, 0x6B, /* 0xBC-0xBF */ + 0xF1, 0xB9, 0xC3, 0x4E, 0xF3, 0xC1, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0x66, 0xF5, 0x64, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0x65, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0xF6, 0xA2, 0x3F, 0x3F, 0xC5, 0x5C, /* 0xCC-0xCF */ + 0xF7, 0xA4, 0xC5, 0xEA, 0xC5, 0xBC, 0xC5, 0xE8, /* 0xD0-0xD3 */ + 0xC5, 0xE9, 0xF8, 0xD4, 0xC6, 0x62, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xB0, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0xF1, 0xBA, 0x3F, 0x3F, 0x3F, 0x3F, 0xD4, 0x49, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xB9, 0xA6, 0x3F, 0x3F, 0xE4, 0xDB, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0xEC, 0xE4, 0xDC, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE8, 0xD4, /* 0xE8-0xEB */ + 0xE8, 0xD3, 0xC0, 0x68, 0xBE, 0x76, 0xBE, 0x77, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xE8, 0xD7, 0xE8, 0xD6, 0xE8, 0xD5, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0x6E, 0xEC, 0x71, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xEC, 0x70, 0xEC, 0x6F, 0xC0, 0x67, /* 0xF8-0xFB */ + 0xEF, 0x68, 0xEF, 0x66, 0xEF, 0x65, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9B[512] = { + 0x3F, 0x3F, 0xEF, 0x67, 0x3F, 0x3F, 0xC3, 0x4F, /* 0x00-0x03 */ + 0xF1, 0xBC, 0xF1, 0xBD, 0xC3, 0x50, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xF1, 0xBB, 0x3F, 0x3F, 0xF3, 0xC3, 0xF3, 0xC2, /* 0x08-0x0B */ + 0xF3, 0xC5, 0xC4, 0x47, 0xF3, 0xC4, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xF5, 0x67, 0xF5, 0x69, 0xF5, 0x68, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xF6, 0xA3, 0xF6, 0xA6, 0xF6, 0xA4, /* 0x14-0x17 */ + 0xF6, 0xA5, 0xF7, 0xA5, 0xC5, 0xBD, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0x54, 0xF8, 0x55, /* 0x1C-0x1F */ + 0xF8, 0x56, 0x3F, 0x3F, 0xC6, 0x4B, 0xC6, 0x63, /* 0x20-0x23 */ + 0xF9, 0xB6, 0xB0, 0xAB, 0x3F, 0x3F, 0xBE, 0x78, /* 0x24-0x27 */ + 0xC0, 0x69, 0xF1, 0xBE, 0x3F, 0x3F, 0xF7, 0xA6, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xC4, 0xD4, 0x4A, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xC6, 0x7B, 0xB0, 0xAC, 0xEC, 0x72, /* 0x30-0x33 */ + 0x3F, 0x3F, 0xF1, 0xBF, 0x3F, 0x3F, 0xF3, 0xC6, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xA7, 0xF7, 0xA7, /* 0x38-0x3B */ + 0xB0, 0xAD, 0x3F, 0x3F, 0xE4, 0xDD, 0xE4, 0xDE, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xBB, 0xED, 0xBB, 0xEE, 0xE8, 0xD9, /* 0x40-0x43 */ + 0xBE, 0x7A, 0xBE, 0x79, 0xE8, 0xD8, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xEF, 0x69, 0x3F, 0x3F, 0xF1, 0xC0, 0xF1, 0xC2, /* 0x48-0x4B */ + 0xF1, 0xC1, 0xC3, 0x53, 0xC3, 0x52, 0xC3, 0x51, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xC5, 0x5E, 0xF6, 0xA8, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xC5, 0x5D, 0xF7, 0xA9, 0xF7, 0xA8, 0x3F, 0x3F, /* 0x54-0x57 */ + 0xC6, 0x4C, 0xF8, 0xD5, 0xB3, 0xBD, 0xE0, 0xEA, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xE4, 0xE1, /* 0x5C-0x5F */ + 0xE4, 0xDF, 0xE4, 0xE0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0xE8, 0xE2, 0x3F, 0x3F, 0xE8, 0xDD, 0xE8, 0xDA, /* 0x64-0x67 */ + 0xE8, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0xE8, 0xE3, 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0x7C, /* 0x6C-0x6F */ + 0xE8, 0xE0, 0xE8, 0xDC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xE8, 0xDB, 0xE8, 0xDF, 0xE8, 0xDE, 0xBE, 0x7B, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0x7D, 0xEC, 0x78, /* 0x78-0x7B */ + 0xEC, 0x76, 0xEC, 0xA1, 0xEC, 0x77, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0xEC, 0x73, 0x3F, 0x3F, 0xEC, 0x79, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0xEC, 0x74, 0xEF, 0x72, 0xEC, 0x75, /* 0x84-0x87 */ + 0xEC, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xEC, 0x7C, 0xC0, 0x6A, 0xEC, 0x7B, 0xEC, 0x7A, /* 0x90-0x93 */ + 0x3F, 0x3F, 0xEC, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0x6A, 0xEF, 0x6D, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0x6C, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xEF, 0x74, 0xEF, 0x6F, 0xEF, 0x73, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xEF, 0x71, 0xEF, 0x70, 0xEF, 0x6E, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0xEF, 0x6B, 0x3F, 0x3F, 0xC2, 0x43, 0xC2, 0x42, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xC2, 0x44, 0xC2, 0x41, 0xEF, 0x75, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0xF1, 0xC8, 0xF1, 0xCB, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0xF1, 0xC9, 0xF1, 0xCD, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0xF1, 0xCE, 0x3F, 0x3F, 0xF1, 0xC6, /* 0xBC-0xBF */ + 0xC3, 0x58, 0xF1, 0xC7, 0x3F, 0x3F, 0xF1, 0xC5, /* 0xC0-0xC3 */ + 0xF1, 0xCC, 0x3F, 0x3F, 0xF1, 0xC4, 0xF1, 0xC3, /* 0xC4-0xC7 */ + 0xC3, 0x57, 0xC3, 0x55, 0xC3, 0x54, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xCA, /* 0xD0-0xD3 */ + 0xF3, 0xCF, 0xF3, 0xD5, 0xC4, 0x4A, 0xF3, 0xD0, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0xF3, 0xD3, 0xF3, 0xD7, 0xC4, 0x4B, /* 0xD8-0xDB */ + 0xF3, 0xD2, 0x3F, 0x3F, 0xF3, 0xCA, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xF3, 0xC9, 0xF3, 0xD6, 0xF3, 0xCD, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xF3, 0xCB, 0xF3, 0xD4, 0xF3, 0xCC, 0xC4, 0x49, /* 0xE4-0xE7 */ + 0xC4, 0x48, 0x3F, 0x3F, 0xF3, 0xC7, 0xF3, 0xC8, /* 0xE8-0xEB */ + 0xF3, 0xD1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0xF3, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0x6C, /* 0xF4-0xF7 */ + 0xF5, 0x6F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xC3, 0x56, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9C[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0xF5, 0x6D, 0xF5, 0x73, 0xF5, 0x71, /* 0x04-0x07 */ + 0xF5, 0x6B, 0xF5, 0x76, 0x3F, 0x3F, 0xF5, 0x6A, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xC4, 0xCF, 0xF5, 0x72, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0x6E, 0xC4, 0xCE, /* 0x10-0x13 */ + 0xF5, 0x75, 0x3F, 0x3F, 0x3F, 0x3F, 0xF5, 0x74, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0xF6, 0xAB, 0xF6, 0xAA, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0xF6, 0xB1, 0x3F, 0x3F, 0xF6, 0xAD, /* 0x20-0x23 */ + 0xF6, 0xB0, 0xC5, 0x60, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xF6, 0xAE, 0xF6, 0xAF, 0x3F, 0x3F, 0xF6, 0xA9, /* 0x28-0x2B */ + 0xF6, 0xAC, 0xC5, 0x5F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0xC5, 0xBF, 0xF7, 0xB4, 0xF7, 0xAF, /* 0x30-0x33 */ + 0xF7, 0xB3, 0x3F, 0x3F, 0xF7, 0xB6, 0xF7, 0xB2, /* 0x34-0x37 */ + 0x3F, 0x3F, 0xF7, 0xAE, 0x3F, 0x3F, 0xC5, 0xC1, /* 0x38-0x3B */ + 0xF7, 0xB1, 0xF7, 0xB5, 0xC5, 0xC0, 0xF7, 0xAC, /* 0x3C-0x3F */ + 0xF5, 0x70, 0xF7, 0xB0, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0xF7, 0xAD, 0x3F, 0x3F, 0xF7, 0xAA, 0x3F, 0x3F, /* 0x44-0x47 */ + 0xF7, 0xAB, 0xC5, 0xBE, 0xF8, 0x5A, 0xF8, 0x5C, /* 0x48-0x4B */ + 0xF8, 0x5F, 0xF8, 0x5B, 0xF8, 0x60, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0xF8, 0x59, 0x3F, 0x3F, 0xF8, 0x57, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xC5, 0xEB, 0xF8, 0x5D, 0xC5, 0xED, 0xC5, 0xEC, /* 0x54-0x57 */ + 0xF8, 0x58, 0xF8, 0x5E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xDA, 0xC6, 0x4D, /* 0x5C-0x5F */ + 0xF8, 0xDB, 0x3F, 0x3F, 0xF8, 0xD9, 0xF8, 0xD6, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xD8, 0xF8, 0xD7, /* 0x64-0x67 */ + 0xF9, 0x5A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0xF9, 0x5C, 0xF9, 0x5B, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0xF9, 0x79, 0x3F, 0x3F, 0xF9, 0x78, /* 0x70-0x73 */ + 0xF9, 0x77, 0xF9, 0x7A, 0x3F, 0x3F, 0xC6, 0x73, /* 0x74-0x77 */ + 0xC6, 0x74, 0xF9, 0xCA, 0xF9, 0xCE, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xB3, 0xBE, 0xDC, 0xAF, 0xE0, 0xED, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0xB9, 0xA7, 0xE0, 0xEB, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xE0, 0xEC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0xE4, 0xE2, 0xE4, 0xE3, 0xBB, 0xF1, /* 0xF0-0xF3 */ + 0xBB, 0xEF, 0xE4, 0xE4, 0xBB, 0xF0, 0xE8, 0xE8, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xE8, 0xEB, 0xE8, 0xE5, 0xE8, 0xEC, /* 0xF8-0xFB */ + 0xE8, 0xE4, 0xE8, 0xE6, 0x3F, 0x3F, 0xE8, 0xE7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9D[512] = { + 0xE8, 0xEA, 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0xA1, /* 0x00-0x03 */ + 0xE8, 0xEF, 0xE8, 0xEE, 0xBE, 0x7D, 0xE8, 0xE9, /* 0x04-0x07 */ + 0xE8, 0xED, 0xBE, 0x7E, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0xEC, 0xAC, 0x3F, 0x3F, 0xC0, 0x6F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0xEC, 0xA7, 0xC0, 0x6B, 0x3F, 0x3F, 0xEC, 0xA4, /* 0x14-0x17 */ + 0xEC, 0xAA, 0xEC, 0xAD, 0x3F, 0x3F, 0xC0, 0x70, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xEC, 0xA9, 0xEC, 0xA6, 0xEC, 0xAE, /* 0x1C-0x1F */ + 0xEC, 0xA5, 0x3F, 0x3F, 0xEC, 0xAB, 0xC0, 0x6C, /* 0x20-0x23 */ + 0x3F, 0x3F, 0xEC, 0xA3, 0xC0, 0x6D, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xC0, 0x6E, 0xEC, 0xA8, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0xEF, 0xA9, 0xEF, 0x7A, 0xEF, 0x7B, /* 0x2C-0x2F */ + 0xEF, 0x7E, 0xEF, 0x7C, 0x3F, 0x3F, 0xEF, 0x76, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0x79, 0xEF, 0xA5, /* 0x34-0x37 */ + 0xEF, 0x7D, 0x3F, 0x3F, 0x3F, 0x3F, 0xC2, 0x45, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xEF, 0xA7, 0xEF, 0xA4, 0xC2, 0x46, /* 0x3C-0x3F */ + 0xEF, 0xA6, 0xEF, 0x77, 0xEF, 0xA2, 0xEF, 0xA3, /* 0x40-0x43 */ + 0x3F, 0x3F, 0xEF, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xD2, 0xF1, 0xD4, /* 0x48-0x4B */ + 0xF1, 0xD7, 0x3F, 0x3F, 0x3F, 0x3F, 0xF1, 0xD1, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0xC3, 0x59, 0xF1, 0xD9, 0xF1, 0xD0, /* 0x50-0x53 */ + 0xF1, 0xDA, 0x3F, 0x3F, 0xF1, 0xD6, 0xF1, 0xD8, /* 0x54-0x57 */ + 0xF1, 0xDC, 0xF1, 0xD5, 0xF1, 0xDD, 0xF1, 0xD3, /* 0x58-0x5B */ + 0xF1, 0xCF, 0xC3, 0x5A, 0x3F, 0x3F, 0xF1, 0xDB, /* 0x5C-0x5F */ + 0xC3, 0x5B, 0xC4, 0x4D, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xEF, 0x78, /* 0x64-0x67 */ + 0xF3, 0xF1, 0xF3, 0xE8, 0xC4, 0x4F, 0xF3, 0xE4, /* 0x68-0x6B */ + 0xC4, 0x50, 0x3F, 0x3F, 0x3F, 0x3F, 0xF3, 0xED, /* 0x6C-0x6F */ + 0xF3, 0xE7, 0xF3, 0xDD, 0xC4, 0x4E, 0xF3, 0xEA, /* 0x70-0x73 */ + 0xF3, 0xE5, 0xF3, 0xE6, 0x3F, 0x3F, 0xF3, 0xD8, /* 0x74-0x77 */ + 0xF3, 0xDF, 0xF3, 0xEE, 0x3F, 0x3F, 0xF3, 0xEB, /* 0x78-0x7B */ + 0x3F, 0x3F, 0xF3, 0xE3, 0x3F, 0x3F, 0xF3, 0xEF, /* 0x7C-0x7F */ + + 0xF3, 0xDE, 0xF3, 0xD9, 0xF3, 0xEC, 0x3F, 0x3F, /* 0x80-0x83 */ + 0xF3, 0xDB, 0xF3, 0xE9, 0xF3, 0xE0, 0xF3, 0xF0, /* 0x84-0x87 */ + 0xF3, 0xDC, 0xC4, 0x4C, 0xF3, 0xDA, 0xF3, 0xE1, /* 0x88-0x8B */ + 0xF3, 0xE2, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xF5, 0x7D, 0x3F, 0x3F, 0xF5, 0x7B, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xF5, 0xA2, 0x3F, 0x3F, 0xF5, 0xAE, 0xF5, 0xA5, /* 0x94-0x97 */ + 0xF5, 0x7C, 0xF5, 0x78, 0xF5, 0xA7, 0xF5, 0x7E, /* 0x98-0x9B */ + 0xF5, 0xA3, 0xF5, 0x7A, 0xF5, 0xAA, 0xF5, 0x77, /* 0x9C-0x9F */ + 0xF5, 0xA1, 0xF5, 0xA6, 0xF5, 0xA8, 0xF5, 0xAB, /* 0xA0-0xA3 */ + 0xF5, 0x79, 0x3F, 0x3F, 0xF5, 0xAF, 0xF5, 0xB0, /* 0xA4-0xA7 */ + 0xF5, 0xA9, 0xF5, 0xAD, 0xF5, 0xA4, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0xF6, 0xC1, 0xF6, 0xC4, 0x3F, 0x3F, 0xC5, 0x61, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0xF6, 0xC3, 0xF6, 0xC8, 0xF6, 0xC6, /* 0xB0-0xB3 */ + 0xC5, 0x62, 0xF6, 0xBD, 0xF6, 0xB3, 0xF6, 0xB2, /* 0xB4-0xB7 */ + 0xC5, 0x64, 0xF6, 0xBF, 0xF6, 0xC0, 0xF6, 0xBC, /* 0xB8-0xBB */ + 0xF6, 0xB4, 0x3F, 0x3F, 0xF6, 0xB9, 0xF5, 0xAC, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0xF6, 0xB5, 0xC5, 0x63, 0xF6, 0xBB, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0xF6, 0xBA, 0x3F, 0x3F, 0xF6, 0xB6, /* 0xC4-0xC7 */ + 0xF6, 0xC2, 0x3F, 0x3F, 0xF6, 0xB7, 0xF7, 0xBB, /* 0xC8-0xCB */ + 0xF6, 0xC5, 0xF6, 0xC7, 0xF6, 0xBE, 0xF6, 0xB8, /* 0xCC-0xCF */ + 0xF7, 0xBC, 0xF7, 0xBE, 0xF7, 0xB8, 0xC5, 0xC2, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0xF7, 0xC5, 0xF7, 0xC3, 0xC5, 0xC3, /* 0xD4-0xD7 */ + 0xF7, 0xC2, 0xF7, 0xC1, 0xF7, 0xBA, 0xF7, 0xB7, /* 0xD8-0xDB */ + 0xF7, 0xBD, 0xF7, 0xC6, 0xF7, 0xB9, 0xF7, 0xBF, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0xF8, 0x69, 0xF8, 0x6E, 0xF8, 0x64, /* 0xE0-0xE3 */ + 0xF8, 0x67, 0xC5, 0xEE, 0xF8, 0x6B, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0xF8, 0x72, 0xF7, 0xC0, 0x3F, 0x3F, 0xF8, 0x65, /* 0xE8-0xEB */ + 0xF8, 0x6F, 0xF8, 0x73, 0xF8, 0x6A, 0xF8, 0x63, /* 0xEC-0xEF */ + 0xF8, 0x6D, 0x3F, 0x3F, 0xF8, 0x6C, 0xF8, 0x71, /* 0xF0-0xF3 */ + 0xF8, 0x70, 0xF7, 0xC4, 0xF8, 0x68, 0xF8, 0x62, /* 0xF4-0xF7 */ + 0xF8, 0x66, 0xC6, 0x4E, 0xC6, 0x4F, 0xF8, 0x61, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0xF8, 0xE6, 0xF8, 0xDD, 0xF8, 0xE5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0xF8, 0xE2, 0xF8, 0xE3, 0xF8, 0xDC, 0xF8, 0xDF, /* 0x00-0x03 */ + 0xF8, 0xE7, 0xF8, 0xE1, 0xF8, 0xE0, 0xF8, 0xDE, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF8, 0xE4, 0x3F, 0x3F, 0xF9, 0x5D, /* 0x08-0x0B */ + 0x3F, 0x3F, 0xF9, 0x5E, 0x3F, 0x3F, 0xF9, 0x60, /* 0x0C-0x0F */ + 0xF9, 0x5F, 0xF9, 0x62, 0xF9, 0x61, 0xF9, 0x7C, /* 0x10-0x13 */ + 0xF9, 0x7B, 0xF9, 0xB7, 0x3F, 0x3F, 0xF9, 0xB8, /* 0x14-0x17 */ + 0x3F, 0x3F, 0xF9, 0xC5, 0xC6, 0x78, 0xC6, 0x7C, /* 0x18-0x1B */ + 0x3F, 0x3F, 0xF9, 0xCF, 0xC6, 0x7D, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0xB3, 0xBF, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0xC4, 0xD0, 0xF6, 0xC9, 0x3F, 0x3F, /* 0x78-0x7B */ + 0xC6, 0x50, 0xC6, 0x51, 0x3F, 0x3F, 0xB3, 0xC0, /* 0x7C-0x7F */ + + 0xE0, 0xEE, 0x3F, 0x3F, 0xB9, 0xA8, 0xE8, 0xF0, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xEC, 0xB0, 0xEC, 0xB1, /* 0x84-0x87 */ + 0xEC, 0xAF, 0xEF, 0xAB, 0xEF, 0xAA, 0xC2, 0x47, /* 0x88-0x8B */ + 0xF1, 0xDF, 0xEF, 0xAC, 0xF1, 0xDE, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0xF3, 0xF3, 0xC4, 0x51, 0xC4, 0x53, /* 0x90-0x93 */ + 0xF3, 0xF2, 0x3F, 0x3F, 0x3F, 0x3F, 0xC4, 0x52, /* 0x94-0x97 */ + 0x3F, 0x3F, 0xF5, 0xB1, 0xF5, 0xB3, 0xF5, 0xB2, /* 0x98-0x9B */ + 0xF6, 0xCA, 0xC5, 0x65, 0x3F, 0x3F, 0xC5, 0xEF, /* 0x9C-0x9F */ + 0xF8, 0xE8, 0xF9, 0x63, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xF9, 0xD2, 0xB3, 0xC1, 0x3F, 0x3F, 0xE4, 0xE5, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0xBE, 0xA2, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0xEC, 0xB3, 0xEC, 0xB2, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0xEF, 0xAD, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0xC4, 0x54, 0xC4, 0xD1, 0xF7, 0xC7, 0xF9, 0xCB, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xB3, 0xC2, /* 0xB8-0xBB */ + 0xBB, 0xF2, 0x3F, 0x3F, 0xBE, 0xA3, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0xF3, 0xF4, 0x3F, 0x3F, 0xF8, 0x74, 0xB6, 0xC0, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0xEF, 0xAE, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0xC6, 0x64, 0xB6, 0xC1, 0xBE, 0xA4, 0xC2, 0x48, /* 0xCC-0xCF */ + 0xF8, 0x75, 0xB6, 0xC2, 0x3F, 0x3F, 0xE8, 0xF1, /* 0xD0-0xD3 */ + 0xC0, 0x72, 0xEC, 0xB4, 0xEC, 0xB5, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0xC0, 0x71, 0x3F, 0x3F, 0xEF, 0xAF, 0xC2, 0x4C, /* 0xD8-0xDB */ + 0xC2, 0x4A, 0xC2, 0x4B, 0xC2, 0x49, 0xF1, 0xE0, /* 0xDC-0xDF */ + 0xC3, 0x5C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0xF5, 0xB5, 0xF5, 0xB4, 0xF5, 0xB7, 0xF5, 0xB6, /* 0xE4-0xE7 */ + 0xC4, 0xD2, 0x3F, 0x3F, 0x3F, 0x3F, 0xF6, 0xCB, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0xF6, 0xCD, 0xF6, 0xCC, 0xC5, 0x66, /* 0xEC-0xEF */ + 0xF7, 0xC8, 0x3F, 0x3F, 0xF8, 0x76, 0xF8, 0x77, /* 0xF0-0xF3 */ + 0xC5, 0xF0, 0xF9, 0x64, 0xF9, 0x7D, 0xC6, 0x75, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0xDC, 0xB0, 0xEC, 0xB6, 0xEF, 0xB0, /* 0xF8-0xFB */ + 0xF3, 0xF5, 0xE0, 0xEF, 0x3F, 0x3F, 0xEF, 0xB1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0xF1, 0xE2, 0xF1, 0xE1, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0x78, 0xC6, 0x52, /* 0x04-0x07 */ + 0x3F, 0x3F, 0xF9, 0x65, 0xF9, 0x7E, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xB9, 0xA9, 0xE8, 0xF2, /* 0x0C-0x0F */ + 0xE8, 0xF3, 0x3F, 0x3F, 0xEC, 0xB7, 0xB9, 0xAA, /* 0x10-0x13 */ + 0x3F, 0x3F, 0xC3, 0x5D, 0xF1, 0xE3, 0x3F, 0x3F, /* 0x14-0x17 */ + 0xF6, 0xCF, 0xC5, 0x67, 0xF6, 0xD0, 0xF6, 0xCE, /* 0x18-0x1B */ + 0xF8, 0x79, 0x3F, 0x3F, 0xF8, 0xE9, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0xB9, 0xAB, 0x3F, 0x3F, 0xEF, 0xB4, 0xEF, 0xB3, /* 0x20-0x23 */ + 0xEF, 0xB2, 0xF1, 0xE4, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0xF1, 0xE8, 0xF1, 0xE7, 0xF1, 0xE6, 0xF1, 0xE5, /* 0x28-0x2B */ + 0xC3, 0x5E, 0xF3, 0xF6, 0xF5, 0xB9, 0xC4, 0xD3, /* 0x2C-0x2F */ + 0xF5, 0xB8, 0xF6, 0xD1, 0xF7, 0xCB, 0xF7, 0xCA, /* 0x30-0x33 */ + 0xC5, 0xC4, 0xF7, 0xC9, 0xF8, 0x7C, 0xF8, 0x7B, /* 0x34-0x37 */ + 0xF8, 0x7A, 0x3F, 0x3F, 0x3F, 0x3F, 0xBB, 0xF3, /* 0x38-0x3B */ + 0x3F, 0x3F, 0xEC, 0xB8, 0xC2, 0x4D, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0xF3, 0xF7, 0xF3, 0xF8, 0xF7, 0xCC, 0xF8, 0x7D, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF8, 0xEA, 0xF9, 0x66, /* 0x44-0x47 */ + 0xF9, 0xB9, 0xF9, 0xD4, 0xBB, 0xF4, 0xC2, 0x4E, /* 0x48-0x4B */ + 0xF1, 0xE9, 0xF3, 0xF9, 0xF6, 0xD2, 0xF8, 0x7E, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xBE, 0xA6, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xEF, 0xB5, 0xF1, 0xEA, 0xF3, 0xFA, 0xF3, 0xFB, /* 0x54-0x57 */ + 0xF3, 0xFC, 0xF5, 0xBE, 0x3F, 0x3F, 0xF5, 0xBA, /* 0x58-0x5B */ + 0xC5, 0x68, 0xF5, 0xBD, 0xF5, 0xBC, 0xC4, 0xD4, /* 0x5C-0x5F */ + 0xF5, 0xBB, 0xC4, 0xD6, 0x3F, 0x3F, 0xC4, 0xD5, /* 0x60-0x63 */ + 0xF6, 0xD4, 0xF6, 0xD3, 0xC5, 0x69, 0xC5, 0x6A, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xC5, 0xC6, 0xF7, 0xCD, /* 0x68-0x6B */ + 0xC5, 0xC5, 0x3F, 0x3F, 0xF8, 0xA3, 0xF8, 0xA4, /* 0x6C-0x6F */ + 0xF8, 0xA2, 0xF8, 0xA1, 0xC6, 0x54, 0x3F, 0x3F, /* 0x70-0x73 */ + 0xF8, 0xEB, 0xF8, 0xEC, 0xF8, 0xED, 0xC6, 0x53, /* 0x74-0x77 */ + 0xF9, 0x67, 0xF9, 0x6A, 0xF9, 0x69, 0xF9, 0x68, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0xF9, 0xD3, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0xC0, 0x73, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0xC3, 0x65, 0xF5, 0xBF, 0xF6, 0xD5, 0x3F, 0x3F, /* 0x90-0x93 */ + 0xC5, 0xC7, 0xF7, 0xCE, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0xF9, 0xD5, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0xC0, 0x74, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0xEF, 0xB6, 0x3F, 0x3F, 0xF7, 0xCF, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0xF9, 0xA1, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0xC9, 0x4A, 0xDD, 0xFC, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x30-0x33 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x34-0x37 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x38-0x3B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x40-0x43 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x48-0x4B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x4C-0x4F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x54-0x57 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x58-0x5B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FE[512] = { + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x00-0x03 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x04-0x07 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x08-0x0B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x0C-0x0F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x10-0x13 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x14-0x17 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x18-0x1B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x1C-0x1F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x20-0x23 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x24-0x27 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x28-0x2B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x2C-0x2F */ + 0xA1, 0x4A, 0xA1, 0x57, 0x3F, 0x3F, 0xA1, 0x59, /* 0x30-0x33 */ + 0xA1, 0x5B, 0xA1, 0x5F, 0xA1, 0x60, 0xA1, 0x63, /* 0x34-0x37 */ + 0xA1, 0x64, 0xA1, 0x67, 0xA1, 0x68, 0xA1, 0x6B, /* 0x38-0x3B */ + 0xA1, 0x6C, 0xA1, 0x6F, 0xA1, 0x70, 0xA1, 0x73, /* 0x3C-0x3F */ + 0xA1, 0x74, 0xA1, 0x77, 0xA1, 0x78, 0xA1, 0x7B, /* 0x40-0x43 */ + 0xA1, 0x7C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x44-0x47 */ + 0x3F, 0x3F, 0xA1, 0xC6, 0xA1, 0xC7, 0xA1, 0xCA, /* 0x48-0x4B */ + 0xA1, 0xCB, 0xA1, 0xC8, 0xA1, 0xC9, 0xA1, 0x5C, /* 0x4C-0x4F */ + 0xA1, 0x4D, 0xA1, 0x4E, 0xA1, 0x4F, 0x3F, 0x3F, /* 0x50-0x53 */ + 0xA1, 0x51, 0xA1, 0x52, 0xA1, 0x53, 0xA1, 0x54, /* 0x54-0x57 */ + 0x3F, 0x3F, 0xA1, 0x7D, 0xA1, 0x7E, 0xA1, 0xA1, /* 0x58-0x5B */ + 0xA1, 0xA2, 0xA1, 0xA3, 0xA1, 0xA4, 0xA1, 0xCC, /* 0x5C-0x5F */ + 0xA1, 0xCD, 0xA1, 0xCE, 0xA1, 0xDE, 0xA1, 0xDF, /* 0x60-0x63 */ + 0xA1, 0xE0, 0xA1, 0xE1, 0xA1, 0xE2, 0x3F, 0x3F, /* 0x64-0x67 */ + 0xA2, 0x42, 0xA2, 0x4C, 0xA2, 0x4D, 0xA2, 0x4E, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FF[512] = { + 0x3F, 0x3F, 0xA1, 0x49, 0x3F, 0x3F, 0xA1, 0xAD, /* 0x00-0x03 */ + 0xA2, 0x43, 0xA2, 0x48, 0xA1, 0xAE, 0x3F, 0x3F, /* 0x04-0x07 */ + 0xA1, 0x5D, 0xA1, 0x5E, 0xA1, 0xAF, 0xA1, 0xCF, /* 0x08-0x0B */ + 0xA1, 0x41, 0xA1, 0xD0, 0xA1, 0x44, 0xA1, 0xFE, /* 0x0C-0x0F */ + 0xA2, 0xAF, 0xA2, 0xB0, 0xA2, 0xB1, 0xA2, 0xB2, /* 0x10-0x13 */ + 0xA2, 0xB3, 0xA2, 0xB4, 0xA2, 0xB5, 0xA2, 0xB6, /* 0x14-0x17 */ + 0xA2, 0xB7, 0xA2, 0xB8, 0xA1, 0x47, 0xA1, 0x46, /* 0x18-0x1B */ + 0xA1, 0xD5, 0xA1, 0xD7, 0xA1, 0xD6, 0xA1, 0x48, /* 0x1C-0x1F */ + 0xA2, 0x49, 0xA2, 0xCF, 0xA2, 0xD0, 0xA2, 0xD1, /* 0x20-0x23 */ + 0xA2, 0xD2, 0xA2, 0xD3, 0xA2, 0xD4, 0xA2, 0xD5, /* 0x24-0x27 */ + 0xA2, 0xD6, 0xA2, 0xD7, 0xA2, 0xD8, 0xA2, 0xD9, /* 0x28-0x2B */ + 0xA2, 0xDA, 0xA2, 0xDB, 0xA2, 0xDC, 0xA2, 0xDD, /* 0x2C-0x2F */ + 0xA2, 0xDE, 0xA2, 0xDF, 0xA2, 0xE0, 0xA2, 0xE1, /* 0x30-0x33 */ + 0xA2, 0xE2, 0xA2, 0xE3, 0xA2, 0xE4, 0xA2, 0xE5, /* 0x34-0x37 */ + 0xA2, 0xE6, 0xA2, 0xE7, 0xA2, 0xE8, 0x3F, 0x3F, /* 0x38-0x3B */ + 0xA2, 0x40, 0x3F, 0x3F, 0x3F, 0x3F, 0xA1, 0xC4, /* 0x3C-0x3F */ + 0x3F, 0x3F, 0xA2, 0xE9, 0xA2, 0xEA, 0xA2, 0xEB, /* 0x40-0x43 */ + 0xA2, 0xEC, 0xA2, 0xED, 0xA2, 0xEE, 0xA2, 0xEF, /* 0x44-0x47 */ + 0xA2, 0xF0, 0xA2, 0xF1, 0xA2, 0xF2, 0xA2, 0xF3, /* 0x48-0x4B */ + 0xA2, 0xF4, 0xA2, 0xF5, 0xA2, 0xF6, 0xA2, 0xF7, /* 0x4C-0x4F */ + 0xA2, 0xF8, 0xA2, 0xF9, 0xA2, 0xFA, 0xA2, 0xFB, /* 0x50-0x53 */ + 0xA2, 0xFC, 0xA2, 0xFD, 0xA2, 0xFE, 0xA3, 0x40, /* 0x54-0x57 */ + 0xA3, 0x41, 0xA3, 0x42, 0xA3, 0x43, 0xA1, 0x61, /* 0x58-0x5B */ + 0xA1, 0x55, 0xA1, 0x62, 0xA1, 0xE3, 0x3F, 0x3F, /* 0x5C-0x5F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x60-0x63 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x64-0x67 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x68-0x6B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x6C-0x6F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x70-0x73 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x74-0x77 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x78-0x7B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x7C-0x7F */ + + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x80-0x83 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x84-0x87 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x88-0x8B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x8C-0x8F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x90-0x93 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x94-0x97 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x98-0x9B */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0x9C-0x9F */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA0-0xA3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA4-0xA7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xA8-0xAB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xAC-0xAF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB0-0xB3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB4-0xB7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xB8-0xBB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xBC-0xBF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC0-0xC3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC4-0xC7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xC8-0xCB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xCC-0xCF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD0-0xD3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD4-0xD7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xD8-0xDB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xDC-0xDF */ + 0xA2, 0x46, 0xA2, 0x47, 0x3F, 0x3F, 0xA1, 0xC3, /* 0xE0-0xE3 */ + 0x3F, 0x3F, 0xA2, 0x44, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE4-0xE7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xE8-0xEB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xEC-0xEF */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF0-0xF3 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF4-0xF7 */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xF8-0xFB */ + 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, /* 0xFC-0xFF */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, NULL, u2c_02, u2c_03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, NULL, NULL, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, u2c_31, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, u2c_FA, NULL, NULL, NULL, u2c_FE, u2c_FF, }; + +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + uni2charset = page_uni2charset[ch]; + *outlen = 0; + if (uni2charset){ + if (boundlen <= 1) + return; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + *outlen = 1; + } else if (ch==0 && cl) + out[0] = cl; + else + out[0] = '?'; + (*outlen)++; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + unsigned char ch, cl; + struct nls_unicode *charset2uni; + + ch = rawstring[0]; + cl = rawstring[1]; + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl){ + *uni1 = charset2uni[cl].uni2; + *uni2 = charset2uni[cl].uni1; + *offset = 2; + } else{ + *uni1 = ch; + *uni2 = 0x00; + *offset = 1; + } + return; +} + +static void inc_use_count(void) +{ + MOD_INC_USE_COUNT; +} + +static void dec_use_count(void) +{ + MOD_DEC_USE_COUNT; +} + +static struct nls_table table = { + "cp950", + uni2char, + char2uni, + inc_use_count, + dec_use_count, + NULL +}; + +int init_nls_cp950(void) +{ + return register_nls(&table); +} + +#ifdef MODULE +int init_module(void) +{ + return init_nls_cp950(); +} + + +void cleanup_module(void) +{ + unregister_nls(&table); + return; +} +#endif + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-1.c linux.16p3/fs/nls/nls_iso8859-1.c --- linux.vanilla/fs/nls/nls_iso8859-1.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-1.c Wed Apr 19 13:58:56 2000 @@ -172,6 +172,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -184,8 +208,8 @@ static struct nls_table table = { "iso8859-1", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-15.c linux.16p3/fs/nls/nls_iso8859-15.c --- linux.vanilla/fs/nls/nls_iso8859-15.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-15.c Wed Apr 19 13:58:56 2000 @@ -212,6 +212,30 @@ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -224,8 +248,8 @@ static struct nls_table table = { "iso8859-15", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-2.c linux.16p3/fs/nls/nls_iso8859-2.c --- linux.vanilla/fs/nls/nls_iso8859-2.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-2.c Wed Apr 19 13:58:56 2000 @@ -244,6 +244,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -256,8 +280,8 @@ static struct nls_table table = { "iso8859-2", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-3.c linux.16p3/fs/nls/nls_iso8859-3.c --- linux.vanilla/fs/nls/nls_iso8859-3.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-3.c Wed Apr 19 13:58:56 2000 @@ -244,6 +244,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -256,8 +280,8 @@ static struct nls_table table = { "iso8859-3", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-4.c linux.16p3/fs/nls/nls_iso8859-4.c --- linux.vanilla/fs/nls/nls_iso8859-4.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-4.c Wed Apr 19 13:58:56 2000 @@ -244,6 +244,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -256,8 +280,8 @@ static struct nls_table table = { "iso8859-4", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-5.c linux.16p3/fs/nls/nls_iso8859-5.c --- linux.vanilla/fs/nls/nls_iso8859-5.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-5.c Wed Apr 19 13:58:56 2000 @@ -248,6 +248,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -260,8 +284,8 @@ static struct nls_table table = { "iso8859-5", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-6.c linux.16p3/fs/nls/nls_iso8859-6.c --- linux.vanilla/fs/nls/nls_iso8859-6.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-6.c Wed Apr 19 13:58:56 2000 @@ -208,6 +208,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -220,8 +244,8 @@ static struct nls_table table = { "iso8859-6", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-7.c linux.16p3/fs/nls/nls_iso8859-7.c --- linux.vanilla/fs/nls/nls_iso8859-7.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-7.c Wed Apr 19 13:58:56 2000 @@ -284,6 +284,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -296,8 +320,8 @@ static struct nls_table table = { "iso8859-7", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-8.c linux.16p3/fs/nls/nls_iso8859-8.c --- linux.vanilla/fs/nls/nls_iso8859-8.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-8.c Wed Apr 19 13:58:56 2000 @@ -248,6 +248,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -260,8 +284,8 @@ static struct nls_table table = { "iso8859-8", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_iso8859-9.c linux.16p3/fs/nls/nls_iso8859-9.c --- linux.vanilla/fs/nls/nls_iso8859-9.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_iso8859-9.c Wed Apr 19 13:58:56 2000 @@ -208,6 +208,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -220,8 +244,8 @@ static struct nls_table table = { "iso8859-9", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/nls/nls_koi8-r.c linux.16p3/fs/nls/nls_koi8-r.c --- linux.vanilla/fs/nls/nls_koi8-r.c Fri Apr 21 12:46:44 2000 +++ linux.16p3/fs/nls/nls_koi8-r.c Wed Apr 19 13:58:56 2000 @@ -320,6 +320,30 @@ }; #endif +static void uni2char(unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen) +{ + unsigned char *uni2charset; + + if (boundlen <= 0) + return; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + out[0] = '?'; + *outlen = 1; + return; +} + +static void char2uni(unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2) +{ + *uni1 = charset2uni[*rawstring].uni1; + *uni2 = charset2uni[*rawstring].uni2; + *offset = 1; + return; +} + static void inc_use_count(void) { MOD_INC_USE_COUNT; @@ -332,8 +356,8 @@ static struct nls_table table = { "koi8-r", - page_uni2charset, - charset2uni, + uni2char, + char2uni, inc_use_count, dec_use_count, NULL diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/ntfs/fs.c linux.16p3/fs/ntfs/fs.c --- linux.vanilla/fs/ntfs/fs.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/ntfs/fs.c Wed Apr 19 13:58:56 2000 @@ -360,8 +360,11 @@ if((vol->nct & (nct_uni_xlate | nct_map | nct_utf8))==0) /* default to UTF-8 */ vol->nct=nct_utf8; - if(!vol->nls_map) + if(!vol->nls_map){ vol->nls_map=load_nls_default(); + if (vol->nls_map) + vol->nct=nct_map | (vol->nct&nct_uni_xlate); + } return 1; needs_arg: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/ntfs/support.c linux.16p3/fs/ntfs/support.c --- linux.vanilla/fs/ntfs/support.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/ntfs/support.c Wed Apr 19 13:58:56 2000 @@ -218,7 +218,7 @@ int *out_len) { int i,o,val; - char *result,*buf; + char *result,*buf,tmp[20]; struct nls_table* nls=vol->nls_map; result=ntfs_malloc(in_len+1); @@ -237,11 +237,18 @@ continue; } }else{ - uni_page=nls->page_uni2charset[ch]; - if(uni_page && uni_page[cl]){ - result[o++]=uni_page[cl]; - continue; + int len, i1; + nls->uni2char(ch, cl, tmp, 20, &len); + if (len > 1){ + buf=ntfs_malloc(*out_len + len - 1); + memcpy(buf, result, o); + ntfs_free(result); + result=buf; + *out_len+=(len-1); } + for (i1=0;i1nct & nct_uni_xlate))goto inval; /* realloc */ @@ -290,11 +297,16 @@ *out=result=ntfs_malloc(2*in_len); if(!result)return ENOMEM; *out_len=in_len; - for(i=o=0;inct & nct_uni_xlate)==0){ - cl=nls->charset2uni[(unsigned char)in[i]].uni1; - ch=nls->charset2uni[(unsigned char)in[i]].uni2; + int len; + unsigned char clc=cl, chc=ch; + nls->char2uni(&in[i], &len, &chc, &clc); + cl = chc; + ch = clc; + *out_len -= (len-1); + i += (len-1); }else{ unsigned char c1,c2,c3; *out_len-=3; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/proc/array.c linux.16p3/fs/proc/array.c --- linux.vanilla/fs/proc/array.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/proc/array.c Mon May 15 16:35:08 2000 @@ -276,7 +276,8 @@ "disk_wblk %u %u %u %u\n" "page %u %u\n" #ifdef CONFIG_ARCH_S390 - "swap %u %u\n", + "swap %u %u\n" + "intr 1 0", #else "swap %u %u\n" "intr %u", @@ -291,7 +292,8 @@ "disk_wblk %u %u %u %u\n" "page %u %u\n" #ifdef CONFIG_ARCH_S390 - "swap %u %u\n", + "swap %u %u\n" + "intr 1 0", #else "swap %u %u\n" "intr %u", @@ -1464,7 +1466,7 @@ case PROC_PID_CPU: return 0; } - if ((current->fsuid == euid && ok) || capable(CAP_DAC_OVERRIDE)) + if(capable(CAP_DAC_OVERRIDE) || (current->fsuid == euid && ok)) return 0; return 1; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/proc/generic.c linux.16p3/fs/proc/generic.c --- linux.vanilla/fs/proc/generic.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/proc/generic.c Thu May 4 00:48:27 2000 @@ -198,9 +198,13 @@ { switch (orig) { case 0: + if (offset < 0) + return -EINVAL; file->f_pos = offset; return(file->f_pos); case 1: + if (offset + file->f_pos < 0) + return -EINVAL; file->f_pos += offset; return(file->f_pos); case 2: diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/proc/proc_tty.c linux.16p3/fs/proc/proc_tty.c --- linux.vanilla/fs/proc/proc_tty.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/proc/proc_tty.c Wed Apr 19 13:54:11 2000 @@ -93,7 +93,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } @@ -123,7 +123,7 @@ *eof = 1; if (off >= len+begin) return 0; - *start = page + (begin-off); + *start = page + (off-begin); return ((count < begin+len-off) ? count : begin+len-off); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/smbfs/cache.c linux.16p3/fs/smbfs/cache.c --- linux.vanilla/fs/smbfs/cache.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/smbfs/cache.c Wed Apr 19 14:19:17 2000 @@ -58,9 +58,9 @@ */ for (i = 0; i < cachep->pages; i++, index++) { #ifdef SMBFS_PARANOIA -if (index->block) -printk("smb_get_dircache: cache %s/%s has existing block!\n", -dentry->d_parent->d_name.name, dentry->d_name.name); + if (index->block) + printk(KERN_DEBUG "smb_get_dircache: cache %s/%s has existing block!\n", + dentry->d_parent->d_name.name, dentry->d_name.name); #endif offset = PAGE_SIZE + (i << PAGE_SHIFT); block = (struct cache_block *) get_cached_page(inode, @@ -182,8 +182,8 @@ goto out_full; index++; #ifdef SMBFS_PARANOIA -if (index->block) -printk("smb_add_to_cache: new index already has block!\n"); + if (index->block) + printk(KERN_DEBUG "smb_add_to_cache: new index already has block!\n"); #endif /* @@ -257,8 +257,8 @@ int result; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_refill_dircache: cache %s/%s, blocks=%d\n", -dentry->d_parent->d_name.name, dentry->d_name.name, cachep->pages); + printk(KERN_DEBUG "smb_refill_dircache: cache %s/%s, blocks=%d\n", + dentry->d_parent->d_name.name, dentry->d_name.name, cachep->pages); #endif /* * Fill the cache, starting at position 2. @@ -269,7 +269,7 @@ if (result < 0) { #ifdef SMBFS_PARANOIA -printk("smb_refill_dircache: readdir failed, result=%d\n", result); + printk(KERN_DEBUG "smb_refill_dircache: readdir failed, result=%d\n", result); #endif goto out; } @@ -281,7 +281,7 @@ if (!(inode->u.smbfs_i.cache_valid & SMB_F_CACHEVALID)) { #ifdef SMBFS_PARANOIA -printk("smb_refill_dircache: cache invalidated, retrying\n"); + printk(KERN_DEBUG "smb_refill_dircache: cache invalidated, retrying\n"); #endif goto retry; } @@ -290,6 +290,7 @@ if (!result) { cachep->valid = 1; + cachep->mtime = dentry->d_inode->i_mtime; } #ifdef SMBFS_DEBUG_VERBOSE printk("smb_refill_cache: cache %s/%s status=%d, entries=%d\n", diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/smbfs/dir.c linux.16p3/fs/smbfs/dir.c --- linux.vanilla/fs/smbfs/dir.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/smbfs/dir.c Wed Apr 19 14:19:17 2000 @@ -80,13 +80,28 @@ { struct dentry *dentry = filp->f_dentry; struct inode *dir = dentry->d_inode; - struct cache_head *cachep; + struct cache_head *cachep = NULL; int result; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_readdir: reading %s/%s, f_pos=%d\n", -dentry->d_parent->d_name.name, dentry->d_name.name, (int) filp->f_pos); + printk("smb_readdir: reading %s/%s, f_pos=%d\n", + dentry->d_parent->d_name.name, dentry->d_name.name, (int) filp->f_pos); #endif + + result = 0; + switch ((unsigned int) filp->f_pos) + { + case 0: + if (filldir(dirent, ".", 1, 0, dir->i_ino) < 0) + goto out; + filp->f_pos = 1; + case 1: + if (filldir(dirent, "..", 2, 1, + dentry->d_parent->d_inode->i_ino) < 0) + goto out; + filp->f_pos = 2; + } + /* * Make sure our inode is up-to-date. */ @@ -103,26 +118,16 @@ /* * Make sure the cache is up-to-date. */ - if (!cachep->valid) + if (!cachep->valid || + (cachep->mtime != dentry->d_inode->i_mtime && + filp->f_pos == 2)) { result = smb_refill_dircache(cachep, dentry); if (result) - goto out_free; + goto out; } result = 0; - switch ((unsigned int) filp->f_pos) - { - case 0: - if (filldir(dirent, ".", 1, 0, dir->i_ino) < 0) - goto out_free; - filp->f_pos = 1; - case 1: - if (filldir(dirent, "..", 2, 1, - dentry->d_parent->d_inode->i_ino) < 0) - goto out_free; - filp->f_pos = 2; - } while (1) { @@ -152,9 +157,10 @@ /* * Release the dircache. */ -out_free: - smb_free_dircache(cachep); out: + if (cachep) { + smb_free_dircache(cachep); + } return result; } @@ -172,16 +178,6 @@ printk("smb_dir_open: (%s/%s)\n", dentry->d_parent->d_name.name, file->f_dentry->d_name.name); #endif - /* - * Directory timestamps in the core protocol aren't updated - * when a file is added, so we give them a very short TTL. - */ - if (server->opt.protocol < SMB_PROTOCOL_LANMAN2) - { - unsigned long age = jiffies - dir->u.smbfs_i.oldmtime; - if (age > 2*HZ) - smb_invalid_dir_cache(dir); - } if (server->conn_pid) error = smb_revalidate_inode(dentry); @@ -231,8 +227,8 @@ if (is_bad_inode(inode)) { #ifdef SMBFS_PARANOIA -printk("smb_lookup_validate: %s/%s has dud inode\n", -dentry->d_parent->d_name.name, dentry->d_name.name); + printk(KERN_DEBUG "smb_lookup_validate: %s/%s has dud inode\n", + dentry->d_parent->d_name.name, dentry->d_name.name); #endif valid = 0; } else if (!valid) @@ -295,8 +291,8 @@ if (is_bad_inode(dentry->d_inode)) { #ifdef SMBFS_PARANOIA -printk("smb_delete_dentry: bad inode, unhashing %s/%s\n", -dentry->d_parent->d_name.name, dentry->d_name.name); + printk(KERN_DEBUG "smb_delete_dentry: bad inode, unhashing %s/%s\n", + dentry->d_parent->d_name.name, dentry->d_name.name); #endif d_drop(dentry); } @@ -337,9 +333,9 @@ error = smb_proc_getattr(dentry, &finfo); #ifdef SMBFS_PARANOIA -if (error && error != -ENOENT) -printk("smb_lookup: find %s/%s failed, error=%d\n", -dentry->d_parent->d_name.name, dentry->d_name.name, error); + if (error && error != -ENOENT) + printk(KERN_DEBUG "smb_lookup: find %s/%s failed, error=%d\n", + dentry->d_parent->d_name.name, dentry->d_name.name, error); #endif inode = NULL; @@ -404,8 +400,8 @@ if (have_id) { #ifdef SMBFS_PARANOIA -printk("smb_instantiate: %s/%s failed, error=%d, closing %u\n", -dentry->d_parent->d_name.name, dentry->d_name.name, error, fileid); + printk(KERN_DEBUG "smb_instantiate: %s/%s failed, error=%d, closing %u\n", + dentry->d_parent->d_name.name, dentry->d_name.name, error, fileid); #endif smb_close_fileid(dentry, fileid); } @@ -424,7 +420,6 @@ dentry->d_parent->d_name.name, dentry->d_name.name, mode); #endif - smb_invalid_dir_cache(dir); error = smb_proc_create(dentry, 0, CURRENT_TIME, &fileid); if (!error) { @@ -432,8 +427,8 @@ } else { #ifdef SMBFS_PARANOIA -printk("smb_create: %s/%s failed, error=%d\n", -dentry->d_parent->d_name.name, dentry->d_name.name, error); + printk(KERN_DEBUG "smb_create: %s/%s failed, error=%d\n", + dentry->d_parent->d_name.name, dentry->d_name.name, error); #endif } return error; @@ -445,7 +440,6 @@ { int error; - smb_invalid_dir_cache(dir); error = smb_proc_mkdir(dentry); if (!error) { @@ -472,7 +466,6 @@ if (!list_empty(&dentry->d_hash)) goto out; - smb_invalid_dir_cache(dir); error = smb_proc_rmdir(dentry); out: @@ -489,7 +482,6 @@ */ smb_close(dentry->d_inode); - smb_invalid_dir_cache(dir); error = smb_proc_unlink(dentry); if (!error) { @@ -518,8 +510,8 @@ if (error) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_rename: unlink %s/%s, error=%d\n", -new_dentry->d_parent->d_name.name, new_dentry->d_name.name, error); + printk(KERN_DEBUG "smb_rename: unlink %s/%s, error=%d\n", + new_dentry->d_parent->d_name.name, new_dentry->d_name.name, error); #endif goto out; } @@ -527,8 +519,6 @@ d_delete(new_dentry); } - smb_invalid_dir_cache(old_dir); - smb_invalid_dir_cache(new_dir); error = smb_proc_mv(old_dentry, new_dentry); if (!error) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/smbfs/file.c linux.16p3/fs/smbfs/file.c --- linux.vanilla/fs/smbfs/file.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/smbfs/file.c Wed Apr 19 14:19:17 2000 @@ -71,7 +71,7 @@ if (result < 0) { #ifdef SMBFS_PARANOIA -printk("smb_readpage_sync: %s/%s open failed, error=%d\n", +printk(KERN_DEBUG "smb_readpage_sync: %s/%s open failed, error=%d\n", dentry->d_parent->d_name.name, dentry->d_name.name, result); #endif goto io_error; @@ -112,7 +112,7 @@ pr_debug("SMB: smb_readpage %08lx\n", page_address(page)); #ifdef SMBFS_PARANOIA if (test_bit(PG_locked, &page->flags)) - printk("smb_readpage: page already locked!\n"); + printk(KERN_DEBUG "smb_readpage: page already locked!\n"); #endif set_bit(PG_locked, &page->flags); atomic_inc(&page->count); @@ -136,7 +136,7 @@ offset += page->offset; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_writepage_sync: file %s/%s, count=%d@%ld, wsize=%d\n", +printk(KERN_DEBUG "smb_writepage_sync: file %s/%s, count=%d@%ld, wsize=%d\n", dentry->d_parent->d_name.name, dentry->d_name.name, count, offset, wsize); #endif @@ -150,7 +150,7 @@ /* N.B. what if result < wsize?? */ #ifdef SMBFS_PARANOIA if (result < wsize) -printk("smb_writepage_sync: short write, wsize=%d, result=%d\n", wsize, result); +printk(KERN_DEBUG "smb_writepage_sync: short write, wsize=%d, result=%d\n", wsize, result); #endif buffer += wsize; offset += wsize; @@ -179,7 +179,7 @@ #ifdef SMBFS_PARANOIA if (test_bit(PG_locked, &page->flags)) - printk("smb_writepage: page already locked!\n"); + printk(KERN_DEBUG "smb_writepage: page already locked!\n"); #endif set_bit(PG_locked, &page->flags); atomic_inc(&page->count); @@ -208,7 +208,7 @@ ssize_t status; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_read: file %s/%s, count=%lu@%lu\n", +printk(KERN_DEBUG "smb_file_read: file %s/%s, count=%lu@%lu\n", dentry->d_parent->d_name.name, dentry->d_name.name, (unsigned long) count, (unsigned long) *ppos); #endif @@ -217,14 +217,14 @@ if (status) { #ifdef SMBFS_PARANOIA -printk("smb_file_read: %s/%s validation failed, error=%d\n", +printk(KERN_DEBUG "smb_file_read: %s/%s validation failed, error=%d\n", dentry->d_parent->d_name.name, dentry->d_name.name, status); #endif goto out; } #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_read: before read, size=%ld, pages=%ld, flags=%x, atime=%ld\n", +printk(KERN_DEBUG "smb_file_read: before read, size=%ld, pages=%ld, flags=%x, atime=%ld\n", dentry->d_inode->i_size, dentry->d_inode->i_nrpages, dentry->d_inode->i_flags, dentry->d_inode->i_atime); #endif @@ -240,7 +240,7 @@ int status; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_mmap: file %s/%s, address %lu - %lu\n", +printk(KERN_DEBUG "smb_file_mmap: file %s/%s, address %lu - %lu\n", dentry->d_parent->d_name.name, dentry->d_name.name, vma->vm_start, vma->vm_end); #endif @@ -248,7 +248,7 @@ if (status) { #ifdef SMBFS_PARANOIA -printk("smb_file_mmap: %s/%s validation failed, error=%d\n", +printk(KERN_DEBUG "smb_file_mmap: %s/%s validation failed, error=%d\n", dentry->d_parent->d_name.name, dentry->d_name.name, status); #endif goto out; @@ -268,7 +268,7 @@ ssize_t result; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_write: file %s/%s, count=%lu@%lu, pages=%ld\n", +printk(KERN_DEBUG "smb_file_write: file %s/%s, count=%lu@%lu, pages=%ld\n", dentry->d_parent->d_name.name, dentry->d_name.name, (unsigned long) count, (unsigned long) *ppos, dentry->d_inode->i_nrpages); #endif @@ -277,7 +277,7 @@ if (result) { #ifdef SMBFS_PARANOIA -printk("smb_file_write: %s/%s validation failed, error=%d\n", +printk(KERN_DEBUG "smb_file_write: %s/%s validation failed, error=%d\n", dentry->d_parent->d_name.name, dentry->d_name.name, result); #endif goto out; @@ -291,7 +291,7 @@ { result = generic_file_write(file, buf, count, ppos); #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_write: pos=%ld, size=%ld, mtime=%ld, atime=%ld\n", +printk(KERN_DEBUG "smb_file_write: pos=%ld, size=%ld, mtime=%ld, atime=%ld\n", (long) file->f_pos, dentry->d_inode->i_size, dentry->d_inode->i_mtime, dentry->d_inode->i_atime); #endif @@ -304,7 +304,7 @@ smb_file_open(struct inode *inode, struct file * file) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_open: opening %s/%s, d_count=%d\n", +printk(KERN_DEBUG "smb_file_open: opening %s/%s, d_count=%d\n", file->f_dentry->d_parent->d_name.name, file->f_dentry->d_name.name, file->f_dentry->d_count); #endif @@ -317,7 +317,7 @@ struct dentry * dentry = file->f_dentry; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_release: closing %s/%s, d_count=%d\n", +printk(KERN_DEBUG "smb_file_release: closing %s/%s, d_count=%d\n", dentry->d_parent->d_name.name, dentry->d_name.name, dentry->d_count); #endif @@ -340,7 +340,7 @@ int error = 0; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_file_permission: mode=%x, mask=%x\n", mode, mask); +printk(KERN_DEBUG "smb_file_permission: mode=%x, mask=%x\n", mode, mask); #endif /* Look at user permissions */ mode >>= 6; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/smbfs/inode.c linux.16p3/fs/smbfs/inode.c --- linux.vanilla/fs/smbfs/inode.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/smbfs/inode.c Wed Apr 19 14:19:17 2000 @@ -204,7 +204,7 @@ * subsequent lookup validations will fail. */ #ifdef SMBFS_PARANOIA -printk("smb_refresh_inode: %s/%s changed mode, %07o to %07o\n", +printk(KERN_DEBUG "smb_refresh_inode: %s/%s changed mode, %07o to %07o\n", dentry->d_parent->d_name.name, dentry->d_name.name, inode->i_mode, fattr.f_mode); #endif @@ -255,7 +255,7 @@ if (time_before(jiffies, inode->u.smbfs_i.oldmtime + HZ/10)) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_revalidate_inode: up-to-date, jiffies=%lu, oldtime=%lu\n", +printk(KERN_DEBUG "smb_revalidate_inode: up-to-date, jiffies=%lu, oldtime=%lu\n", jiffies, inode->u.smbfs_i.oldmtime); #endif goto out; @@ -270,14 +270,12 @@ if (error || inode->i_mtime != last_time) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_revalidate: %s/%s changed, old=%ld, new=%ld\n", +printk(KERN_DEBUG "smb_revalidate: %s/%s changed, old=%ld, new=%ld\n", dentry->d_parent->d_name.name, dentry->d_name.name, (long) last_time, (long) inode->i_mtime); #endif if (!S_ISDIR(inode->i_mode)) invalidate_inode_pages(inode); - else - smb_invalid_dir_cache(inode); } out: return error; @@ -304,7 +302,7 @@ { pr_debug("smb_delete_inode\n"); if (smb_close(ino)) - printk("smb_delete_inode: could not close inode %ld\n", + printk(KERN_DEBUG "smb_delete_inode: could not close inode %ld\n", ino->i_ino); clear_inode(ino); } @@ -381,13 +379,6 @@ mnt->dir_mode &= (S_IRWXU | S_IRWXG | S_IRWXO); mnt->dir_mode |= S_IFDIR; sb->u.smbfs_sb.mnt = mnt; - /* - * Display the enabled options - */ - if (mnt->version & SMB_FIX_OLDATTR) - printk("SMBFS: Using core getattr (Win 95 speedup)\n"); - else if (mnt->version & SMB_FIX_DIRATTR) - printk("SMBFS: Using dir ff getattr\n"); /* * Keep the super block locked while we get the root inode. @@ -419,7 +410,7 @@ printk(KERN_ERR "SMBFS: need mount version %d\n", SMB_MOUNT_VERSION); goto out_fail; out_no_data: - printk("smb_read_super: missing data argument\n"); + printk(KERN_DEBUG "smb_read_super: missing data argument\n"); out_fail: sb->s_dev = 0; MOD_DEC_USE_COUNT; @@ -471,7 +462,7 @@ if ((attr->ia_valid & ATTR_SIZE) != 0) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_notify_change: changing %s/%s, old size=%ld, new size=%ld\n", +printk(KERN_DEBUG "smb_notify_change: changing %s/%s, old size=%ld, new size=%ld\n", dentry->d_parent->d_name.name, dentry->d_name.name, (long) inode->i_size, (long) attr->ia_size); #endif @@ -510,9 +501,7 @@ if ((attr->ia_valid & ATTR_ATIME) != 0) { fattr.f_atime = attr->ia_atime; - /* Earlier protocols don't have an access time */ - if (server->opt.protocol >= SMB_PROTOCOL_LANMAN2) - changed = 1; + changed = 1; } if (changed) { @@ -529,8 +518,8 @@ if ((attr->ia_valid & ATTR_MODE) != 0) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_notify_change: %s/%s mode change, old=%x, new=%lx\n", -dentry->d_parent->d_name.name, dentry->d_name.name, fattr.f_mode,attr->ia_mode); + printk(KERN_DEBUG "smb_notify_change: %s/%s mode change, old=%x, new=%lx\n", + dentry->d_parent->d_name.name, dentry->d_name.name, fattr.f_mode,attr->ia_mode); #endif changed = 0; if (attr->ia_mode & S_IWUSR) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/smbfs/proc.c linux.16p3/fs/smbfs/proc.c --- linux.vanilla/fs/smbfs/proc.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/smbfs/proc.c Wed Apr 19 14:19:17 2000 @@ -12,6 +12,11 @@ * - don't sleep every time with win95 on a FINDNEXT * - fixed loop_count bug * - got rid of resume_key + * Jan 2000, cpg@aladdin.de + * - added posix semantics for unlink + * March 2000, tridge + * - removed support for old protocol levels. It didn't work anyway and + * was cluttering things up a lot. */ #include @@ -34,6 +39,7 @@ /* #define SMBFS_DEBUG_TIMESTAMP 1 */ /* #define SMBFS_DEBUG_VERBOSE 1 */ /* #define pr_debug printk */ +#define SMBFS_POSIX_UNLINK 1 #define SMB_VWV(packet) ((packet) + SMB_HEADER_LEN) #define SMB_CMD(packet) (*(packet+8)) @@ -49,39 +55,19 @@ static int smb_proc_setattr_ext(struct smb_sb_info *, struct inode *, struct smb_fattr *); -static inline int -min(int a, int b) -{ - return a < b ? a : b; -} - -static void -str_upper(char *name, int len) -{ - while (len--) - { - if (*name >= 'a' && *name <= 'z') - *name -= ('a' - 'A'); - name++; - } -} +static int +smb_proc_setattr_core(struct smb_sb_info *server, struct dentry *dentry, + __u16 attr); -static void -str_lower(char *name, int len) -{ - while (len--) - { - if (*name >= 'A' && *name <= 'Z') - *name += ('a' - 'A'); - name++; - } -} +static int +smb_proc_do_getattr(struct dentry *dir, struct smb_fattr *fattr,struct smb_sb_info *server); +/* reverse a string inline. This is used by the dircache walking routines */ static void reverse_string(char *buf, int len) { char c; char *end = buf+len-1; - while(buf < end) { + while (buf < end) { c = *buf; *(buf++) = *end; *(end--) = c; @@ -163,13 +149,8 @@ static char *smb_encode_path(struct smb_sb_info *server, char *buf, struct dentry *dir, struct qstr *name) { - char *start = buf; - buf += smb_build_path(dir, name, buf); - if (server->opt.protocol <= SMB_PROTOCOL_COREPLUS) - str_upper(start, buf - start); - return buf; } @@ -542,7 +523,7 @@ if (server->state == CONN_VALID) { #ifdef SMBFS_PARANOIA -printk("smb_retry: new pid=%d, generation=%d\n", +printk(KERN_DEBUG "smb_retry: new pid=%d, generation=%d\n", server->conn_pid, server->generation); #endif result = 1; @@ -587,7 +568,7 @@ if (smb_valid_packet(s->packet) != 0) { #ifdef SMBFS_PARANOIA -printk("smb_request_ok: invalid packet!\n"); +printk(KERN_DEBUG "smb_request_ok: invalid packet!\n"); #endif goto out; } @@ -601,7 +582,7 @@ { result = -smb_errno(s); if (!result) - printk("smb_request_ok: rcls=%d, err=%d mapped to 0\n", + printk(KERN_DEBUG "smb_request_ok: rcls=%d, err=%d mapped to 0\n", s->rcls, s->err); /* * Exit now even if the error was squashed ... @@ -630,7 +611,7 @@ int error; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_newconn: fd=%d, pid=%d\n", opt->fd, current->pid); +printk(KERN_DEBUG "smb_newconn: fd=%d, pid=%d\n", opt->fd, current->pid); #endif /* * Make sure we don't already have a pid ... @@ -644,6 +625,11 @@ !capable(CAP_SYS_ADMIN)) goto out; + if (opt->protocol < SMB_PROTOCOL_NT1) { + printk(KERN_NOTICE " smbfs: protocols older than NT1 are not suppported\n"); + goto out; + } + error = -EBADF; filp = fget(opt->fd); if (!filp) @@ -666,17 +652,16 @@ /* now that we have an established connection we can detect the server type and enable bug workarounds */ - if (server->opt.protocol == SMB_PROTOCOL_NT1 && - (server->opt.max_xmit < 0x1000) && + if ((server->opt.max_xmit < 0x1000) && !(server->opt.capabilities & SMB_CAP_NT_SMBS)) { server->mnt->version |= SMB_FIX_WIN95; #ifdef SMBFS_DEBUG_VERBOSE - printk("smb_newconn: detected WIN95 server\n"); + printk(KERN_NOTICE "smb_newconn: detected WIN95 server\n"); #endif } #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_newconn: protocol=%d, max_xmit=%d, pid=%d capabilities=0x%x\n", +printk(KERN_DEBUG "smb_newconn: protocol=%d, max_xmit=%d, pid=%d capabilities=0x%x\n", server->opt.protocol, server->opt.max_xmit, server->conn_pid, server->opt.capabilities); #endif @@ -701,7 +686,7 @@ __u8 *buf = server->packet; if (xmit_len > server->packet_size) -printk("smb_setup_header: Aieee, xmit len > packet! len=%d, size=%d\n", +printk(KERN_DEBUG "smb_setup_header: Aieee, xmit len > packet! len=%d, size=%d\n", xmit_len, server->packet_size); p = smb_encode_smb_length(p, xmit_len - 4); @@ -721,11 +706,8 @@ WSET(buf, smb_uid, server->opt.server_uid); WSET(buf, smb_mid, 1); - if (server->opt.protocol > SMB_PROTOCOL_CORE) - { - *(buf+smb_flg) = 0x8; - WSET(buf, smb_flg2, 0x3); - } + *(buf+smb_flg) = 0x8; + WSET(buf, smb_flg2, 0x3); *p++ = wct; /* wct */ p += 2 * wct; WSET(p, 0, bcc); @@ -784,7 +766,7 @@ (error == -EACCES || error == -ETXTBSY || error == -EROFS)) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_open: %s/%s R/W failed, error=%d, retrying R/O\n", +printk(KERN_DEBUG "smb_proc_open: %s/%s R/W failed, error=%d, retrying R/O\n", DENTRY_PATH(dentry), error); #endif mode = read_only; @@ -818,7 +800,7 @@ result = -ENOENT; if (!inode) { - printk("smb_open: no inode for dentry %s/%s\n", + printk(KERN_DEBUG "smb_open: no inode for dentry %s/%s\n", DENTRY_PATH(dentry)); goto out; } @@ -839,7 +821,7 @@ if (result) { #ifdef SMBFS_PARANOIA -printk("smb_open: %s/%s open failed, result=%d\n", +printk(KERN_DEBUG "smb_open: %s/%s open failed, result=%d\n", DENTRY_PATH(dentry), result); #endif goto out; @@ -858,7 +840,7 @@ inode->u.smbfs_i.access != SMB_O_RDWR) { #ifdef SMBFS_PARANOIA -printk("smb_open: %s/%s access denied, access=%x, wish=%x\n", +printk(KERN_DEBUG "smb_open: %s/%s access denied, access=%x, wish=%x\n", DENTRY_PATH(dentry), inode->u.smbfs_i.access, wish); #endif result = -EACCES; @@ -911,9 +893,7 @@ * If the file is open with write permissions, * update the time stamps to sync mtime and atime. */ - if ((server->opt.protocol >= SMB_PROTOCOL_LANMAN2) && - !(ino->u.smbfs_i.access == SMB_O_RDONLY)) - { + if (ino->u.smbfs_i.access != SMB_O_RDONLY) { struct smb_fattr fattr; smb_get_inode_attr(ino, &fattr); smb_proc_setattr_ext(server, ino, &fattr); @@ -923,11 +903,8 @@ ino->i_mtime); ino->u.smbfs_i.cache_valid &= ~SMB_F_LOCALWRITE; /* - * Force a revalidation after closing ... some servers - * don't post the size until the file has been closed. + * Force a revalidation after closing */ - if (server->opt.protocol < SMB_PROTOCOL_NT1) - ino->u.smbfs_i.oldmtime = 0; ino->u.smbfs_i.closed = jiffies; } return result; @@ -974,7 +951,7 @@ if (dentry->d_count <= 1) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_close_dentry: closing %s/%s, count=%d\n", +printk(KERN_DEBUG "smb_close_dentry: closing %s/%s, count=%d\n", DENTRY_PATH(dentry), dentry->d_count); #endif smb_proc_close_inode(server, ino); @@ -982,7 +959,7 @@ smb_unlock_server(server); } #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_close_dentry: closed %s/%s, count=%d\n", +printk(KERN_DEBUG "smb_close_dentry: closed %s/%s, count=%d\n", DENTRY_PATH(dentry), dentry->d_count); #endif } @@ -1042,7 +1019,7 @@ out: #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_read: file %s/%s, count=%d, result=%d\n", +printk(KERN_DEBUG "smb_proc_read: file %s/%s, count=%d, result=%d\n", DENTRY_PATH(dentry), count, result); #endif smb_unlock_server(server); @@ -1057,7 +1034,7 @@ __u8 *p; #if SMBFS_DEBUG_VERBOSE -printk("smb_proc_write: file %s/%s, count=%d@%ld, packet_size=%d\n", +printk(KERN_DEBUG "smb_proc_write: file %s/%s, count=%d@%ld, packet_size=%d\n", DENTRY_PATH(dentry), count, offset, server->packet_size); #endif smb_lock_server(server); @@ -1184,11 +1161,36 @@ return smb_proc_generic_command(dentry, SMBrmdir); } + +/* + * Note: called with the server locked. + * removes readonly attribute from a file. Used by unlink to give posix semantics + */ +static int +smb_set_rw(struct dentry *dentry,struct smb_sb_info *server) +{ + int result; + struct smb_fattr fattr; + + /* first get current attribute */ + + result = smb_proc_do_getattr(dentry, &fattr, server); + if (result < 0) return result; + + /* if RONLY attribute is set, remove it */ + if (fattr.attr & aRONLY) { /* read only attribute is set */ + fattr.attr &= ~aRONLY; + result = smb_proc_setattr_core(server, dentry, fattr.attr); + } + return result; +} + int smb_proc_unlink(struct dentry *dentry) { struct smb_sb_info *server = server_from_dentry(dentry); char *p; + int flag = 0; int result; smb_lock_server(server); @@ -1202,6 +1204,27 @@ if ((result = smb_request_ok(server, SMBunlink, 0, 0)) < 0) { +#if SMBFS_POSIX_UNLINK + if (result == -EACCES && !flag) { + /* Posix semantics is for the read-only state + of a file to be ignored in unlink(). In the + SMB world a unlink() is refused on a + read-only file. To make things easier for + unix users we try to override the files + permission if the unlink fails with the + right error. + + This introduces a race condition that could + lead to a file being written by someone who + shouldn't have access, but as far as I can + tell that is unavoidable */ + result = smb_set_rw(dentry,server); /* remove RONLY attribute */ + if (result == 0) { + flag = 1; + goto retry; /* and try again */ + } + } +#endif if (smb_retry(server)) goto retry; goto out; @@ -1285,178 +1308,10 @@ smb_finish_dirent(server, fattr); } -/* - * Note that we are now returning the name as a reference to avoid - * an extra copy, and that the upper/lower casing is done in place. - * - * Bugs Noted: - * (1) Pathworks servers may pad the name with extra spaces. - */ -static __u8 * -smb_decode_dirent(struct smb_sb_info *server, __u8 *p, - struct cache_dirent *entry) -{ - int len; - - /* - * SMB doesn't have a concept of inode numbers ... - */ - entry->ino = 0; - - p += SMB_STATUS_SIZE; /* reserved (search_status) */ - entry->name = p + 9; - len = strlen(entry->name); - if (len > 12) - { - len = 12; - } - /* - * Trim trailing blanks for Pathworks servers - */ - while (len > 2 && entry->name[len-1] == ' ') - len--; - entry->len = len; - - switch (server->opt.case_handling) - { - case SMB_CASE_UPPER: - str_upper(entry->name, len); - break; - case SMB_CASE_LOWER: - str_lower(entry->name, len); - break; - default: - break; - } - pr_debug("smb_decode_dirent: len=%d, name=%s\n", len, entry->name); - return p + 22; -} - -/* This routine is used to read in directory entries from the network. - Note that it is for short directory name seeks, i.e.: protocol < - SMB_PROTOCOL_LANMAN2 */ - -static int -smb_proc_readdir_short(struct smb_sb_info *server, struct dentry *dir, int fpos, - void *cachep) -{ - char *p; - int result; - int i, first, entries_seen, entries; - int entries_asked = (server->opt.max_xmit - 100) / SMB_DIRINFO_SIZE; - __u16 bcc; - __u16 count; - char status[SMB_STATUS_SIZE]; - static struct qstr mask = { "*.*", 3, 0 }; - -#ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_readdir_short: %s/%s, pos=%d\n", - DENTRY_PATH(dir), fpos); -#endif - - smb_lock_server(server); - - /* N.B. We need to reinitialize the cache to restart */ - retry: - smb_init_dircache(cachep); - first = 1; - entries = 0; - entries_seen = 2; /* implicit . and .. */ - - while (1) - { - p = smb_setup_header(server, SMBsearch, 2, 0); - WSET(server->packet, smb_vwv0, entries_asked); - WSET(server->packet, smb_vwv1, aDIR); - *p++ = 4; - if (first == 1) - { - p = smb_encode_path(server, p, dir, &mask); - *p++ = 5; - WSET(p, 0, 0); - p += 2; - first = 0; - } else - { - *p++ = 0; - *p++ = 5; - WSET(p, 0, SMB_STATUS_SIZE); - p += 2; - memcpy(p, status, SMB_STATUS_SIZE); - p += SMB_STATUS_SIZE; - } - - smb_setup_bcc(server, p); - - result = smb_request_ok(server, SMBsearch, 1, -1); - if (result < 0) - { - if ((server->rcls == ERRDOS) && - (server->err == ERRnofiles)) - break; - if (smb_retry(server)) - goto retry; - goto unlock_return; - } - p = SMB_VWV(server->packet); - count = WVAL(p, 0); - if (count <= 0) - break; - - result = -EIO; - bcc = WVAL(p, 2); - if (bcc != count * SMB_DIRINFO_SIZE + 3) - goto unlock_return; - p += 7; - - /* Read the last entry into the status field. */ - memcpy(status, - SMB_BUF(server->packet) + 3 + - (count - 1) * SMB_DIRINFO_SIZE, - SMB_STATUS_SIZE); - - /* Now we are ready to parse smb directory entries. */ - - for (i = 0; i < count; i++) - { - struct cache_dirent this_ent, *entry = &this_ent; - - p = smb_decode_dirent(server, p, entry); - if (entries_seen == 2 && entry->name[0] == '.') - { - if (entry->len == 1) - continue; - if (entry->name[1] == '.' && entry->len == 2) - continue; - } - if (entries_seen >= fpos) - { - pr_debug("smb_proc_readdir: fpos=%u\n", - entries_seen); - smb_add_to_cache(cachep, entry, entries_seen); - entries++; - } else - { -#ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_readdir: skipped, seen=%d, i=%d, fpos=%d\n", -entries_seen, i, fpos); -#endif - } - entries_seen++; - } - } - result = entries; - - unlock_return: - smb_unlock_server(server); - return result; -} /* - * Interpret a long filename structure using the specified info level: - * level 1 for anything below NT1 protocol - * level 260 for NT1 protocol - * + * Interpret a long filename structure using info level 260 + * We return a reference to the name string to avoid copying, and perform * any needed upper/lower casing in place. @@ -1465,7 +1320,7 @@ */ static char * smb_decode_long_dirent(struct smb_sb_info *server, char *p, - struct cache_dirent *entry, int level) + struct cache_dirent *entry) { char *result; unsigned int len = 0; @@ -1475,46 +1330,18 @@ */ entry->ino = 0; - switch (level) - { - case 1: - len = *((unsigned char *) p + 22); - entry->len = len; - entry->name = p + 23; - result = p + 24 + len; - break; - - case 260: /* SMB_FIND_FILE_BOTH_DIRECTORY_INFO = 0x104 */ - result = p + WVAL(p, 0); - len = DVAL(p, 60); - if (len > 255) len = 255; - /* NT4 null terminates */ - entry->name = p + 94; - if (len && entry->name[len-1] == '\0') - len--; - entry->len = len; + result = p + WVAL(p, 0); + len = DVAL(p, 60); + if (len > 255) len = 255; + /* NT4 null terminates */ + entry->name = p + 94; + if (len && entry->name[len-1] == '\0') + len--; + entry->len = len; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_decode_long_dirent: info 260 at %p, len=%d, name=%s\n", - p, entry->len, entry->name); + printk(KERN_DEBUG "smb_decode_long_dirent: info 260 at %p, len=%d, name=%s\n", + p, entry->len, entry->name); #endif - break; - - default: - printk("smb_decode_long_dirent: Unknown level %d\n", level); - result = p + WVAL(p, 0); - } - - switch (server->opt.case_handling) - { - case SMB_CASE_UPPER: - str_upper(entry->name, len); - break; - case SMB_CASE_LOWER: - str_lower(entry->name, len); - break; - default: - break; - } return result; } @@ -1539,8 +1366,6 @@ char *p, *mask, *param = server->temp_buf; __u16 command; int first, entries, entries_seen; - - /* Both NT and OS/2 accept info level 1 (but see note below). */ int info_level = 260; const int max_matches = 512; @@ -1555,12 +1380,6 @@ int mask_len, i, result; static struct qstr star = { "*", 1, 0 }; - /* - * use info level 1 for older servers that don't do 260 - */ - if (server->opt.protocol < SMB_PROTOCOL_NT1) - info_level = 1; - smb_lock_server(server); retry: @@ -1571,7 +1390,7 @@ mask_len = smb_encode_path(server, mask, dir, &star) - mask; first = 1; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_readdir_long: starting fpos=%d, mask=%s\n", fpos, mask); +printk(KERN_DEBUG "smb_proc_readdir_long: starting fpos=%d, mask=%s\n", fpos, mask); #endif /* * We must reinitialize the dircache when retrying. @@ -1609,7 +1428,7 @@ command = TRANSACT2_FINDNEXT; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_readdir_long: handle=0x%X, mask=%s\n", +printk(KERN_DEBUG "smb_proc_readdir_long: handle=0x%X, mask=%s\n", ff_dir_handle, mask); #endif WSET(param, 0, ff_dir_handle); /* search handle */ @@ -1630,12 +1449,12 @@ if (smb_retry(server)) { #ifdef SMBFS_PARANOIA -printk("smb_proc_readdir_long: error=%d, retrying\n", result); +printk(KERN_DEBUG "smb_proc_readdir_long: error=%d, retrying\n", result); #endif goto retry; } #ifdef SMBFS_PARANOIA -printk("smb_proc_readdir_long: error=%d, breaking\n", result); +printk(KERN_DEBUG "smb_proc_readdir_long: error=%d, breaking\n", result); #endif entries = result; break; @@ -1653,7 +1472,7 @@ if (server->rcls != 0) { #ifdef SMBFS_PARANOIA -printk("smb_proc_readdir_long: name=%s, entries=%d, rcls=%d, err=%d\n", +printk(KERN_DEBUG "smb_proc_readdir_long: name=%s, entries=%d, rcls=%d, err=%d\n", mask, entries, server->rcls, server->err); #endif entries = -smb_errno(server); @@ -1685,8 +1504,7 @@ { struct cache_dirent this_ent, *entry = &this_ent; - p = smb_decode_long_dirent(server, p, entry, - info_level); + p = smb_decode_long_dirent(server, p, entry); /* ignore . and .. from the server */ if (entries_seen == 2 && entry->name[0] == '.') @@ -1705,7 +1523,7 @@ } #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_readdir_long: received %d entries, eos=%d\n", +printk(KERN_DEBUG "smb_proc_readdir_long: received %d entries, eos=%d\n", ff_searchcount, ff_eos); #endif first = 0; @@ -1722,98 +1540,7 @@ struct smb_sb_info *server; server = server_from_dentry(dir); - if (server->opt.protocol >= SMB_PROTOCOL_LANMAN2) - return smb_proc_readdir_long(server, dir, fpos, cachep); - else - return smb_proc_readdir_short(server, dir, fpos, cachep); -} - -/* - * This version uses the trans2 TRANSACT2_FINDFIRST message - * to get the attribute data. - * Note: called with the server locked. - * - * Bugs Noted: - */ -static int -smb_proc_getattr_ff(struct smb_sb_info *server, struct dentry *dentry, - struct smb_fattr *fattr) -{ - char *param = server->temp_buf, *mask = param + 12; - __u16 date, time; - unsigned char *resp_data = NULL; - unsigned char *resp_param = NULL; - int resp_data_len = 0; - int resp_param_len = 0; - int mask_len, result; - -retry: - mask_len = smb_encode_path(server, mask, dentry, NULL) - mask; -#ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_getattr_ff: name=%s, len=%d\n", mask, mask_len); -#endif - WSET(param, 0, aSYSTEM | aHIDDEN | aDIR); - WSET(param, 2, 1); /* max count */ - WSET(param, 4, 1); /* close after this call */ - WSET(param, 6, 1); /* info_level */ - DSET(param, 8, 0); - - result = smb_trans2_request(server, TRANSACT2_FINDFIRST, - 0, NULL, 12 + mask_len + 1, param, - &resp_data_len, &resp_data, - &resp_param_len, &resp_param); - if (result < 0) - { - if (smb_retry(server)) - goto retry; - goto out; - } - if (server->rcls != 0) - { - result = -smb_errno(server); -#ifdef SMBFS_PARANOIA -if (result != -ENOENT) -printk("smb_proc_getattr_ff: error for %s, rcls=%d, err=%d\n", -mask, server->rcls, server->err); -#endif - goto out; - } - /* Make sure we got enough data ... */ - result = -EINVAL; - if (resp_data_len < 22 || WVAL(resp_param, 2) != 1) - { -#ifdef SMBFS_PARANOIA -printk("smb_proc_getattr_ff: bad result for %s, len=%d, count=%d\n", -mask, resp_data_len, WVAL(resp_param, 2)); -#endif - goto out; - } - - /* - * Decode the response into the fattr ... - */ - date = WVAL(resp_data, 0); - time = WVAL(resp_data, 2); - fattr->f_ctime = date_dos2unix(server, date, time); - - date = WVAL(resp_data, 4); - time = WVAL(resp_data, 6); - fattr->f_atime = date_dos2unix(server, date, time); - - date = WVAL(resp_data, 8); - time = WVAL(resp_data, 10); - fattr->f_mtime = date_dos2unix(server, date, time); -#ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_getattr_ff: name=%s, date=%x, time=%x, mtime=%ld\n", -mask, date, time, fattr->f_mtime); -#endif - fattr->f_size = DVAL(resp_data, 12); - /* ULONG allocation size */ - fattr->attr = WVAL(resp_data, 20); - result = 0; - -out: - return result; + return smb_proc_readdir_long(server, dir, fpos, cachep); } /* @@ -1839,12 +1566,21 @@ goto out; } fattr->attr = WVAL(server->packet, smb_vwv0); - fattr->f_mtime = local2utc(server, DVAL(server->packet, smb_vwv1)); - fattr->f_size = DVAL(server->packet, smb_vwv3); - fattr->f_ctime = fattr->f_mtime; + fattr->f_ctime = local2utc(server, DVAL(server->packet, smb_vwv1)); + + /* uggh. If its a directory then its a ctime, otherwise its a + mtime. In order for the dircache to work with Win9X we + have to set the mtime to the current time for directories */ + if (fattr->attr & aDIR) { + fattr->f_mtime = CURRENT_TIME; + } else { + fattr->f_mtime = fattr->f_ctime; + } + fattr->f_atime = fattr->f_mtime; + fattr->f_size = DVAL(server->packet, smb_vwv3); #ifdef SMBFS_DEBUG_TIMESTAMP -printk("getattr_core: %s/%s, mtime=%ld\n", +printk(KERN_DEBUG "getattr_core: %s/%s, mtime=%ld\n", DENTRY_PATH(dir), fattr->f_mtime); #endif result = 0; @@ -1890,7 +1626,7 @@ if (server->rcls != 0) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_getattr_trans2: for %s: result=%d, rcls=%d, err=%d\n", +printk(KERN_DEBUG "smb_proc_getattr_trans2: for %s: result=%d, rcls=%d, err=%d\n", ¶m[6], result, server->rcls, server->err); #endif result = -smb_errno(server); @@ -1900,7 +1636,7 @@ if (resp_data_len < 22) { #ifdef SMBFS_PARANOIA -printk("smb_proc_getattr_trans2: not enough data for %s, len=%d\n", +printk(KERN_DEBUG "smb_proc_getattr_trans2: not enough data for %s, len=%d\n", ¶m[6], resp_data_len); #endif goto out; @@ -1926,7 +1662,7 @@ time = WVAL(resp_data, 8 + off_time); attr->f_mtime = date_dos2unix(server, date, time); #ifdef SMBFS_DEBUG_TIMESTAMP -printk("getattr_trans2: %s/%s, date=%x, time=%x, mtime=%ld\n", +printk(KERN_DEBUG "getattr_trans2: %s/%s, date=%x, time=%x, mtime=%ld\n", DENTRY_PATH(dir), date, time, attr->f_mtime); #endif attr->f_size = DVAL(resp_data, 12); @@ -1937,35 +1673,41 @@ return result; } -int -smb_proc_getattr(struct dentry *dir, struct smb_fattr *fattr) +/* + * Note: called with the server locked. + * + * get the file attribute + */ +static int +smb_proc_do_getattr(struct dentry *dir, struct smb_fattr *fattr,struct smb_sb_info *server) { - struct smb_sb_info *server = server_from_dentry(dir); int result; - smb_lock_server(server); smb_init_dirent(server, fattr); /* * Select whether to use core or trans2 getattr. - */ - if (server->opt.protocol >= SMB_PROTOCOL_LANMAN2) { - /* - * Win 95 appears to break with the trans2 getattr. - */ - if (server->mnt->version & (SMB_FIX_OLDATTR|SMB_FIX_WIN95)) - goto core_attr; - if (server->mnt->version & SMB_FIX_DIRATTR) - result = smb_proc_getattr_ff(server, dir, fattr); - else - result = smb_proc_getattr_trans2(server, dir, fattr); - } else { - core_attr: + * Win 95 appears to break with the trans2 getattr. + */ + if (server->mnt->version & SMB_FIX_WIN95) { result = smb_proc_getattr_core(server, dir, fattr); + } else { + result = smb_proc_getattr_trans2(server, dir, fattr); } smb_finish_dirent(server, fattr); + return result; +} + + +int +smb_proc_getattr(struct dentry *dir, struct smb_fattr *fattr) +{ + struct smb_sb_info *server = server_from_dentry(dir); + int result; + smb_lock_server(server); + result = smb_proc_do_getattr(dir, fattr, server); smb_unlock_server(server); return result; } @@ -2029,7 +1771,7 @@ int result; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_setattr: setting %s/%s, open=%d\n", +printk(KERN_DEBUG "smb_proc_setattr: setting %s/%s, open=%d\n", DENTRY_PATH(dir), smb_is_open(dir->d_inode)); #endif smb_lock_server(server); @@ -2062,7 +1804,7 @@ WSET(server->packet, smb_vwv5, date); WSET(server->packet, smb_vwv6, time); #ifdef SMBFS_DEBUG_TIMESTAMP -printk("smb_proc_setattr_ext: date=%d, time=%d, mtime=%ld\n", +printk(KERN_DEBUG "smb_proc_setattr_ext: date=%d, time=%d, mtime=%ld\n", date, time, fattr->f_mtime); #endif @@ -2112,7 +1854,7 @@ WSET(data, 8, date); WSET(data, 10, time); #ifdef SMBFS_DEBUG_TIMESTAMP -printk("setattr_trans2: %s/%s, date=%x, time=%x, mtime=%ld\n", +printk(KERN_DEBUG "setattr_trans2: %s/%s, date=%x, time=%x, mtime=%ld\n", DENTRY_PATH(dir), date, time, fattr->f_mtime); #endif DSET(data, 12, 0); /* size */ @@ -2159,13 +1901,12 @@ int result; #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_proc_settime: setting %s/%s, open=%d\n", +printk(KERN_DEBUG "smb_proc_settime: setting %s/%s, open=%d\n", DENTRY_PATH(dentry), smb_is_open(inode)); #endif smb_lock_server(server); /* setting the time on a Win95 server fails (tridge) */ - if (server->opt.protocol >= SMB_PROTOCOL_LANMAN2 && - !(server->mnt->version & SMB_FIX_WIN95)) + if (!(server->mnt->version & SMB_FIX_WIN95)) { if (smb_is_open(inode) && inode->u.smbfs_i.access != SMB_O_RDONLY) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/smbfs/sock.c linux.16p3/fs/smbfs/sock.c --- linux.vanilla/fs/smbfs/sock.c Fri Apr 21 12:46:45 2000 +++ linux.16p3/fs/smbfs/sock.c Wed Apr 19 14:22:00 2000 @@ -119,7 +119,7 @@ if (job->sk->dead) { #ifdef SMBFS_PARANOIA - printk("smb_data_callback: sock dead!\n"); + printk(KERN_DEBUG "smb_data_callback: sock dead!\n"); #endif break; } @@ -182,7 +182,7 @@ { #ifdef SMBFS_PARANOIA if (!smb_valid_socket(file->f_dentry->d_inode)) - printk("smb_server_sock: bad socket!\n"); + printk(KERN_DEBUG "smb_server_sock: bad socket!\n"); #endif return &file->f_dentry->d_inode->u.socket_i; } @@ -201,7 +201,7 @@ socket = server_sock(server); if (!socket) { - printk("smb_catch_keepalive: did not get valid server!\n"); + printk(KERN_DEBUG "smb_catch_keepalive: did not get valid server!\n"); server->data_ready = NULL; goto out; } @@ -243,21 +243,21 @@ socket = server_sock(server); if (!socket) { - printk("smb_dont_catch_keepalive: did not get valid server!\n"); + printk(KERN_DEBUG "smb_dont_catch_keepalive: did not get valid server!\n"); goto out; } sk = socket->sk; if (sk == NULL) { - printk("smb_dont_catch_keepalive: sk == NULL"); + printk(KERN_DEBUG "smb_dont_catch_keepalive: sk == NULL"); goto out; } /* Is this really an error?? */ if (server->data_ready == NULL) { - printk("smb_dont_catch_keepalive: " + printk(KERN_DEBUG "smb_dont_catch_keepalive: " "server->data_ready == NULL\n"); goto out; } @@ -291,11 +291,11 @@ if (file) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_close_socket: closing socket %p\n", server_sock(server)); +printk(KERN_DEBUG "smb_close_socket: closing socket %p\n", server_sock(server)); #endif #ifdef SMBFS_PARANOIA if (server_sock(server)->sk->data_ready == smb_data_ready) -printk("smb_close_socket: still catching keepalives!\n"); +printk(KERN_DEBUG "smb_close_socket: still catching keepalives!\n"); #endif server->sock_file = NULL; fput(file); @@ -372,7 +372,7 @@ if (result < 0) { #ifdef SMBFS_PARANOIA -printk("smb_get_length: recv error = %d\n", -result); +printk(KERN_DEBUG "smb_get_length: recv error = %d\n", -result); #endif return result; } @@ -388,7 +388,7 @@ default: #ifdef SMBFS_PARANOIA -printk("smb_get_length: Invalid NBT packet, code=%x\n", peek_buf[0]); +printk(KERN_DEBUG "smb_get_length: Invalid NBT packet, code=%x\n", peek_buf[0]); #endif return -EIO; } @@ -449,7 +449,7 @@ if (result < 0) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_receive: receive error: %d\n", result); +printk(KERN_DEBUG "smb_receive: receive error: %d\n", result); #endif goto out; } @@ -458,7 +458,7 @@ #ifdef SMBFS_DEBUG_VERBOSE if (server->rcls != 0) -printk("smb_receive: rcls=%d, err=%d\n", server->rcls, server->err); +printk(KERN_DEBUG "smb_receive: rcls=%d, err=%d\n", server->rcls, server->err); #endif out: return result; @@ -522,7 +522,7 @@ if (parm_count == parm_tot && data_count == data_tot) { #ifdef SMBFS_DEBUG_VERBOSE -printk("smb_receive_trans2: fast track, parm=%u %u %u, data=%u %u %u\n", +printk(KERN_DEBUG "smb_receive_trans2: fast track, parm=%u %u %u, data=%u %u %u\n", parm_disp, parm_offset, parm_count, data_disp, data_offset, data_count); #endif *parm = base + parm_offset; @@ -562,7 +562,7 @@ memcpy(*data + data_disp, base + data_offset, data_count); #ifdef SMBFS_PARANOIA -printk("smb_receive_trans2: copied, parm=%u of %u, data=%u of %u\n", +printk(KERN_DEBUG "smb_receive_trans2: copied, parm=%u of %u, data=%u of %u\n", parm_len, parm_tot, data_len, data_tot); #endif /* @@ -587,7 +587,7 @@ } else { #ifdef SMBFS_PARANOIA -printk("smb_receive_trans2: copying data, old size=%d, new size=%u\n", +printk(KERN_DEBUG "smb_receive_trans2: copying data, old size=%d, new size=%u\n", server->packet_size, buf_len); #endif memcpy(inbuf, rcv_buf, parm_len + data_len); @@ -603,23 +603,23 @@ out_no_mem: #ifdef SMBFS_PARANOIA - printk("smb_receive_trans2: couldn't allocate data area\n"); + printk(KERN_DEBUG "smb_receive_trans2: couldn't allocate data area\n"); #endif result = -ENOMEM; goto out; out_too_long: - printk("smb_receive_trans2: data/param too long, data=%d, parm=%d\n", + printk(KERN_DEBUG "smb_receive_trans2: data/param too long, data=%d, parm=%d\n", data_tot, parm_tot); goto out_error; out_data_grew: - printk("smb_receive_trans2: data/params grew!\n"); + printk(KERN_DEBUG "smb_receive_trans2: data/params grew!\n"); goto out_error; out_bad_parm: - printk("smb_receive_trans2: invalid parms, disp=%d, cnt=%d, tot=%d\n", + printk(KERN_DEBUG "smb_receive_trans2: invalid parms, disp=%d, cnt=%d, tot=%d\n", parm_disp, parm_count, parm_tot); goto out_error; out_bad_data: - printk("smb_receive_trans2: invalid data, disp=%d, cnt=%d, tot=%d\n", + printk(KERN_DEBUG "smb_receive_trans2: invalid data, disp=%d, cnt=%d, tot=%d\n", data_disp, data_count, data_tot); out_error: result = -EIO; @@ -684,7 +684,7 @@ int result2 = smb_catch_keepalive(server); if (result2 < 0) { - printk("smb_request: catch keepalive failed\n"); + printk(KERN_DEBUG "smb_request: catch keepalive failed\n"); result = result2; } } @@ -696,7 +696,7 @@ if (server->rcls) { int error = smb_errno(server); if (error == EBADSLT) { - printk("smb_request: tree ID invalid\n"); + printk(KERN_DEBUG "smb_request: tree ID invalid\n"); result = error; goto bad_conn; } @@ -708,16 +708,16 @@ bad_conn: #ifdef SMBFS_PARANOIA -printk("smb_request: result %d, setting invalid\n", result); +printk(KERN_DEBUG "smb_request: result %d, setting invalid\n", result); #endif server->state = CONN_INVALID; smb_invalidate_inodes(server); goto out; bad_no_packet: - printk("smb_request: no packet!\n"); + printk(KERN_DEBUG "smb_request: no packet!\n"); goto out; bad_no_conn: - printk("smb_request: connection %d not valid!\n", server->state); + printk(KERN_DEBUG "smb_request: connection %d not valid!\n", server->state); goto out; } @@ -879,7 +879,7 @@ if (server->rcls) { int error = smb_errno(server); if (error == EBADSLT) { - printk("smb_request: tree ID invalid\n"); + printk(KERN_DEBUG "smb_request: tree ID invalid\n"); result = error; goto bad_conn; } @@ -890,7 +890,7 @@ bad_conn: #ifdef SMBFS_PARANOIA -printk("smb_trans2_request: result=%d, setting invalid\n", result); +printk(KERN_DEBUG "smb_trans2_request: result=%d, setting invalid\n", result); #endif server->state = CONN_INVALID; smb_invalidate_inodes(server); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/vfat/namei.c linux.16p3/fs/vfat/namei.c --- linux.vanilla/fs/vfat/namei.c Fri Apr 21 12:46:46 2000 +++ linux.16p3/fs/vfat/namei.c Wed Apr 19 13:58:56 2000 @@ -675,10 +675,11 @@ ip += 4; i += 4; } else { - *op++ = nls->charset2uni[*ip].uni1; - *op++ = nls->charset2uni[*ip].uni2; - ip++; - i++; + int llen; + nls->char2uni(ip, &llen, op, op+1); + op += 2; + ip += llen; + i += llen; } } } else { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-alpha/byteorder.h linux.16p3/include/asm-alpha/byteorder.h --- linux.vanilla/include/asm-alpha/byteorder.h Fri Apr 21 12:46:47 2000 +++ linux.16p3/include/asm-alpha/byteorder.h Mon May 1 00:58:10 2000 @@ -7,7 +7,7 @@ with the standard macros. And since it can schedule, it does even better in the end. */ -#if defined(__GNUC__) && __GNUC_MINOR__ < 91 +#if defined(__GNUC__) && __GNUC__ == 2 && __GNUC_MINOR__ < 91 static __inline__ __const__ __u32 ___arch__swab32(__u32 x) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-alpha/compiler.h linux.16p3/include/asm-alpha/compiler.h --- linux.vanilla/include/asm-alpha/compiler.h Fri Apr 21 12:46:47 2000 +++ linux.16p3/include/asm-alpha/compiler.h Mon May 1 00:58:10 2000 @@ -13,7 +13,7 @@ * EGCS (of varying versions) does a good job of using insxl and extxl. */ -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) #define __kernel_insbl(val, shift) \ (((unsigned long)(val) & 0xfful) << ((shift) * 8)) #define __kernel_inswl(val, shift) \ @@ -29,7 +29,7 @@ __kir; }) #endif -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 92 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 92) #define __kernel_extbl(val, shift) (((val) >> (((shift) & 7) * 8)) & 0xfful) #define __kernel_extwl(val, shift) (((val) >> (((shift) & 7) * 8)) & 0xfffful) #else diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-alpha/string.h linux.16p3/include/asm-alpha/string.h --- linux.vanilla/include/asm-alpha/string.h Fri Apr 21 12:46:47 2000 +++ linux.16p3/include/asm-alpha/string.h Mon May 1 00:58:10 2000 @@ -14,7 +14,7 @@ /* For backward compatibility with modules. Unused otherwise. */ extern void * __memcpy(void *, const void *, size_t); -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) #define memcpy __builtin_memcpy #endif @@ -22,7 +22,7 @@ extern void * __constant_c_memset(void *, unsigned long, size_t); extern void * __memset(void *, int, size_t); -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) #define memset(s, c, n) \ (__builtin_constant_p(c) \ ? (__builtin_constant_p(n) && (c) == 0 \ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-alpha/unaligned.h linux.16p3/include/asm-alpha/unaligned.h --- linux.vanilla/include/asm-alpha/unaligned.h Fri Apr 21 12:46:47 2000 +++ linux.16p3/include/asm-alpha/unaligned.h Mon May 1 00:58:10 2000 @@ -31,7 +31,7 @@ extern inline unsigned long __uldq(const unsigned long * r11) { -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) const struct __una_u64 *ptr = (const struct __una_u64 *) r11; return ptr->x; #else @@ -50,7 +50,7 @@ extern inline unsigned long __uldl(const unsigned int * r11) { -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) const struct __una_u32 *ptr = (const struct __una_u32 *) r11; return ptr->x; #else @@ -69,7 +69,7 @@ extern inline unsigned long __uldw(const unsigned short * r11) { -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) const struct __una_u16 *ptr = (const struct __una_u16 *) r11; return ptr->x; #else @@ -92,7 +92,7 @@ extern inline void __ustq(unsigned long r5, unsigned long * r11) { -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) struct __una_u64 *ptr = (struct __una_u64 *) r11; ptr->x = r5; #else @@ -117,7 +117,7 @@ extern inline void __ustl(unsigned long r5, unsigned int * r11) { -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) struct __una_u32 *ptr = (struct __una_u32 *) r11; ptr->x = r5; #else @@ -142,7 +142,7 @@ extern inline void __ustw(unsigned long r5, unsigned short * r11) { -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) struct __una_u16 *ptr = (struct __una_u16 *) r11; ptr->x = r5; #else diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-i386/softirq.h linux.16p3/include/asm-i386/softirq.h --- linux.vanilla/include/asm-i386/softirq.h Fri Apr 21 23:10:16 2000 +++ linux.16p3/include/asm-i386/softirq.h Thu May 4 00:53:34 2000 @@ -9,6 +9,10 @@ #define get_active_bhs() (bh_mask & bh_active) #define clear_active_bhs(x) atomic_clear_mask((x),&bh_active) +#if defined (__SMP__) || DEBUG_SPINLOCKS > 0 +extern spinlock_t i386_bh_lock; +#endif + #ifdef __SMP__ /* @@ -18,7 +22,6 @@ */ extern atomic_t global_bh_lock; extern atomic_t global_bh_count; -extern spinlock_t i386_bh_lock; extern void synchronize_bh(void); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-mips/init.h linux.16p3/include/asm-mips/init.h --- linux.vanilla/include/asm-mips/init.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-mips/init.h Mon May 1 00:58:10 2000 @@ -15,7 +15,7 @@ __arginit __init; \ __arginit -#if __GNUC__ >= 2 && __GNUC_MINOR__ >= 8 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) #define __initlocaldata __initdata #else #define __initlocaldata diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-ppc/byteorder.h linux.16p3/include/asm-ppc/byteorder.h --- linux.vanilla/include/asm-ppc/byteorder.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-ppc/byteorder.h Mon May 1 00:58:10 2000 @@ -38,7 +38,7 @@ /* alas, egcs sounds like it has a bug in this code that doesn't use the inline asm correctly, and can cause file corruption. Until I hear that it's fixed, I can live without the extra speed. I hope. */ -#if !(__GNUC__ >= 2 && __GNUC_MINOR__ >= 90) +#if !((__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 90)) #if 0 # define __arch_swab16(x) ld_le16(&x) # define __arch_swab32(x) ld_le32(&x) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-ppc/init.h linux.16p3/include/asm-ppc/init.h --- linux.vanilla/include/asm-ppc/init.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-ppc/init.h Mon May 1 00:58:10 2000 @@ -1,7 +1,7 @@ #ifndef _PPC_INIT_H #define _PPC_INIT_H -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 90 /* egcs */ +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 90 /* egcs */ #define __init __attribute__ ((__section__ (".text.init"))) #define __initdata __attribute__ ((__section__ (".data.init"))) #define __initfunc(__arginit) \ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/current.h linux.16p3/include/asm-s390/current.h --- linux.vanilla/include/asm-s390/current.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/current.h Mon May 15 16:35:08 2000 @@ -20,7 +20,7 @@ struct task_struct *current; __asm__("lhi %0,-8192\n\t" "nr %0,15" - : "=r" (current) ); + : "=&r" (current) ); return current; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/ebcdic.h linux.16p3/include/asm-s390/ebcdic.h --- linux.vanilla/include/asm-s390/ebcdic.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/ebcdic.h Mon May 15 16:35:08 2000 @@ -14,6 +14,8 @@ #include #endif +extern __u8 _ascebc_500[]; /* ASCII -> EBCDIC 500 conversion table */ +extern __u8 _ebcasc_500[]; /* EBCDIC 500 -> ASCII conversion table */ extern __u8 _ascebc[]; /* ASCII -> EBCDIC conversion table */ extern __u8 _ebcasc[]; /* EBCDIC -> ASCII conversion table */ extern __u8 _ebc_tolower[]; /* EBCDIC -> lowercase */ @@ -44,6 +46,8 @@ #define ASCEBC(addr,nr) codepage_convert(_ascebc, addr, nr) #define EBCASC(addr,nr) codepage_convert(_ebcasc, addr, nr) +#define ASCEBC_500(addr,nr) codepage_convert(_ascebc_500, addr, nr) +#define EBCASC_500(addr,nr) codepage_convert(_ebcasc_500, addr, nr) #define EBC_TOLOWER(addr,nr) codepage_convert(_ebc_tolower, addr, nr) #define EBC_TOUPPER(addr,nr) codepage_convert(_ebc_toupper, addr, nr) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/irq.h linux.16p3/include/asm-s390/irq.h --- linux.vanilla/include/asm-s390/irq.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/irq.h Mon May 15 16:35:08 2000 @@ -66,7 +66,7 @@ /* ... per MSCH, however, if facility */ /* ... is not installed, this results */ /* ... in an operand exception. */ - } pmcw_t; + } __attribute__ ((packed)) pmcw_t; /* * subchannel status word @@ -92,7 +92,7 @@ unsigned int dstat : 8; /* device status */ unsigned int cstat : 8; /* subchannel status */ unsigned int count : 16; /* residual count */ - } scsw_t; + } __attribute__ ((packed)) scsw_t; #define SCSW_FCTL_CLEAR_FUNC 0x1 #define SCSW_FCTL_HALT_FUNC 0x2 @@ -137,7 +137,7 @@ pmcw_t pmcw; /* path management control word */ scsw_t scsw; /* subchannel status word */ char mda[12]; /* model dependent area */ - } schib_t; + } schib_t __attribute__ ((packed,aligned(4))); typedef struct { char cmd_code;/* command code */ @@ -154,12 +154,15 @@ #define CCW_FLAG_IDA 0x04 #define CCW_FLAG_SUSPEND 0x02 +#define CCW_CMD_READ_IPL 0x02 +#define CCW_CMD_NOOP 0x03 #define CCW_CMD_BASIC_SENSE 0x04 #define CCW_CMD_TIC 0x08 -#define CCW_CMD_SENSE_ID 0xE4 -#define CCW_CMD_NOOP 0x03 +#define CCW_CMD_SENSE_PGID 0x34 +#define CCW_CMD_SUSPEND_RECONN 0x5B #define CCW_CMD_RDC 0x64 -#define CCW_CMD_READ_IPL 0x02 +#define CCW_CMD_SET_PGID 0xAF +#define CCW_CMD_SENSE_ID 0xE4 #define SENSE_MAX_COUNT 0x20 @@ -290,22 +293,6 @@ unsigned int intparm; /* interruption parameter */ } tpi_info_t; - -/* - * This is the "IRQ descriptor", which contains various information - * about the irq, including what kind of hardware handling it has, - * whether it is disabled etc etc. - * - * Pad this out to 32 bytes for cache and indexing reasons. - */ -typedef struct { - unsigned int status; /* IRQ status - IRQ_INPROGRESS, IRQ_DISABLED */ - struct hw_interrupt_type *handler; /* handle/enable/disable functions */ - struct irqaction *action; /* IRQ action list */ - unsigned int unused[3]; - spinlock_t irq_lock; - } irq_desc_t; - // // command information word (CIW) layout // @@ -333,7 +320,7 @@ unsigned char dev_model; /* device model */ unsigned char unused; /* padding byte */ /* extended part */ - ciw_t ciw[62]; /* variable # of CIWs */ + ciw_t ciw[16]; /* variable # of CIWs */ } __attribute__ ((packed,aligned(4))) senseid_t; /* @@ -374,23 +361,96 @@ #define DEVSTAT_START_FUNCTION 0x00000004 #define DEVSTAT_HALT_FUNCTION 0x00000008 #define DEVSTAT_STATUS_PENDING 0x00000010 +#define DEVSTAT_REVALIDATE 0x00000020 +#define DEVSTAT_DEVICE_GONE 0x00000040 #define DEVSTAT_DEVICE_OWNED 0x00000080 +#define DEVSTAT_CLEAR_FUNCTION 0x00000100 #define DEVSTAT_FINAL_STATUS 0x80000000 +#define INTPARM_STATUS_PENDING 0xFFFFFFFF + +typedef void (* io_handler_func1_t) ( int irq, + devstat_t *devstat, + struct pt_regs *rgs); + +typedef void (* io_handler_func_t) ( int irq, + __u32 intparm ); + +typedef void ( * not_oper_handler_func_t)( int irq, + int status ); + +struct s390_irqaction { + io_handler_func_t handler; + unsigned long flags; + const char *name; + devstat_t *dev_id; +}; + + +/* + * This is the "IRQ descriptor", which contains various information + * about the irq, including what kind of hardware handling it has, + * whether it is disabled etc etc. + * + * Pad this out to 32 bytes for cache and indexing reasons. + */ +typedef struct { + unsigned int status; /* IRQ status - IRQ_INPROGRESS, IRQ_DISABLED */ + struct hw_interrupt_type *handler; /* handle/enable/disable functions */ + struct s390_irqaction *action; /* IRQ action list */ + } irq_desc_t; + +typedef struct { + __u8 state1 : 2; /* path state value 1 */ + __u8 state2 : 2; /* path state value 2 */ + __u8 state3 : 1; /* path state value 3 */ + __u8 resvd : 3; /* reserved */ + } __attribute__ ((packed)) path_state_t; + +typedef struct { + union { + __u8 fc; /* SPID function code */ + path_state_t ps; /* SNID path state */ + } inf; + __u32 cpu_addr : 16; /* CPU address */ + __u32 cpu_id : 24; /* CPU identification */ + __u32 cpu_model : 16; /* CPU model */ + __u32 tod_high; /* high word TOD clock */ + } __attribute__ ((packed)) pgid_t; + +#define SPID_FUNC_SINGLE_PATH 0x00 +#define SPID_FUNC_MULTI_PATH 0x80 +#define SPID_FUNC_ESTABLISH 0x00 +#define SPID_FUNC_RESIGN 0x40 +#define SPID_FUNC_DISBAND 0x20 + +#define SNID_STATE1_RESET 0 +#define SNID_STATE1_UNGROUPED 2 +#define SNID_STATE1_GROUPED 3 + +#define SNID_STATE2_NOT_RESVD 0 +#define SNID_STATE2_RESVD_ELSE 2 +#define SNID_STATE2_RESVD_SELF 3 + +#define SNID_STATE3_MULTI_PATH 1 +#define SNID_STATE3_SINGLE_PATH 0 + /* * Flags used as input parameters for do_IO() */ -#define DOIO_EARLY_NOTIFICATION 0x01 /* allow for I/O completion ... */ +#define DOIO_EARLY_NOTIFICATION 0x0001 /* allow for I/O completion ... */ /* ... notification after ... */ /* ... primary interrupt status */ #define DOIO_RETURN_CHAN_END DOIO_EARLY_NOTIFICATION -#define DOIO_VALID_LPM 0x02 /* LPM input parameter is valid */ -#define DOIO_WAIT_FOR_INTERRUPT 0x04 /* wait synchronously for interrupt */ -#define DOIO_REPORT_ALL 0x08 /* report all interrupt conditions */ -#define DOIO_ALLOW_SUSPEND 0x10 /* allow for channel prog. suspend */ -#define DOIO_DENY_PREFETCH 0x20 /* don't allow for CCW prefetch */ -#define DOIO_SUPPRESS_INTER 0x40 /* suppress intermediate inter. */ +#define DOIO_VALID_LPM 0x0002 /* LPM input parameter is valid */ +#define DOIO_WAIT_FOR_INTERRUPT 0x0004 /* wait synchronously for interrupt */ +#define DOIO_REPORT_ALL 0x0008 /* report all interrupt conditions */ +#define DOIO_ALLOW_SUSPEND 0x0010 /* allow for channel prog. suspend */ +#define DOIO_DENY_PREFETCH 0x0020 /* don't allow for CCW prefetch */ +#define DOIO_SUPPRESS_INTER 0x0040 /* suppress intermediate inter. */ /* ... for suspended CCWs */ +#define DOIO_TIMEOUT 0x0080 /* 3 secs. timeout for sync. I/O */ +#define DOIO_DONT_CALL_INTHDLR 0x0100 /* don't call interrupt handler */ /* * do_IO() @@ -420,12 +480,17 @@ unsigned char lpm, /* logical path mask */ unsigned long flag); /* flags : see above */ +void do_crw_pending( void ); /* CRW handler */ + int resume_IO( int irq); /* IRQ aka. subchannel number */ int halt_IO( int irq, /* IRQ aka. subchannel number */ unsigned long intparm, /* dummy intparm */ - unsigned int flag); /* possible DOIO_WAIT_FOR_INTERRUPT */ + unsigned long flag); /* possible DOIO_WAIT_FOR_INTERRUPT */ +int clear_IO( int irq, /* IRQ aka. subchannel number */ + unsigned long intparm, /* dummy intparm */ + unsigned long flag); /* possible DOIO_WAIT_FOR_INTERRUPT */ int process_IRQ( struct pt_regs regs, unsigned int irq, @@ -454,9 +519,18 @@ int get_irq_next ( int irq ); int read_dev_chars( int irq, void **buffer, int length ); -int read_conf_data( int irq, void **buffer, int *length ); +int read_conf_data( int irq, void **buffer, int *length, __u8 lpm ); + +int s390_DevicePathVerification( int irq, __u8 domask ); + +int s390_request_irq_special( int irq, + io_handler_func_t io_handler, + not_oper_handler_func_t not_oper_handler, + unsigned long irqflags, + const char *devname, + void *dev_id); -extern int handle_IRQ_event(unsigned int, int cpu, struct pt_regs *); +extern int handle_IRQ_event( unsigned int irq, int cpu, struct pt_regs *); extern int set_cons_dev(int irq); extern int reset_cons_dev(int irq); @@ -722,14 +796,16 @@ #include #define s390irq_spin_lock(irq) \ - spin_lock(&(ioinfo[irq]->irq_desc.irq_lock)) + spin_lock(&(ioinfo[irq]->irq_lock)) #define s390irq_spin_unlock(irq) \ - spin_unlock(&(ioinfo[irq]->irq_desc.irq_lock)) + spin_unlock(&(ioinfo[irq]->irq_lock)) #define s390irq_spin_lock_irqsave(irq,flags) \ - spin_lock_irqsave(&(ioinfo[irq]->irq_desc.irq_lock), flags) + spin_lock_irqsave(&(ioinfo[irq]->irq_lock), flags) + #define s390irq_spin_unlock_irqrestore(irq,flags) \ - spin_unlock_irqrestore(&(ioinfo[irq]->irq_desc.irq_lock), flags) + spin_unlock_irqrestore(&(ioinfo[irq]->irq_lock), flags) + #endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/lowcore.h linux.16p3/include/asm-s390/lowcore.h --- linux.vanilla/include/asm-s390/lowcore.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/lowcore.h Mon May 15 16:35:08 2000 @@ -32,8 +32,9 @@ #define __LC_SUBCHANNEL_NR 0x0BA #define __LC_IO_INT_PARM 0x0BC #define __LC_MCCK_CODE 0x0E8 -#define __LC_CREGS_SAVE_AREA 0x1C0 -#define __LC_AREGS_SAVE_AREA 0x120 +#define __LC_AREGS_SAVE_AREA 0x200 +#define __LC_CREGS_SAVE_AREA 0x240 +#define __LC_RETURN_PSW 0x280 #define __LC_SYNC_IO_WORD 0x400 @@ -51,24 +52,25 @@ #define _EXT_PSW_MASK 0x04080000 #define _PGM_PSW_MASK 0x04080000 #define _SVC_PSW_MASK 0x04080000 -#define _MCCK_PSW_MASK 0x040A0000 +#define _MCCK_PSW_MASK 0x04080000 #define _IO_PSW_MASK 0x04080000 -#define _USER_PSW_MASK 0x070DC000/* DAT, IO, EXT, Home-space */ -#define _PSW_IO_WAIT 0x020A0000/* IO, Wait */ +#define _USER_PSW_MASK 0x0709C000/* DAT, IO, EXT, Home-space */ #define _WAIT_PSW_MASK 0x070E0000/* DAT, IO, EXT, Wait, Home-space */ #define _DW_PSW_MASK 0x000A0000/* disabled wait PSW mask */ + #define _PRIMARY_MASK 0x0000 /* MASK for SACF */ #define _SECONDARY_MASK 0x0100 /* MASK for SACF */ #define _ACCESS_MASK 0x0200 /* MASK for SACF */ #define _HOME_MASK 0x0300 /* MASK for SACF */ -#define _PSW_PRIM_SPACE_MODE 0x04000000 -#define _PSW_SEC_SPACE_MODE 0x04008000 -#define _PSW_ACC_REG_MODE 0x04004000 -#define _PSW_HOME_SPACE_MODE 0x0400C000 - -#define _PSW_WAIT_MASK_BIT 0x00020000 -#define _PSW_IO_MASK_BIT 0x02000000 +#define _PSW_PRIM_SPACE_MODE 0x00000000 +#define _PSW_SEC_SPACE_MODE 0x00008000 +#define _PSW_ACC_REG_MODE 0x00004000 +#define _PSW_HOME_SPACE_MODE 0x0000C000 + +#define _PSW_WAIT_MASK_BIT 0x00020000 /* Wait bit */ +#define _PSW_IO_MASK_BIT 0x02000000 /* IO bit */ +#define _PSW_IO_WAIT 0x02020000 /* IO & Wait bit */ /* we run in 31 Bit mode */ #define _ADDR_31 0x80000000 @@ -124,17 +126,19 @@ __u32 failing_storage_address; /* 0x0f8 */ __u8 pad5[0x100-0xfc]; /* 0x0fc */ __u32 st_status_fixed_logout[4];/* 0x100 */ - __u8 pad6[0x120-0x110]; /* 0x110 */ - __u32 access_regs_save_area[16];/* 0x120 */ + __u8 pad6[0x160-0x110]; /* 0x110 */ __u32 floating_pt_save_area[8]; /* 0x160 */ __u32 gpregs_save_area[16]; /* 0x180 */ - __u32 cregs_save_area[16]; /* 0x1c0 */ + __u8 pad7[0x200-0x1c0]; /* 0x1c0 */ - __u8 pad7[0x400-0x200]; /* 0x200 */ + __u32 access_regs_save_area[16];/* 0x200 */ + __u32 cregs_save_area[16]; /* 0x240 */ + psw_t return_psw; /* 0x280 */ + __u8 pad8[0x400-0x288]; /* 0x288 */ __u32 sync_io_word; /* 0x400 */ - __u8 pad8[0xc00-0x404]; /* 0x404 */ + __u8 pad9[0xc00-0x404]; /* 0x404 */ /* System info area */ __u32 save_area[16]; /* 0xc00 */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/pgtable.h linux.16p3/include/asm-s390/pgtable.h --- linux.vanilla/include/asm-s390/pgtable.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/pgtable.h Mon May 15 16:35:08 2000 @@ -58,21 +58,6 @@ #define __flush_tlb() \ do { __asm__ __volatile__("ptlb": : :"memory"); } while (0) - -static inline void __flush_global_tlb(void) -{ - int cs1=0,dum=0; - int *adr; - long long dummy=0; - adr = (int*) (((int)(((int*) &dummy)+1) & 0xfffffffc)|1); - __asm__ __volatile__("lr 2,%0\n\t" - "lr 3,%1\n\t" - "lr 4,%2\n\t" - ".long 0xb2500024" : - : "d" (cs1), "d" (dum), "d" (adr) - : "2", "3", "4"); -} - static inline void __flush_tlb_one(struct mm_struct *mm, unsigned long addr); @@ -94,11 +79,15 @@ __flush_tlb(); } +#if 0 /* Arggh, ipte doesn't work correctly !! */ static inline void flush_tlb_page(struct vm_area_struct *vma, - unsigned long addr) + unsigned long va) { - __flush_tlb_one(vma->vm_mm,addr); + __flush_tlb_one(vma->vm_mm,va); } +#else +#define flush_tlb_page(vma, va) flush_tlb_all() +#endif static inline void flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end) @@ -115,6 +104,28 @@ #include +static inline void __flush_global_tlb_csp(void) +{ + int cs1=0,dum=0; + int *adr; + long long dummy=0; + adr = (int*) (((int)(((int*) &dummy)+1) & 0xfffffffc)|1); + __asm__ __volatile__("lr 2,%0\n\t" + "lr 3,%1\n\t" + "lr 4,%2\n\t" + "csp 2,4" : + : "d" (cs1), "d" (dum), "d" (adr) + : "2", "3", "4"); +} + +static inline void __flush_global_tlb(void) +{ + if (MACHINE_HAS_CSP) + __flush_global_tlb_csp(); + else + smp_ext_call_sync_others(ec_ptlb, NULL); +} + #define local_flush_tlb() \ __flush_tlb() @@ -127,8 +138,9 @@ static inline void flush_tlb_current_task(void) { - if ((atomic_read(¤t->mm->count) != 1) || - (current->mm->cpu_vm_mask != (1UL << smp_processor_id()))) { + if ((smp_num_cpus > 1) && + ((atomic_read(¤t->mm->count) != 1) || + (current->mm->cpu_vm_mask != (1UL << smp_processor_id())))) { current->mm->cpu_vm_mask = (1UL << smp_processor_id()); __flush_global_tlb(); } else { @@ -142,8 +154,9 @@ static inline void flush_tlb_mm(struct mm_struct * mm) { - if ((atomic_read(&mm->count) != 1) || - (mm->cpu_vm_mask != (1UL << smp_processor_id()))) { + if ((smp_num_cpus > 1) && + ((atomic_read(&mm->count) != 1) || + (mm->cpu_vm_mask != (1UL << smp_processor_id())))) { mm->cpu_vm_mask = (1UL << smp_processor_id()); __flush_global_tlb(); } else { @@ -151,17 +164,22 @@ } } +#if 0 /* Arggh, ipte doesn't work correctly !! */ static inline void flush_tlb_page(struct vm_area_struct * vma, unsigned long va) { __flush_tlb_one(vma->vm_mm,va); } +#else +#define flush_tlb_page(vma, va) flush_tlb_all() +#endif static inline void flush_tlb_range(struct mm_struct * mm, unsigned long start, unsigned long end) { - if ((atomic_read(&mm->count) != 1) || - (mm->cpu_vm_mask != (1UL << smp_processor_id()))) { + if ((smp_num_cpus > 1) && + ((atomic_read(&mm->count) != 1) || + (mm->cpu_vm_mask != (1UL << smp_processor_id())))) { mm->cpu_vm_mask = (1UL << smp_processor_id()); __flush_global_tlb(); } else { @@ -290,8 +308,7 @@ /* * No mapping available */ -#define PAGE_NONE __pgprot(_PAGE_INVALID ) - +#define PAGE_NONE __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_INVALID) #define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED) #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_RO) #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_RO) @@ -386,7 +403,8 @@ } while (0) -extern inline int pte_none(pte_t pte) { return ((pte_val(pte) & (_PAGE_INVALID | _PAGE_RO)) == +extern inline int pte_none(pte_t pte) { return ((pte_val(pte) & + (_PAGE_INVALID | _PAGE_RO | _PAGE_PRESENT)) == _PAGE_INVALID); } extern inline int pte_present(pte_t pte) { return pte_val(pte) & _PAGE_PRESENT; } extern inline void pte_clear(pte_t *ptep) { pte_val(*ptep) = _PAGE_INVALID; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/processor.h linux.16p3/include/asm-s390/processor.h --- linux.vanilla/include/asm-s390/processor.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/processor.h Mon May 15 16:35:08 2000 @@ -82,6 +82,8 @@ /* perform syscall argument validation (get/set_fs) */ mm_segment_t fs; per_struct per_info;/* Must be aligned on an 4 byte boundary*/ + addr_t ieee_instruction_pointer; + /* Used to give failing instruction back to user for ieee exceptions */ }; typedef struct thread_struct thread_struct; @@ -156,6 +158,7 @@ #define PSW_PER_MASK 0x40000000UL #define USER_STD_MASK 0x00000080UL #define PSW_PROBLEM_STATE 0x00010000UL +#define PSW_ENABLED_STATE 0x03000000UL /* * Function to drop a processor into disabled wait state diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/ptrace.h linux.16p3/include/asm-s390/ptrace.h --- linux.vanilla/include/asm-s390/ptrace.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/ptrace.h Mon May 15 16:35:08 2000 @@ -27,14 +27,14 @@ struct pt_regs { S390_REGS - long trap; + __u32 trap; }; #if CONFIG_REMOTE_DEBUG typedef struct { S390_REGS - long trap; + __u32 trap; __u32 crs[16]; s390_fp_regs fp_regs; } gdb_pt_regs; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/queue.h linux.16p3/include/asm-s390/queue.h --- linux.vanilla/include/asm-s390/queue.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/queue.h Mon May 15 16:35:08 2000 @@ -2,18 +2,21 @@ * include/asm-s390/queue.h * * S390 version - * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) * * A little set of queue utilies. */ #include +#include typedef struct queue { struct queue *next; } queue; +typedef queue list; + typedef struct { queue *head; @@ -56,9 +59,103 @@ return(head); } +static __inline__ void init_list(list **lhead) +{ + *lhead=NULL; +} + +static __inline__ void add_to_list(list **lhead,list *member) +{ + member->next=*lhead; + *lhead=member; +} + +static __inline__ void add_to_list_tail(list **lhead,list *member) +{ + list *curr,*prev; + if(*lhead==NULL) + *lhead=member; + else + { + prev=*lhead; + for(curr=(*lhead)->next;curr!=NULL;curr=curr->next) + prev=curr; + prev->next=member; + } +} +static __inline__ void add_to_list_tail_null(list **lhead,list *member) +{ + member->next=NULL; + add_to_list_tail_null(lhead,member); +} + + +static __inline__ int is_in_list(list *lhead,list *member) +{ + list *curr; + + for(curr=lhead;curr!=NULL;curr=curr->next) + if(curr==member) + return(TRUE); + return(FALSE); +} + +static __inline__ int get_prev(list *lhead,list *member,list **prev) +{ + list *curr; + + *prev=NULL; + for(curr=lhead;curr!=NULL;curr=curr->next) + { + if(curr==member) + return(TRUE); + *prev=curr; + } + *prev=NULL; + return(FALSE); +} + + + +static __inline__ int remove_from_list(list **lhead,list *member) +{ + list *prev; + + if(get_prev(*lhead,member,&prev)) + { + + if(prev) + prev->next=member->next; + else + *lhead=member->next; + return(TRUE); + } + return(FALSE); +} +static __inline__ int remove_from_queue(qheader *qhead,queue *member) +{ + queue *prev; + if(get_prev(qhead->head,(list *)member,(list **)&prev)) + { + if(prev) + { + prev->next=member->next; + if(prev->next==NULL) + qhead->tail=prev; + } + else + { + if(qhead->head==qhead->tail) + qhead->tail=NULL; + qhead->head=member->next; + } + return(TRUE); + } + return(FALSE); +} diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/s390_ext.h linux.16p3/include/asm-s390/s390_ext.h --- linux.vanilla/include/asm-s390/s390_ext.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/include/asm-s390/s390_ext.h Mon May 15 16:35:08 2000 @@ -0,0 +1,30 @@ +#ifndef _S390_EXTINT_H +#define _S390_EXTINT_H + +/* + * include/asm-s390/s390_ext.h + * + * S390 version + * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Holger Smolinski (Holger.Smolinski@de.ibm.com), + * Martin Schwidefsky (schwidefsky@de.ibm.com) + */ + +typedef void (*ext_int_handler_t)(struct pt_regs *regs, __u16 code); + +/* + * Warning: if you change ext_int_info_t you have to change the + * external interrupt handler in entry.S too. + */ +typedef struct ext_int_info_t { + struct ext_int_info_t *next; + ext_int_handler_t handler; + __u16 code; +} __attribute__ ((packed)) ext_int_info_t; + +extern ext_int_info_t *ext_int_hash[]; + +int register_external_interrupt(__u16 code, ext_int_handler_t handler); +int unregister_external_interrupt(__u16 code, ext_int_handler_t handler); + +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/s390dyn.h linux.16p3/include/asm-s390/s390dyn.h --- linux.vanilla/include/asm-s390/s390dyn.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/include/asm-s390/s390dyn.h Mon May 15 16:35:08 2000 @@ -0,0 +1,55 @@ +/* + * arch/s390/kernel/s390dyn.h + * S/390 data definitions for dynamic device attachment + * + * S390 version + * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation + * Author(s): Ingo Adlung (adlung@de.ibm.com) + */ + +#ifndef __s390dyn_h +#define __s390dyn_h + +struct _devreg; + +typedef int (* oper_handler_func_t)( int irq, + struct _devreg *dreg); + +typedef struct _devreg { + union { + int devno; + + struct _hc { + __u16 ctype; + __u8 cmode; + __u16 dtype; + __u8 dmode; + } hc; /* has controller info */ + + struct _hnc { + __u16 dtype; + __u8 dmode; + __u16 res1; + __u8 res2; + } hnc; /* has no controller info */ + } ci; + + int flag; + oper_handler_func_t oper_func; + struct _devreg *prev; + struct _devreg *next; +} devreg_t; + +#define DEVREG_EXACT_MATCH 0x00000001 +#define DEVREG_MATCH_DEV_TYPE 0x00000002 +#define DEVREG_MATCH_CU_TYPE 0x00000004 +#define DEVREG_NO_CU_INFO 0x00000008 + +#define DEVREG_TYPE_DEVNO 0x80000000 +#define DEVREG_TYPE_DEVCHARS 0x40000000 + +int s390_device_register ( devreg_t *drinfo ); +int s390_device_unregister( devreg_t *dreg ); +devreg_t * s390_search_devreg ( ioinfo_t *ioinfo ); + +#endif /* __s390dyn */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/s390io.h linux.16p3/include/asm-s390/s390io.h --- linux.vanilla/include/asm-s390/s390io.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/s390io.h Mon May 15 16:35:08 2000 @@ -18,6 +18,10 @@ typedef struct _ioinfo { unsigned int irq; /* aka. subchannel number */ spinlock_t irq_lock; /* irq lock */ + + struct _ioinfo *prev; + struct _ioinfo *next; + union { unsigned int info; struct { @@ -41,27 +45,34 @@ unsigned int consns : 1; /* concurrent sense is available */ unsigned int delsense : 1; /* delayed SENSE required */ unsigned int s_pend : 1; /* status pending condition */ - unsigned int unused : 16; /* unused */ + unsigned int pgid : 1; /* "path group ID" is valid */ + unsigned int pgid_supp : 1; /* "path group ID" command is supported */ + unsigned int esid : 1; /* Ext. SenseID supported by HW */ + unsigned int rcd : 1; /* RCD supported by HW */ + unsigned int repnone : 1; /* don't call IRQ handler on interrupt */ + unsigned int newreq : 1; /* new register interface */ + unsigned int dval : 1; /* device number valid */ + unsigned int unused : (sizeof(unsigned int)*8 - 23); /* unused */ } __attribute__ ((packed)) flags; } ui; + unsigned long u_intparm; /* user interruption parameter */ senseid_t senseid; /* SenseID info */ irq_desc_t irq_desc; /* irq descriptor */ - unsigned int lpm; /* logical path mask to be used ... */ - /* ... from do_IO() parms. Only ... */ - /* ... valid if vlpm is set too. */ + not_oper_handler_func_t nopfunc; /* not oper handler */ + __u8 ulpm; /* logical path mask used for I/O */ + __u8 opm; /* path mask of operational paths */ + __u16 devno; /* device number */ + pgid_t pgid; /* path group ID */ schib_t schib; /* subchannel information block */ orb_t orb; /* operation request block */ devstat_t devstat; /* device status */ ccw1_t *qcpa; /* queued channel program */ ccw1_t senseccw; /* ccw for sense command */ unsigned int stctl; /* accumulated status control from irb */ - unsigned int qintparm; /* queued interruption parameter */ + unsigned long qintparm; /* queued interruption parameter */ unsigned long qflag; /* queued flags */ - unsigned char qlpm; /* queued logical path mask */ - - struct _ioinfo *prev; - struct _ioinfo *next; + __u8 qlpm; /* queued logical path mask */ } __attribute__ ((aligned(8))) ioinfo_t; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/s390mach.h linux.16p3/include/asm-s390/s390mach.h --- linux.vanilla/include/asm-s390/s390mach.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/include/asm-s390/s390mach.h Mon May 15 16:35:08 2000 @@ -0,0 +1,107 @@ +/* + * arch/s390/kernel/s390mach.h + * S/390 data definitions for machine check processing + * + * S390 version + * Copyright (C) 1999, 2000 IBM Deutschland Entwicklung GmbH, + * IBM Corporation + * Author(s): Ingo Adlung (adlung@de.ibm.com) + */ + +#ifndef __s390mach_h +#define __s390mach_h + +#include + +typedef struct _mci { + __u32 to_be_defined_1 : 9; + __u32 cp : 1; /* channel-report pending */ + __u32 to_be_defined_2 : 22; + __u32 to_be_defined_3; + } mci_t; + +// +// machine-check-interruption code +// +typedef struct _mcic { + union _mcc { + __u64 mcl; /* machine check int. code - long info */ + mci_t mcd; /* machine check int. code - details */ + } mcc; +} __attribute__ ((packed)) mcic_t; + +// +// Channel Report Word +// +typedef struct _crw { + __u32 res1 : 1; /* reserved zero */ + __u32 slct : 1; /* solicited */ + __u32 oflw : 1; /* overflow */ + __u32 chn : 1; /* chained */ + __u32 rsc : 4; /* reporting source code */ + __u32 anc : 1; /* ancillary report */ + __u32 res2 : 1; /* reserved zero */ + __u32 erc : 6; /* error-recovery code */ + __u32 rsid : 16; /* reporting-source ID */ +} __attribute__ ((packed)) crw_t; + +#define CRW_RSC_MONITOR 0x2 /* monitoring facility */ +#define CRW_RSC_SCH 0x3 /* subchannel */ +#define CRW_RSC_CPATH 0x4 /* channel path */ +#define CRW_RSC_CONFIG 0x9 /* configuration-alert facility */ +#define CRW_RSC_CSS 0xB /* channel subsystem */ + +#define CRW_ERC_EVENT 0x00 /* event information pending */ +#define CRW_ERC_AVAIL 0x01 /* available */ +#define CRW_ERC_INIT 0x02 /* initialized */ +#define CRW_ERC_TERROR 0x03 /* temporary error */ +#define CRW_ERC_IPARM 0x04 /* installed parm initialized */ +#define CRW_ERC_TERM 0x05 /* terminal */ +#define CRW_ERC_PERRN 0x06 /* perm. error, fac. not init */ +#define CRW_ERC_PERRI 0x07 /* perm. error, facility init */ +#define CRW_ERC_PMOD 0x08 /* installed parameters modified */ + +#define MAX_CRW_PENDING 100 +#define MAX_MACH_PENDING 100 + +// +// CRW Entry +// +typedef struct _crwe { + crw_t crw; + struct _crwe *crwe_next; +} __attribute__ ((packed)) crwe_t; + +typedef struct _mache { + spinlock_t lock; + unsigned int status; + mcic_t mcic; + union _mc { + crwe_t *crwe; /* CRW if applicable */ + } mc; + struct _mache *next; + struct _mache *prev; +} mache_t; + +#define MCHCHK_STATUS_TO_PROCESS 0x00000001 +#define MCHCHK_STATUS_IN_PROGRESS 0x00000002 +#define MCHCHK_STATUS_WAITING 0x00000004 + +void s390_init_machine_check( void ); +void __init s390_do_machine_check ( void ); +void s390_do_crw_pending ( crwe_t *pcrwe ); + +extern __inline__ int stcrw( __u32 *pcrw ) +{ + int ccode; + + __asm__ __volatile__( + "STCRW 0(%1)\n\t" + "IPM %0\n\t" + "SRL %0,28\n\t" + : "=d" (ccode) : "a" (pcrw) + : "cc", "1" ); + return ccode; +} + +#endif /* __s390mach */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/setup.h linux.16p3/include/asm-s390/setup.h --- linux.vanilla/include/asm-s390/setup.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/setup.h Mon May 15 16:35:08 2000 @@ -41,6 +41,7 @@ #define MACHINE_IS_VM (MACHINE_FLAGS & 1) #define MACHINE_HAS_IEEE (MACHINE_FLAGS & 2) #define MACHINE_IS_P390 (MACHINE_FLAGS & 4) +#define MACHINE_HAS_CSP (MACHINE_FLAGS & 8) #define RAMDISK_ORIGIN 0x800000 #define RAMDISK_BLKSIZE 0x1000 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/sigp.h linux.16p3/include/asm-s390/sigp.h --- linux.vanilla/include/asm-s390/sigp.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/sigp.h Mon May 15 16:35:08 2000 @@ -149,6 +149,7 @@ ec_set_ctl, ec_get_ctl, ec_set_ctl_masked, + ec_ptlb, ec_cmd_last } ec_cmd_sig; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/spinlock.h linux.16p3/include/asm-s390/spinlock.h --- linux.vanilla/include/asm-s390/spinlock.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/spinlock.h Mon May 15 16:35:08 2000 @@ -94,7 +94,7 @@ extern inline void spin_lock(spinlock_t *lp) { - __asm__ __volatile(" lhi 1,-1\n" + __asm__ __volatile(" basr 1,0\n" "0: slr 0,0\n" " cs 0,1,%1\n" " jl 0b" @@ -106,10 +106,10 @@ { unsigned long result; __asm__ __volatile(" slr %1,%1\n" - " lhi 0,-1\n" - "0: cs %1,0,%0" + " basr 1,0\n" + "0: cs %1,1,%0" : "=m" (lp->lock), "=&d" (result) - : "0" (lp->lock) : "0"); + : "0" (lp->lock) : "1"); return !result; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/stat.h linux.16p3/include/asm-s390/stat.h --- linux.vanilla/include/asm-s390/stat.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/stat.h Mon May 15 16:35:08 2000 @@ -9,6 +9,10 @@ #ifndef _S390_STAT_H #define _S390_STAT_H +#ifndef _LINUX_TYPES_H +#include +#endif + struct __old_kernel_stat { unsigned short st_dev; unsigned short st_ino; @@ -24,23 +28,23 @@ }; struct stat { - unsigned short st_dev; - unsigned short __pad1; - unsigned long st_ino; - unsigned short st_mode; - unsigned short st_nlink; - unsigned short st_uid; - unsigned short st_gid; - unsigned short st_rdev; - unsigned short __pad2; - unsigned long st_size; - unsigned long st_blksize; - unsigned long st_blocks; - unsigned long st_atime; + dev_t st_dev; + unsigned short int __pad1; + ino_t st_ino; + mode_t st_mode; + short st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + unsigned short int __pad2; + off_t st_size; + off_t st_blksize; + off_t st_blocks; + time_t st_atime; unsigned long __unused1; - unsigned long st_mtime; + time_t st_mtime; unsigned long __unused2; - unsigned long st_ctime; + time_t st_ctime; unsigned long __unused3; unsigned long __unused4; unsigned long __unused5; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/termios.h linux.16p3/include/asm-s390/termios.h --- linux.vanilla/include/asm-s390/termios.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/termios.h Mon May 15 16:35:08 2000 @@ -76,18 +76,19 @@ /* * Translate a "termio" structure into a "termios". Ugh. */ -#define SET_LOW_TERMIOS_BITS(termios, termio, x) { \ - unsigned short __tmp; \ - get_user(__tmp,&(termio)->x); \ - *(unsigned short *) &(termios)->x = __tmp; \ -} #define user_termio_to_kernel_termios(termios, termio) \ ({ \ - SET_LOW_TERMIOS_BITS(termios, termio, c_iflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_oflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_cflag); \ - SET_LOW_TERMIOS_BITS(termios, termio, c_lflag); \ + unsigned short tmp; \ + get_user(tmp, &(termio)->c_iflag); \ + (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \ + get_user(tmp, &(termio)->c_oflag); \ + (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \ + get_user(tmp, &(termio)->c_cflag); \ + (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \ + get_user(tmp, &(termio)->c_lflag); \ + (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \ + get_user((termios)->c_line, &(termio)->c_line); \ copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ }) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/types.h linux.16p3/include/asm-s390/types.h --- linux.vanilla/include/asm-s390/types.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/types.h Mon May 15 16:35:08 2000 @@ -53,11 +53,12 @@ #define BITS_PER_LONG 32 -#endif /* __KERNEL__ */ #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif + +#endif /* __KERNEL__ */ #endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/uaccess.h linux.16p3/include/asm-s390/uaccess.h --- linux.vanilla/include/asm-s390/uaccess.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/uaccess.h Mon May 15 16:35:08 2000 @@ -432,7 +432,7 @@ static inline long strncpy_from_user(char *dst, const char *src, long count) { - int len; + long len; __asm__ __volatile__ ( " iac 1\n" " slr %0,%0\n" " lr 2,%1\n" @@ -471,7 +471,8 @@ * * Return 0 for error */ -static inline long strnlen_user(const char * src, long n) +static inline unsigned long +strnlen_user(const char * src, unsigned long n) { __asm__ __volatile__ (" iac 1\n" " alr %0,%1\n" @@ -500,7 +501,7 @@ : "cc", "0", "1", "4" ); return n; } -#define strlen_user(str) strnlen_user(str, ~0UL >> 1) +#define strlen_user(str) strnlen_user(str, ~0UL) /* * Zero Userspace @@ -518,7 +519,7 @@ "0: mvcle 4,2,0\n" " jo 0b\n" "1: sacf 0(1)\n" - " lr %0,3\n" + " lr %0,5\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 0b,1b\n" diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-s390/unistd.h linux.16p3/include/asm-s390/unistd.h --- linux.vanilla/include/asm-s390/unistd.h Fri Apr 21 12:46:49 2000 +++ linux.16p3/include/asm-s390/unistd.h Mon May 15 16:35:08 2000 @@ -19,7 +19,6 @@ #define __NR_write 4 #define __NR_open 5 #define __NR_close 6 -#define __NR_waitpid 7 #define __NR_creat 8 #define __NR_link 9 #define __NR_unlink 10 @@ -29,8 +28,6 @@ #define __NR_mknod 14 #define __NR_chmod 15 #define __NR_lchown 16 -#define __NR_break 17 -#define __NR_oldstat 18 #define __NR_lseek 19 #define __NR_getpid 20 #define __NR_mount 21 @@ -40,14 +37,10 @@ #define __NR_stime 25 #define __NR_ptrace 26 #define __NR_alarm 27 -#define __NR_oldfstat 28 #define __NR_pause 29 #define __NR_utime 30 -#define __NR_stty 31 -#define __NR_gtty 32 #define __NR_access 33 #define __NR_nice 34 -#define __NR_ftime 35 #define __NR_sync 36 #define __NR_kill 37 #define __NR_rename 38 @@ -56,7 +49,6 @@ #define __NR_dup 41 #define __NR_pipe 42 #define __NR_times 43 -#define __NR_prof 44 #define __NR_brk 45 #define __NR_setgid 46 #define __NR_getgid 47 @@ -65,13 +57,9 @@ #define __NR_getegid 50 #define __NR_acct 51 #define __NR_umount2 52 -#define __NR_lock 53 #define __NR_ioctl 54 #define __NR_fcntl 55 -#define __NR_mpx 56 #define __NR_setpgid 57 -#define __NR_ulimit 58 -#define __NR_oldolduname 59 #define __NR_umask 60 #define __NR_chroot 61 #define __NR_ustat 62 @@ -80,8 +68,6 @@ #define __NR_getpgrp 65 #define __NR_setsid 66 #define __NR_sigaction 67 -#define __NR_sgetmask 68 -#define __NR_ssetmask 69 #define __NR_setreuid 70 #define __NR_setregid 71 #define __NR_sigsuspend 72 @@ -94,9 +80,7 @@ #define __NR_settimeofday 79 #define __NR_getgroups 80 #define __NR_setgroups 81 -#define __NR_select 82 #define __NR_symlink 83 -#define __NR_oldlstat 84 #define __NR_readlink 85 #define __NR_uselib 86 #define __NR_swapon 87 @@ -110,7 +94,6 @@ #define __NR_fchown 95 #define __NR_getpriority 96 #define __NR_setpriority 97 -#define __NR_profil 98 #define __NR_statfs 99 #define __NR_fstatfs 100 #define __NR_ioperm 101 @@ -121,11 +104,8 @@ #define __NR_stat 106 #define __NR_lstat 107 #define __NR_fstat 108 -#define __NR_olduname 109 -#define __NR_iopl 110 #define __NR_vhangup 111 #define __NR_idle 112 -#define __NR_vm86old 113 #define __NR_wait4 114 #define __NR_swapoff 115 #define __NR_sysinfo 116 @@ -135,7 +115,6 @@ #define __NR_clone 120 #define __NR_setdomainname 121 #define __NR_uname 122 -#define __NR_modify_ldt 123 #define __NR_adjtimex 124 #define __NR_mprotect 125 #define __NR_sigprocmask 126 @@ -178,7 +157,6 @@ #define __NR_mremap 163 #define __NR_setresuid 164 #define __NR_getresuid 165 -#define __NR_vm86 166 #define __NR_query_module 167 #define __NR_poll 168 #define __NR_nfsservctl 169 @@ -200,8 +178,6 @@ #define __NR_capset 185 #define __NR_sigaltstack 186 #define __NR_sendfile 187 -#define __NR_getpmsg 188 /* some people actually want streams */ -#define __NR_putpmsg 189 /* some people actually want streams */ #define __NR_vfork 190 /* user-visible error numbers are in the range -1 - -122: see */ @@ -349,8 +325,14 @@ static inline _syscall3(int,open,const char *,file,int,flag,int,mode) static inline _syscall1(int,close,int,fd) static inline _syscall1(int,_exit,int,exitcode) -static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) static inline _syscall1(int,delete_module,const char *,name) +static inline _syscall2(long,stat,char *,filename,struct stat *,statbuf) + +extern int sys_wait4(int, int *, int, struct rusage *); +static inline pid_t waitpid(int pid, int * wait_stat, int flags) +{ + return sys_wait4(pid, wait_stat, flags, NULL); +} static inline pid_t wait(int * wait_stat) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/asm-sparc64/string.h linux.16p3/include/asm-sparc64/string.h --- linux.vanilla/include/asm-sparc64/string.h Fri Apr 21 12:46:51 2000 +++ linux.16p3/include/asm-sparc64/string.h Mon May 1 00:58:10 2000 @@ -113,7 +113,7 @@ extern __kernel_size_t __strlen(const char *); -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 91 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91) extern __kernel_size_t strlen(const char *); #else /* !EGCS */ /* Ugly but it works around a bug in our original sparc64-linux-gcc. */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/ac97_codec.h linux.16p3/include/linux/ac97_codec.h --- linux.vanilla/include/linux/ac97_codec.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/include/linux/ac97_codec.h Tue Apr 18 20:32:14 2000 @@ -0,0 +1,177 @@ +#ifndef _AC97_CODEC_H_ +#define _AC97_CODEC_H_ + +#include +#include + +/* AC97 1.0 */ +#define AC97_RESET 0x0000 // +#define AC97_MASTER_VOL_STEREO 0x0002 // Line Out +#define AC97_HEADPHONE_VOL 0x0004 // +#define AC97_MASTER_VOL_MONO 0x0006 // TAD Output +#define AC97_MASTER_TONE 0x0008 // +#define AC97_PCBEEP_VOL 0x000a // none +#define AC97_PHONE_VOL 0x000c // TAD Input (mono) +#define AC97_MIC_VOL 0x000e // MIC Input (mono) +#define AC97_LINEIN_VOL 0x0010 // Line Input (stereo) +#define AC97_CD_VOL 0x0012 // CD Input (stereo) +#define AC97_VIDEO_VOL 0x0014 // none +#define AC97_AUX_VOL 0x0016 // Aux Input (stereo) +#define AC97_PCMOUT_VOL 0x0018 // Wave Output (stereo) +#define AC97_RECORD_SELECT 0x001a // +#define AC97_RECORD_GAIN 0x001c +#define AC97_RECORD_GAIN_MIC 0x001e +#define AC97_GENERAL_PURPOSE 0x0020 +#define AC97_3D_CONTROL 0x0022 +#define AC97_MODEM_RATE 0x0024 +#define AC97_POWER_CONTROL 0x0026 + +/* AC'97 2.0 */ +#define AC97_EXTENDED_ID 0x0028 /* Extended Audio ID */ +#define AC97_EXTENDED_STATUS 0x002A /* Extended Audio Status */ +#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */ +#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */ +#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */ +#define AC97_PCM_LR_ADC_RATE 0x0032 /* PCM LR ADC Rate */ +#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */ +#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */ +#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */ +#define AC97_RESERVED_3A 0x003A /* Reserved */ + +/* range 0x3c-0x58 - MODEM */ +#define AC97_EXTENDED_MODEM_ID 0x003C +#define AC97_EXTEND_MODEM_STAT 0x003E +#define AC97_LINE1_RATE 0x0040 +#define AC97_LINE2_RATE 0x0042 +#define AC97_HANDSET_RATE 0x0044 +#define AC97_LINE1_LEVEL 0x0046 +#define AC97_LINE2_LEVEL 0x0048 +#define AC97_HANDSET_LEVEL 0x004A +#define AC97_GPIO_CONFIG 0x004C +#define AC97_GPIO_POLARITY 0x004E +#define AC97_GPIO_STICKY 0x0050 +#define AC97_GPIO_WAKE_UP 0x0052 +#define AC97_GPIO_STATUS 0x0054 +#define AC97_MISC_MODEM_STAT 0x0056 +#define AC97_RESERVED_58 0x0058 + +/* registers 0x005a - 0x007a are vendor reserved */ + +#define AC97_VENDOR_ID1 0x007c +#define AC97_VENDOR_ID2 0x007e + +/* volume control bit defines */ +#define AC97_MUTE 0x8000 +#define AC97_MICBOOST 0x0040 +#define AC97_LEFTVOL 0x3f00 +#define AC97_RIGHTVOL 0x003f + +/* record mux defines */ +#define AC97_RECMUX_MIC 0x0000 +#define AC97_RECMUX_CD 0x0101 +#define AC97_RECMUX_VIDEO 0x0202 +#define AC97_RECMUX_AUX 0x0303 +#define AC97_RECMUX_LINE 0x0404 +#define AC97_RECMUX_STEREO_MIX 0x0505 +#define AC97_RECMUX_MONO_MIX 0x0606 +#define AC97_RECMUX_PHONE 0x0707 + +/* general purpose register bit defines */ +#define AC97_GP_LPBK 0x0080 /* Loopback mode */ +#define AC97_GP_MS 0x0100 /* Mic Select 0=Mic1, 1=Mic2 */ +#define AC97_GP_MIX 0x0200 /* Mono output select 0=Mix, 1=Mic */ +#define AC97_GP_RLBK 0x0400 /* Remote Loopback - Modem line codec */ +#define AC97_GP_LLBK 0x0800 /* Local Loopback - Modem Line codec */ +#define AC97_GP_LD 0x1000 /* Loudness 1=on */ +#define AC97_GP_3D 0x2000 /* 3D Enhancement 1=on */ +#define AC97_GP_ST 0x4000 /* Stereo Enhancement 1=on */ +#define AC97_GP_POP 0x8000 /* Pcm Out Path, 0=pre 3D, 1=post 3D */ + +/* powerdown control and status bit defines */ + +/* status */ +#define AC97_PWR_MDM 0x0010 /* Modem section ready */ +#define AC97_PWR_REF 0x0008 /* Vref nominal */ +#define AC97_PWR_ANL 0x0004 /* Analog section ready */ +#define AC97_PWR_DAC 0x0002 /* DAC section ready */ +#define AC97_PWR_ADC 0x0001 /* ADC section ready */ + +/* control */ +#define AC97_PWR_PR0 0x0100 /* ADC and Mux powerdown */ +#define AC97_PWR_PR1 0x0200 /* DAC powerdown */ +#define AC97_PWR_PR2 0x0400 /* Output mixer powerdown (Vref on) */ +#define AC97_PWR_PR3 0x0800 /* Output mixer powerdown (Vref off) */ +#define AC97_PWR_PR4 0x1000 /* AC-link powerdown */ +#define AC97_PWR_PR5 0x2000 /* Internal Clk disable */ +#define AC97_PWR_PR6 0x4000 /* HP amp powerdown */ +#define AC97_PWR_PR7 0x8000 /* Modem off - if supported */ + +/* useful power states */ +#define AC97_PWR_D0 0x0000 /* everything on */ +#define AC97_PWR_D1 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR4 +#define AC97_PWR_D2 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4 +#define AC97_PWR_D3 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4 +#define AC97_PWR_ANLOFF AC97_PWR_PR2|AC97_PWR_PR3 /* analog section off */ + +/* Total number of defined registers. */ +#define AC97_REG_CNT 64 + + +/* OSS interface to the ac97s.. */ +#define AC97_STEREO_MASK (SOUND_MASK_VOLUME|SOUND_MASK_PCM|\ + SOUND_MASK_LINE|SOUND_MASK_CD|\ + SOUND_MASK_ALTPCM|SOUND_MASK_IGAIN|\ + SOUND_MASK_LINE1|SOUND_MASK_VIDEO) + +#define AC97_SUPPORTED_MASK (AC97_STEREO_MASK | \ + SOUND_MASK_BASS|SOUND_MASK_TREBLE|\ + SOUND_MASK_SPEAKER|SOUND_MASK_MIC|\ + SOUND_MASK_PHONEIN|SOUND_MASK_PHONEOUT) + +#define AC97_RECORD_MASK (SOUND_MASK_MIC|\ + SOUND_MASK_CD|SOUND_MASK_IGAIN|SOUND_MASK_VIDEO|\ + SOUND_MASK_LINE1| SOUND_MASK_LINE|\ + SOUND_MASK_PHONEIN) + +#define supported_mixer(CODEC,FOO) ( CODEC->supported_mixers & (1<> PARTN_BITS) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/blkdev.h linux.16p3/include/linux/blkdev.h --- linux.vanilla/include/linux/blkdev.h Fri Apr 21 23:10:16 2000 +++ linux.16p3/include/linux/blkdev.h Mon May 15 18:26:02 2000 @@ -32,11 +32,39 @@ struct buffer_head * bh; struct buffer_head * bhtail; struct request * next; + int elevator_latency; }; typedef void (request_fn_proc) (void); typedef struct request ** (queue_proc) (kdev_t dev); +typedef struct elevator_s +{ + int read_latency; + int write_latency; + int max_bomb_segments; + unsigned int queue_ID; +} elevator_t; + +#define ELEVATOR_DEFAULTS \ +((elevator_t) { \ + 128, /* read_latency */ \ + 8192, /* write_latency */ \ + 4, /* max_bomb_segments */ \ + }) + +extern int blkelv_ioctl(kdev_t, unsigned long, unsigned long); + +typedef struct blkelv_ioctl_arg_s { + int queue_ID; + int read_latency; + int write_latency; + int max_bomb_segments; +} blkelv_ioctl_arg_t; + +#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t)) +#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t)) + struct blk_dev_struct { request_fn_proc *request_fn; /* @@ -47,6 +75,8 @@ struct request *current_request; struct request plug; struct tq_struct plug_tq; + + elevator_t elevator; }; struct sec_size { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/cdrom.h linux.16p3/include/linux/cdrom.h --- linux.vanilla/include/linux/cdrom.h Fri Apr 21 12:46:59 2000 +++ linux.16p3/include/linux/cdrom.h Thu May 4 00:41:42 2000 @@ -5,12 +5,14 @@ * 1994, 1995 Eberhard Moenkeberg, emoenke@gwdg.de * 1996 David van Leeuwen, david@tm.tno.nl * 1997, 1998 Erik Andersen, andersee@debian.org - * 1998, 1999 Jens Axboe, axboe@image.dk + * 1998-2000 Jens Axboe, axboe@suse.de */ #ifndef _LINUX_CDROM_H #define _LINUX_CDROM_H +#include + /******************************************************* * As of Linux 2.1.x, all Linux CD-ROM application programs will use this * (and only this) include file. It is my hope to provide Linux with @@ -94,16 +96,26 @@ #define CDROMPLAYBLK 0x5317 /* (struct cdrom_blk) */ /* - * These ioctls are used only used in optcd.c + * These ioctls are only used in optcd.c */ #define CDROMREADALL 0x5318 /* read all 2646 bytes */ -#define CDROMCLOSETRAY 0x5319 /* pendant of CDROMEJECT */ + +/* + * These ioctls are (now) only in ide-cd.c for controlling + * drive spindown time. They should be implemented in the + * Uniform driver, via generic packet commands, GPCMD_MODE_SELECT_10, + * GPCMD_MODE_SENSE_10 and the GPMODE_POWER_PAGE... + * -Erik + */ +#define CDROMGETSPINDOWN 0x531d +#define CDROMSETSPINDOWN 0x531e /* * These ioctls are implemented through the uniform CD-ROM driver * They _will_ be adopted by all CD-ROM drivers, when all the CD-ROM * drivers are eventually ported to the uniform CD-ROM driver interface. */ +#define CDROMCLOSETRAY 0x5319 /* pendant of CDROMEJECT */ #define CDROM_SET_OPTIONS 0x5320 /* Set behavior options */ #define CDROM_CLEAR_OPTIONS 0x5321 /* Clear behavior options */ #define CDROM_SELECT_SPEED 0x5322 /* Set the CD-ROM speed */ @@ -119,6 +131,15 @@ /* This ioctl is only used by sbpcd at the moment */ #define CDROMAUDIOBUFSIZ 0x5382 /* set the audio buffer size */ +/* DVD-ROM Specific ioctls */ +#define DVD_READ_STRUCT 0x5390 /* Read structure */ +#define DVD_WRITE_STRUCT 0x5391 /* Write structure */ +#define DVD_AUTH 0x5392 /* Authentication */ + +#define CDROM_SEND_PACKET 0x5393 /* send a packet to the drive */ +#define CDROM_NEXT_WRITABLE 0x5394 /* get next writable block */ +#define CDROM_LAST_WRITTEN 0x5395 /* get last block written on disc */ + /******************************************************* * CDROM IOCTL structures *******************************************************/ @@ -126,9 +147,9 @@ /* Address in MSF format */ struct cdrom_msf0 { - u_char minute; - u_char second; - u_char frame; + __u8 minute; + __u8 second; + __u8 frame; }; /* Address in either MSF or logical format */ @@ -141,48 +162,48 @@ /* This struct is used by the CDROMPLAYMSF ioctl */ struct cdrom_msf { - u_char cdmsf_min0; /* start minute */ - u_char cdmsf_sec0; /* start second */ - u_char cdmsf_frame0; /* start frame */ - u_char cdmsf_min1; /* end minute */ - u_char cdmsf_sec1; /* end second */ - u_char cdmsf_frame1; /* end frame */ + __u8 cdmsf_min0; /* start minute */ + __u8 cdmsf_sec0; /* start second */ + __u8 cdmsf_frame0; /* start frame */ + __u8 cdmsf_min1; /* end minute */ + __u8 cdmsf_sec1; /* end second */ + __u8 cdmsf_frame1; /* end frame */ }; /* This struct is used by the CDROMPLAYTRKIND ioctl */ struct cdrom_ti { - u_char cdti_trk0; /* start track */ - u_char cdti_ind0; /* start index */ - u_char cdti_trk1; /* end track */ - u_char cdti_ind1; /* end index */ + __u8 cdti_trk0; /* start track */ + __u8 cdti_ind0; /* start index */ + __u8 cdti_trk1; /* end track */ + __u8 cdti_ind1; /* end index */ }; /* This struct is used by the CDROMREADTOCHDR ioctl */ struct cdrom_tochdr { - u_char cdth_trk0; /* start track */ - u_char cdth_trk1; /* end track */ + __u8 cdth_trk0; /* start track */ + __u8 cdth_trk1; /* end track */ }; /* This struct is used by the CDROMVOLCTRL and CDROMVOLREAD ioctls */ struct cdrom_volctrl { - u_char channel0; - u_char channel1; - u_char channel2; - u_char channel3; + __u8 channel0; + __u8 channel1; + __u8 channel2; + __u8 channel3; }; /* This struct is used by the CDROMSUBCHNL ioctl */ struct cdrom_subchnl { - u_char cdsc_format; - u_char cdsc_audiostatus; - u_char cdsc_adr: 4; - u_char cdsc_ctrl: 4; - u_char cdsc_trk; - u_char cdsc_ind; + __u8 cdsc_format; + __u8 cdsc_audiostatus; + __u8 cdsc_adr: 4; + __u8 cdsc_ctrl: 4; + __u8 cdsc_trk; + __u8 cdsc_ind; union cdrom_addr cdsc_absaddr; union cdrom_addr cdsc_reladdr; }; @@ -191,12 +212,12 @@ /* This struct is used by the CDROMREADTOCENTRY ioctl */ struct cdrom_tocentry { - u_char cdte_track; - u_char cdte_adr :4; - u_char cdte_ctrl :4; - u_char cdte_format; + __u8 cdte_track; + __u8 cdte_adr :4; + __u8 cdte_ctrl :4; + __u8 cdte_format; union cdrom_addr cdte_addr; - u_char cdte_datamode; + __u8 cdte_datamode; }; /* This struct is used by the CDROMREADMODE1, and CDROMREADMODE2 ioctls */ @@ -211,9 +232,9 @@ struct cdrom_read_audio { union cdrom_addr addr; /* frame address */ - u_char addr_format; /* CDROM_LBA or CDROM_MSF */ + __u8 addr_format; /* CDROM_LBA or CDROM_MSF */ int nframes; /* number of 2352-byte-frames to read at once */ - u_char *buf; /* frame buffer (size: nframes*2352 bytes) */ + __u8 *buf; /* frame buffer (size: nframes*2352 bytes) */ }; /* This struct is used with the CDROMMULTISESSION ioctl */ @@ -222,8 +243,8 @@ union cdrom_addr addr; /* frame address: start-of-last-session (not the new "frame 16"!). Only valid if the "xa_flag" is true. */ - u_char xa_flag; /* 1: "is XA disk" */ - u_char addr_format; /* CDROM_LBA or CDROM_MSF */ + __u8 xa_flag; /* 1: "is XA disk" */ + __u8 addr_format; /* CDROM_LBA or CDROM_MSF */ }; /* This struct is used with the CDROM_GET_MCN ioctl. @@ -233,7 +254,7 @@ */ struct cdrom_mcn { - u_char medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */ + __u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */ }; /* This is used by the CDROMPLAYBLK ioctl */ @@ -243,6 +264,19 @@ unsigned short len; }; +#define CDROM_PACKET_SIZE 12 + +/* for CDROM_PACKET_COMMAND ioctl */ +struct cdrom_generic_command +{ + unsigned char cmd[CDROM_PACKET_SIZE]; + unsigned char *buffer; + unsigned int buflen; + int stat; + struct request_sense *sense; + void *reserved[3]; +}; + /* * A CD-ROM physical sector size is 2048, 2052, 2056, 2324, 2332, 2336, @@ -321,14 +355,6 @@ #define CDROM_AUDIO_ERROR 0x14 /* audio play stopped due to error */ #define CDROM_AUDIO_NO_STATUS 0x15 /* no current audio status to return */ -/* CD-ROM-specific SCSI command opcodes */ -#define SCMD_READ_TOC 0x43 /* read table of contents */ -#define SCMD_PLAYAUDIO_MSF 0x47 /* play data at time offset */ -#define SCMD_PLAYAUDIO_TI 0x48 /* play data at track/index */ -#define SCMD_PAUSE_RESUME 0x4B /* pause/resume audio */ -#define SCMD_READ_SUBCHANNEL 0x42 /* read SC info on playing disc */ -#define SCMD_PLAYAUDIO10 0x45 /* play data at logical block */ - /* capability flags used with the uniform CD-ROM driver */ #define CDC_CLOSE_TRAY 0x1 /* caddy systems _can't_ close */ #define CDC_OPEN_TRAY 0x2 /* but _can_ eject. */ @@ -342,6 +368,12 @@ #define CDC_RESET 0x200 /* hard reset device */ #define CDC_IOCTLS 0x400 /* driver has non-standard ioctls */ #define CDC_DRIVE_STATUS 0x800 /* driver implements drive status */ +#define CDC_GENERIC_PACKET 0x1000 /* driver implements generic packets */ +#define CDC_CD_R 0x2000 /* drive is a CD-R */ +#define CDC_CD_RW 0x4000 /* drive is a CD-RW */ +#define CDC_DVD 0x8000 /* drive is a DVD */ +#define CDC_DVD_R 0x10000 /* drive can write DVD-R */ +#define CDC_DVD_RAM 0x20000 /* drive can write DVD-RAM */ /* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */ #define CDS_NO_INFO 0 /* if not implemented */ @@ -370,7 +402,316 @@ #define CDSL_NONE ((int) (~0U>>1)-1) #define CDSL_CURRENT ((int) (~0U>>1)) +/* For partition based multisession access. IDE can handle 64 partitions + * per drive - SCSI CD-ROM's use minors to differentiate between the + * various drives, so we can't do multisessions the same way there. + * Use the -o session=x option to mount on them. + */ +#define CD_PART_MAX 64 +#define CD_PART_MASK (CD_PART_MAX - 1) + +/********************************************************************* + * Generic Packet commands, MMC commands, and such + *********************************************************************/ + + /* The generic packet command opcodes for CD/DVD Logical Units, + * From Table 57 of the SFF8090 Ver. 3 (Mt. Fuji) draft standard. */ +#define GPCMD_BLANK 0xa1 +#define GPCMD_CLOSE_TRACK 0x5b +#define GPCMD_FLUSH_CACHE 0x35 +#define GPCMD_FORMAT_UNIT 0x04 +#define GPCMD_GET_CONFIGURATION 0x46 +#define GPCMD_GET_EVENT_STATUS_NOTIFICATION 0x4a +#define GPCMD_GET_PERFORMANCE 0xac +#define GPCMD_INQUIRY 0x12 +#define GPCMD_LOAD_UNLOAD 0xa6 +#define GPCMD_MECHANISM_STATUS 0xbd +#define GPCMD_MODE_SELECT_10 0x55 +#define GPCMD_MODE_SENSE_10 0x5a +#define GPCMD_PAUSE_RESUME 0x4b +#define GPCMD_PLAY_AUDIO_10 0x45 +#define GPCMD_PLAY_AUDIO_MSF 0x47 +#define GPCMD_PLAY_CD 0xbc +#define GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e +#define GPCMD_READ_10 0x28 +#define GPCMD_READ_12 0xa8 +#define GPCMD_READ_CDVD_CAPACITY 0x25 +#define GPCMD_READ_CD 0xbe +#define GPCMD_READ_CD_MSF 0xb9 +#define GPCMD_READ_DISC_INFO 0x51 +#define GPCMD_READ_DVD_STRUCTURE 0xad +#define GPCMD_READ_FORMAT_CAPACITIES 0x23 +#define GPCMD_READ_HEADER 0x44 +#define GPCMD_READ_TRACK_RZONE_INFO 0x52 +#define GPCMD_READ_SUBCHANNEL 0x42 +#define GPCMD_READ_TOC_PMA_ATIP 0x43 +#define GPCMD_REPAIR_RZONE_TRACK 0x58 +#define GPCMD_REPORT_KEY 0xa4 +#define GPCMD_REQUEST_SENSE 0x03 +#define GPCMD_RESERVE_RZONE_TRACK 0x53 +#define GPCMD_SCAN 0xba +#define GPCMD_SEEK 0x2b +#define GPCMD_SEND_DVD_STRUCTURE 0xad +#define GPCMD_SEND_EVENT 0xa2 +#define GPCMD_SEND_KEY 0xa3 +#define GPCMD_SEND_OPC 0x54 +#define GPCMD_SET_READ_AHEAD 0xa7 +#define GPCMD_SET_STREAMING 0xb6 +#define GPCMD_START_STOP_UNIT 0x1b +#define GPCMD_STOP_PLAY_SCAN 0x4e +#define GPCMD_TEST_UNIT_READY 0x00 +#define GPCMD_VERIFY_10 0x2f +#define GPCMD_WRITE_10 0x2a +#define GPCMD_WRITE_AND_VERIFY_10 0x2e +/* This is listed as optional in ATAPI 2.6, but is (curiously) + * missing from Mt. Fuji, Table 57. It _is_ mentioned in Mt. Fuji + * Table 377 as an MMC command for SCSi devices though... Most ATAPI + * drives support it. */ +#define GPCMD_SET_SPEED 0xbb +/* This seems to be a SCSI specific CD-ROM opcode + * to play data at track/index */ +#define GPCMD_PLAYAUDIO_TI 0x48 + +/* Is this really used by anything? I couldn't find these...*/ +#if 0 +/* MMC2/MTFuji Opcodes */ +#define ERASE 0x2c +#define READ_BUFFER 0x3c +#endif + + + + +/* Mode page codes for mode sense/set */ +#define GPMODE_R_W_ERROR_PAGE 0x01 +#define GPMODE_WRITE_PARMS_PAGE 0x05 +#define GPMODE_AUDIO_CTL_PAGE 0x0e +#define GPMODE_POWER_PAGE 0x1a +#define GPMODE_FAULT_FAIL_PAGE 0x1c +#define GPMODE_TO_PROTECT_PAGE 0x1d +#define GPMODE_CAPABILITIES_PAGE 0x2a +#define GPMODE_ALL_PAGES 0x3f +/* Not in Mt. Fuji, but in ATAPI 2.6 -- depricated now in favor + * of MODE_SENSE_POWER_PAGE */ +#define GPMODE_CDROM_PAGE 0x0d + + + +/* DVD struct types */ +#define DVD_STRUCT_PHYSICAL 0x00 +#define DVD_STRUCT_COPYRIGHT 0x01 +#define DVD_STRUCT_DISCKEY 0x02 +#define DVD_STRUCT_BCA 0x03 +#define DVD_STRUCT_MANUFACT 0x04 + +struct dvd_layer { + __u8 book_version : 4; + __u8 book_type : 4; + __u8 min_rate : 4; + __u8 disc_size : 4; + __u8 layer_type : 4; + __u8 track_path : 1; + __u8 nlayers : 2; + __u8 track_density : 4; + __u8 linear_density : 4; + __u8 bca : 1; + __u32 start_sector; + __u32 end_sector; + __u32 end_sector_l0; +}; + +struct dvd_physical { + __u8 type; + __u8 layer_num; + struct dvd_layer layer[4]; +}; + +struct dvd_copyright { + __u8 type; + + __u8 layer_num; + __u8 cpst; + __u8 rmi; +}; + +struct dvd_disckey { + __u8 type; + + unsigned agid : 2; + __u8 value[2048]; +}; + +struct dvd_bca { + __u8 type; + + int len; + __u8 value[188]; +}; + +struct dvd_manufact { + __u8 type; + + __u8 layer_num; + int len; + __u8 value[2048]; +}; + +typedef union { + __u8 type; + + struct dvd_physical physical; + struct dvd_copyright copyright; + struct dvd_disckey disckey; + struct dvd_bca bca; + struct dvd_manufact manufact; +} dvd_struct; + +/* + * DVD authentication ioctl + */ + +/* Authentication states */ +#define DVD_LU_SEND_AGID 0 +#define DVD_HOST_SEND_CHALLENGE 1 +#define DVD_LU_SEND_KEY1 2 +#define DVD_LU_SEND_CHALLENGE 3 +#define DVD_HOST_SEND_KEY2 4 + +/* Termination states */ +#define DVD_AUTH_ESTABLISHED 5 +#define DVD_AUTH_FAILURE 6 + +/* Other functions */ +#define DVD_LU_SEND_TITLE_KEY 7 +#define DVD_LU_SEND_ASF 8 +#define DVD_INVALIDATE_AGID 9 +#define DVD_LU_SEND_RPC_STATE 10 +#define DVD_HOST_SEND_RPC_STATE 11 + +/* State data */ +typedef __u8 dvd_key[5]; /* 40-bit value, MSB is first elem. */ +typedef __u8 dvd_challenge[10]; /* 80-bit value, MSB is first elem. */ + +struct dvd_lu_send_agid { + __u8 type; + unsigned agid : 2; +}; + +struct dvd_host_send_challenge { + __u8 type; + unsigned agid : 2; + + dvd_challenge chal; +}; + +struct dvd_send_key { + __u8 type; + unsigned agid : 2; + + dvd_key key; +}; + +struct dvd_lu_send_challenge { + __u8 type; + unsigned agid : 2; + + dvd_challenge chal; +}; + +#define DVD_CPM_NO_COPYRIGHT 0 +#define DVD_CPM_COPYRIGHTED 1 + +#define DVD_CP_SEC_NONE 0 +#define DVD_CP_SEC_EXIST 1 + +#define DVD_CGMS_UNRESTRICTED 0 +#define DVD_CGMS_SINGLE 2 +#define DVD_CGMS_RESTRICTED 3 + +struct dvd_lu_send_title_key { + __u8 type; + unsigned agid : 2; + + dvd_key title_key; + int lba; + unsigned cpm : 1; + unsigned cp_sec : 1; + unsigned cgms : 2; +}; + +struct dvd_lu_send_asf { + __u8 type; + unsigned agid : 2; + + unsigned asf : 1; +}; + +struct dvd_host_send_rpcstate { + __u8 type; + __u8 pdrc; +}; + +struct dvd_lu_send_rpcstate { + __u8 type : 2; + __u8 vra : 3; + __u8 ucca : 3; + __u8 region_mask; + __u8 rpc_scheme; +}; + +typedef union { + __u8 type; + + struct dvd_lu_send_agid lsa; + struct dvd_host_send_challenge hsc; + struct dvd_send_key lsk; + struct dvd_lu_send_challenge lsc; + struct dvd_send_key hsk; + struct dvd_lu_send_title_key lstk; + struct dvd_lu_send_asf lsasf; + struct dvd_host_send_rpcstate hrpcs; + struct dvd_lu_send_rpcstate lrpcs; +} dvd_authinfo; + +struct request_sense { +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 valid : 1; + __u8 error_code : 7; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 error_code : 7; + __u8 valid : 1; +#endif + __u8 segment_number; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved1 : 2; + __u8 ili : 1; + __u8 reserved2 : 1; + __u8 sense_key : 4; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 sense_key : 4; + __u8 reserved2 : 1; + __u8 ili : 1; + __u8 reserved1 : 2; +#endif + __u8 information[4]; + __u8 add_sense_len; + __u8 command_info[4]; + __u8 asc; + __u8 ascq; + __u8 fruc; + __u8 sks[3]; + __u8 asb[46]; +}; + #ifdef __KERNEL__ + +struct cdrom_write_settings { + unsigned char fpacket; /* fixed/variable packets */ + unsigned long packet_size; /* write out this number of packets */ + unsigned long nwa; /* next writeable address */ + unsigned char writeable; /* cdrom is writeable */ +}; + /* Uniform cdrom data structures for cdrom.c */ struct cdrom_device_info { struct cdrom_device_ops *ops; /* link to device_ops */ @@ -382,11 +723,14 @@ int speed; /* maximum speed for reading data */ int capacity; /* number of discs in jukebox */ /* device-related storage */ - int options : 30; /* options flags */ - unsigned mc_flags : 2; /* media change buffer flags */ + int options : 30; /* options flags */ + unsigned mc_flags : 2; /* media change buffer flags */ int use_count; /* number of times device opened */ char name[20]; /* name of the device type */ - +/* per-device flags */ + __u8 sanyo_slot : 2; /* Sanyo 3 CD changer support */ + __u8 reserved : 6; /* not used yet */ + struct cdrom_write_settings write; }; struct cdrom_device_ops { @@ -413,6 +757,9 @@ /* driver specifications */ const int capability; /* capability flags */ int n_minors; /* number of active minor devices */ + /* handle uniform packets for scsi type devices (scsi,atapi) */ + int (*generic_packet) (struct cdrom_device_info *, + struct cdrom_generic_command *); }; /* the general file operations structure: */ @@ -420,6 +767,7 @@ extern int register_cdrom(struct cdrom_device_info *cdi); extern int unregister_cdrom(struct cdrom_device_info *cdi); + typedef struct { int data; int audio; @@ -427,7 +775,236 @@ int xa; long error; } tracktype; + extern void cdrom_count_tracks(struct cdrom_device_info *cdi,tracktype* tracks); +extern int cdrom_get_next_writable(kdev_t dev, long *next_writable); +extern int cdrom_get_last_written(kdev_t dev, long *last_written); +extern int cdrom_number_of_slots(struct cdrom_device_info *cdi); +extern int cdrom_select_disc(struct cdrom_device_info *cdi, int slot); +extern int cdrom_mode_select(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc); +extern int cdrom_mode_sense(struct cdrom_device_info *cdi, + struct cdrom_generic_command *cgc, + int page_code, int page_control); +extern void init_cdrom_command(struct cdrom_generic_command *cgc, + void *buffer, int len); + + +typedef struct { + __u16 disc_information_length; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved1 : 3; + __u8 erasable : 1; + __u8 border_status : 2; + __u8 disc_border : 2; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 disc_border : 2; + __u8 border_status : 2; + __u8 erasable : 1; + __u8 reserved1 : 3; +#else +#error "Please fix " +#endif + __u8 n_first_track; + __u8 n_sessions_lsb; + __u8 first_track_lsb; + __u8 last_track_lsb; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 did_v : 1; + __u8 dbc_v : 1; + __u8 uru : 1; + __u8 reserved2 : 5; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 reserved2 : 5; + __u8 uru : 1; + __u8 dbc_v : 1; + __u8 did_v : 1; +#endif + __u8 disc_type; + __u8 n_sessions_msb; + __u8 first_track_msb; + __u8 last_track_msb; + __u32 disc_id; + __u32 lead_in; + __u32 lead_out; + __u8 disc_bar_code[8]; + __u8 reserved3; + __u8 n_opc; +} disc_information; + +typedef struct { + __u16 track_information_length; + __u8 track_lsb; + __u8 session_lsb; + __u8 reserved1; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved2 : 2; + __u8 damage : 1; + __u8 copy : 1; + __u8 track_mode : 4; + __u8 rt : 1; + __u8 blank : 1; + __u8 packet : 1; + __u8 fp : 1; + __u8 data_mode : 4; + __u8 reserved3 : 6; + __u8 lra_v : 1; + __u8 nwa_v : 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 track_mode : 4; + __u8 copy : 1; + __u8 damage : 1; + __u8 reserved2 : 2; + __u8 data_mode : 4; + __u8 fp : 1; + __u8 packet : 1; + __u8 blank : 1; + __u8 rt : 1; + __u8 nwa_v : 1; + __u8 lra_v : 1; + __u8 reserved3 : 6; +#endif + __u32 track_start; + __u32 next_writable; + __u32 free_blocks; + __u32 fixed_packet_size; + __u32 track_size; + __u32 last_rec_address; +} track_information; + +/* The SCSI spec says there could be 256 slots. */ +#define CDROM_MAX_SLOTS 256 + +struct cdrom_mechstat_header { +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 fault : 1; + __u8 changer_state : 2; + __u8 curslot : 5; + __u8 mech_state : 3; + __u8 door_open : 1; + __u8 reserved1 : 4; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 curslot : 5; + __u8 changer_state : 2; + __u8 fault : 1; + __u8 reserved1 : 4; + __u8 door_open : 1; + __u8 mech_state : 3; +#endif + __u8 curlba[3]; + __u8 nslots; + __u16 slot_tablelen; +}; + +struct cdrom_slot { +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 disc_present : 1; + __u8 reserved1 : 6; + __u8 change : 1; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 change : 1; + __u8 reserved1 : 6; + __u8 disc_present : 1; +#endif + __u8 reserved2[3]; +}; + +struct cdrom_changer_info { + struct cdrom_mechstat_header hdr; + struct cdrom_slot slots[CDROM_MAX_SLOTS]; +}; + +typedef enum { + mechtype_caddy = 0, + mechtype_tray = 1, + mechtype_popup = 2, + mechtype_individual_changer = 4, + mechtype_cartridge_changer = 5 +} mechtype_t; + +struct mode_page_header { + __u16 mode_data_length; + __u8 medium_type; + __u8 reserved1; + __u8 reserved2; + __u8 reserved3; + __u16 desc_length; +}; + +typedef struct { + struct mode_page_header header; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 ps : 1; + __u8 reserved1 : 1; + __u8 page_code : 6; + __u8 page_length; + __u8 reserved2 : 1; + __u8 bufe : 1; + __u8 ls_v : 1; + __u8 test_write : 1; + __u8 write_type : 4; + __u8 multi_session : 2; /* or border, DVD */ + __u8 fp : 1; + __u8 copy : 1; + __u8 track_mode : 4; + __u8 reserved3 : 4; + __u8 data_block_type : 4; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 page_code : 6; + __u8 reserved1 : 1; + __u8 ps : 1; + __u8 page_length; + __u8 write_type : 4; + __u8 test_write : 1; + __u8 ls_v : 1; + __u8 bufe : 1; + __u8 reserved2 : 1; + __u8 track_mode : 4; + __u8 copy : 1; + __u8 fp : 1; + __u8 multi_session : 2; /* or border, DVD */ + __u8 data_block_type : 4; + __u8 reserved3 : 4; +#endif + __u8 link_size; + __u8 reserved4; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 reserved5 : 2; + __u8 app_code : 6; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 app_code : 6; + __u8 reserved5 : 2; +#endif + __u8 session_format; + __u8 reserved6; + __u32 packet_size; + __u16 audio_pause; + __u8 mcn[16]; + __u8 isrc[16]; + __u8 subhdr0; + __u8 subhdr1; + __u8 subhdr2; + __u8 subhdr3; +} __attribute__((packed)) write_param_page; + +typedef struct { + __u16 report_key_length; + __u8 reserved1; + __u8 reserved2; +#if defined(__BIG_ENDIAN_BITFIELD) + __u8 type_code : 2; + __u8 vra : 3; + __u8 ucca : 3; +#elif defined(__LITTLE_ENDIAN_BITFIELD) + __u8 ucca : 3; + __u8 vra : 3; + __u8 type_code : 2; +#endif + __u8 region_mask; + __u8 rpc_scheme; + __u8 reserved3; +} rpc_state_t; + #endif /* End of kernel only stuff */ #endif /* _LINUX_CDROM_H */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/cyclades.h linux.16p3/include/linux/cyclades.h --- linux.vanilla/include/linux/cyclades.h Fri Apr 21 12:46:59 2000 +++ linux.16p3/include/linux/cyclades.h Mon May 15 12:03:36 2000 @@ -7,6 +7,10 @@ * * This file contains the general definitions for the cyclades.c driver *$Log: cyclades.h,v $ + *Revision 3.1 2000/04/19 18:52:52 ivan + *converted address fields to unsigned long and added fields for physical + *addresses on cyclades_card structure; + * *Revision 3.0 1998/11/02 14:20:59 ivan *added nports field on cyclades_card structure; * @@ -500,8 +504,10 @@ /* Per card data structure */ struct cyclades_card { - long base_addr; - long ctl_addr; + unsigned long base_phys; + unsigned long ctl_phys; + unsigned long base_addr; + unsigned long ctl_addr; int irq; int num_chips; /* 0 if card absent, -1 if Z/PCI, else Y */ int first_line; /* minor number of first channel on card */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/dasd.h linux.16p3/include/linux/dasd.h --- linux.vanilla/include/linux/dasd.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/include/linux/dasd.h Mon May 15 18:26:02 2000 @@ -0,0 +1,241 @@ + +#ifndef DASD_H +#define DASD_H + +/* First of all the external stuff */ +#include +#include +#include + +#define IOCTL_LETTER 'D' +/* Format the volume or an extent */ +#define BIODASDFORMAT _IOW(IOCTL_LETTER,0,format_data_t) +/* Disable the volume (for Linux) */ +#define BIODASDDISABLE _IO(IOCTL_LETTER,1) +/* Enable the volume (for Linux) */ +#define BIODASDENABLE _IO(IOCTL_LETTER,2) +/* Stuff for reading and writing the Label-Area to/from user space */ +#define BIODASDGTVLBL _IOR(IOCTL_LETTER,3,dasd_volume_label_t) +#define BIODASDSTVLBL _IOW(IOCTL_LETTER,4,dasd_volume_label_t) +#define BIODASDRWTB _IOWR(IOCTL_LETTER,5,int) +#define BIODASDRSID _IOR(IOCTL_LETTER,6,senseid_t) +#define BIODASDRLB _IOR(IOCTL_LETTER,7,int) +#define BLKGETBSZ _IOR(IOCTL_LETTER,8,int) + +typedef struct { + int start_unit; + int stop_unit; + int blksize; +} format_data_t; + +typedef +union { + char bytes[512]; + struct { + /* 80 Bytes of Label data */ + char identifier[4]; /* e.g. "LNX1", "VOL1" or "CMS1" */ + char label[6]; /* Given by user */ + char security; + char vtoc[5]; /* Null in "LNX1"-labelled partitions */ + char reserved0[5]; + long ci_size; + long blk_per_ci; + long lab_per_ci; + char reserved1[4]; + char owner[0xe]; + char no_part; + char reserved2[0x1c]; + /* 16 Byte of some information on the dasd */ + short blocksize; + char nopart; + char unused; + long unused2[3]; + /* 7*10 = 70 Bytes of partition data */ + struct { + char type; + long start; + long size; + char unused; + } part[7]; + } __attribute__ ((packed)) label; +} dasd_volume_label_t; + +typedef union { + struct { + unsigned long no; + unsigned int ct; + } __attribute__ ((packed)) input; + struct { + unsigned long noct; + } __attribute__ ((packed)) output; +} __attribute__ ((packed)) dasd_xlate_t; + +int dasd_init (void); +#ifdef MODULE +int init_module (void); +void cleanup_module (void); +#endif /* MODULE */ + +/* Definitions for blk.h */ +/* #define DASD_MAGIC 0x44415344 is ascii-"DASD" */ +/* #define dasd_MAGIC 0x64617364; is ascii-"dasd" */ +#define DASD_MAGIC 0xC4C1E2C4 /* is ebcdic-"DASD" */ +#define dasd_MAGIC 0x8481A284 /* is ebcdic-"dasd" */ +#define MDSK_MAGIC 0xD4C4E2D2 /* is ebcdic-"MDSK" */ +#define mdsk_MAGIC 0x9484A292 /* is ebcdic-"mdsk" */ +#define ERP_MAGIC 0xC5D9D740 /* is ebcdic-"ERP" */ +#define erp_MAGIC 0x45999740 /* is ebcdic-"erp" */ + +#define DASD_NAME "dasd" +#define DASD_PARTN_BITS 2 +#define DASD_MAX_DEVICES (256>>DASD_PARTN_BITS) + +#define MAJOR_NR DASD_MAJOR +#define PARTN_BITS DASD_PARTN_BITS + +#ifdef __KERNEL__ +/* Now lets turn to the internal sbtuff */ +/* + define the debug levels: + - 0 No debugging output to console or syslog + - 1 Log internal errors to syslog, ignore check conditions + - 2 Log internal errors and check conditions to syslog + - 3 Log internal errors to console, log check conditions to syslog + - 4 Log internal errors and check conditions to console + - 5 panic on internal errors, log check conditions to console + - 6 panic on both, internal errors and check conditions + */ +#define DASD_DEBUG 4 + +#define DASD_PROFILE +/* + define the level of paranoia + - 0 quite sure, that things are going right + - 1 sanity checking, only to avoid panics + - 2 normal sanity checking + - 3 extensive sanity checks + - 4 exhaustive debug messages + */ +#define DASD_PARANOIA 2 + +/* + define the depth of flow control, which is logged as a check condition + - 0 No flow control messages + - 1 Entry of functions logged like check condition + - 2 Entry and exit of functions logged like check conditions + - 3 Internal structure broken down + - 4 unrolling of loops,... + */ +#define DASD_FLOW_CONTROL 0 + +#if DASD_DEBUG > 0 +#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) +#define PRINT_INFO(x...) printk ( KERN_INFO PRINTK_HEADER x ) +#define PRINT_WARN(x...) printk ( KERN_WARNING PRINTK_HEADER x ) +#define PRINT_ERR(x...) printk ( KERN_ERR PRINTK_HEADER x ) +#define PRINT_FATAL(x...) panic ( PRINTK_HEADER x ) +#else +#define PRINT_DEBUG(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) +#define PRINT_INFO(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) +#define PRINT_WARN(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) +#define PRINT_ERR(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) +#define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) +#endif /* DASD_DEBUG */ + +#define INTERNAL_ERRMSG(x,y...) \ +"Internal error: in file " __FILE__ " line: %d: " x, __LINE__, y +#define INTERNAL_CHKMSG(x,y...) \ +"Inconsistency: in file " __FILE__ " line: %d: " x, __LINE__, y +#define INTERNAL_FLWMSG(x,y...) \ +"Flow control: file " __FILE__ " line: %d: " x, __LINE__, y + +#if DASD_DEBUG > 4 +#define INTERNAL_ERROR(x...) PRINT_FATAL ( INTERNAL_ERRMSG ( x ) ) +#elif DASD_DEBUG > 2 +#define INTERNAL_ERROR(x...) PRINT_ERR ( INTERNAL_ERRMSG ( x ) ) +#elif DASD_DEBUG > 0 +#define INTERNAL_ERROR(x...) PRINT_WARN ( INTERNAL_ERRMSG ( x ) ) +#else +#define INTERNAL_ERROR(x...) +#endif /* DASD_DEBUG */ + +#if DASD_DEBUG > 5 +#define INTERNAL_CHECK(x...) PRINT_FATAL ( INTERNAL_CHKMSG ( x ) ) +#elif DASD_DEBUG > 3 +#define INTERNAL_CHECK(x...) PRINT_ERR ( INTERNAL_CHKMSG ( x ) ) +#elif DASD_DEBUG > 1 +#define INTERNAL_CHECK(x...) PRINT_WARN ( INTERNAL_CHKMSG ( x ) ) +#else +#define INTERNAL_CHECK(x...) +#endif /* DASD_DEBUG */ + +#if DASD_DEBUG > 3 +#define INTERNAL_FLOW(x...) PRINT_ERR ( INTERNAL_FLWMSG ( x ) ) +#elif DASD_DEBUG > 2 +#define INTERNAL_FLOW(x...) PRINT_WARN ( INTERNAL_FLWMSG ( x ) ) +#else +#define INTERNAL_FLOW(x...) +#endif /* DASD_DEBUG */ + +#if DASD_FLOW_CONTROL > 0 +#define FUNCTION_ENTRY(x) INTERNAL_FLOW( x "entered %s\n","" ); +#else +#define FUNCTION_ENTRY(x) +#endif /* DASD_FLOW_CONTROL */ + +#if DASD_FLOW_CONTROL > 1 +#define FUNCTION_EXIT(x) INTERNAL_FLOW( x "exited %s\n","" ); +#else +#define FUNCTION_EXIT(x) +#endif /* DASD_FLOW_CONTROL */ + +#if DASD_FLOW_CONTROL > 2 +#define FUNCTION_CONTROL(x...) INTERNAL_FLOW( x ); +#else +#define FUNCTION_CONTROL(x...) +#endif /* DASD_FLOW_CONTROL */ + +#if DASD_FLOW_CONTROL > 3 +#define LOOP_CONTROL(x...) INTERNAL_FLOW( x ); +#else +#define LOOP_CONTROL(x...) +#endif /* DASD_FLOW_CONTROL */ + +#define DASD_DO_IO_SLEEP 0x01 +#define DASD_DO_IO_NOLOCK 0x02 +#define DASD_DO_IO_NODEC 0x04 + +#define DASD_NOT_FORMATTED 0x01 + +extern struct wait_queue *dasd_waitq; + +#undef DEBUG_DASD_MALLOC +#ifdef DEBUG_DASD_MALLOC +void *b; +#define kmalloc(x...) (PRINT_INFO(" kmalloc %p\n",b=kmalloc(x)),b) +#define kfree(x) PRINT_INFO(" kfree %p\n",x);kfree(x) +#define get_free_page(x...) (PRINT_INFO(" gfp %p\n",b=get_free_page(x)),b) +#define __get_free_pages(x...) (PRINT_INFO(" gfps %p\n",b=__get_free_pages(x)),b) +#endif /* DEBUG_DASD_MALLOC */ + +#endif /* __KERNEL__ */ +#endif /* DASD_H */ + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 4 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -4 + * c-argdecl-indent: 4 + * c-label-offset: -4 + * c-continued-statement-offset: 4 + * c-continued-brace-offset: 0 + * indent-tabs-mode: nil + * tab-width: 8 + * End: + */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/fs.h linux.16p3/include/linux/fs.h --- linux.vanilla/include/linux/fs.h Fri Apr 21 23:10:16 2000 +++ linux.16p3/include/linux/fs.h Mon May 15 18:01:41 2000 @@ -154,6 +154,10 @@ #define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */ #define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */ #define BLKSSZGET _IO(0x12,104) /* get block device sector size */ +#if 0 +#define BLKELVGET _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))/* elevator get */ +#define BLKELVSET _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))/* elevator set */ +#endif #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/i2o-dev.h linux.16p3/include/linux/i2o-dev.h --- linux.vanilla/include/linux/i2o-dev.h Thu Jan 1 01:00:00 1970 +++ linux.16p3/include/linux/i2o-dev.h Wed Apr 19 14:25:10 2000 @@ -0,0 +1,397 @@ +/* + * I2O user space accessible structures/APIs + * + * (c) Copyright 1999, 2000 Red Hat Software + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + ************************************************************************* + * + * This header file defines the I2O APIs that are available to both + * the kernel and user level applications. Kernel specific structures + * are defined in i2o_osm. OSMs should include _only_ i2o_osm.h which + * automatically includs this file. + * + */ + +#ifndef _I2O_DEV_H +#define _I2O_DEV_H + +/* How many controllers are we allowing */ +#define MAX_I2O_CONTROLLERS 32 + +#include + +/* + * I2O Control IOCTLs and structures + */ +#define I2O_MAGIC_NUMBER 'i' +#define I2OGETIOPS _IOR(I2O_MAGIC_NUMBER,0,u8[MAX_I2O_CONTROLLERS]) +#define I2OHRTGET _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct) +#define I2OLCTGET _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct) +#define I2OPARMSET _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget) +#define I2OPARMGET _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget) +#define I2OSWDL _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer) +#define I2OSWUL _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer) +#define I2OSWDEL _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer) +#define I2OVALIDATE _IOR(I2O_MAGIC_NUMBER,8,u32) +#define I2OHTML _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html) +#define I2OEVTREG _IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id) +#define I2OEVTGET _IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info) + +struct i2o_cmd_hrtlct +{ + unsigned int iop; /* IOP unit number */ + void *resbuf; /* Buffer for result */ + unsigned int *reslen; /* Buffer length in bytes */ +}; + +struct i2o_cmd_psetget +{ + unsigned int iop; /* IOP unit number */ + unsigned int tid; /* Target device TID */ + void *opbuf; /* Operation List buffer */ + unsigned int oplen; /* Operation List buffer length in bytes */ + void *resbuf; /* Result List buffer */ + unsigned int *reslen; /* Result List buffer length in bytes */ +}; + +struct i2o_sw_xfer +{ + unsigned int iop; /* IOP unit number */ + unsigned char flags; /* Flags field */ + unsigned char sw_type; /* Software type */ + unsigned int sw_id; /* Software ID */ + void *buf; /* Pointer to software buffer */ + unsigned int *swlen; /* Length of software data */ + unsigned int *maxfrag; /* Maximum fragment count */ + unsigned int *curfrag; /* Current fragment count */ +}; + +struct i2o_html +{ + unsigned int iop; /* IOP unit number */ + unsigned int tid; /* Target device ID */ + unsigned int page; /* HTML page */ + void *resbuf; /* Buffer for reply HTML page */ + unsigned int *reslen; /* Length in bytes of reply buffer */ + void *qbuf; /* Pointer to HTTP query string */ + unsigned int qlen; /* Length in bytes of query string buffer */ +}; + +#define I2O_EVT_Q_LEN 32 + +struct i2o_evt_id +{ + unsigned int iop; + unsigned int tid; + unsigned int evt_mask; +}; + +/* Event data size = frame size - message header + evt indicator */ +#define I2O_EVT_DATA_SIZE 88 + +struct i2o_evt_info +{ + struct i2o_evt_id id; + unsigned char evt_data[I2O_EVT_DATA_SIZE]; + unsigned int data_size; +}; + +struct i2o_evt_get +{ + struct i2o_evt_info info; + int pending; + int lost; +}; + + +/************************************************************************** + * HRT related constants and structures + **************************************************************************/ +#define I2O_BUS_LOCAL 0 +#define I2O_BUS_ISA 1 +#define I2O_BUS_EISA 2 +#define I2O_BUS_MCA 3 +#define I2O_BUS_PCI 4 +#define I2O_BUS_PCMCIA 5 +#define I2O_BUS_NUBUS 6 +#define I2O_BUS_CARDBUS 7 +#define I2O_BUS_UNKNOWN 0x80 + +#ifndef __KERNEL__ + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; + +#endif /* __KERNEL__ */ + +typedef struct _i2o_pci_bus { + u8 PciFunctionNumber; + u8 PciDeviceNumber; + u8 PciBusNumber; + u8 reserved; + u16 PciVendorID; + u16 PciDeviceID; +} i2o_pci_bus; + +typedef struct _i2o_local_bus { + u16 LbBaseIOPort; + u16 reserved; + u32 LbBaseMemoryAddress; +} i2o_local_bus; + +typedef struct _i2o_isa_bus { + u16 IsaBaseIOPort; + u8 CSN; + u8 reserved; + u32 IsaBaseMemoryAddress; +} i2o_isa_bus; + +typedef struct _i2o_eisa_bus_info { + u16 EisaBaseIOPort; + u8 reserved; + u8 EisaSlotNumber; + u32 EisaBaseMemoryAddress; +} i2o_eisa_bus; + +typedef struct _i2o_mca_bus { + u16 McaBaseIOPort; + u8 reserved; + u8 McaSlotNumber; + u32 McaBaseMemoryAddress; +} i2o_mca_bus; + +typedef struct _i2o_other_bus { + u16 BaseIOPort; + u16 reserved; + u32 BaseMemoryAddress; +} i2o_other_bus; + +typedef struct _i2o_hrt_entry { + u32 adapter_id; + u32 parent_tid:12; + u32 state:4; + u32 bus_num:8; + u32 bus_type:8; + union { + i2o_pci_bus pci_bus; + i2o_local_bus local_bus; + i2o_isa_bus isa_bus; + i2o_eisa_bus eisa_bus; + i2o_mca_bus mca_bus; + i2o_other_bus other_bus; + } bus; +} i2o_hrt_entry; + +typedef struct _i2o_hrt { + u16 num_entries; + u8 entry_len; + u8 hrt_version; + u32 change_ind; + i2o_hrt_entry hrt_entry[1]; +} i2o_hrt; + +typedef struct _i2o_lct_entry { + u32 entry_size:16; + u32 tid:12; + u32 reserved:4; + u32 change_ind; + u32 device_flags; + u32 class_id:12; + u32 version:4; + u32 vendor_id:16; + u32 sub_class; + u32 user_tid:12; + u32 parent_tid:12; + u32 bios_info:8; + u8 identity_tag[8]; + u32 event_capabilities; +} i2o_lct_entry; + +typedef struct _i2o_lct { + u32 table_size:16; + u32 boot_tid:12; + u32 lct_ver:4; + u32 iop_flags; + u32 change_ind; + i2o_lct_entry lct_entry[1]; +} i2o_lct; + +typedef struct _i2o_status_block { + u16 org_id; + u16 reserved; + u16 iop_id:12; + u16 reserved1:4; + u16 host_unit_id; + u16 segment_number:12; + u16 i2o_version:4; + u8 iop_state; + u8 msg_type; + u16 inbound_frame_size; + u8 init_code; + u8 reserved2; + u32 max_inbound_frames; + u32 cur_inbound_frames; + u32 max_outbound_frames; + char product_id[24]; + u32 expected_lct_size; + u32 iop_capabilities; + u32 desired_mem_size; + u32 current_mem_size; + u32 current_mem_base; + u32 desired_io_size; + u32 current_io_size; + u32 current_io_base; + u32 reserved3:24; + u32 cmd_status:8; +} i2o_status_block; + +/* Event indicator mask flags */ +#define I2O_EVT_IND_STATE_CHANGE 0x80000000 +#define I2O_EVT_IND_GENERAL_WARNING 0x40000000 +#define I2O_EVT_IND_CONFIGURATION_FLAG 0x20000000 +#define I2O_EVT_IND_LOCK_RELEASE 0x10000000 +#define I2O_EVT_IND_CAPABILITY_CHANGE 0x08000000 +#define I2O_EVT_IND_DEVICE_RESET 0x04000000 +#define I2O_EVT_IND_EVT_MASK_MODIFIED 0x02000000 +#define I2O_EVT_IND_FIELD_MODIFIED 0x01000000 +#define I2O_EVT_IND_VENDOR_EVT 0x00800000 +#define I2O_EVT_IND_DEVICE_STATE 0x00400000 + +/* Executive event indicitors */ +#define I2O_EVT_IND_EXEC_RESOURCE_LIMITS 0x00000001 +#define I2O_EVT_IND_EXEC_CONNECTION_FAIL 0x00000002 +#define I2O_EVT_IND_EXEC_ADAPTER_FAULT 0x00000004 +#define I2O_EVT_IND_EXEC_POWER_FAIL 0x00000008 +#define I2O_EVT_IND_EXEC_RESET_PENDING 0x00000010 +#define I2O_EVT_IND_EXEC_RESET_IMMINENT 0x00000020 +#define I2O_EVT_IND_EXEC_HW_FAIL 0x00000040 +#define I2O_EVT_IND_EXEC_XCT_CHANGE 0x00000080 +#define I2O_EVT_IND_EXEC_NEW_LCT_ENTRY 0x00000100 +#define I2O_EVT_IND_EXEC_MODIFIED_LCT 0x00000200 +#define I2O_EVT_IND_EXEC_DDM_AVAILABILITY 0x00000400 + +/* Random Block Storage Event Indicators */ +#define I2O_EVT_IND_BSA_VOLUME_LOAD 0x00000001 +#define I2O_EVT_IND_BSA_VOLUME_UNLOAD 0x00000002 +#define I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ 0x00000004 +#define I2O_EVT_IND_BSA_CAPACITY_CHANGE 0x00000008 +#define I2O_EVT_IND_BSA_SCSI_SMART 0x00000010 + +/* Event data for generic events */ +#define I2O_EVT_STATE_CHANGE_NORMAL 0x00 +#define I2O_EVT_STATE_CHANGE_SUSPENDED 0x01 +#define I2O_EVT_STATE_CHANGE_RESTART 0x02 +#define I2O_EVT_STATE_CHANGE_NA_RECOVER 0x03 +#define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER 0x04 +#define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST 0x05 +#define I2O_EVT_STATE_CHANGE_FAILED 0x10 +#define I2O_EVT_STATE_CHANGE_FAULTED 0x11 + +#define I2O_EVT_GEN_WARNING_NORMAL 0x00 +#define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD 0x01 +#define I2O_EVT_GEN_WARNING_MEDIA_FAULT 0x02 + +#define I2O_EVT_CAPABILITY_OTHER 0x01 +#define I2O_EVT_CAPABILITY_CHANGED 0x02 + +#define I2O_EVT_SENSOR_STATE_CHANGED 0x01 + +/* + * I2O classes / subclasses + */ + +/* Class ID and Code Assignments + * (LCT.ClassID.Version field) + */ +#define I2O_CLASS_VERSION_10 0x00 +#define I2O_CLASS_VERSION_11 0x01 + +/* Class code names + * (from v1.5 Table 6-1 Class Code Assignments.) + */ + +#define I2O_CLASS_EXECUTIVE 0x000 +#define I2O_CLASS_DDM 0x001 +#define I2O_CLASS_RANDOM_BLOCK_STORAGE 0x010 +#define I2O_CLASS_SEQUENTIAL_STORAGE 0x011 +#define I2O_CLASS_LAN 0x020 +#define I2O_CLASS_WAN 0x030 +#define I2O_CLASS_FIBRE_CHANNEL_PORT 0x040 +#define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL 0x041 +#define I2O_CLASS_SCSI_PERIPHERAL 0x051 +#define I2O_CLASS_ATE_PORT 0x060 +#define I2O_CLASS_ATE_PERIPHERAL 0x061 +#define I2O_CLASS_FLOPPY_CONTROLLER 0x070 +#define I2O_CLASS_FLOPPY_DEVICE 0x071 +#define I2O_CLASS_BUS_ADAPTER_PORT 0x080 +#define I2O_CLASS_PEER_TRANSPORT_AGENT 0x090 +#define I2O_CLASS_PEER_TRANSPORT 0x091 + +/* + * Rest of 0x092 - 0x09f reserved for peer-to-peer classes + */ + +#define I2O_CLASS_MATCH_ANYCLASS 0xffffffff + +/* + * Subclasses + */ + +#define I2O_SUBCLASS_i960 0x001 +#define I2O_SUBCLASS_HDM 0x020 +#define I2O_SUBCLASS_ISM 0x021 + +/* Operation functions */ + +#define I2O_PARAMS_FIELD_GET 0x0001 +#define I2O_PARAMS_LIST_GET 0x0002 +#define I2O_PARAMS_MORE_GET 0x0003 +#define I2O_PARAMS_SIZE_GET 0x0004 +#define I2O_PARAMS_TABLE_GET 0x0005 +#define I2O_PARAMS_FIELD_SET 0x0006 +#define I2O_PARAMS_LIST_SET 0x0007 +#define I2O_PARAMS_ROW_ADD 0x0008 +#define I2O_PARAMS_ROW_DELETE 0x0009 +#define I2O_PARAMS_TABLE_CLEAR 0x000A + +/* + * I2O serial number conventions / formats + * (circa v1.5) + */ + +#define I2O_SNFORMAT_UNKNOWN 0 +#define I2O_SNFORMAT_BINARY 1 +#define I2O_SNFORMAT_ASCII 2 +#define I2O_SNFORMAT_UNICODE 3 +#define I2O_SNFORMAT_LAN48_MAC 4 +#define I2O_SNFORMAT_WAN 5 + +/* + * Plus new in v2.0 (Yellowstone pdf doc) + */ + +#define I2O_SNFORMAT_LAN64_MAC 6 +#define I2O_SNFORMAT_DDM 7 +#define I2O_SNFORMAT_IEEE_REG64 8 +#define I2O_SNFORMAT_IEEE_REG128 9 +#define I2O_SNFORMAT_UNKNOWN2 0xff + +/* + * I2O Get Status State values + */ + +#define ADAPTER_STATE_INITIALIZING 0x01 +#define ADAPTER_STATE_RESET 0x02 +#define ADAPTER_STATE_HOLD 0x04 +#define ADAPTER_STATE_READY 0x05 +#define ADAPTER_STATE_OPERATIONAL 0x08 +#define ADAPTER_STATE_FAILED 0x10 +#define ADAPTER_STATE_FAULTED 0x11 + +#endif /* _I2O_DEV_H */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/i2o.h linux.16p3/include/linux/i2o.h --- linux.vanilla/include/linux/i2o.h Fri Apr 21 23:23:38 2000 +++ linux.16p3/include/linux/i2o.h Mon May 1 02:02:35 2000 @@ -1,277 +1,49 @@ #ifndef _I2O_H #define _I2O_H - -/* - * Tunable parameters first - */ - -/* How many different OSM's are we allowing */ -#define MAX_I2O_MODULES 64 -/* How many controllers are we allowing */ -#define MAX_I2O_CONTROLLERS 32 - -#include - -/* - * I2O Control IOCTLs and structures +/* I2O kernel space accessible structures/APIs + * + * (c) Copyright 1999, 2000 Red Hat Software + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + ************************************************************************* + * + * This header file defined the I2O APIs/structures for use by + * the I2O kernel modules. + * */ -#define I2O_MAGIC_NUMBER 'i' -#define I2OGETIOPS _IOR(I2O_MAGIC_NUMBER,0,u8[MAX_I2O_CONTROLLERS]) -#define I2OHRTGET _IOWR(I2O_MAGIC_NUMBER,1,struct i2o_cmd_hrtlct) -#define I2OLCTGET _IOWR(I2O_MAGIC_NUMBER,2,struct i2o_cmd_hrtlct) -#define I2OPARMSET _IOWR(I2O_MAGIC_NUMBER,3,struct i2o_cmd_psetget) -#define I2OPARMGET _IOWR(I2O_MAGIC_NUMBER,4,struct i2o_cmd_psetget) -#define I2OSWDL _IOWR(I2O_MAGIC_NUMBER,5,struct i2o_sw_xfer) -#define I2OSWUL _IOWR(I2O_MAGIC_NUMBER,6,struct i2o_sw_xfer) -#define I2OSWDEL _IOWR(I2O_MAGIC_NUMBER,7,struct i2o_sw_xfer) -#define I2OVALIDATE _IOR(I2O_MAGIC_NUMBER,8,u32) -#define I2OHTML _IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html) -#define I2OEVTREG _IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id) -#define I2OEVTGET _IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info) - -struct i2o_cmd_hrtlct -{ - unsigned int iop; /* IOP unit number */ - void *resbuf; /* Buffer for result */ - unsigned int *reslen; /* Buffer length in bytes */ -}; - -struct i2o_cmd_psetget -{ - unsigned int iop; /* IOP unit number */ - unsigned int tid; /* Target device TID */ - void *opbuf; /* Operation List buffer */ - unsigned int oplen; /* Operation List buffer length in bytes */ - void *resbuf; /* Result List buffer */ - unsigned int *reslen; /* Result List buffer length in bytes */ -}; - -struct i2o_sw_xfer -{ - unsigned int iop; /* IOP unit number */ - unsigned char flags; /* Flags field */ - unsigned char sw_type; /* Software type */ - unsigned int sw_id; /* Software ID */ - void *buf; /* Pointer to software buffer */ - unsigned int *swlen; /* Length of software data */ - unsigned int *maxfrag; /* Maximum fragment count */ - unsigned int *curfrag; /* Current fragment count */ -}; - -struct i2o_html -{ - unsigned int iop; /* IOP unit number */ - unsigned int tid; /* Target device ID */ - unsigned int page; /* HTML page */ - void *resbuf; /* Buffer for reply HTML page */ - unsigned int *reslen; /* Length in bytes of reply buffer */ - void *qbuf; /* Pointer to HTTP query string */ - unsigned int qlen; /* Length in bytes of query string buffer */ -}; -#define I2O_EVT_Q_LEN 32 +#ifdef __KERNEL__ /* This file to be included by kernel only */ -struct i2o_evt_id -{ - unsigned int iop; - unsigned int tid; - unsigned int evt_mask; -}; - -// -// Event data size = frame size - message header + evt indicator -#define I2O_EVT_DATA_SIZE 88 - -struct i2o_evt_info -{ - struct i2o_evt_id id; - unsigned char evt_data[I2O_EVT_DATA_SIZE]; - unsigned int data_size; -}; +#include -struct i2o_evt_get -{ - struct i2o_evt_info info; - int pending; - int lost; -}; +#include /* Needed for MUTEX init macros */ +#include +#include +#include -/************************************************************************** - * HRT related constants and structures - **************************************************************************/ -#define I2O_BUS_LOCAL 0 -#define I2O_BUS_ISA 1 -#define I2O_BUS_EISA 2 -#define I2O_BUS_MCA 3 -#define I2O_BUS_PCI 4 -#define I2O_BUS_PCMCIA 5 -#define I2O_BUS_NUBUS 6 -#define I2O_BUS_CARDBUS 7 -#define I2O_BUS_UNKNOWN 0x80 - -#ifndef __KERNEL__ -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; -#endif /* __KERNEL__ */ - -typedef struct _i2o_pci_bus { - u8 PciFunctionNumber; - u8 PciDeviceNumber; - u8 PciBusNumber; - u8 reserved; - u16 PciVendorID; - u16 PciDeviceID; -} i2o_pci_bus; - -typedef struct _i2o_local_bus { - u16 LbBaseIOPort; - u16 reserved; - u32 LbBaseMemoryAddress; -} i2o_local_bus; - -typedef struct _i2o_isa_bus { - u16 IsaBaseIOPort; - u8 CSN; - u8 reserved; - u32 IsaBaseMemoryAddress; -} i2o_isa_bus; - -typedef struct _i2o_eisa_bus_info { - u16 EisaBaseIOPort; - u8 reserved; - u8 EisaSlotNumber; - u32 EisaBaseMemoryAddress; -} i2o_eisa_bus; - -typedef struct _i2o_mca_bus { - u16 McaBaseIOPort; - u8 reserved; - u8 McaSlotNumber; - u32 McaBaseMemoryAddress; -} i2o_mca_bus; - -typedef struct _i2o_other_bus { - u16 BaseIOPort; - u16 reserved; - u32 BaseMemoryAddress; -} i2o_other_bus; - -typedef struct _i2o_hrt_entry { - u32 adapter_id; - u32 parent_tid:12; - u32 state:4; - u32 bus_num:8; - u32 bus_type:8; - union { - i2o_pci_bus pci_bus; - i2o_local_bus local_bus; - i2o_isa_bus isa_bus; - i2o_eisa_bus eisa_bus; - i2o_mca_bus mca_bus; - i2o_other_bus other_bus; - } bus; -} i2o_hrt_entry; +/* + * Tunable parameters first + */ -typedef struct _i2o_hrt { - u16 num_entries; - u8 entry_len; - u8 hrt_version; - u32 change_ind; - i2o_hrt_entry hrt_entry[1]; -} i2o_hrt; - -typedef struct _i2o_lct_entry { - u32 entry_size:16; - u32 tid:12; - u32 reserved:4; - u32 change_ind; - u32 device_flags; - u32 class_id:12; - u32 version:4; - u32 vendor_id:16; - u32 sub_class; - u32 user_tid:12; - u32 parent_tid:12; - u32 bios_info:8; - u8 identity_tag[8]; - u32 event_capabilities; -} i2o_lct_entry; - -typedef struct _i2o_lct { - u32 table_size:16; - u32 boot_tid:12; - u32 lct_ver:4; - u32 iop_flags; - u32 current_change_ind; - i2o_lct_entry lct_entry[1]; -} i2o_lct; - -typedef struct _i2o_status_block { - u16 org_id; - u16 reserved; - u16 iop_id:12; - u16 reserved1:4; - u16 host_unit_id; - u16 segment_number:12; - u16 i2o_version:4; - u8 iop_state; - u8 msg_type; - u16 inbound_frame_size; - u8 init_code; - u8 reserved2; - u32 max_inbound_frames; - u32 cur_inbound_frames; - u32 max_outbound_frames; - char product_id[24]; - u32 expected_lct_size; - u32 iop_capabilities; - u32 desired_mem_size; - u32 current_mem_size; - u32 current_mem_base; - u32 desired_io_size; - u32 current_io_size; - u32 current_io_base; - u32 reserved3:24; - u32 cmd_status:8; -} i2o_status_block; - -/* Event indicator mask flags */ -#define I2O_EVT_IND_STATE_CHANGE 0x80000000 -#define I2O_EVT_IND_GENERAL_WARNING 0x40000000 -#define I2O_EVT_IND_CONFIGURATION_FLAG 0x20000000 -#define I2O_EVT_IND_LOCK_RELEASE 0x10000000 -#define I2O_EVT_IND_CAPABILITY_CHANGE 0x08000000 -#define I2O_EVT_IND_DEVICE_RESET 0x04000000 -#define I2O_EVT_IND_EVT_MASK_MODIFIED 0x02000000 -#define I2O_EVT_IND_FIELD_MODIFIED 0x01000000 -#define I2O_EVT_IND_VENDOR_EVT 0x00800000 -#define I2O_EVT_IND_DEVICE_STATE 0x00400000 - -/* Event data for generic events */ -#define I2O_EVT_STATE_CHANGE_NORMAL 0x00 -#define I2O_EVT_STATE_CHANGE_SUSPENDED 0x01 -#define I2O_EVT_STATE_CHANGE_RESTART 0x02 -#define I2O_EVT_STATE_CHANGE_NA_RECOVER 0x03 -#define I2O_EVT_STATE_CHANGE_NA_NO_RECOVER 0x04 -#define I2O_EVT_STATE_CHANGE_QUIESCE_REQUEST 0x05 -#define I2O_EVT_STATE_CHANGE_FAILED 0x10 -#define I2O_EVT_STATE_CHANGE_FAULTED 0x11 - -#define I2O_EVT_GEN_WARNING_NORMAL 0x00 -#define I2O_EVT_GEN_WARNING_ERROR_THRESHOLD 0x01 -#define I2O_EVT_GEN_WARNING_MEDIA_FAULT 0x02 +/* How many different OSM's are we allowing */ +#define MAX_I2O_MODULES 64 #define I2O_EVT_CAPABILITY_OTHER 0x01 #define I2O_EVT_CAPABILITY_CHANGED 0x02 #define I2O_EVT_SENSOR_STATE_CHANGED 0x01 -#ifdef __KERNEL__ /* ioctl stuff only thing exported to users */ +//#ifdef __KERNEL__ /* ioctl stuff only thing exported to users */ #define I2O_MAX_MANAGERS 4 +#include /* Needed for MUTEX init macros */ + /* * I2O Interface Objects */ @@ -303,7 +75,7 @@ struct i2o_device { - i2o_lct_entry *lct_data;/* Device LCT information */ + i2o_lct_entry lct_data;/* Device LCT information */ u32 flags; int i2oversion; /* I2O version supported. Actually there * should be high and low version */ @@ -356,8 +128,14 @@ volatile u32 *reply_port; volatile u32 *irq_mask; /* Interrupt port */ + /* Dynamic LCT related data */ + struct semaphore lct_sem; + int lct_pid; + int lct_running; + i2o_status_block *status_block; /* IOP status block */ - i2o_lct *lct; + i2o_lct *lct; /* Logical Config Table */ + i2o_lct *dlct; /* Temp LCT */ i2o_hrt *hrt; u32 mem_offset; /* MFA offset */ @@ -390,7 +168,19 @@ struct i2o_handler { + /* Message reply handler */ + void (*reply)(struct i2o_handler *, struct i2o_controller *, struct i2o_message *); + + /* New device notification handler */ + void (*new_dev_notify)(struct i2o_controller *, struct i2o_device *); + + /* Device deltion handler */ + void (*dev_del_notify)(struct i2o_controller *, struct i2o_device *); + + /* Reboot notification handler */ + void (*reboot_notify)(void); + char *name; int context; /* Low 8 bits of the transaction info */ u32 class; /* I2O classes that this driver handles */ @@ -509,8 +299,10 @@ extern int i2o_install_handler(struct i2o_handler *); extern int i2o_remove_handler(struct i2o_handler *); -extern int i2o_claim_device(struct i2o_device *, struct i2o_handler *, u32); -extern int i2o_release_device(struct i2o_device *, struct i2o_handler *, u32); +extern int i2o_claim_device(struct i2o_device *, struct i2o_handler *); +extern int i2o_release_device(struct i2o_device *, struct i2o_handler *); +extern int i2o_device_notify_on(struct i2o_device *, struct i2o_handler *); +extern int i2o_device_notify_off(struct i2o_device *, struct i2o_handler *); extern int i2o_post_this(struct i2o_controller *, u32 *, int); extern int i2o_post_wait(struct i2o_controller *, u32 *, int, int); @@ -525,9 +317,10 @@ extern int i2o_clear_table(struct i2o_controller *, int, int); extern int i2o_row_add_table(struct i2o_controller *, int, int, int, void *, int); +extern int i2o_row_delete_table(struct i2o_controller *, int, int, int, void *, int); -extern int i2o_event_register(struct i2o_controller *, int, int, u32); -extern int i2o_event_ack(struct i2o_controller *, int, int, u32, void *, int); +extern int i2o_event_register(struct i2o_controller *, u32, u32,u32, u32); +extern int i2o_event_ack(struct i2o_controller *, u32 *); extern void i2o_run_queue(struct i2o_controller *); extern void i2o_report_status(const char *, const char *, u32 *); @@ -843,6 +636,12 @@ #define I2O_POST_WAIT_OK 0 #define I2O_POST_WAIT_TIMEOUT -ETIMEDOUT + +#define DECLARE_MUTEX(name) struct semaphore name=MUTEX + +typedef struct wait_queue *wait_queue_head_t; +#define DECLARE_WAIT_QUEUE_HEAD(wait)\ + wait_queue_head_t wait #endif /* __KERNEL__ */ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/init.h linux.16p3/include/linux/init.h --- linux.vanilla/include/linux/init.h Fri Apr 21 12:46:59 2000 +++ linux.16p3/include/linux/init.h Mon May 1 00:58:10 2000 @@ -59,7 +59,7 @@ #define __INITDATA #endif -#if __GNUC__ >= 2 && __GNUC_MINOR__ >= 8 +#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8) #define __initlocaldata __initdata #else #define __initlocaldata diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/linkage.h linux.16p3/include/linux/linkage.h --- linux.vanilla/include/linux/linkage.h Fri Apr 21 12:46:59 2000 +++ linux.16p3/include/linux/linkage.h Mon May 1 00:58:10 2000 @@ -7,7 +7,7 @@ #define CPP_ASMLINKAGE #endif -#if defined __i386__ && (__GNUC__ > 2 || __GNUC_MINOR__ > 7) +#if defined __i386__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 7) #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0))) #else #define asmlinkage CPP_ASMLINKAGE diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/major.h linux.16p3/include/linux/major.h --- linux.vanilla/include/linux/major.h Fri Apr 21 12:46:59 2000 +++ linux.16p3/include/linux/major.h Mon May 15 16:44:13 2000 @@ -67,6 +67,8 @@ #define CM206_CDROM_MAJOR 32 #define IDE2_MAJOR 33 #define IDE3_MAJOR 34 +#define XPRAM_MAJOR 35 /* expanded storage on S/390 = "slow ram" */ + /* proposed by Peter */ #define NETLINK_MAJOR 36 #define PS2ESDI_MAJOR 36 #define IDETAPE_MAJOR 37 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/msdos_fs.h linux.16p3/include/linux/msdos_fs.h --- linux.vanilla/include/linux/msdos_fs.h Fri Apr 21 23:11:45 2000 +++ linux.16p3/include/linux/msdos_fs.h Mon May 15 18:27:43 2000 @@ -69,7 +69,7 @@ #define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */ #define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ -#define MSDOS_FAT12 4078 /* maximum number of clusters in a 12 bit FAT */ +#define MSDOS_FAT12 4084 /* maximum number of clusters in a 12 bit FAT */ #define EOF_FAT12 0xFF8 /* standard EOF */ #define EOF_FAT16 0xFFF8 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/nls.h linux.16p3/include/linux/nls.h --- linux.vanilla/include/linux/nls.h Fri Apr 21 12:47:00 2000 +++ linux.16p3/include/linux/nls.h Wed Apr 19 13:58:56 2000 @@ -5,8 +5,8 @@ struct nls_table { char *charset; - unsigned char **page_uni2charset; - struct nls_unicode *charset2uni; + void (*uni2char) (unsigned char ch, unsigned char cl, unsigned char *out, int boundlen, int *outlen); + void (*char2uni) (unsigned char *rawstring, int *offset, unsigned char *uni1, unsigned char *uni2); void (*inc_use_count) (void); void (*dec_use_count) (void); @@ -53,4 +53,8 @@ extern int init_nls_cp866(void); extern int init_nls_cp869(void); extern int init_nls_cp874(void); +extern int init_nls_cp932(void); +extern int init_nls_cp936(void); +extern int init_nls_cp949(void); +extern int init_nls_cp950(void); extern int init_nls_koi8_r(void); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/pci.h linux.16p3/include/linux/pci.h --- linux.vanilla/include/linux/pci.h Fri Apr 21 23:10:16 2000 +++ linux.16p3/include/linux/pci.h Mon May 15 12:18:09 2000 @@ -1031,6 +1031,9 @@ #define PCI_DEVICE_ID_LAVA_DUAL_PAR_A 0x8002 /* The Lava Dual Parallel is */ #define PCI_DEVICE_ID_LAVA_DUAL_PAR_B 0x8003 /* two PCI devices on a card */ +#define PCI_VENDOR_ID_TIMEDIA 0x1409 +#define PCI_DEVICE_ID_TIMEDIA_1889 0x7168 + #define PCI_VENDOR_ID_AFAVLAB 0x14db #define PCI_DEVICE_ID_AFAVLAB_TK9902 0x2120 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/quotaops.h linux.16p3/include/linux/quotaops.h --- linux.vanilla/include/linux/quotaops.h Fri Apr 21 12:47:01 2000 +++ linux.16p3/include/linux/quotaops.h Thu May 4 00:50:13 2000 @@ -98,7 +98,7 @@ { int error = -EDQUOT; - if (dentry->d_inode->i_sb->dq_op) { + if (dentry->d_inode->i_sb && dentry->d_inode->i_sb->dq_op) { dentry->d_inode->i_sb->dq_op->initialize(dentry->d_inode, -1); error = dentry->d_inode->i_sb->dq_op->transfer(dentry, iattr, current->fsuid); } else { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/smb_fs.h linux.16p3/include/linux/smb_fs.h --- linux.vanilla/include/linux/smb_fs.h Fri Apr 21 23:11:46 2000 +++ linux.16p3/include/linux/smb_fs.h Mon May 15 18:27:43 2000 @@ -192,6 +192,7 @@ int entries; /* total entries */ int pages; /* number of data pages */ int idx; /* index of current data page */ + time_t mtime; /* the last mtime of our dir inode */ struct cache_index index[NINDEX]; }; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/sysctl.h linux.16p3/include/linux/sysctl.h --- linux.vanilla/include/linux/sysctl.h Fri Apr 21 12:47:01 2000 +++ linux.16p3/include/linux/sysctl.h Sun Apr 30 23:42:32 2000 @@ -435,7 +435,12 @@ /* /proc/sys/dev/cdrom */ enum { - DEV_CDROM_INFO=1 + DEV_CDROM_INFO=1, + DEV_CDROM_AUTOCLOSE=2, + DEV_CDROM_AUTOEJECT=3, + DEV_CDROM_DEBUG=4, + DEV_CDROM_LOCK=5, + DEV_CDROM_CHECK_MEDIA=6 }; #ifdef __KERNEL__ diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/net/irda/irlan_common.h linux.16p3/include/net/irda/irlan_common.h --- linux.vanilla/include/net/irda/irlan_common.h Fri Apr 21 23:28:53 2000 +++ linux.16p3/include/net/irda/irlan_common.h Mon May 15 18:47:26 2000 @@ -6,10 +6,10 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sun Aug 31 20:14:37 1997 - * Modified at: Sun Oct 31 19:41:24 1999 + * Modified at: Fri Apr 21 11:11:38 2000 * Modified by: Dag Brattli * - * Copyright (c) 1998-1999 Dag Brattli , + * Copyright (c) 1998-2000 Dag Brattli , * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -165,25 +165,23 @@ int magic; char ifname[9]; - struct device dev; /* Ethernet device structure*/ - struct enet_statistics stats; + struct device dev; /* Ethernet device structure*/ + struct net_device_stats stats; - __u32 saddr; /* Source device address */ - __u32 daddr; /* Destination device address */ - int netdev_registered; - int notify_irmanager; - - int media; /* Media type */ - __u8 version[2]; /* IrLAN version */ + __u32 saddr; /* Source device address */ + __u32 daddr; /* Destination device address */ + int disconnect_reason; /* Why we got disconnected */ + + int media; /* Media type */ + __u8 version[2]; /* IrLAN version */ - struct tsap_cb *tsap_data; + struct tsap_cb *tsap_data; /* Data TSAP */ - int master; /* Master instance? */ - int use_udata; /* Use Unit Data transfers */ + int use_udata; /* Use Unit Data transfers */ - __u8 stsap_sel_data; /* Source data TSAP selector */ - __u8 dtsap_sel_data; /* Destination data TSAP selector */ - __u8 dtsap_sel_ctrl; /* Destination ctrl TSAP selector */ + __u8 stsap_sel_data; /* Source data TSAP selector */ + __u8 dtsap_sel_data; /* Destination data TSAP selector */ + __u8 dtsap_sel_ctrl; /* Destination ctrl TSAP selector */ struct irlan_client_cb client; /* Client specific fields */ struct irlan_provider_cb provider; /* Provider specific fields */ @@ -194,7 +192,7 @@ struct timer_list watchdog_timer; }; -struct irlan_cb *irlan_open(__u32 saddr, __u32 daddr, int netdev); +struct irlan_cb *irlan_open(__u32 saddr, __u32 daddr); void irlan_close(struct irlan_cb *self); void irlan_close_tsaps(struct irlan_cb *self); void irlan_mod_inc_use_count(void); @@ -202,7 +200,6 @@ int irlan_register_netdev(struct irlan_cb *self); void irlan_ias_register(struct irlan_cb *self, __u8 tsap_sel); -void irlan_start_watchdog_timer(struct irlan_cb *self, int timeout); void irlan_open_data_tsap(struct irlan_cb *self); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/init/main.c linux.16p3/init/main.c --- linux.vanilla/init/main.c Fri Apr 21 12:47:01 2000 +++ linux.16p3/init/main.c Mon May 15 16:39:17 2000 @@ -47,7 +47,11 @@ #endif #ifdef CONFIG_DASD -#include "../drivers/s390/block/dasd.h" +#include +#endif + +#ifdef CONFIG_BLK_DEV_XPRAM +#include "../drivers/s390/block/xpram.h" #endif #ifdef CONFIG_MAC @@ -190,14 +194,21 @@ #ifdef CONFIG_3215 extern void con3215_setup(char *str, int *ints); #endif -#ifdef CONFIG_3215 -extern void con3215_setup(char *str, int *ints); -#endif #ifdef CONFIG_MDISK extern void mdisk_setup(char *str, int *ints); #endif #ifdef CONFIG_DASD extern void dasd_setup(char *str, int *ints); +#ifdef CONFIG_DASD_MDSK +extern void dasd_mdsk_setup(char *str, int *ints); +#endif +#endif +#ifdef CONFIG_BLK_DEV_XPRAM +extern void xpram_setup(char *str, int *ints); +#endif +#ifdef CONFIG_ARCH_S390 +extern void vmhalt_setup(char *str, int *ints); +extern void vmpoff_setup(char *str, int *ints); #endif extern void floppy_setup(char *str, int *ints); extern void st_setup(char *str, int *ints); @@ -598,6 +609,58 @@ { "dasdf", (DASD_MAJOR << MINORBITS) + (5 << 2) }, { "dasdg", (DASD_MAJOR << MINORBITS) + (6 << 2) }, { "dasdh", (DASD_MAJOR << MINORBITS) + (7 << 2) }, + { "dasdi", (DASD_MAJOR << MINORBITS) + (8 << 2) }, + { "dasdj", (DASD_MAJOR << MINORBITS) + (9 << 2) }, + { "dasdk", (DASD_MAJOR << MINORBITS) + (11 << 2) }, + { "dasdl", (DASD_MAJOR << MINORBITS) + (12 << 2) }, + { "dasdm", (DASD_MAJOR << MINORBITS) + (13 << 2) }, + { "dasdn", (DASD_MAJOR << MINORBITS) + (14 << 2) }, + { "dasdo", (DASD_MAJOR << MINORBITS) + (15 << 2) }, + { "dasdp", (DASD_MAJOR << MINORBITS) + (16 << 2) }, + { "dasdq", (DASD_MAJOR << MINORBITS) + (17 << 2) }, + { "dasdr", (DASD_MAJOR << MINORBITS) + (18 << 2) }, + { "dasds", (DASD_MAJOR << MINORBITS) + (19 << 2) }, + { "dasdt", (DASD_MAJOR << MINORBITS) + (20 << 2) }, + { "dasdu", (DASD_MAJOR << MINORBITS) + (21 << 2) }, + { "dasdv", (DASD_MAJOR << MINORBITS) + (22 << 2) }, + { "dasdw", (DASD_MAJOR << MINORBITS) + (23 << 2) }, + { "dasdx", (DASD_MAJOR << MINORBITS) + (24 << 2) }, + { "dasdy", (DASD_MAJOR << MINORBITS) + (25 << 2) }, + { "dasdz", (DASD_MAJOR << MINORBITS) + (26 << 2) }, +#endif +#ifdef CONFIG_BLK_DEV_XPRAM + { "xpram0", (XPRAM_MAJOR << MINORBITS) }, + { "xpram1", (XPRAM_MAJOR << MINORBITS) + 1 }, + { "xpram2", (XPRAM_MAJOR << MINORBITS) + 2 }, + { "xpram3", (XPRAM_MAJOR << MINORBITS) + 3 }, + { "xpram4", (XPRAM_MAJOR << MINORBITS) + 4 }, + { "xpram5", (XPRAM_MAJOR << MINORBITS) + 5 }, + { "xpram6", (XPRAM_MAJOR << MINORBITS) + 6 }, + { "xpram7", (XPRAM_MAJOR << MINORBITS) + 7 }, + { "xpram8", (XPRAM_MAJOR << MINORBITS) + 8 }, + { "xpram9", (XPRAM_MAJOR << MINORBITS) + 9 }, + { "xpram10", (XPRAM_MAJOR << MINORBITS) + 10 }, + { "xpram11", (XPRAM_MAJOR << MINORBITS) + 11 }, + { "xpram12", (XPRAM_MAJOR << MINORBITS) + 12 }, + { "xpram13", (XPRAM_MAJOR << MINORBITS) + 13 }, + { "xpram14", (XPRAM_MAJOR << MINORBITS) + 14 }, + { "xpram15", (XPRAM_MAJOR << MINORBITS) + 15 }, + { "xpram16", (XPRAM_MAJOR << MINORBITS) + 16 }, + { "xpram17", (XPRAM_MAJOR << MINORBITS) + 17 }, + { "xpram18", (XPRAM_MAJOR << MINORBITS) + 18 }, + { "xpram19", (XPRAM_MAJOR << MINORBITS) + 19 }, + { "xpram20", (XPRAM_MAJOR << MINORBITS) + 20 }, + { "xpram21", (XPRAM_MAJOR << MINORBITS) + 21 }, + { "xpram22", (XPRAM_MAJOR << MINORBITS) + 22 }, + { "xpram23", (XPRAM_MAJOR << MINORBITS) + 23 }, + { "xpram24", (XPRAM_MAJOR << MINORBITS) + 24 }, + { "xpram25", (XPRAM_MAJOR << MINORBITS) + 25 }, + { "xpram26", (XPRAM_MAJOR << MINORBITS) + 26 }, + { "xpram27", (XPRAM_MAJOR << MINORBITS) + 27 }, + { "xpram28", (XPRAM_MAJOR << MINORBITS) + 28 }, + { "xpram29", (XPRAM_MAJOR << MINORBITS) + 29 }, + { "xpram30", (XPRAM_MAJOR << MINORBITS) + 30 }, + { "xpram31", (XPRAM_MAJOR << MINORBITS) + 31 }, #endif { NULL, 0 } }; @@ -653,6 +716,7 @@ { "noapic", ioapic_setup }, { "pirq=", ioapic_pirq_setup }, #endif + #endif #ifdef CONFIG_BLK_DEV_RAM { "ramdisk_start=", ramdisk_start_setup }, @@ -663,6 +727,7 @@ #ifdef CONFIG_BLK_DEV_INITRD { "noinitrd", no_initrd }, #endif +#endif #ifdef CONFIG_CTC { "ctc=", ctc_setup } , @@ -671,8 +736,6 @@ { "iucv=", iucv_setup } , #endif -#endif - #ifdef CONFIG_FB { "video=", video_setup }, #endif @@ -1020,14 +1083,21 @@ #ifdef CONFIG_3215 { "condev=", con3215_setup }, #endif -#ifdef CONFIG_3215 - { "condev=", con3215_setup }, -#endif #ifdef CONFIG_MDISK { "mdisk=", mdisk_setup }, #endif #ifdef CONFIG_DASD { "dasd=", dasd_setup }, +#ifdef CONFIG_DASD_MDSK + { "dasd_force_diag=", dasd_mdsk_setup }, +#endif +#endif +#ifdef CONFIG_BLK_DEV_XPRAM + { "xpram_parts=", xpram_setup }, +#endif +#ifdef CONFIG_ARCH_S390 + { "vmhalt=", vmhalt_setup }, + { "vmpoff=", vmpoff_setup }, #endif { 0, 0 } }; @@ -1150,6 +1220,7 @@ static void __init parse_options(char *line) { char *next; + char *quote; int args, envs; if (!*line) @@ -1158,8 +1229,25 @@ envs = 1; /* TERM is set to 'linux' by default */ next = line; while ((line = next) != NULL) { - if ((next = strchr(line,' ')) != NULL) - *next++ = 0; + /* On S/390 we want to be able to pass an options that + * contains blanks. For example vmhalt="IPL CMS". + * To allow that I added code that prevents blanks in + * quotes to be recognized as delimiter. -- Martin + */ + quote = strchr(line,'"'); + next = strchr(line, ' '); + while (next != NULL && quote != NULL && quote < next) { + /* we found a left quote before the next blank + * now we have to find the matching right quote + */ + next = strchr(quote+1, '"'); + if (next != NULL) { + quote = strchr(next+1, '"'); + next = strchr(next+1, ' '); + } + } + if (next != NULL) + *next++ = 0; /* * check for kernel options first.. */ @@ -1454,7 +1542,9 @@ /* Set up devices .. */ device_setup(); - +#if CONFIG_CHANDEV + chandev_init(); +#endif /* .. executable formats .. */ binfmt_setup(); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/ipc/shm.c linux.16p3/ipc/shm.c --- linux.vanilla/ipc/shm.c Fri Apr 21 12:47:01 2000 +++ linux.16p3/ipc/shm.c Mon May 15 12:30:36 2000 @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -517,7 +518,7 @@ shmd->vm_ops = &shm_vm_ops; shp->u.shm_nattch++; /* prevent destruction */ - if ((err = shm_map (shmd))) { + if (shp->u.shm_nattch > 0xffff - NR_TASKS || (err = shm_map (shmd))) { if (--shp->u.shm_nattch <= 0 && shp->u.shm_perm.mode & SHM_DEST) killseg(id); kmem_cache_free(vm_area_cachep, shmd); @@ -549,8 +550,11 @@ printk("shm_open: unused id=%d PANIC\n", id); return; } + if (!++shp->u.shm_nattch) { + shp->u.shm_nattch--; + return; /* XXX: should be able to report failure */ + } insert_attach(shp,shmd); /* insert shmd into shp->attaches */ - shp->u.shm_nattch++; shp->u.shm_atime = CURRENT_TIME; shp->u.shm_lpid = current->pid; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/kernel/sched.c linux.16p3/kernel/sched.c --- linux.vanilla/kernel/sched.c Fri Apr 21 12:47:02 2000 +++ linux.16p3/kernel/sched.c Mon May 15 18:07:51 2000 @@ -498,17 +498,19 @@ (struct timer_vec *)&tv1, &tv2, &tv3, &tv4, &tv5 }; +static struct timer_list ** run_timer_list_running; + #define NOOF_TVECS (sizeof(tvecs) / sizeof(tvecs[0])) static unsigned long timer_jiffies = 0; static inline void insert_timer(struct timer_list *timer, - struct timer_list **vec, int idx) + struct timer_list **vec) { - if ((timer->next = vec[idx])) - vec[idx]->prev = timer; - vec[idx] = timer; - timer->prev = (struct timer_list *)&vec[idx]; + if ((timer->next = *vec)) + (*vec)->prev = timer; + *vec = timer; + timer->prev = (struct timer_list *)vec; } static inline void internal_add_timer(struct timer_list *timer) @@ -518,31 +520,36 @@ */ unsigned long expires = timer->expires; unsigned long idx = expires - timer_jiffies; + struct timer_list ** vec; - if (idx < TVR_SIZE) { + if (run_timer_list_running) + vec = run_timer_list_running; + else if (idx < TVR_SIZE) { int i = expires & TVR_MASK; - insert_timer(timer, tv1.vec, i); + vec = tv1.vec + i; } else if (idx < 1 << (TVR_BITS + TVN_BITS)) { int i = (expires >> TVR_BITS) & TVN_MASK; - insert_timer(timer, tv2.vec, i); + vec = tv2.vec + i; } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) { int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK; - insert_timer(timer, tv3.vec, i); + vec = tv3.vec + i; } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) { int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK; - insert_timer(timer, tv4.vec, i); + vec = tv4.vec + i; } else if ((signed long) idx < 0) { /* can happen if you add a timer with expires == jiffies, * or you set a timer to go off in the past */ - insert_timer(timer, tv1.vec, tv1.index); + vec = tv1.vec + tv1.index; } else if (idx <= 0xffffffffUL) { int i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK; - insert_timer(timer, tv5.vec, i); + vec = tv5.vec + i; } else { /* Can only get here on architectures with 64-bit jiffies */ timer->next = timer->prev = timer; + return; } + insert_timer(timer, vec); } spinlock_t timerlist_lock = SPIN_LOCK_UNLOCKED; @@ -1128,13 +1135,14 @@ { spin_lock_irq(&timerlist_lock); while ((long)(jiffies - timer_jiffies) >= 0) { - struct timer_list *timer; + struct timer_list *timer, * queued = NULL; if (!tv1.index) { int n = 1; do { cascade_timers(tvecs[n]); } while (tvecs[n]->index == 1 && ++n < NOOF_TVECS); } + run_timer_list_running = &queued; while ((timer = tv1.vec[tv1.index])) { void (*fn)(unsigned long) = timer->function; unsigned long data = timer->data; @@ -1144,8 +1152,15 @@ fn(data); spin_lock_irq(&timerlist_lock); } + run_timer_list_running = NULL; ++timer_jiffies; tv1.index = (tv1.index + 1) & TVR_MASK; + while (queued) + { + timer = queued; + queued = queued->next; + internal_add_timer(timer); + } } spin_unlock_irq(&timerlist_lock); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/mm/mmap.c linux.16p3/mm/mmap.c --- linux.vanilla/mm/mmap.c Fri Apr 21 12:47:02 2000 +++ linux.16p3/mm/mmap.c Mon May 15 12:30:18 2000 @@ -197,6 +197,8 @@ if (mm->def_flags & VM_LOCKED) { unsigned long locked = mm->locked_vm << PAGE_SHIFT; locked += len; + if (locked < len) + return -EAGAIN; if ((current->rlim[RLIMIT_MEMLOCK].rlim_cur < RLIM_INFINITY) && (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)) return -EAGAIN; @@ -289,6 +291,8 @@ goto free_vma; /* Check against address space limit. */ + if ((mm->total_vm << PAGE_SHIFT) + len < len) + goto free_vma; if ((current->rlim[RLIMIT_AS].rlim_cur < RLIM_INFINITY) && ((mm->total_vm << PAGE_SHIFT) + len > current->rlim[RLIMIT_AS].rlim_cur)) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/mm/page_io.c linux.16p3/mm/page_io.c --- linux.vanilla/mm/page_io.c Fri Apr 21 12:47:02 2000 +++ linux.16p3/mm/page_io.c Mon May 15 18:08:54 2000 @@ -86,9 +86,22 @@ if (PageSwapCache(page)) { /* Make sure we are the only process doing I/O with this swap page. */ - while (test_and_set_bit(offset,p->swap_lockmap)) { - run_task_queue(&tq_disk); - sleep_on(&lock_queue); + if (test_and_set_bit(offset, p->swap_lockmap)) + { + struct wait_queue __wait; + + __wait.task = current; + add_wait_queue(&lock_queue, &__wait); + for (;;) { + current->state = TASK_UNINTERRUPTIBLE; + mb(); + if (!test_and_set_bit(offset, p->swap_lockmap)) + break; + run_task_queue(&tq_disk); + schedule(); + } + current->state = TASK_RUNNING; + remove_wait_queue(&lock_queue, &__wait); } /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/appletalk/aarp.c linux.16p3/net/appletalk/aarp.c --- linux.vanilla/net/appletalk/aarp.c Fri Apr 21 12:47:10 2000 +++ linux.16p3/net/appletalk/aarp.c Thu May 4 00:54:26 2000 @@ -486,6 +486,8 @@ void aarp_probe_network(struct atalk_iface *atif) { + struct device *dev = atif->dev; + if(atif->dev->type == ARPHRD_LOCALTLK || atif->dev->type == ARPHRD_PPP) aarp_send_probe_phase1(atif); else @@ -501,6 +503,13 @@ current->state = TASK_INTERRUPTIBLE; schedule_timeout(HZ/10); + /* + * our atif may no longer be valid, if the device + * was brought down while we waited! + */ + if (atalk_find_dev(dev) != atif) + return; + if (atif->status & ATIF_PROBE_FAIL) break; } @@ -512,6 +521,7 @@ struct aarp_entry *entry; unsigned int count; int hash; + struct device *dev = atif->dev; /* * we don't currently support LocalTalk or PPP for proxy AARP; @@ -550,6 +560,13 @@ */ current->state = TASK_INTERRUPTIBLE; schedule_timeout(HZ/10); + + /* + * our atif may no longer be valid, if the device was brought + * down while we waited! + */ + if (atalk_find_dev(dev) != atif) + return -ENODEV; if (entry->status & ATIF_PROBE_FAIL) break; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/appletalk/ddp.c linux.16p3/net/appletalk/ddp.c --- linux.vanilla/net/appletalk/ddp.c Fri Apr 21 12:47:10 2000 +++ linux.16p3/net/appletalk/ddp.c Thu May 4 00:54:26 2000 @@ -337,6 +337,7 @@ int probe_net=ntohs(atif->address.s_net); int probe_node=atif->address.s_node; int netct, nodect; + struct device *dev = atif->dev; /* * Offset the network we start probing with. @@ -373,6 +374,13 @@ * Probe a proposed address. */ aarp_probe_network(atif); + + /* + * The atif might have been deleted while + * in aarp_probe_network! + */ + if (atalk_find_dev(dev) != atif) + return -ENODEV; if(!(atif->status & ATIF_PROBE_FAIL)) { atif->status &= ~ATIF_PROBE; @@ -399,6 +407,7 @@ int probe_net=ntohs(atif->address.s_net); // we probe the interface's network int probe_node=ATADDR_ANYNODE; // we'll take anything int netct, nodect; + struct device *dev = atif->dev; /* * Offset the network we start probing with. @@ -435,6 +444,13 @@ * Tell AARP to probe a proposed address. */ int probe_result = aarp_proxy_probe_network(atif, proxy_addr); + + /* + * The atif might have been deleted while + * in aarp_proxy_probe_network! + */ + if (atalk_find_dev(dev) != atif) + return -ENODEV; if (probe_result == 0) return 0; diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/ipx/af_ipx.c linux.16p3/net/ipx/af_ipx.c --- linux.vanilla/net/ipx/af_ipx.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/ipx/af_ipx.c Mon May 1 01:19:28 2000 @@ -601,8 +601,7 @@ memcpy(skb2->h.raw, skb->h.raw, skb->len); } kfree_skb(skb); - - return (NULL); + return(skb2); } static int ipxitf_send(ipx_interface *intrfc, struct sk_buff *skb, char *node) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/af_irda.c linux.16p3/net/irda/af_irda.c --- linux.vanilla/net/irda/af_irda.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/af_irda.c Mon May 1 00:32:22 2000 @@ -6,11 +6,11 @@ * Status: Stable * Author: Dag Brattli * Created at: Sun May 31 10:12:43 1998 - * Modified at: Sat Dec 25 21:10:23 1999 + * Modified at: Tue Apr 11 19:06:24 2000 * Modified by: Dag Brattli * Sources: af_netroom.c, af_ax25.c, af_rose.c, af_x25.c etc. * - * Copyright (c) 1999 Dag Brattli + * Copyright (c) 1999-2000 Dag Brattli * Copyright (c) 1999 Jean Tourrilhes * All Rights Reserved. * @@ -1907,6 +1907,9 @@ return -EFAULT; break; case IRLMP_MAX_SDU_SIZE: + IRDA_DEBUG(2, __FUNCTION__ "(), max_data_size=%d\n", + self->max_data_size); + val = self->max_data_size; len = sizeof(int); if (put_user(len, optlen)) diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/ircomm/ircomm_tty.c linux.16p3/net/irda/ircomm/ircomm_tty.c --- linux.vanilla/net/irda/ircomm/ircomm_tty.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/ircomm/ircomm_tty.c Thu May 4 00:48:27 2000 @@ -1347,7 +1347,7 @@ done: if (offset >= count+begin) return 0; - *start = buf + (begin-offset); + *start = buf + (offset-begin); return ((len < begin+count-offset) ? len : begin+count-offset); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/irlan/irlan_client.c linux.16p3/net/irda/irlan/irlan_client.c --- linux.vanilla/net/irda/irlan/irlan_client.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/irlan/irlan_client.c Mon May 1 00:32:22 2000 @@ -6,13 +6,13 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sun Aug 31 20:14:37 1997 - * Modified at: Tue Dec 14 15:47:02 1999 + * Modified at: Fri Apr 21 14:57:47 2000 * Modified by: Dag Brattli * Sources: skeleton.c by Donald Becker * slip.c by Laurence Culhane, * Fred N. van Kempen, * - * Copyright (c) 1998-1999 Dag Brattli , + * Copyright (c) 1998-2000 Dag Brattli , * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -99,13 +99,11 @@ /* * Function irlan_client_wakeup (self, saddr, daddr) * - * Wake up client - * + * Wake up client. This function is called when a remote IrLAN device + * is discovered, or .. */ void irlan_client_wakeup(struct irlan_cb *self, __u32 saddr, __u32 daddr) -{ - struct irmanager_event mgr_event; - +{ IRDA_DEBUG(1, __FUNCTION__ "()\n"); ASSERT(self != NULL, return;); @@ -117,42 +115,32 @@ */ if ((self->client.state != IRLAN_IDLE) || (self->provider.access_type == ACCESS_DIRECT)) + { + IRDA_DEBUG(0, __FUNCTION__ "(), already awake!\n"); return; + } - /* saddr may have changed! */ + /* Addresses may have changed! */ self->saddr = saddr; - - /* Before we try to connect, we check if network device is up. If it - * is up, that means that the "user" really wants to connect. If not - * we notify the user about the possibility of an IrLAN connection - */ - if (self->dev.start) { - /* Open TSAPs */ - irlan_client_open_ctrl_tsap(self); - irlan_open_data_tsap(self); - - irlan_do_client_event(self, IRLAN_DISCOVERY_INDICATION, NULL); - } else if (self->notify_irmanager) { - /* - * Tell irmanager that the device can now be - * configured but only if the device was not taken - * down by the user - */ - mgr_event.event = EVENT_IRLAN_START; - sprintf(mgr_event.devname, "%s", self->ifname); - irmanager_notify(&mgr_event); - - /* - * We set this so that we only notify once, since if - * configuration of the network device fails, the user - * will have to sort it out first anyway. No need to - * try again. - */ - self->notify_irmanager = FALSE; + self->daddr = daddr; + +#if 0 + if (!self->dev.start) { + IRDA_DEBUG(0, __FUNCTION__ "(), not started yet\n"); + return; + } +#endif + if (self->disconnect_reason == LM_USER_REQUEST) { + IRDA_DEBUG(0, __FUNCTION__ "(), still stopped by user\n"); + return; } - /* Restart watchdog timer */ - irlan_start_watchdog_timer(self, IRLAN_TIMEOUT); + /* Open TSAPs */ + irlan_client_open_ctrl_tsap(self); + irlan_open_data_tsap(self); + + irlan_do_client_event(self, IRLAN_DISCOVERY_INDICATION, NULL); + /* Start kick timer */ irlan_client_start_kick_timer(self, 2*HZ); } @@ -176,29 +164,16 @@ saddr = discovery->saddr; daddr = discovery->daddr; - /* - * Check if we already dealing with this provider. - */ - self = (struct irlan_cb *) hashbin_find(irlan, daddr, NULL); + /* Find instance */ + self = (struct irlan_cb *) hashbin_get_first(irlan); if (self) { ASSERT(self->magic == IRLAN_MAGIC, return;); - + IRDA_DEBUG(1, __FUNCTION__ "(), Found instance (%08x)!\n", - daddr); + daddr); irlan_client_wakeup(self, saddr, daddr); - - return; } - - /* - * We have no instance for daddr, so start a new one - */ - IRDA_DEBUG(1, __FUNCTION__ "(), starting new instance!\n"); - self = irlan_open(saddr, daddr, TRUE); - - /* Restart watchdog timer */ - irlan_start_watchdog_timer(self, IRLAN_TIMEOUT); } /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/irlan/irlan_common.c linux.16p3/net/irda/irlan/irlan_common.c --- linux.vanilla/net/irda/irlan/irlan_common.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/irlan/irlan_common.c Mon May 1 00:32:22 2000 @@ -6,10 +6,10 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sun Aug 31 20:14:37 1997 - * Modified at: Sun Dec 26 21:53:10 1999 + * Modified at: Fri Apr 21 14:55:31 2000 * Modified by: Dag Brattli * - * Copyright (c) 1997, 1999 Dag Brattli , + * Copyright (c) 1997, 1999-2000 Dag Brattli , * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -50,6 +50,13 @@ #include #include +/* + * Send gratuitous ARP when connected to a new AP or not. May be a clever + * thing to do, but for some reason the machine crashes if you use DHCP. So + * lets not use it by default. + */ +#undef CONFIG_IRLAN_SEND_GRATUITOUS_ARP + /* extern char sysctl_devname[]; */ /* @@ -65,7 +72,7 @@ static char *irlan_state[] = { "IRLAN_IDLE", "IRLAN_QUERY", - "IRLAN_CONN", + "IRLAN_CONN", "IRLAN_INFO", "IRLAN_MEDIA", "IRLAN_OPEN", @@ -103,59 +110,6 @@ #endif /* CONFIG_PROC_FS */ /* - * Function irlan_watchdog_timer_expired (data) - * - * Something has gone wrong during the connection establishment - * - */ -void irlan_watchdog_timer_expired(void *data) -{ - struct irmanager_event mgr_event; - struct irlan_cb *self; - - IRDA_DEBUG(0, __FUNCTION__ "()\n"); - - self = (struct irlan_cb *) data; - - ASSERT(self != NULL, return;); - ASSERT(self->magic == IRLAN_MAGIC, return;); - - /* Check if device still configured */ - if (self->dev.start) { - IRDA_DEBUG(0, __FUNCTION__ - "(), notifying irmanager to stop irlan!\n"); - mgr_event.event = EVENT_IRLAN_STOP; - sprintf(mgr_event.devname, "%s", self->ifname); - irmanager_notify(&mgr_event); - - /* - * We set this to false, so that irlan_dev_close known that - * notify_irmanager should actually be set to TRUE again - * instead of FALSE, since this close has not been initiated - * by the user. - */ - self->notify_irmanager = FALSE; - } else { - IRDA_DEBUG(0, __FUNCTION__ "(), closing instance!\n"); - /*irlan_close(self);*/ - } -} - -/* - * Function irlan_start_watchdog_timer (self, timeout) - * - * - * - */ -void irlan_start_watchdog_timer(struct irlan_cb *self, int timeout) -{ - IRDA_DEBUG(4, __FUNCTION__ "()\n"); - - irda_start_timer(&self->watchdog_timer, timeout, (void *) self, - irlan_watchdog_timer_expired); -} - -/* * Function irlan_init (void) * * Initialize IrLAN layer @@ -178,8 +132,6 @@ create_proc_entry("irlan", 0, proc_irda)->get_info = irlan_proc_read; #endif /* CONFIG_PROC_FS */ - IRDA_DEBUG(4, __FUNCTION__ "()\n"); - hints = irlmp_service_to_hint(S_LAN); /* Register with IrLMP as a client */ @@ -189,12 +141,11 @@ /* Register with IrLMP as a service */ skey = irlmp_register_service(hints); - /* Start the master IrLAN instance */ - new = irlan_open(DEV_ADDR_ANY, DEV_ADDR_ANY, FALSE); + /* Start the master IrLAN instance (the only one for now) */ + new = irlan_open(DEV_ADDR_ANY, DEV_ADDR_ANY); /* The master will only open its (listen) control TSAP */ irlan_provider_open_ctrl_tsap(new); - new->master = TRUE; /* Do some fast discovery! */ irlmp_discovery_request(DISCOVERY_DEFAULT_SLOTS); @@ -207,7 +158,6 @@ IRDA_DEBUG(4, __FUNCTION__ "()\n"); irlmp_unregister_client(ckey); - irlmp_unregister_service(skey); #ifdef CONFIG_PROC_FS @@ -244,8 +194,6 @@ IRDA_DEBUG(2, __FUNCTION__ "(), register_netdev() failed!\n"); return -1; } - self->netdev_registered = TRUE; - return 0; } @@ -255,7 +203,7 @@ * Open new instance of a client/provider, we should only register the * network device if this instance is ment for a particular client/provider */ -struct irlan_cb *irlan_open(__u32 saddr, __u32 daddr, int netdev) +struct irlan_cb *irlan_open(__u32 saddr, __u32 daddr) { struct irlan_cb *self; @@ -290,8 +238,6 @@ self->provider.access_type = access; self->media = MEDIA_802_3; - self->notify_irmanager = TRUE; - init_timer(&self->watchdog_timer); init_timer(&self->client.kick_timer); @@ -302,19 +248,16 @@ irlan_next_client_state(self, IRLAN_IDLE); irlan_next_provider_state(self, IRLAN_IDLE); - /* Register network device now, or wait until some later time? */ - if (netdev) - irlan_register_netdev(self); + irlan_register_netdev(self); return self; } /* - * Function irlan_close (self) + * Function __irlan_close (self) * * This function closes and deallocates the IrLAN client instances. Be * aware that other functions which calles client_close() must call * hashbin_remove() first!!! - * */ static void __irlan_close(struct irlan_cb *self) { @@ -335,49 +278,13 @@ iriap_close(self->client.iriap); /* Remove frames queued on the control channel */ - while ((skb = skb_dequeue(&self->client.txq))) { + while ((skb = skb_dequeue(&self->client.txq))) dev_kfree_skb(skb); - } - - if (self->netdev_registered) { - unregister_netdev(&self->dev); - self->netdev_registered = FALSE; - } - self->magic = 0; - kfree(self); -} - -/* - * Function irlan_close (self) - * - * Close instance - * - */ -void irlan_close(struct irlan_cb *self) -{ - struct irlan_cb *entry; - - IRDA_DEBUG(0, __FUNCTION__ "()\n"); - - ASSERT(self != NULL, return;); - ASSERT(self->magic == IRLAN_MAGIC, return;); - - /* Check if device is still configured */ - if (self->dev.start) { - IRDA_DEBUG(0, __FUNCTION__ - "(), Device still configured, closing later!\n"); - - /* Give it a chance to reconnect */ - irlan_start_watchdog_timer(self, IRLAN_TIMEOUT); - return; - } - IRDA_DEBUG(2, __FUNCTION__ "(), daddr=%08x\n", self->daddr); - entry = hashbin_remove(irlan, self->daddr, NULL); - - ASSERT(entry == self, return;); + unregister_netdev(&self->dev); - __irlan_close(self); + self->magic = 0; + kfree(self); } /* @@ -422,6 +329,7 @@ } /* Ready to transfer Ethernet frames (at last) */ self->dev.tbusy = 0; + self->disconnect_reason = 0; /* Clear reason */ } void irlan_connect_confirm(void *instance, void *sap, struct qos_info *qos, @@ -456,8 +364,12 @@ /* Ready to transfer Ethernet frames */ self->dev.tbusy = 0; + self->dev.start = 1; + self->disconnect_reason = 0; /* Clear reason */ +#ifdef CONFIG_IRLAN_SEND_GRATUITOUS_ARP irlan_eth_send_gratuitous_arp(&self->dev); +#endif } /* @@ -486,26 +398,29 @@ IRDA_DEBUG(2, "IrLAN, data channel disconnected by peer!\n"); - switch(reason) { + /* Save reason, so we know if we should try to reconnect or not */ + self->disconnect_reason = reason; + + switch (reason) { case LM_USER_REQUEST: /* User request */ - irlan_close(self); + IRDA_DEBUG(2, __FUNCTION__ "(), user request\n"); break; case LM_LAP_DISCONNECT: /* Unexpected IrLAP disconnect */ - irlan_start_watchdog_timer(self, IRLAN_TIMEOUT); + IRDA_DEBUG(2, __FUNCTION__ "(), Unexpected IrLAP disconnect\n"); break; case LM_CONNECT_FAILURE: /* Failed to establish IrLAP connection */ - IRDA_DEBUG(2, __FUNCTION__ "(), LM_CONNECT_FAILURE not impl\n"); + IRDA_DEBUG(2, __FUNCTION__ "(), IrLAP connect failed\n"); break; case LM_LAP_RESET: /* IrLAP reset */ - IRDA_DEBUG(2, __FUNCTION__ "(), LM_CONNECT_FAILURE not impl\n"); + IRDA_DEBUG(2, __FUNCTION__ "(), IrLAP reset\n"); break; case LM_INIT_DISCONNECT: - IRDA_DEBUG(2, __FUNCTION__ "(), LM_CONNECT_FAILURE not impl\n"); + IRDA_DEBUG(2, __FUNCTION__ "(), IrLMP connect failed\n"); break; default: + ERROR(__FUNCTION__ "(), Unknown disconnect reason\n"); break; - } - + } irlan_do_client_event(self, IRLAN_LMP_DISCONNECT, NULL); irlan_do_provider_event(self, IRLAN_LMP_DISCONNECT, NULL); } @@ -556,9 +471,7 @@ ASSERT(self != NULL, return;); ASSERT(self->magic == IRLAN_MAGIC, return;); - /* - * Disconnect and close all open TSAP connections - */ + /* Disconnect and close all open TSAP connections */ if (self->tsap_data) { irttp_disconnect_request(self->tsap_data, NULL, P_NORMAL); irttp_close_tsap(self->tsap_data); @@ -636,7 +549,7 @@ { struct sk_buff *skb; - IRDA_DEBUG(3, __FUNCTION__ "()\n"); + IRDA_DEBUG(2, __FUNCTION__ "()\n"); if (irda_lock(&self->client.tx_busy) == FALSE) return -EBUSY; @@ -655,7 +568,7 @@ dev_kfree_skb(skb); return -1; } - IRDA_DEBUG(3, __FUNCTION__ "(), sending ...\n"); + IRDA_DEBUG(2, __FUNCTION__ "(), sending ...\n"); return irttp_data_request(self->client.tsap_ctrl, skb); } @@ -744,7 +657,6 @@ /* self->use_udata = TRUE; */ - /* irttp_data_request(self->client.tsap_ctrl, skb); */ irlan_ctrl_data_request(self, skb); } @@ -813,7 +725,6 @@ irlan_insert_string_param(skb, "FILTER_TYPE", "DIRECTED"); irlan_insert_string_param(skb, "FILTER_MODE", "FILTER"); - /* irttp_data_request(self->client.tsap_ctrl, skb); */ irlan_ctrl_data_request(self, skb); } @@ -855,7 +766,6 @@ else irlan_insert_string_param(skb, "FILTER_MODE", "NONE"); - /* irttp_data_request(self->client.tsap_ctrl, skb); */ irlan_ctrl_data_request(self, skb); } @@ -895,7 +805,6 @@ else irlan_insert_string_param(skb, "FILTER_MODE", "NONE"); - /* irttp_data_request(self->client.tsap_ctrl, skb); */ irlan_ctrl_data_request(self, skb); } @@ -933,7 +842,6 @@ irlan_insert_string_param(skb, "FILTER_TYPE", "DIRECTED"); irlan_insert_string_param(skb, "FILTER_OPERATION", "DYNAMIC"); - /* irttp_data_request(self->client.tsap_ctrl, skb); */ irlan_ctrl_data_request(self, skb); } @@ -969,7 +877,6 @@ irlan_insert_string_param(skb, "MEDIA", "802.3"); - /* irttp_data_request(self->client.tsap_ctrl, skb); */ irlan_ctrl_data_request(self, skb); } @@ -1173,35 +1080,35 @@ while (self != NULL) { ASSERT(self->magic == IRLAN_MAGIC, return len;); - /* Don't display the master server */ - if (self->master == 0) { - len += sprintf(buf+len, "ifname: %s,\n", - self->ifname); - len += sprintf(buf+len, "client state: %s, ", - irlan_state[ self->client.state]); - len += sprintf(buf+len, "provider state: %s,\n", - irlan_state[ self->provider.state]); - len += sprintf(buf+len, "saddr: %#08x, ", - self->saddr); - len += sprintf(buf+len, "daddr: %#08x\n", - self->daddr); - len += sprintf(buf+len, "version: %d.%d,\n", - self->version[1], self->version[0]); - len += sprintf(buf+len, "access type: %s\n", - irlan_access[self->client.access_type]); - len += sprintf(buf+len, "media: %s\n", - irlan_media[self->media]); - - len += sprintf(buf+len, "local filter:\n"); - len += sprintf(buf+len, "remote filter: "); - len += irlan_print_filter(self->client.filter_type, - buf+len); - - len += sprintf(buf+len, "tx busy: %s\n", - self->dev.tbusy ? "TRUE" : "FALSE"); - - len += sprintf(buf+len, "\n"); - } + len += sprintf(buf+len, "ifname: %s,\n", + self->ifname); + len += sprintf(buf+len, "client state: %s, ", + irlan_state[ self->client.state]); + len += sprintf(buf+len, "provider state: %s,\n", + irlan_state[ self->provider.state]); + len += sprintf(buf+len, "saddr: %#08x, ", + self->saddr); + len += sprintf(buf+len, "daddr: %#08x\n", + self->daddr); + len += sprintf(buf+len, "version: %d.%d,\n", + self->version[1], self->version[0]); + len += sprintf(buf+len, "access type: %s\n", + irlan_access[self->client.access_type]); + len += sprintf(buf+len, "media: %s\n", + irlan_media[self->media]); + + len += sprintf(buf+len, "local filter:\n"); + len += sprintf(buf+len, "remote filter: "); + len += irlan_print_filter(self->client.filter_type, + buf+len); + + len += sprintf(buf+len, "client tx busy: %s\n", + self->client.tx_busy ? "TRUE" : "FALSE"); + + len += sprintf(buf+len, "dev tx busy: %s\n", + self->dev.tbusy ? "TRUE" : "FALSE"); + + len += sprintf(buf+len, "\n"); self = (struct irlan_cb *) hashbin_get_next(irlan); } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/irlan/irlan_eth.c linux.16p3/net/irda/irlan/irlan_eth.c --- linux.vanilla/net/irda/irlan/irlan_eth.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/irlan/irlan_eth.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Thu Oct 15 08:37:58 1998 - * Modified at: Sun Jan 16 22:43:41 2000 + * Modified at: Fri Apr 21 14:54:42 2000 * Modified by: Dag Brattli * Sources: skeleton.c by Donald Becker * slip.c by Laurence Culhane, @@ -47,7 +47,6 @@ */ int irlan_eth_init(struct device *dev) { - struct irmanager_event mgr_event; struct irlan_cb *self; IRDA_DEBUG(2, __FUNCTION__"()\n"); @@ -86,22 +85,6 @@ get_random_bytes(dev->dev_addr+5, 1); } - /* - * Network device has now been registered, so tell irmanager about - * it, so it can be configured with network parameters - */ - mgr_event.event = EVENT_IRLAN_START; - sprintf(mgr_event.devname, "%s", self->ifname); - irmanager_notify(&mgr_event); - - /* - * We set this so that we only notify once, since if - * configuration of the network device fails, the user - * will have to sort it out first anyway. No need to - * try again. - */ - self->notify_irmanager = FALSE; - return 0; } @@ -124,13 +107,12 @@ ASSERT(self != NULL, return -1;); /* Ready to play! */ -/* dev->tbusy = 0; */ /* Wait until data link is ready */ + dev->tbusy = 1; /* Wait until data link is ready */ dev->interrupt = 0; - dev->start = 1; - - self->notify_irmanager = TRUE; + dev->start = 0; /* We are now open, so time to do some work */ + self->disconnect_reason = 0; irlan_client_wakeup(self, self->saddr, self->daddr); irlan_mod_inc_use_count(); @@ -149,7 +131,8 @@ int irlan_eth_close(struct device *dev) { struct irlan_cb *self = (struct irlan_cb *) dev->priv; - + struct sk_buff *skb; + IRDA_DEBUG(2, __FUNCTION__ "()\n"); /* Stop device */ @@ -159,19 +142,16 @@ irlan_mod_dec_use_count(); irlan_close_data_channel(self); - irlan_close_tsaps(self); irlan_do_client_event(self, IRLAN_LMP_DISCONNECT, NULL); irlan_do_provider_event(self, IRLAN_LMP_DISCONNECT, NULL); - irlan_start_watchdog_timer(self, IRLAN_TIMEOUT); - - /* Device closed by user! */ - if (self->notify_irmanager) - self->notify_irmanager = FALSE; - else - self->notify_irmanager = TRUE; + /* Remove frames queued on the control channel */ + while ((skb = skb_dequeue(&self->client.txq))) { + dev_kfree_skb(skb); + } + self->client.tx_busy = 0; return 0; } @@ -352,7 +332,7 @@ dev, in_dev->ifa_list->ifa_address, NULL, dev->dev_addr, NULL); -#endif /* CONFIG_INET */ +#endif /* CONFIG_INET */ } /* diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/irlan/irlan_provider.c linux.16p3/net/irda/irlan/irlan_provider.c --- linux.vanilla/net/irda/irlan/irlan_provider.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/irlan/irlan_provider.c Mon May 1 00:32:22 2000 @@ -6,13 +6,13 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sun Aug 31 20:14:37 1997 - * Modified at: Sat Oct 30 12:52:10 1999 + * Modified at: Mon Apr 3 14:28:19 2000 * Modified by: Dag Brattli * Sources: skeleton.c by Donald Becker * slip.c by Laurence Culhane, * Fred N. van Kempen, * - * Copyright (c) 1998-1999 Dag Brattli , + * Copyright (c) 1998-2000 Dag Brattli , * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -116,14 +116,14 @@ /* * Function irlan_provider_connect_indication (handle, skb, priv) * - * Got connection from peer IrLAN layer + * Got connection from peer IrLAN client * */ static void irlan_provider_connect_indication(void *instance, void *sap, struct qos_info *qos, __u32 max_sdu_size, __u8 max_header_size, - struct sk_buff *skb) + struct sk_buff *skb) { struct irlan_cb *self, *new; struct tsap_cb *tsap; @@ -137,82 +137,24 @@ ASSERT(self != NULL, return;); ASSERT(self->magic == IRLAN_MAGIC, return;); - self->provider.max_sdu_size = max_sdu_size; - self->provider.max_header_size = max_header_size; - ASSERT(tsap == self->provider.tsap_ctrl,return;); ASSERT(self->provider.state == IRLAN_IDLE, return;); daddr = irttp_get_daddr(tsap); saddr = irttp_get_saddr(tsap); + self->provider.max_sdu_size = max_sdu_size; + self->provider.max_header_size = max_header_size; - /* Check if we already dealing with this client or peer */ - new = (struct irlan_cb *) hashbin_find(irlan, daddr, NULL); - if (new) { - ASSERT(new->magic == IRLAN_MAGIC, return;); - IRDA_DEBUG(0, __FUNCTION__ "(), found instance!\n"); - - /* Update saddr, since client may have moved to a new link */ - new->saddr = saddr; - IRDA_DEBUG(2, __FUNCTION__ "(), saddr=%08x\n", new->saddr); - - /* Make sure that any old provider control TSAP is removed */ - if ((new != self) && new->provider.tsap_ctrl) { - irttp_disconnect_request(new->provider.tsap_ctrl, - NULL, P_NORMAL); - irttp_close_tsap(new->provider.tsap_ctrl); - new->provider.tsap_ctrl = NULL; - } - } else { - /* This must be the master instance, so start a new instance */ - IRDA_DEBUG(0, __FUNCTION__ "(), starting new provider!\n"); - - new = irlan_open(saddr, daddr, TRUE); - } - - /* - * Check if the connection came in on the master server, or the - * slave server. If it came on the slave, then everything is - * really, OK (reconnect), if not we need to dup the connection and - * hand it over to the slave. - */ - if (new != self) { - - /* Now attach up the new "socket" */ - new->provider.tsap_ctrl = irttp_dup(self->provider.tsap_ctrl, - new); - if (!new->provider.tsap_ctrl) { - IRDA_DEBUG(0, __FUNCTION__ "(), dup failed!\n"); - return; - } - - /* new->stsap_sel = new->tsap->stsap_sel; */ - new->dtsap_sel_ctrl = new->provider.tsap_ctrl->dtsap_sel; - - /* Clean up the original one to keep it in listen state */ - self->provider.tsap_ctrl->dtsap_sel = LSAP_ANY; - self->provider.tsap_ctrl->lsap->dlsap_sel = LSAP_ANY; - self->provider.tsap_ctrl->lsap->lsap_state = LSAP_DISCONNECTED; - - /* - * Use the new instance from here instead of the master - * struct! - */ - self = new; - } - /* Check if network device has been registered */ - if (!self->netdev_registered) - irlan_register_netdev(self); - irlan_do_provider_event(self, IRLAN_CONNECT_INDICATION, NULL); /* * If we are in peer mode, the client may not have got the discovery * indication it needs to make progress. If the client is still in - * IDLE state, we must kick it to + * IDLE state, we must kick it. */ if ((self->provider.access_type == ACCESS_PEER) && - (self->client.state == IRLAN_IDLE)) { + (self->client.state == IRLAN_IDLE)) + { irlan_client_wakeup(self, self->saddr, self->daddr); } } @@ -231,11 +173,6 @@ /* Just accept */ irttp_connect_response(tsap, IRLAN_MTU, NULL); - - /* Check if network device has been registered */ - if (!self->netdev_registered) - irlan_register_netdev(self); - } void irlan_provider_disconnect_indication(void *instance, void *sap, diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/irlap_event.c linux.16p3/net/irda/irlap_event.c --- linux.vanilla/net/irda/irlap_event.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/irlap_event.c Mon May 1 00:32:22 2000 @@ -6,11 +6,11 @@ * Status: Experimental. * Author: Dag Brattli * Created at: Sat Aug 16 00:59:29 1997 - * Modified at: Mon Jan 17 09:07:36 2000 + * Modified at: Fri Apr 21 11:26:48 2000 * Modified by: Dag Brattli * * Copyright (c) 1998-2000 Dag Brattli , - * Thomas Davis + * Copyright (c) 1998 Thomas Davis * All Rights Reserved. * * This program is free software; you can redistribute it and/or @@ -374,6 +374,7 @@ self->s = info->s; irlap_send_discovery_xid_frame(self, info->S, info->s, TRUE, info->discovery); + self->frame_sent = FALSE; self->s++; irlap_start_slot_timer(self, self->slot_timeout); @@ -384,12 +385,8 @@ /* Assert that this is not the final slot */ if (info->s <= info->S) { - /* self->daddr = info->daddr; */ self->slot = irlap_generate_rand_time_slot(info->S, info->s); - IRDA_DEBUG(4, "XID_CMD: S=%d, s=%d, slot %d\n", info->S, - info->s, self->slot); - if (self->slot == info->s) { discovery_rsp = irlmp_get_discovery_response(); discovery_rsp->daddr = info->daddr; @@ -455,7 +452,6 @@ default: IRDA_DEBUG(2, __FUNCTION__ "(), Unknown event %s\n", irlap_event[event]); - if (skb) dev_kfree_skb(skb); @@ -504,6 +500,19 @@ dev_kfree_skb(skb); break; case SLOT_TIMER_EXPIRED: + /* + * Wait a little longer if we detect an incomming frame. This + * is not mentioned in the spec, but is a good thing to do, + * since we want to work even with devices that violate the + * timing requirements. + */ + if (irda_device_is_receiving(self->netdev)) { + IRDA_DEBUG(1, __FUNCTION__ + "(), device is slow to answer, " + "waiting some more!\n"); + irlap_start_slot_timer(self, MSECS_TO_JIFFIES(10)); + return ret; + } if (self->s < self->S) { irlap_send_discovery_xid_frame(self, self->S, self->s, TRUE, @@ -535,7 +544,6 @@ default: IRDA_DEBUG(2, __FUNCTION__ "(), Unknown event %s\n", irlap_event[event]); - if (skb) dev_kfree_skb(skb); @@ -571,9 +579,8 @@ break; case RECV_DISCOVERY_XID_CMD: ASSERT(info != NULL, return -1;); - /* - * Last frame? - */ + + /* Last frame? */ if (info->s == 0xff) { del_timer(&self->query_timer); @@ -864,7 +871,7 @@ * that is not possible since we must be sure * that we poll the other side. Since we have * used up our time, the poll timer should - * trigger anyway now,so we just wait for it + * trigger anyway now, so we just wait for it * DB */ return -EPROTO; @@ -1296,7 +1303,7 @@ * of receiving a frame (page 45, IrLAP). Check that * we only do this once for each frame. */ - if (irda_device_is_receiving(self->netdev) && + if (irda_device_is_receiving(self->netdev) && !self->add_wait) { IRDA_DEBUG(1, "FINAL_TIMER_EXPIRED when receiving a " @@ -1423,7 +1430,7 @@ irlap_next_state( self, LAP_PCLOSE); break; default: - IRDA_DEBUG(1, __FUNCTION__ "(), Unknown event %s\n", + IRDA_DEBUG(2, __FUNCTION__ "(), Unknown event %s\n", irlap_event[event]); if (skb) dev_kfree_skb(skb); @@ -1951,8 +1958,8 @@ dev_kfree_skb(skb); break; case RECV_TEST_CMD: - /* Remove test frame header */ - skb_pull(skb, sizeof(struct test_frame)); + /* Remove test frame header (only LAP header in NRM) */ + skb_pull(skb, LAP_ADDR_HEADER + LAP_CTRL_HEADER); irlap_wait_min_turn_around(self, &self->qos_tx); irlap_start_wd_timer(self, self->wd_timeout); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/irlap_frame.c linux.16p3/net/irda/irlap_frame.c --- linux.vanilla/net/irda/irlap_frame.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/irlap_frame.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Stable * Author: Dag Brattli * Created at: Tue Aug 19 10:27:26 1997 - * Modified at: Wed Jan 5 08:59:04 2000 + * Modified at: Thu Apr 13 02:40:49 2000 * Modified by: Dag Brattli * * Copyright (c) 1998-2000 Dag Brattli , @@ -1212,7 +1212,7 @@ struct test_frame *frame; __u8 *info; - skb = dev_alloc_skb(32); + skb = dev_alloc_skb(cmd->len+sizeof(struct test_frame)); if (!skb) return; @@ -1225,10 +1225,10 @@ frame->saddr = cpu_to_le32(self->saddr); frame->daddr = cpu_to_le32(daddr); } else - frame = (struct test_frame *) skb_put(skb, LAP_MAX_HEADER); + frame = (struct test_frame *) skb_put(skb, LAP_ADDR_HEADER + LAP_CTRL_HEADER); frame->caddr = caddr; - frame->control = TEST_RSP; + frame->control = TEST_RSP | PF_BIT; /* Copy info */ info = skb_put(skb, cmd->len); diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/irda/qos.c linux.16p3/net/irda/qos.c --- linux.vanilla/net/irda/qos.c Fri Apr 21 12:47:16 2000 +++ linux.16p3/net/irda/qos.c Mon May 1 00:32:22 2000 @@ -6,7 +6,7 @@ * Status: Stable * Author: Dag Brattli * Created at: Tue Sep 9 00:00:26 1997 - * Modified at: Sun Jan 30 14:29:16 2000 + * Modified at: Fri Apr 14 00:30:04 2000 * Modified by: Dag Brattli * * Copyright (c) 1998-2000 Dag Brattli , @@ -375,7 +375,6 @@ self->qos_tx.baud_rate.bits = final; self->qos_rx.baud_rate.bits = final; } - return 0; } @@ -626,6 +625,7 @@ * * Returns value to index in array, easy! * + */ __u32 index_value(int index, __u32 *array) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/netsyms.c linux.16p3/net/netsyms.c --- linux.vanilla/net/netsyms.c Fri Apr 21 12:47:17 2000 +++ linux.16p3/net/netsyms.c Mon May 15 15:48:32 2000 @@ -438,6 +438,8 @@ /* Device callback registration */ EXPORT_SYMBOL(register_netdevice_notifier); EXPORT_SYMBOL(unregister_netdevice_notifier); +EXPORT_SYMBOL(register_inetaddr_notifier); +EXPORT_SYMBOL(unregister_inetaddr_notifier); /* support for loadable net drivers */ #ifdef CONFIG_NET diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/net/unix/af_unix.c linux.16p3/net/unix/af_unix.c --- linux.vanilla/net/unix/af_unix.c Fri Apr 21 12:47:17 2000 +++ linux.16p3/net/unix/af_unix.c Mon May 15 12:11:31 2000 @@ -43,6 +43,7 @@ * number of socks to 2*max_files and * the number of skb queueable in the * dgram receiver. + * Malcolm Beattie : Set peercred for socketpair * * Known differences from reference BSD that was tested: * @@ -814,6 +815,9 @@ unix_lock(skb); unix_peer(ska)=skb; unix_peer(skb)=ska; + ska->peercred.pid = skb->peercred.pid = current->pid; + ska->peercred.uid = skb->peercred.uid = current->euid; + ska->peercred.gid = skb->peercred.gid = current->egid; if (ska->type != SOCK_DGRAM) { diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/Configure linux.16p3/scripts/Configure --- linux.vanilla/scripts/Configure Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/Configure Wed Apr 19 14:05:06 2000 @@ -143,6 +143,10 @@ # define_bool define value # function define_bool () { + define_tristate $1 $2 +} + +function define_tristate () { case "$2" in "y") echo "$1=y" >>$CONFIG @@ -213,11 +217,11 @@ while :; do readln "$1 ($2) [$defprompt] " "$def" "$old" case "$ans" in - [yY] | [yY]es ) define_bool "$2" "y" + [yY] | [yY]es ) define_tristate "$2" "y" break ;; - [nN] | [nN]o ) define_bool "$2" "n" + [nN] | [nN]o ) define_tristate "$2" "n" break ;; - [mM] ) define_bool "$2" "m" + [mM] ) define_tristate "$2" "m" break ;; * ) help "$2" ;; @@ -246,7 +250,7 @@ while [ $# -gt 0 ]; do case "$1" in n) - define_bool "$var" "n" + define_tristate "$var" "n" return ;; m) @@ -268,9 +272,9 @@ while :; do readln "$ques ($var) [$defprompt] " "$def" "$old" case "$ans" in - [nN] | [nN]o ) define_bool "$var" "n" + [nN] | [nN]o ) define_tristate "$var" "n" break ;; - [mM] ) define_bool "$var" "m" + [mM] ) define_tristate "$var" "m" break ;; [yY] | [yY]es ) echo echo " This answer is not allowed, because it is not consistent with" @@ -290,6 +294,43 @@ fi } +function dep_bool () { + ques=$1 + var=$2 + shift 2 + while [ $# -gt 0 ]; do + case "$1" in + m | n) + define_bool "$var" "n" + return + ;; + esac + shift + done + + bool "$ques" "$var" +} + +function dep_mbool () { + ques=$1 + var=$2 + shift 2 + while [ $# -gt 0 ]; do + case "$1" in + n) + define_bool "$var" "n" + return + ;; + m) + eval "$var=y" + ;; + esac + shift + done + + bool "$ques" "$var" +} + # # define_int sets the value of a integer argument # @@ -368,9 +409,9 @@ # define_string define value # function define_string () { - echo "$1="'"'$2'"' >>$CONFIG - echo "#define $1 "'"'$2'"' >>$CONFIG_H - eval "$1=$2" + echo "$1=\"$2\"" >>$CONFIG + echo "#define $1 \"$2\"" >>$CONFIG_H + eval "$1=\"$2\"" } # diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/Menuconfig linux.16p3/scripts/Menuconfig --- linux.vanilla/scripts/Menuconfig Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/Menuconfig Wed Apr 19 14:05:06 2000 @@ -68,6 +68,12 @@ # # 24 January 1999, Michael Elizabeth Chastain, # - Improve the exit message (Jeff Ronne). +# +# 06 July 1999, Andrzej M. Krzysztofowicz, +# - Support for multiple conditions in dep_tristate(). +# - Implemented new functions: define_tristate(), define_int(), define_hex(), +# define_string(), dep_bool(). +# # @@ -132,6 +138,22 @@ eval $1=$2 } +function define_tristate () { + eval $1=$2 +} + +function define_hex () { + eval $1=$2 +} + +function define_int () { + eval $1=$2 +} + +function define_string () { + eval $1="$2" +} + # # Create a boolean (Yes/No) function for our current menu # which calls our local bool function. @@ -188,13 +210,72 @@ # else in the kernel. # function dep_tristate () { - if [ "$3" = "y" ]; then - tristate "$1" "$2" - else if [ "$3" = "m" ]; then - mod_bool "$1" "$2" + ques="$1" + var="$2" + dep=y + shift 2 + while [ $# -gt 0 ]; do + if [ "$1" = y ]; then + shift + elif [ "$1" = m ]; then + dep=m + shift + else + dep=n + shift $# + fi + done + if [ "$dep" = y ]; then + tristate "$ques" "$var" + elif [ "$dep" = m ]; then + mod_bool "$ques" "$var" else - define_bool "$2" n - fi; fi + define_tristate "$var" n + fi +} + +# +# Same as above, but now only Y and N are allowed as dependency +# (i.e. third and next arguments). +# +function dep_bool () { + ques="$1" + var="$2" + dep=y + shift 2 + while [ $# -gt 0 ]; do + if [ "$1" = y ]; then + shift + else + dep=n + shift $# + fi + done + if [ "$dep" = y ]; then + bool "$ques" "$var" + else + define_bool "$var" n + fi +} + +function dep_mbool () { + ques="$1" + var="$2" + dep=y + shift 2 + while [ $# -gt 0 ]; do + if [ "$1" = y -o "$1" = m ]; then + shift + else + dep=n + shift $# + fi + done + if [ "$dep" = y ]; then + bool "$ques" "$var" + else + define_bool "$var" n + fi } # @@ -988,13 +1069,51 @@ function tristate () { set_x_info "$2" "n" - eval define_bool "$2" "$x" + eval define_tristate "$2" "$x" } function dep_tristate () { set_x_info "$2" "n" - if [ "$3" = "m" -a "$x" = "y" ]; then x="m"; fi - define_bool "$2" "$x" + var="$2" + shift 2 + while [ $# -gt 0 ]; do + if [ "$1" = y ]; then + shift + elif [ "$1" = m -a "$x" != n ]; then + x=m; shift + else + x=n; shift $# + fi + done + define_tristate "$var" "$x" + } + + function dep_bool () { + set_x_info "$2" "n" + var="$2" + shift 2 + while [ $# -gt 0 ]; do + if [ "$1" = y ]; then + shift + else + x=n; shift $# + fi + done + define_bool "$var" "$x" + } + + function dep_mbool () { + set_x_info "$2" "n" + var="$2" + shift 2 + while [ $# -gt 0 ]; do + if [ "$1" = y -o "$1" = m ]; then + shift + else + x=n; shift $# + fi + done + define_bool "$var" "$x" } function int () { @@ -1015,7 +1134,29 @@ echo "#define $2 \"$x\"" >>$CONFIG_H } + function define_hex () { + eval $1="$2" + echo "$1=$2" >>$CONFIG + echo "#define $1 0x${2##*[x,X]}" >>$CONFIG_H + } + + function define_int () { + eval $1="$2" + echo "$1=$2" >>$CONFIG + echo "#define $1 ($2)" >>$CONFIG_H + } + + function define_string () { + eval $1="$2" + echo "$1=\"$2\"" >>$CONFIG + echo "#define $1 \"$2\"" >>$CONFIG_H + } + function define_bool () { + define_tristate "$1" "$2" + } + + function define_tristate () { eval $1="$2" case "$2" in diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/header.tk linux.16p3/scripts/header.tk --- linux.vanilla/scripts/header.tk Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/header.tk Wed Apr 19 14:05:06 2000 @@ -32,7 +32,7 @@ proc vfix { var } { global $var if [ catch {eval concat $$var} ] { - set $var 0 + set $var 4 } } @@ -42,6 +42,7 @@ set CONSTANT_Y 1 set CONSTANT_M 2 set CONSTANT_N 0 +set CONSTANT_E 4 # # Create a "reference" object to steal colors from. @@ -67,9 +68,11 @@ proc menu_option { w menu_num text } { global menus_per_column - if { $menu_num <= $menus_per_column } then { + global processed_top_level + set processed_top_level [expr $processed_top_level + 1] + if { $processed_top_level <= $menus_per_column } then { set myframe left - } elseif { $menu_num <= [expr 2 * $menus_per_column] } then { + } elseif { $processed_top_level <= [expr 2 * $menus_per_column] } then { set myframe middle } else { set myframe right @@ -211,7 +214,7 @@ } close $file1 update_choices - update_mainmenu .rdupd + update_mainmenu } proc write_comment { file1 file2 text } { puts $file1 "" @@ -223,17 +226,51 @@ puts $file2 " */" } -proc write_tristate { file1 file2 varname variable dep } { - if { $variable == 0 } \ - then { puts $file1 "# $varname is not set"; \ - puts $file2 "#undef $varname"} \ - elseif { $variable == 2 || ($dep == 2 && $variable == 1) } \ +proc effective_dep { deplist } { + global CONFIG_MODULES + set depend 1 + foreach i $deplist { + if {$i == 0} then {set depend 0} + if {$i == 2 && $depend == 1} then {set depend 2} + } + if {$depend == 2 && $CONFIG_MODULES == 0} then {set depend 0} + return $depend +} + +proc sync_tristate { var dep } { + global CONFIG_MODULES + if {$dep == 0 && ($var == 1 || $var == 2)} then { + set var 0 + } elseif {$dep == 2 && $var == 1} then { + set var 2 + } elseif {$var == 2 && $CONFIG_MODULES == 0} then { + if {$dep == 1} then {set var 1} else {set var 0} + } + return $var +} + +proc sync_bool { var dep modset } { + set var [sync_tristate $var $dep] + if {$dep == 2 && $var == 2} then { + set var $modset + } + return $var +} + +proc write_tristate { file1 file2 varname variable deplist modset } { + set variable [sync_tristate $variable [effective_dep $deplist]] + if { $variable == 2 } \ + then { set variable $modset } + if { $variable == 1 } \ + then { puts $file1 "$varname=y"; \ + puts $file2 "#define $varname 1" } \ + elseif { $variable == 2 } \ then { puts $file1 "$varname=m"; \ puts $file2 "#undef $varname"; \ puts $file2 "#define ${varname}_MODULE 1" } \ - elseif { $variable == 1 && $dep != 2 } \ - then { puts $file1 "$varname=y"; \ - puts $file2 "#define $varname 1" } \ + elseif { $variable == 0 } \ + then { puts $file1 "# $varname is not set"; \ + puts $file2 "#undef $varname"} \ else { \ puts stdout "ERROR - Attempting to write value for unconfigured variable ($varname)." \ } @@ -245,7 +282,7 @@ puts $file2 "#undef $varname"} \ else { puts $file1 "$varname=$variable"; \ - puts $file2 "#define $varname $variable"; \ + puts $file2 "#define $varname ($variable)"; \ } } @@ -255,7 +292,8 @@ puts $file2 "#undef $varname"} \ else { puts $file1 "$varname=$variable"; \ - puts $file2 "#define $varname 0x$variable"; \ + puts -nonewline $file2 "#define $varname 0x"; \ + puts $file2 [exec echo $variable | sed s/^0\[xX\]//]; \ } } @@ -282,11 +320,11 @@ proc toggle_switch2 {w mnum line text variable} { frame $w.x$line -relief sunken radiobutton $w.x$line.y -text "y" -variable $variable -value 1 \ - -relief groove -width 2 -command "update_menu$mnum .menu$mnum" + -relief groove -width 2 -command "update_active" radiobutton $w.x$line.m -text "-" -variable $variable -value 2 \ - -relief groove -width 2 -command "update_menu$mnum .menu$mnum" + -relief groove -width 2 -command "update_active" radiobutton $w.x$line.n -text "n" -variable $variable -value 0 \ - -relief groove -width 2 -command "update_menu$mnum .menu$mnum" + -relief groove -width 2 -command "update_active" option_name $w $mnum $line $text $variable @@ -296,11 +334,11 @@ proc toggle_switch3 {w mnum line text variable} { frame $w.x$line -relief sunken radiobutton $w.x$line.y -text "y" -variable $variable -value 1 \ - -relief groove -width 2 -command "update_menu$mnum .menu$mnum" + -relief groove -width 2 -command "update_active" radiobutton $w.x$line.m -text "m" -variable $variable -value 2 \ - -relief groove -width 2 -command "update_menu$mnum .menu$mnum" + -relief groove -width 2 -command "update_active" radiobutton $w.x$line.n -text "n" -variable $variable -value 0 \ - -relief groove -width 2 -command "update_menu$mnum .menu$mnum" + -relief groove -width 2 -command "update_active" option_name $w $mnum $line $text $variable @@ -322,10 +360,14 @@ pack $w.x$line -anchor w -fill both -expand on } -proc dep_tristate {w mnum line text variable depend } { +proc dep_tristate {w mnum line text variable } { tristate $w $mnum $line $text $variable } +proc dep_bool {w mnum line text variable } { + bool $w $mnum $line $text $variable +} + proc int { w mnum line text variable } { frame $w.x$line entry $w.x$line.x -width 18 -relief sunken -borderwidth 2 \ @@ -358,6 +400,18 @@ pack $w.x$line -anchor w -fill both -expand on } +proc submenu { w mnum line text subnum } { + frame $w.x$line + button $w.x$line.l -text "" -width 15 -relief groove + $w.x$line.l configure -activefore [cget $w.x$line.l -fg] \ + -activeback [cget $w.x$line.l -bg] -state disabled + button $w.x$line.m -text "$text" -relief raised -anchor w \ + -command "catch {destroy .menu$subnum}; menu$subnum .menu$subnum \"$text\"" + pack $w.x$line.l -side left -fill both + pack $w.x$line.m -anchor w -side right -fill both -expand on + pack $w.x$line -anchor w -fill both -expand on +} + proc comment {w line text } { #nothing done for comments now. } @@ -417,7 +471,7 @@ # frame $w.f2 button $w.f2.ok -text "OK" \ - -width 10 -command "destroy $w; focus $oldFocus" + -width 10 -command "destroy $w; catch {focus $oldFocus}" pack $w.f2.ok -side bottom -pady 6 -anchor n pack $w.f2 -side bottom -padx 10 -anchor s @@ -458,6 +512,55 @@ } +proc unregister_active {num} { + global active_menus + set index [lsearch -exact $active_menus $num] + if {$index != -1} then {set active_menus [lreplace $active_menus $index $index]} +} + +proc update_active {} { + global active_menus total_menus + set max 0 + if {[llength $active_menus] > 0} then { + set max [lindex $active_menus end] + update_define [toplevel_menu [lindex $active_menus 0]] $max 0 + } + foreach i $active_menus { + if {[winfo exists .menu$i] == 0} then { + unregister_active $i + } else { + update_menu$i + } + } + update_define [expr $max + 1] $total_menus 1 + update_mainmenu +} + +proc configure_entry {w option items} { + foreach i $items { + $w.$i configure -state $option + } +} + +proc validate_int {name val default} { + if {([exec echo $val | sed s/^-//g | tr -d \[:digit:\] ] != "")} then { + global $name; set $name $default + } +} + +proc validate_hex {name val default} { + if {([exec echo $val | tr -d \[:xdigit:\] ] != "")} then { + global $name; set $name $default + } +} + +proc update_define {first last allow_update} { + for {set i $first} {$i <= $last} {incr i} { + update_define_menu$i + if {$allow_update == 1} then update + } +} + # # Next set up the particulars for the top level menu, and define a few # buttons which we will stick down at the bottom. @@ -468,3 +571,5 @@ frame .f0.middle frame .f0.right +set active_menus [list] +set processed_top_level 0 diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/mkdep.c linux.16p3/scripts/mkdep.c --- linux.vanilla/scripts/mkdep.c Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/mkdep.c Wed Apr 19 14:05:06 2000 @@ -8,9 +8,20 @@ * I make simple dependency lines for #include <*.h> and #include "*.h". * I also find instances of CONFIG_FOO and generate dependencies * like include/config/foo.h. + * + * 1 August 1999, Michael Elizabeth Chastain, + * - Keith Owens reported a bug in smart config processing. There used + * to be an optimization for "#define CONFIG_FOO ... #ifdef CONFIG_FOO", + * so that the file would not depend on CONFIG_FOO because the file defines + * this symbol itself. But this optimization is bogus! Consider this code: + * "#if 0 \n #define CONFIG_FOO \n #endif ... #ifdef CONFIG_FOO". Here + * the definition is inactivated, but I still used it. It turns out this + * actually happens a few times in the kernel source. The simple way to + * fix this problem is to remove this particular optimization. */ #include +#include #include #include #include @@ -66,7 +77,7 @@ while (len_config + len > size_config) { str_config = realloc(str_config, size_config *= 2); if (str_config == NULL) - { perror("malloc"); exit(1); } + { perror("malloc config"); exit(1); } } } @@ -93,22 +104,11 @@ /* * Add a new value to the configuration string. */ -void define_config(int convert, const char * name, int len) +void define_config(const char * name, int len) { grow_config(len + 1); memcpy(str_config+len_config, name, len); - - if (convert) { - int i; - for (i = 0; i < len; i++) { - char c = str_config[len_config+i]; - if (isupper(c)) c = tolower(c); - if (c == '_') c = '/'; - str_config[len_config+i] = c; - } - } - len_config += len; str_config[len_config++] = '\n'; } @@ -121,7 +121,56 @@ void clear_config(void) { len_config = 0; - define_config(0, "", 0); + define_config("", 0); +} + + + +/* + * This records all the precious .h filenames. No need for a hash, + * it's a long string of values enclosed in tab and newline. + */ +char * str_precious = NULL; +int size_precious = 0; +int len_precious = 0; + + + +/* + * Grow the precious string to a desired length. + * Usually the first growth is plenty. + */ +void grow_precious(int len) +{ + if (str_precious == NULL) { + len_precious = 0; + size_precious = 4096; + str_precious = malloc(4096); + if (str_precious == NULL) + { perror("malloc precious"); exit(1); } + } + + while (len_precious + len > size_precious) { + str_precious = realloc(str_precious, size_precious *= 2); + if (str_precious == NULL) + { perror("malloc"); exit(1); } + } +} + + + +/* + * Add a new value to the precious string. + */ +void define_precious(const char * filename) +{ + int len = strlen(filename); + grow_precious(len + 4); + *(str_precious+len_precious++) = '\t'; + memcpy(str_precious+len_precious, filename, len); + len_precious += len; + memcpy(str_precious+len_precious, " \\\n", 3); + len_precious += 3; } @@ -137,7 +186,7 @@ return; if (len >= 7 && !memcmp(name, "config/", 7)) - define_config(0, name+7, len-7-2); + define_config(name+7, len-7-2); memcpy(path->buffer+path->len, name, len); path->buffer[path->len+len] = '\0'; @@ -176,7 +225,7 @@ if (is_defined_config(pc, len)) return; - define_config(0, pc, len); + define_config(pc, len); if (!hasdep) { hasdep = 1; @@ -193,7 +242,8 @@ * Thus, there is one memory access per sizeof(unsigned long) characters. */ -#if defined(__alpha__) || defined(__i386__) || defined(__MIPSEL__) || defined(__arm__) +#if defined(__alpha__) || defined(__i386__) || defined(__ia64__) || defined(__MIPSEL__) \ + || defined(__arm__) #define LE_MACHINE #endif @@ -360,7 +410,13 @@ GETNEXT NOTCASE('f', __start); goto pound_define_undef; -/* #\s*(define|undef)\s*CONFIG_(\w*) */ +/* + * #\s*(define|undef)\s*CONFIG_(\w*) + * + * this does not define the word, because it could be inside another + * conditional (#if 0). But I do parse the word so that this instance + * does not count as a use. -- mec + */ pound_define_undef: GETNEXT CASE(' ', pound_define_undef); @@ -379,7 +435,6 @@ GETNEXT if (isalnum(current) || current == '_') goto pound_define_undef_CONFIG_word; - define_config(1, map_dot, next - map_dot - 1); goto __start; /* \ + * - kvariables removed; all variables are stored in a single table now + * - some elimination of options non-valid for current architecture + * implemented. + * - negation (!) eliminated from conditions + * * TO DO: * - xconfig is at the end of its life cycle. Contact if * you are interested in working on the replacement. @@ -28,73 +34,89 @@ /* - * Transform op_variable to op_kvariable. - * - * This works, but it's gross, speed-wise. It would benefit greatly - * from a simple hash table that maps names to cfg. - * - * Note well: this is actually better than the loop structure xconfig - * has been staggering along with for three years, which performs - * this whole procedure inside *another* loop on active conditionals. + * Mark variables which are defined anywhere. */ -void transform_to_kvariable( struct kconfig * scfg ) +static void mark_variables( struct kconfig * scfg ) { struct kconfig * cfg; + int i; + for ( i = 1; i <= max_varnum; i++ ) + vartable[i].defined = 0; for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) { - struct condition * cond; - - for ( cond = cfg->cond; cond != NULL; cond = cond->next ) + if ( cfg->token == token_bool + || cfg->token == token_choice_item + || cfg->token == token_define_bool + || cfg->token == token_define_hex + || cfg->token == token_define_int + || cfg->token == token_define_string + || cfg->token == token_define_tristate + || cfg->token == token_dep_bool + || cfg->token == token_dep_mbool + || cfg->token == token_dep_tristate + || cfg->token == token_hex + || cfg->token == token_int + || cfg->token == token_string + || cfg->token == token_tristate + || cfg->token == token_unset ) { - if ( cond->op == op_variable ) + if ( cfg->nameindex > 0 ) /* paranoid */ { - /* Here's where it gets DISGUSTING. */ - struct kconfig * cfg1; + vartable[cfg->nameindex].defined = 1; + } + } + } +} + + + +static void free_cond( struct condition *cond ) +{ + struct condition *tmp, *tmp1; + for ( tmp = cond; tmp; tmp = tmp1 ) + { + tmp1 = tmp->next; + free( (void*)tmp ); + } +} + - for ( cfg1 = scfg; cfg1 != NULL; cfg1 = cfg1->next ) + +/* + * Remove the bang operator from a condition to avoid priority problems. + * "!" has different priorities as "test" command argument and in + * a tk script. + */ +static struct condition * remove_bang( struct condition * condition ) +{ + struct condition * conda, * condb, * prev = NULL; + + for ( conda = condition; conda; conda = conda->next ) + { + if ( conda->op == op_bang && conda->next && + ( condb = conda->next->next ) ) + { + if ( condb->op == op_eq || condb->op == op_neq ) + { + condb->op = (condb->op == op_eq) ? op_neq : op_eq; + conda->op = op_nuked; + if ( prev ) { - if ( cfg1->token == token_bool - || cfg1->token == token_choice_item - || cfg1->token == token_dep_tristate - || cfg1->token == token_hex - || cfg1->token == token_int - || cfg1->token == token_string - || cfg1->token == token_tristate ) - { - if ( strcmp( cond->str, cfg1->optionname ) == 0 ) - { - cond->op = op_kvariable; - cond->str = NULL; - cond->cfg = cfg1; - break; - } - } + prev->next = conda->next; } - } - -#if 0 - /* - * Maybe someday this will be useful, but right now it - * gives a lot of false positives on files like - * drivers/video/Config.in that are meant for more - * than one architecture. Turn it on if you want to play - * with it though; it does work. -- mec - */ - if ( cond->op == op_variable ) - { - if ( strcmp( cond->str, "ARCH" ) != 0 - && strcmp( cond->str, "CONSTANT_Y" ) != 0 - && strcmp( cond->str, "CONSTANT_M" ) != 0 - && strcmp( cond->str, "CONSTANT_N" ) != 0 ) + else { - fprintf( stderr, "warning: $%s used but not defined\n", - cond->str ); + condition = conda->next; } + conda->next = NULL; + free_cond( conda ); + conda = condb; } -#endif } + prev = conda; } + return condition; } @@ -103,27 +125,65 @@ * Make a new condition chain by joining the current condition stack with * the "&&" operator for glue. */ -struct condition * join_condition_stack( struct condition * conditions [], +static struct condition * join_condition_stack( struct condition * conditions [], int depth ) { struct condition * cond_list; struct condition * cond_last; - int i; + int i, is_first = 1; cond_list = cond_last = NULL; + + for ( i = 0; i < depth; i++ ) + { + if ( conditions[i]->op == op_false ) + { + struct condition * cnew; + + /* It is always false condition */ + cnew = malloc( sizeof(*cnew) ); + memset( cnew, 0, sizeof(*cnew) ); + cnew->op = op_false; + cond_list = cond_last = cnew; + goto join_done; + } + } for ( i = 0; i < depth; i++ ) { struct condition * cond; struct condition * cnew; + int add_paren; + + /* omit always true conditions */ + if ( conditions[i]->op == op_true ) + continue; + + /* if i have another condition, add an '&&' operator */ + if ( !is_first ) + { + cnew = malloc( sizeof(*cnew) ); + memset( cnew, 0, sizeof(*cnew) ); + cnew->op = op_and; + cond_last->next = cnew; + cond_last = cnew; + } - /* add a '(' */ - cnew = malloc( sizeof(*cnew) ); - memset( cnew, 0, sizeof(*cnew) ); - cnew->op = op_lparen; - if ( cond_last == NULL ) - { cond_list = cond_last = cnew; } + if ( conditions[i]->op != op_lparen ) + { + /* add a '(' */ + add_paren = 1; + cnew = malloc( sizeof(*cnew) ); + memset( cnew, 0, sizeof(*cnew) ); + cnew->op = op_lparen; + if ( cond_last == NULL ) + { cond_list = cond_last = cnew; } + else + { cond_last->next = cnew; cond_last = cnew; } + } else - { cond_last->next = cnew; cond_last = cnew; } + { + add_paren = 0; + } /* duplicate the chain */ for ( cond = conditions [i]; cond != NULL; cond = cond->next ) @@ -132,27 +192,23 @@ cnew->next = NULL; cnew->op = cond->op; cnew->str = cond->str ? strdup( cond->str ) : NULL; - cnew->cfg = cond->cfg; - cond_last->next = cnew; - cond_last = cnew; + cnew->nameindex = cond->nameindex; + if ( cond_last == NULL ) + { cond_list = cond_last = cnew; } + else + { cond_last->next = cnew; cond_last = cnew; } } - /* add a ')' */ - cnew = malloc( sizeof(*cnew) ); - memset( cnew, 0, sizeof(*cnew) ); - cnew->op = op_rparen; - cond_last->next = cnew; - cond_last = cnew; - - /* if i have another condition, add an '&&' operator */ - if ( i < depth - 1 ) + if ( add_paren ) { + /* add a ')' */ cnew = malloc( sizeof(*cnew) ); memset( cnew, 0, sizeof(*cnew) ); - cnew->op = op_and; + cnew->op = op_rparen; cond_last->next = cnew; cond_last = cnew; } + is_first = 0; } /* @@ -171,7 +227,7 @@ cond1e = cond1d->next; if ( cond1e == NULL ) break; cond1f = cond1e->next; if ( cond1f == NULL ) break; - if ( cond1b->op == op_kvariable + if ( cond1b->op == op_variable && ( cond1c->op == op_eq || cond1c->op == op_neq ) && cond1d->op == op_constant && cond1e->op == op_rparen ) @@ -189,8 +245,8 @@ cond2f = cond2e->next; /* look for match */ - if ( cond2b->op == op_kvariable - && cond2b->cfg == cond1b->cfg + if ( cond2b->op == op_variable + && cond2b->nameindex == cond1b->nameindex && cond2c->op == cond1c->op && cond2d->op == op_constant && strcmp( cond2d->str, cond1d->str ) == 0 @@ -219,64 +275,159 @@ } } +join_done: return cond_list; } +static char * current_arch = NULL; + /* - * This is the main transformation function. + * Eliminating conditions with ARCH = . */ -void fix_conditionals( struct kconfig * scfg ) +static struct condition *eliminate_other_arch( struct condition *list ) { - struct kconfig * cfg; - - /* - * Transform op_variable to op_kvariable. - */ - transform_to_kvariable( scfg ); - - /* - * Transform conditions that use variables from "choice" statements. - * Choice values appear to the user as a collection of booleans, and the - * script can test the individual booleans. But internally, all I have is - * the N-way value of an unnamed temporary for the whole statement. So I - * have to tranform '"$CONFIG_M386" != "y"' - * into '"$tmpvar_N" != "CONFIG_M386"'. - */ - for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) + struct condition *cond1a = list, *cond1b = NULL, *cond1c = NULL, *cond1d = NULL; + if ( current_arch == NULL ) + current_arch = getenv( "ARCH" ); + if ( current_arch == NULL ) { - struct condition * cond; - - for ( cond = cfg->cond; cond != NULL; cond = cond->next ) + fprintf( stderr, "error: ARCH undefined\n" ); + exit( 1 ); + } + if ( cond1a->op == op_variable + && ! strcmp( vartable[cond1a->nameindex].name, "ARCH" ) ) + { + cond1b = cond1a->next; if ( cond1b == NULL ) goto done; + cond1c = cond1b->next; if ( cond1c == NULL ) goto done; + cond1d = cond1c->next; + if ( cond1c->op == op_constant && cond1d == NULL ) { - if ( cond->op == op_kvariable && cond->cfg->token == token_choice_item ) + if ( (cond1b->op == op_eq && strcmp( cond1c->str, current_arch )) + || (cond1b->op == op_neq && ! strcmp( cond1c->str, current_arch )) ) { - /* - * Look two more tokens down for the comparison token. - * It has to be "y" for this trick to work. - * - * If you get this error, don't even think about relaxing the - * strcmp test. You will produce incorrect TK code. Instead, - * look for the place in your Config.in script where you are - * comparing a 'choice' variable to a value other than 'y', - * and rewrite the comparison to be '= "y"' or '!= "y"'. - */ - struct condition * cond2 = cond->next->next; - const char * label; - - if ( strcmp( cond2->str, "y" ) != 0 ) + /* This is for another architecture */ + cond1a->op = op_false; + cond1a->next = NULL; + free_cond( cond1b ); + return cond1a; + } + else if ( (cond1b->op == op_neq && strcmp( cond1c->str, current_arch )) + || (cond1b->op == op_eq && ! strcmp( cond1c->str, current_arch )) ) + { + /* This is for current architecture */ + cond1a->op = op_true; + cond1a->next = NULL; + free_cond( cond1b ); + return cond1a; + } + } + else if ( cond1c->op == op_constant && cond1d->op == op_or ) + { + if ( (cond1b->op == op_eq && strcmp( cond1c->str, current_arch )) + || (cond1b->op == op_neq && ! strcmp( cond1c->str, current_arch )) ) + { + /* This is for another architecture */ + cond1b = cond1d->next; + cond1d->next = NULL; + free_cond( cond1a ); + return eliminate_other_arch( cond1b ); + } + else if ( (cond1b->op == op_neq && strcmp( cond1c->str, current_arch )) + || (cond1b->op == op_eq && ! strcmp( cond1c->str, current_arch )) ) + { + /* This is for current architecture */ + cond1a->op = op_true; + cond1a->next = NULL; + free_cond( cond1b ); + return cond1a; + } + } + else if ( cond1c->op == op_constant && cond1d->op == op_and ) + { + if ( (cond1b->op == op_eq && strcmp( cond1c->str, current_arch )) + || (cond1b->op == op_neq && ! strcmp( cond1c->str, current_arch )) ) + { + /* This is for another architecture */ + int l_par = 0; + + for ( cond1c = cond1d->next; cond1c; cond1c = cond1c->next ) { - fprintf( stderr, "tkparse choked in fix_choice_cond\n" ); - exit( 1 ); + if ( cond1c->op == op_lparen ) + l_par++; + else if ( cond1c->op == op_rparen ) + l_par--; + else if ( cond1c->op == op_or && l_par == 0 ) + /* Expression too complex - don't touch */ + return cond1a; + else if ( l_par < 0 ) + { + fprintf( stderr, "incorrect condition: programming error ?\n" ); + exit( 1 ); + } } + cond1a->op = op_false; + cond1a->next = NULL; + free_cond( cond1b ); + return cond1a; + } + else if ( (cond1b->op == op_neq && strcmp( cond1c->str, current_arch )) + || (cond1b->op == op_eq && ! strcmp( cond1c->str, current_arch )) ) + { + /* This is for current architecture */ + cond1b = cond1d->next; + cond1d->next = NULL; + free_cond( cond1a ); + return eliminate_other_arch( cond1b ); + } + } + } + if ( cond1a->op == op_variable && ! vartable[cond1a->nameindex].defined ) + { + cond1b = cond1a->next; if ( cond1b == NULL ) goto done; + cond1c = cond1b->next; if ( cond1c == NULL ) goto done; + cond1d = cond1c->next; - label = cond->cfg->label; - cond->cfg = cond->cfg->cfg_parent; - cond2->str = strdup( label ); + if ( cond1c->op == op_constant + && ( cond1d == NULL || cond1d->op == op_and ) ) /*???*/ + { + if ( cond1b->op == op_eq && strcmp( cond1c->str, "" ) ) + { + cond1a->op = op_false; + cond1a->next = NULL; + free_cond( cond1b ); + return cond1a; + } + } + else if ( cond1c->op == op_constant && cond1d->op == op_or ) + { + if ( cond1b->op == op_eq && strcmp( cond1c->str, "" ) ) + { + cond1b = cond1d->next; + cond1d->next = NULL; + free_cond( cond1a ); + return eliminate_other_arch( cond1b ); } } } +done: + return list; +} + + + +/* + * This is the main transformation function. + */ +void fix_conditionals( struct kconfig * scfg ) +{ + struct kconfig * cfg; + + /* + * Transform op_variable to op_kvariable. + */ + mark_variables( scfg ); /* * Walk the statement list, maintaining a stack of current conditions. @@ -290,16 +441,19 @@ { struct condition * cond_stack [32]; int depth = 0; + struct kconfig * prev = NULL; for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) { + int good = 1; switch ( cfg->token ) { default: break; case token_if: - cond_stack [depth++] = cfg->cond; + cond_stack [depth++] = + remove_bang( eliminate_other_arch( cfg->cond ) ); cfg->cond = NULL; break; @@ -325,6 +479,8 @@ case op_or: cond->op = op_and1; break; case op_neq: cond->op = op_eq; break; case op_eq: cond->op = op_neq; break; + case op_true: cond->op = op_false;break; + case op_false:cond->op = op_true; break; } } } @@ -336,25 +492,111 @@ case token_bool: case token_choice_item: + case token_choice_header: case token_comment: case token_define_bool: + case token_define_hex: + case token_define_int: + case token_define_string: + case token_define_tristate: + case token_endmenu: case token_hex: case token_int: case token_mainmenu_option: case token_string: case token_tristate: + case token_unset: cfg->cond = join_condition_stack( cond_stack, depth ); + if ( cfg->cond && cfg->cond->op == op_false ) + { + good = 0; + if ( prev ) + prev->next = cfg->next; + else + scfg = cfg->next; + } break; + case token_dep_bool: + case token_dep_mbool: case token_dep_tristate: /* * Same as the other simple statements, plus an additional * condition for the dependency. */ - cond_stack [depth] = cfg->cond; - cfg->cond = join_condition_stack( cond_stack, depth+1 ); + if ( cfg->cond ) + { + cond_stack [depth] = eliminate_other_arch( cfg->cond ); + cfg->cond = join_condition_stack( cond_stack, depth+1 ); + } + else + { + cfg->cond = join_condition_stack( cond_stack, depth ); + } + if ( cfg->cond && cfg->cond->op == op_false ) + { + good = 0; + if ( prev ) + prev->next = cfg->next; + else + scfg = cfg->next; + } break; } + if ( good ) + prev = cfg; } } } + + + +#if 0 +void dump_condition( struct condition *list ) +{ + struct condition *tmp; + for ( tmp = list; tmp; tmp = tmp->next ) + { + switch (tmp->op) + { + default: + break; + case op_variable: + printf( " %s", vartable[tmp->nameindex].name ); + break; + case op_constant: + printf( " %s", tmp->str ); + break; + case op_eq: + printf( " =" ); + break; + case op_bang: + printf( " !" ); + break; + case op_neq: + printf( " !=" ); + break; + case op_and: + case op_and1: + printf( " -a" ); + break; + case op_or: + printf( " -o" ); + break; + case op_true: + printf( " TRUE" ); + break; + case op_false: + printf( " FALSE" ); + break; + case op_lparen: + printf( " (" ); + break; + case op_rparen: + printf( " )" ); + break; + } + } + printf( "\n" ); +} +#endif diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/tkgen.c linux.16p3/scripts/tkgen.c --- linux.vanilla/scripts/tkgen.c Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/tkgen.c Wed Apr 19 14:05:06 2000 @@ -92,33 +92,58 @@ * * 23 January 1999, Michael Elizabeth Chastain * - Remove bug-compatible code. + * + * 07 July 1999, Andrzej M. Krzysztofowicz + * Some bugfixes, including + * - disabling "m" options when CONFIG_MODULES is set to "n" as well as "y" + * option in dep_tristate when dependency is set to "m", + * - deactivating choices which should not be available, + * - basic validation for int and hex introduced if the entered one is not + * valid, + * - updates of all opened menus instead of the active only. I was afraid + * that it would slow down updates, but I don't even see any speed difference + * on my machine. If it slows you can still work with only a single menu + * opened, + * - fixed error when focussing non-existent window (especially Help windows), + * Higher level submenus implemented. */ #include +#include #include +#include #include "tkparse.h" - /* * Total number of menus. */ static int tot_menu_num = 0; - +/* + * Pointers to mainmenu_option and endmenu of each menu. + */ +struct kconfig * menu_first [100]; +struct kconfig * menu_last [100]; /* * Generate portion of wish script for the beginning of a submenu. * The guts get filled in with the various options. */ -static void start_proc( char * label, int menu_num, int flag ) +static void start_proc( char * label, int menu_num, int toplevel ) { - if ( flag ) + if ( toplevel ) printf( "menu_option menu%d %d \"%s\"\n", menu_num, menu_num, label ); printf( "proc menu%d {w title} {\n", menu_num ); - printf( "\tcatch {destroy $w}\n" ); + printf( "\tset oldFocus [focus]\n" ); + if ( menu_first[menu_num]->menu_number != 0 ) + printf( "\tcatch {focus .menu%d}\n", + menu_first[menu_num]->menu_number ); + printf( "\tcatch {destroy $w; unregister_active %d}\n", menu_num ); printf( "\ttoplevel $w -class Dialog\n" ); printf( "\twm withdraw $w\n" ); + printf( "\tglobal active_menus\n" ); + printf( "\tset active_menus [lsort -integer [linsert $active_menus end %d]]\n", menu_num ); printf( "\tmessage $w.m -width 400 -aspect 300 -text \\\n" ); printf( "\t\t\"%s\" -relief raised\n", label ); printf( "\tpack $w.m -pady 10 -side top -padx 10\n" ); @@ -127,16 +152,41 @@ /* * Attach the "Prev", "Next" and "OK" buttons at the end of the window. */ - printf( "\tset oldFocus [focus]\n" ); printf( "\tframe $w.f\n" ); - printf( "\tbutton $w.f.back -text \"Main Menu\" \\\n" ); - printf( "\t\t-width 15 -command \"destroy $w; focus $oldFocus; update_mainmenu $w\"\n" ); + if ( toplevel ) + printf( "\tbutton $w.f.back -text \"Main Menu\" \\\n" ); + else + printf( "\tbutton $w.f.back -text \"OK\" \\\n" ); + printf( "\t\t-width 15 -command \"catch {focus $oldFocus}; destroy $w; unregister_active %d\"\n", + menu_num ); printf( "\tbutton $w.f.next -text \"Next\" \\\n" ); - printf( "\t\t-width 15 -command \" destroy $w; focus $oldFocus; menu%d .menu%d \\\"$title\\\"\"\n", menu_num+1, menu_num+1 ); + printf( "\t\t-width 15 -command \"catch {focus $oldFocus}; " ); + /* + * We are checking which windows should be destroyed and which are + * common parrents with the next one. Remember that menu_num field + * in mainmenu_option record reports number of its *parent* menu. + */ + if ( menu_num < tot_menu_num + && menu_first[menu_num + 1]->menu_number != menu_num ) + { + int to_destr; + + printf( "destroy $w; unregister_active %d; ", menu_num ); + to_destr = menu_first[menu_num]->menu_number; + while ( to_destr > 0 && menu_first[menu_num + 1]->menu_number != to_destr ) + { + printf( "catch {destroy .menu%d}; unregister_active %d; ", + to_destr, to_destr ); + to_destr = menu_first[to_destr]->menu_number; + } + } + printf( "menu%d .menu%d \\\"$title\\\"\"\n", + menu_num+1, menu_num+1 ); if ( menu_num == tot_menu_num ) printf( "\t$w.f.next configure -state disabled\n" ); printf( "\tbutton $w.f.prev -text \"Prev\" \\\n" ); - printf( "\t\t-width 15 -command \" destroy $w; focus $oldFocus; menu%d .menu%d \\\"$title\\\"\"\n", menu_num-1, menu_num-1 ); + printf( "\t\t-width 15 -command \"catch {focus $oldFocus}; destroy $w; unregister_active %d; menu%d .menu%d \\\"$title\\\"\"\n", + menu_num, menu_num-1, menu_num-1 ); if ( menu_num == 1 ) printf( "\t$w.f.prev configure -state disabled\n" ); printf( "\tpack $w.f.back $w.f.next $w.f.prev -side left -expand on\n" ); @@ -177,12 +227,11 @@ * a global declaration so we know whether we need to insert one for a * given function or not. */ -void clear_globalflags( struct kconfig * scfg ) +static void clear_globalflags(void) { - struct kconfig * cfg; - - for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) - cfg->global_written = 0; + int i; + for ( i = 1; i <= max_varnum; i++ ) + vartable[i].global_written = 0; } @@ -194,7 +243,7 @@ */ void global( const char *var ) { - printf( "\tglobal %s; vfix %s\n", var, var ); + printf( "\tglobal %s\n", var ); } @@ -207,6 +256,21 @@ int menu_num, int line_num ) { struct condition * cond; + struct dependency * tmp; + struct kconfig * cfg1; + + if ( line_num >= -1 ) + { + if ( cfg->token == token_define_bool || cfg->token == token_define_hex + || cfg->token == token_define_int || cfg->token == token_define_string + || cfg->token == token_define_tristate || cfg->token == token_unset ) + return; + } + else + { + if ( cfg->token == token_string || cfg->token == token_mainmenu_option ) + return; + } /* * First write any global declarations we need for this conditional. @@ -219,14 +283,10 @@ break; case op_variable: - global( cond->str ); - break; - - case op_kvariable: - if ( ! cond->cfg->global_written ) + if ( ! vartable[cond->nameindex].global_written ) { - cond->cfg->global_written = 1; - global( cond->cfg->optionname ); + vartable[cond->nameindex].global_written = 1; + global( vartable[cond->nameindex].name ); } break; } @@ -235,10 +295,10 @@ /* * Now write this option. */ - if ( ! cfg->global_written && cfg->optionname != NULL ) + if ( cfg->nameindex > 0 && ! vartable[cfg->nameindex].global_written ) { - cfg->global_written = 1; - global( cfg->optionname ); + vartable[cfg->nameindex].global_written = 1; + global( vartable[cfg->nameindex].name ); } /* @@ -262,156 +322,323 @@ case op_rparen: printf( ")" ); break; case op_variable: - printf( "$%s", cond->str ); - break; - - case op_kvariable: - printf( "$%s", cond->cfg->optionname ); + printf( "$%s", vartable[cond->nameindex].name ); break; case op_constant: if ( strcmp( cond->str, "y" ) == 0 ) printf( "1" ); else if ( strcmp( cond->str, "n" ) == 0 ) printf( "0" ); else if ( strcmp( cond->str, "m" ) == 0 ) printf( "2" ); + else if ( strcmp( cond->str, "" ) == 0 ) printf( "4" ); else printf( "\"%s\"", cond->str ); break; } } - printf( "} then { " ); + printf( "} then {" ); /* * Generate a procedure call to write the value. * This code depends on procedures in header.tk. */ - switch ( cfg->token ) + if ( line_num >= -1 ) { - default: - printf( " }\n" ); - break; + int modtoyes = 0; - case token_bool: - printf( ".menu%d.config.f.x%d.y configure -state normal;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.n configure -state normal;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.l configure -state normal;", - menu_num, line_num ); - printf( "set %s [expr $%s&15];", - cfg->optionname, cfg->optionname ); - printf( "} else { "); - printf( ".menu%d.config.f.x%d.y configure -state disabled;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.n configure -state disabled;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.l configure -state disabled;", - menu_num, line_num ); - printf( "set %s [expr $%s|16];}\n", - cfg->optionname, cfg->optionname ); - break; + switch ( cfg->token ) + { + default: + printf( " }\n" ); + break; - case token_choice_header: - fprintf( stderr, "Internal error on token_choice_header\n" ); - exit( 1 ); + case token_dep_mbool: + modtoyes = 1; + case token_dep_bool: + printf( "\n" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + if ( ! vartable[get_varnum( tmp->name )].global_written ) + { + global( tmp->name ); + } + printf( "\tset tmpvar_dep [effective_dep [list" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + printf( " $%s", tmp->name ); + printf( "]];set %s [sync_bool $%s $tmpvar_dep %d];", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name, + modtoyes ); + printf( "if {$tmpvar_dep != 1" ); + if (modtoyes) + printf( " && $tmpvar_dep != 2" ); + printf( "} then {configure_entry .menu%d.config.f.x%d disabled {y};", + menu_num, line_num ); + printf( "} else {" ); + printf( "configure_entry .menu%d.config.f.x%d normal {y};", + menu_num, line_num ); + printf( "}; " ); + case token_bool: + if ( cfg->token == token_bool ) + printf( "\n\t" ); + printf( "configure_entry .menu%d.config.f.x%d normal {n l", + menu_num, line_num ); + if ( cfg->token == token_bool ) + printf( " y" ); + printf( "}" ); + printf( "} else {"); + printf( "configure_entry .menu%d.config.f.x%d disabled {y n l}}\n", + menu_num, line_num ); + break; - case token_choice_item: - fprintf( stderr, "Internal error on token_choice_item\n" ); - exit( 1 ); + case token_choice_header: + printf( "configure_entry .menu%d.config.f.x%d normal {x l}", + menu_num, line_num ); + printf( "} else {" ); + printf( "configure_entry .menu%d.config.f.x%d disabled {x l}", + menu_num, line_num ); + printf( "}\n" ); + break; - case token_define_bool: - printf( "set %s %s } \n", - cfg->optionname, cfg->value ); - break; + case token_choice_item: + fprintf( stderr, "Internal error on token_choice_item\n" ); + exit( 1 ); - case token_dep_tristate: - case token_tristate: - if ( cfg->token == token_dep_tristate ) - { - global( cfg->depend ); - printf( "if { $%s != 1 && $%s != 0 } then {", - cfg->depend, cfg->depend ); - printf( ".menu%d.config.f.x%d.y configure -state disabled;", + case token_dep_tristate: + printf( "\n" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + if ( ! vartable[get_varnum( tmp->name )].global_written ) + { + global( tmp->name ); + } + printf( "\tset tmpvar_dep [effective_dep [list" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + printf( " $%s", tmp->name ); + printf( "]];set %s [sync_tristate $%s $tmpvar_dep];", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + printf( "\tif {$tmpvar_dep != 1} then {" ); + printf( "configure_entry .menu%d.config.f.x%d disabled {y}", menu_num, line_num ); printf( "} else {" ); - printf( ".menu%d.config.f.x%d.y configure -state normal;", - menu_num, line_num); + printf( "configure_entry .menu%d.config.f.x%d normal {y}", + menu_num, line_num ); printf( "}; " ); - } - else - { - printf( ".menu%d.config.f.x%d.y configure -state normal;", + printf( "if {$tmpvar_dep == 0} then {" ); + printf( "configure_entry .menu%d.config.f.x%d disabled {m}", + menu_num, line_num ); + printf( "} else {" ); + printf( "configure_entry .menu%d.config.f.x%d normal {m}", + menu_num, line_num ); + printf( "}; " ); + case token_tristate: + if ( cfg->token == token_tristate ) + { + printf( "\n\tconfigure_entry .menu%d.config.f.x%d normal {y}; ", + menu_num, line_num ); + } + printf( "if {($CONFIG_MODULES == 1)} then {" ); + printf( "configure_entry .menu%d.config.f.x%d normal {m}} else {", menu_num, line_num ); + printf( "configure_entry .menu%d.config.f.x%d disabled {m}}; ", + menu_num, line_num ); + printf( "configure_entry .menu%d.config.f.x%d normal {n l}", + menu_num, line_num ); + + /* + * Or in a bit to the variable - this causes all of the radiobuttons + * to be deselected (i.e. not be red). + */ + printf( "} else {" ); + printf( "configure_entry .menu%d.config.f.x%d disabled {y n m l}}\n", + menu_num, line_num ); + break; + + case token_hex: + case token_int: + case token_string: + printf( ".menu%d.config.f.x%d.x configure -state normal -foreground [ cget .ref -foreground ]; ", + menu_num, line_num ); + printf( ".menu%d.config.f.x%d.l configure -state normal; ", + menu_num, line_num ); + printf( "} else {" ); + printf( ".menu%d.config.f.x%d.x configure -state disabled -foreground [ cget .ref -disabledforeground ]; ", + menu_num, line_num ); + printf( ".menu%d.config.f.x%d.l configure -state disabled}\n", + menu_num, line_num ); + break; + + case token_mainmenu_option: + if ( line_num >= 0 ) + { + printf( "configure_entry .menu%d.config.f.x%d normal {m}", + menu_num, line_num ); + printf( "} else {" ); + printf( "configure_entry .menu%d.config.f.x%d disabled {m}}\n", + menu_num, line_num ); + } + else + printf( ".f0.x%d configure -state normal } else { .f0.x%d configure -state disabled }\n", + menu_num, menu_num ); + break; } + } + else + { + int modtoyes = 0; - printf( ".menu%d.config.f.x%d.n configure -state normal;", - menu_num, line_num ); - printf( "global CONFIG_MODULES; if {($CONFIG_MODULES == 1)} then { .menu%d.config.f.x%d.m configure -state normal };", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.l configure -state normal;", - menu_num, line_num ); + switch ( cfg->token ) + { + default: + printf( " }\n" ); + break; + + case token_dep_mbool: + modtoyes = 1; + case token_dep_bool: + printf( "\n" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + if ( ! vartable[get_varnum( tmp->name )].global_written ) + { + global( tmp->name ); + } + printf( "\tset tmpvar_dep [effective_dep [list" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + printf( " $%s", tmp->name ); + printf( "]];set %s [sync_bool $%s $tmpvar_dep %d];", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name, + modtoyes ); + case token_bool: + if ( cfg->token == token_bool ) + printf( "\n\t" ); + printf( "set %s [expr $%s&15]", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + printf( "} else {"); + printf( "set %s [expr $%s|16]}\n", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + break; + case token_choice_header: + printf( "} else {" ); + for ( cfg1 = cfg->next; + cfg1 != NULL && cfg1->token == token_choice_item; + cfg1 = cfg1->next ) + printf( "set %s 4;", vartable[cfg1->nameindex].name ); + printf( "}\n" ); + break; + + case token_choice_item: + fprintf( stderr, "Internal error on token_choice_item\n" ); + exit( 1 ); + + case token_define_bool: + case token_define_tristate: + if ( ! vartable[get_varnum( cfg->value )].global_written ) + { + global( cfg->value ); + } + printf( "set %s $%s }\n", + vartable[cfg->nameindex].name, cfg->value ); + break; + + case token_define_hex: + case token_define_int: + printf( "set %s %s }\n", + vartable[cfg->nameindex].name, cfg->value ); + break; + + case token_define_string: + printf( "set %s \"%s\" }\n", + vartable[cfg->nameindex].name, cfg->value ); + break; + + case token_dep_tristate: + printf( "\n" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + if ( ! vartable[get_varnum( tmp->name )].global_written ) + { + global( tmp->name ); + } + printf( "\tset tmpvar_dep [effective_dep [list" ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + printf( " $%s", tmp->name ); + printf( "]]; set %s [sync_tristate $%s $tmpvar_dep]; ", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + case token_tristate: + if ( cfg->token == token_tristate ) + printf( "if {($CONFIG_MODULES == 0) && ($%s == 2)} then {set %s 1}; ", + vartable[cfg->nameindex].name, + vartable[cfg->nameindex].name ); /* * Or in a bit to the variable - this causes all of the radiobuttons * to be deselected (i.e. not be red). */ - printf( "set %s [expr $%s&15];", - cfg->optionname, cfg->optionname ); - printf( "} else { " ); - printf( ".menu%d.config.f.x%d.y configure -state disabled;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.n configure -state disabled;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.m configure -state disabled;", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.l configure -state disabled;", - menu_num, line_num ); + printf( "set %s [expr $%s&15]", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + printf( "} else {" ); /* * Clear the disable bit to enable the correct radiobutton. */ - printf( "set %s [expr $%s|16];}\n", - cfg->optionname, cfg->optionname ); - break; + printf( "set %s [expr $%s|16]}\n", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + break; - case token_hex: - case token_int: - case token_string: - printf( ".menu%d.config.f.x%d.x configure -state normal -foreground [ cget .ref -foreground ]; ", - menu_num, line_num); - printf( ".menu%d.config.f.x%d.l configure -state normal; ", - menu_num, line_num); - printf( "} else { " ); - printf( ".menu%d.config.f.x%d.x configure -state disabled -foreground [ cget .ref -disabledforeground ];", - menu_num, line_num ); - printf( ".menu%d.config.f.x%d.l configure -state disabled;}\n", - menu_num, line_num ); - break; + case token_hex: + case token_int: + if ( cfg->value && *cfg->value == '$' ) + { + int index = get_varnum( cfg->value+1 ); + printf( "\n" ); + if ( ! vartable[index].global_written ) + { + global( vartable[index].name ); + } + printf( "\t" ); + } + if ( cfg->token == token_hex ) + printf( "validate_hex " ); + else if ( cfg->token == token_int ) + printf( "validate_int " ); + printf( "%s \"$%s\" %s}\n", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name, + cfg->value ); + break; - case token_mainmenu_option: - printf( ".f0.x%d configure -state normal } else { .f0.x%d configure -state disabled }\n", - menu_num, menu_num ); - break; + case token_unset: + printf( "set %s 4}\n", vartable[cfg->nameindex].name ); + break; + } } } - /* * Generate a line that writes a variable to the output file. */ void generate_writeconfig( struct kconfig * cfg ) { struct condition * cond; - + struct dependency * tmp; + int depmod = 2; + /* * Generate global declaration for this symbol. */ if ( cfg->token != token_comment ) { - if ( ! cfg->global_written ) + if ( cfg->nameindex > 0 && ! vartable[cfg->nameindex].global_written ) { - cfg->global_written = 1; - printf( "\tglobal %s\n", cfg->optionname ); + vartable[cfg->nameindex].global_written = 1; + global( vartable[cfg->nameindex].name ); + } + if ( cfg->token == token_define_tristate || cfg->token == token_define_bool ) + { + if ( ! vartable[get_varnum( cfg->value )].global_written ) + { + vartable[get_varnum( cfg->value )].global_written = 1; + global( cfg->value ); + } + } + else if ( cfg->nameindex <= 0 && cfg->token == token_choice_header ) + { + printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) ); } } @@ -426,14 +653,10 @@ break; case op_variable: - global( cond->str ); - break; - - case op_kvariable: - if ( ! cond->cfg->global_written ) + if ( ! vartable[cond->nameindex].global_written ) { - cond->cfg->global_written = 1; - global( cond->cfg->optionname ); + vartable[cond->nameindex].global_written = 1; + global( vartable[cond->nameindex].name ); } break; } @@ -442,7 +665,6 @@ /* * Generate indentation. */ - if ( cfg->token != token_choice_header ) printf( "\t" ); /* @@ -466,17 +688,14 @@ case op_rparen: printf( ")" ); break; case op_variable: - printf( "$%s", cond->str ); - break; - - case op_kvariable: - printf( "$%s", cond->cfg->optionname ); + printf( "$%s", vartable[cond->nameindex].name ); break; case op_constant: if ( strcmp( cond->str, "n" ) == 0 ) printf( "0" ); else if ( strcmp( cond->str, "y" ) == 0 ) printf( "1" ); else if ( strcmp( cond->str, "m" ) == 0 ) printf( "2" ); + else if ( strcmp( cond->str, "" ) == 0 ) printf( "4" ); else printf( "\"%s\"", cond->str ); break; @@ -499,10 +718,8 @@ case token_bool: case token_tristate: - if ( cfg->cond ) - printf( " " ); - printf( "write_tristate $cfg $autocfg %s $%s $notmod", - cfg->optionname, cfg->optionname ); + printf( "write_tristate $cfg $autocfg %s $%s [list $notmod] 2", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); if ( cfg->cond != NULL ) printf( " }" ); printf( "\n" ); @@ -520,12 +737,15 @@ cfg1 != NULL && cfg1->token == token_choice_item; cfg1 = cfg1->next ) { - printf("\tif { $%s == \"%s\" } then { write_tristate $cfg $autocfg %s 1 $notmod } else { write_tristate $cfg $autocfg %s 0 $notmod }\n", - cfg->optionname, cfg1->label, - cfg1->optionname, - cfg1->optionname ); + printf("\n\tif { $tmpvar_%d == \"%s\" } then { write_tristate $cfg $autocfg %s 1 [list $notmod] 2 } else { write_tristate $cfg $autocfg %s 0 [list $notmod] 2 }", + -(cfg->nameindex), cfg1->label, + vartable[cfg1->nameindex].name, + vartable[cfg1->nameindex].name ); } } + if ( cfg->cond != NULL ) + printf( "}" ); + printf( "\n" ); break; case token_choice_item: @@ -541,53 +761,76 @@ break; case token_define_bool: + case token_define_tristate: if ( cfg->cond == NULL ) { - printf( "write_tristate $cfg $autocfg %s $%s $notmod\n", - cfg->optionname, cfg->optionname ); + printf( "write_tristate $cfg $autocfg %s $%s [list $notmod] 2\n", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); } else { - printf( "write_tristate $cfg $autocfg %s %s $notmod }\n", - cfg->optionname, cfg->value ); + printf( "write_tristate $cfg $autocfg %s $%s [list $notmod] 2 }\n", + vartable[cfg->nameindex].name, cfg->value ); } break; + case token_dep_mbool: + depmod = 1; + case token_dep_bool: case token_dep_tristate: - if ( cfg->cond ) - printf( " " ); - printf( "write_tristate $cfg $autocfg %s $%s $%s", - cfg->optionname, cfg->optionname, cfg->depend ); + printf( "write_tristate $cfg $autocfg %s $%s [list", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + for ( tmp = cfg->depend; tmp; tmp = tmp->next ) + printf( " $%s", tmp->name ); + printf( "] %d", depmod ); if ( cfg->cond != NULL ) printf( " }" ); - printf( " \n" ); + printf( "\n" ); break; - case token_hex: + case token_define_hex: + printf( "write_hex $cfg $autocfg %s %s $notmod", + vartable[cfg->nameindex].name, cfg->value ); + if ( cfg->cond != NULL ) + printf( " }" ); + printf( "\n" ); + break; + + case token_define_int: + printf( "write_int $cfg $autocfg %s %s $notmod", + vartable[cfg->nameindex].name, cfg->value ); + if ( cfg->cond != NULL ) + printf( " }" ); + printf( "\n" ); + break; + + case token_define_string: + printf( "write_string $cfg $autocfg %s \"%s\" $notmod", + vartable[cfg->nameindex].name, cfg->value ); if ( cfg->cond != NULL ) - printf( " " ); + printf( " }" ); + printf( "\n" ); + break; + + case token_hex: printf( "write_hex $cfg $autocfg %s $%s $notmod", - cfg->optionname, cfg->optionname ); + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); if ( cfg->cond != NULL ) printf( " }" ); printf( "\n" ); break; case token_int: - if ( cfg->cond != NULL ) - printf( " " ); printf( "write_int $cfg $autocfg %s $%s $notmod", - cfg->optionname, cfg->optionname ); + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); if ( cfg->cond != NULL ) printf( " }" ); printf( "\n" ); break; case token_string: - if ( cfg->cond != NULL ) - printf( " " ); - printf( "write_string $cfg $autocfg %s $%s $notmod", - cfg->optionname, cfg->optionname ); + printf( "write_string $cfg $autocfg %s \"$%s\" $notmod", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); if ( cfg->cond != NULL ) printf( " }" ); printf( "\n" ); @@ -595,6 +838,113 @@ } } +static void generate_update_var( struct kconfig * scfg, int menu_num ) +{ + struct kconfig * cfg; + + if ( menu_num>0 ) + { + printf( "proc update_define_menu%d {} {\n", menu_num ); + printf( "\tupdate_define_mainmenu\n" ); + } + else + printf( "proc update_define_mainmenu {} {\n" ); + clear_globalflags(); + global( "CONFIG_MODULES" ); + vartable[ get_varnum( "CONFIG_MODULES" ) ].global_written = 1; + for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) + { + if ( cfg->menu_number == menu_num && (cfg->token == token_define_bool || cfg->token == token_define_tristate + || cfg->token == token_define_hex || cfg->token == token_define_int + || cfg->token == token_define_string || cfg->token == token_unset + || cfg->token == token_tristate) ) + { + if ( ! vartable[cfg->nameindex].global_written ) + { + vartable[cfg->nameindex].global_written = 1; + global( vartable[cfg->nameindex].name ); + } + } + } + + for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) + { + char tmp[20]; + struct kconfig * cfg1; + + if ( cfg->menu_number == menu_num ) + { + switch ( cfg->token ) + { + default: + case token_choice_item: + break; + case token_choice_header: + sprintf( tmp, "tmpvar_%d", -(cfg->nameindex) ); + global( tmp ); + for ( cfg1 = cfg->next; + cfg1 != NULL && cfg1->token == token_choice_item; + cfg1 = cfg1->next ) + { + vartable[cfg1->nameindex].global_written = 1; + global( vartable[cfg1->nameindex].name ); + printf( "\tif {$tmpvar_%d == \"%s\"} then {set %s 1} else {set %s 0}\n", + -(cfg->nameindex), cfg1->label, + vartable[cfg1->nameindex].name, + vartable[cfg1->nameindex].name ); + } + break; + case token_bool: + case token_define_bool: + case token_define_tristate: + case token_define_hex: + case token_define_int: + case token_define_string: + case token_dep_bool: + case token_dep_tristate: + case token_dep_mbool: + case token_int: + case token_hex: + case token_mainmenu_option: + case token_tristate: + case token_unset: + if ( cfg->cond != NULL ) + generate_if( cfg, cfg->cond, menu_num, -2 ); + else switch ( cfg->token ) + { + case token_tristate: + printf( "\n\tif {($CONFIG_MODULES == 0)} then {if {($%s == 2)} then {set %s 1}}\n", + vartable[cfg->nameindex].name, vartable[cfg->nameindex].name ); + break; + case token_define_bool: + case token_define_tristate: + if ( ! vartable[get_varnum( cfg->value )].global_written ) + { + vartable[get_varnum( cfg->value )].global_written = 1; + global( cfg->value ); + } + printf( "\tset %s $%s\n", vartable[cfg->nameindex].name, + cfg->value ); + break; + case token_define_hex: + case token_define_int: + printf( "\tset %s %s\n", vartable[cfg->nameindex].name, + cfg->value ); + break; + case token_define_string: + printf( "\tset %s \"%s\"\n", vartable[cfg->nameindex].name, + cfg->value ); + break; + case token_unset: + printf( "\tset %s 4\n", vartable[cfg->nameindex].name ); + default: + break; + } + } + } + } + printf( "}\n\n\n" ); +} /* @@ -603,13 +953,24 @@ static void end_proc( struct kconfig * scfg, int menu_num ) { struct kconfig * cfg; + int i; printf( "\n\n\n" ); printf( "\tfocus $w\n" ); - printf( "\tupdate_menu%d $w.config.f\n", - menu_num ); + printf( "\tupdate_active\n" ); printf( "\tglobal winx; global winy\n" ); - printf( "\tset winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]\n" ); + if ( menu_first[menu_num]->menu_number != 0 ) + { + printf( "\tif {[winfo exists .menu%d] == 0} then ", + menu_first[menu_num]->menu_number ); + printf( "{menu%d .menu%d \"%s\"}\n", + menu_first[menu_num]->menu_number, menu_first[menu_num]->menu_number, + menu_first[menu_first[menu_num]->menu_number]->label ); + printf( "\tset winx [expr [winfo x .menu%d]+30]; set winy [expr [winfo y .menu%d]+30]\n", + menu_first[menu_num]->menu_number, menu_first[menu_num]->menu_number ); + } + else + printf( "\tset winx [expr [winfo x .]+30]; set winy [expr [winfo y .]+30]\n" ); printf( "\twm geometry $w +$winx+$winy\n" ); /* @@ -660,27 +1021,12 @@ * widgets, and will be called first when the window is mapped, * and each time one of the buttons in the window are clicked. */ - printf( "proc update_menu%d {w} {\n", menu_num ); - printf( "\tupdate_define\n" ); + printf( "proc update_menu%d {} {\n", menu_num ); /* * Clear all of the booleans that are defined in this menu. */ - clear_globalflags( scfg ); - for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) - { - if ( cfg->menu_number == menu_num && cfg->token == token_define_bool - && cfg->optionname != NULL ) - { - if ( ! cfg->global_written ) - { - cfg->global_written = 1; - printf( "\tglobal %s\n", cfg->optionname ); - printf( "\tset %s 0\n", cfg->optionname ); - } - } - } - + clear_globalflags(); for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) { if ( cfg->menu_number == menu_num @@ -688,28 +1034,47 @@ && cfg->token != token_choice_item ) { if ( cfg->cond != NULL ) + { + int i; + if ( (cfg->token == token_tristate || cfg->token == token_dep_tristate) + && ! vartable[i = get_varnum( "CONFIG_MODULES" )].global_written ) + { + global( "CONFIG_MODULES" ); + vartable[i].global_written = 1; + } generate_if( cfg, cfg->cond, cfg->menu_number, cfg->menu_line ); + } else { - /* - * Treat tristate like conditional here. - */ - if ( cfg->token == token_dep_tristate ) + if ( cfg->token == token_tristate ) { - global( cfg->depend ); - printf( "\tif {$%s != 1 && $%s != 0 } then { .menu%d.config.f.x%d.y configure -state disabled } else { .menu%d.config.f.x%d.y configure -state normal}\n", - cfg->depend, cfg->depend, + if ( ! vartable[cfg->nameindex].global_written ) + { + vartable[cfg->nameindex].global_written = 1; + printf( "\tglobal %s\n", vartable[cfg->nameindex].name ); + } + if ( ! vartable[i = get_varnum( "CONFIG_MODULES" )].global_written ) + { + global( "CONFIG_MODULES" ); + vartable[i].global_written = 1; + } + printf( "\n\tif {($CONFIG_MODULES == 1)} then {configure_entry .menu%d.config.f.x%d normal {m}} else {configure_entry .menu%d.config.f.x%d disabled {m}}\n", menu_num, cfg->menu_line, menu_num, cfg->menu_line ); } } } + else if ( cfg->token == token_mainmenu_option + && cfg->menu_number == menu_num + && cfg->cond != NULL ) + { + generate_if( cfg, cfg->cond, menu_num, cfg->menu_line ); + } } - printf("}\n\n\n"); -} - + generate_update_var( scfg, menu_num ); +} /* * This is the top level function for generating the tk script. @@ -718,18 +1083,20 @@ { int menu_depth; int menu_num [64]; - struct kconfig * menu_first [256]; - struct kconfig * menu_last [256]; - int imenu; + int imenu, i; + int top_level_num = 0; struct kconfig * cfg; struct kconfig * cfg1 = NULL; const char * name = "No Name"; /* - * Thread the menu pointers so I can walk each menu separately. - */ + * Mark begin and end of each menu so I can omit submenus when walking + * over a parent menu. + */ tot_menu_num = 0; menu_depth = 0; + menu_num [0] = 0; + for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) { switch ( cfg->token ) @@ -744,14 +1111,22 @@ case token_mainmenu_option: if ( ++menu_depth >= 64 ) { fprintf( stderr, "menus too deep\n" ); exit( 1 ); } - if ( ++tot_menu_num >= 256 ) + if ( ++tot_menu_num >= 100 ) { fprintf( stderr, "too many menus\n" ); exit( 1 ); } menu_num [menu_depth] = tot_menu_num; menu_first [tot_menu_num] = cfg; menu_last [tot_menu_num] = cfg; + /* + * Note, that menu_number is set to the number of parent + * (upper level) menu. + */ + cfg->menu_number = menu_num[menu_depth - 1]; + if ( menu_depth == 1 ) + ++top_level_num; break; case token_endmenu: + menu_last [menu_num [menu_depth]] = cfg; /* flatten menus with proper scoping */ if ( --menu_depth < 0 ) { fprintf( stderr, "unmatched endmenu\n" ); exit( 1 ); } @@ -760,19 +1135,25 @@ case token_bool: case token_choice_header: case token_choice_item: + case token_dep_bool: case token_dep_tristate: + case token_dep_mbool: case token_hex: case token_int: case token_string: case token_tristate: + cfg->menu_number = menu_num[menu_depth]; if ( menu_depth == 0 ) { fprintf( stderr, "statement not in menu\n" ); exit( 1 ); } - menu_last [menu_num [menu_depth]]->menu_next = cfg; - menu_last [menu_num [menu_depth]] = cfg; - cfg->menu_next = NULL; break; case token_define_bool: + case token_define_hex: + case token_define_int: + case token_define_string: + case token_define_tristate: + case token_unset: + cfg->menu_number = menu_num[menu_depth]; break; } } @@ -784,7 +1165,21 @@ * one blank button * add two to round up for division */ - printf( "set menus_per_column %d\n\n", (tot_menu_num + 4 + 1 + 2) / 3 ); + printf( "set menus_per_column %d\n", (top_level_num + 4 + 1 + 2) / 3 ); + printf( "set total_menus %d\n\n", tot_menu_num ); + + printf( "proc toplevel_menu {num} {\n" ); + for ( imenu = 1; imenu <= tot_menu_num; ++imenu ) + { + int parent = 1; + + if ( menu_first[imenu]->menu_number == 0 ) + parent = menu_first[imenu]->menu_number; + else + printf( "\tif {$num == %d} then {return %d}\n", + imenu, menu_first[imenu]->menu_number ); + } + printf( "\treturn $num\n}\n\n" ); /* * Generate the menus. @@ -793,24 +1188,33 @@ for ( imenu = 1; imenu <= tot_menu_num; ++imenu ) { int menu_line = 0; + int nr_submenu = imenu; - clear_globalflags( scfg ); - start_proc( menu_first[imenu]->label, imenu, 1 ); + clear_globalflags(); + start_proc( menu_first[imenu]->label, imenu, + !menu_first[imenu]->menu_number ); - for ( cfg = menu_first[imenu]; cfg != NULL; cfg = cfg->menu_next ) + for ( cfg = menu_first[imenu]->next; cfg != NULL && cfg != menu_last[imenu]; cfg = cfg->next ) { - cfg->menu_number = imenu; - switch ( cfg->token ) { default: break; + case token_mainmenu_option: + while ( menu_first[++nr_submenu]->menu_number > imenu ) + ; + cfg->menu_line = menu_line++; + printf( "\tsubmenu $w.config.f %d %d \"%s\" %d\n", + cfg->menu_number, cfg->menu_line, cfg->label, nr_submenu ); + cfg = menu_last[nr_submenu]; + break; + case token_bool: cfg->menu_line = menu_line++; printf( "\tbool $w.config.f %d %d \"%s\" %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname ); + vartable[cfg->nameindex].name ); break; case token_choice_header: @@ -819,54 +1223,62 @@ * help text from Documentation/Configure.help. */ cfg->menu_line = menu_line++; - printf( "\tglobal %s\n", cfg->optionname ); - printf( "\tminimenu $w.config.f %d %d \"%s\" %s %s\n", + printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) ); + printf( "\tminimenu $w.config.f %d %d \"%s\" tmpvar_%d %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname, cfg->next->optionname ); + -(cfg->nameindex), vartable[cfg->next->nameindex].name ); printf( "\tmenu $w.config.f.x%d.x.menu\n", cfg->menu_line ); cfg1 = cfg; break; case token_choice_item: /* note: no menu line; uses choice header menu line */ - printf( "\t$w.config.f.x%d.x.menu add radiobutton -label \"%s\" -variable %s -value \"%s\" -command \"update_menu%d .menu%d.config.f\"\n", - cfg1->menu_line, cfg->label, cfg1->optionname, - cfg->label, cfg1->menu_number, cfg1->menu_number ); + printf( "\t$w.config.f.x%d.x.menu add radiobutton -label \"%s\" -variable tmpvar_%d -value \"%s\" -command \"update_active\"\n", + cfg1->menu_line, cfg->label, -(cfg1->nameindex), + cfg->label ); + break; + + case token_dep_bool: + case token_dep_mbool: + cfg->menu_line = menu_line++; + printf( "\tdep_bool $w.config.f %d %d \"%s\" %s\n", + cfg->menu_number, cfg->menu_line, cfg->label, + vartable[cfg->nameindex].name ); break; case token_dep_tristate: cfg->menu_line = menu_line++; - printf( "\tdep_tristate $w.config.f %d %d \"%s\" %s %s\n", + printf( "\tdep_tristate $w.config.f %d %d \"%s\" %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname, cfg->depend ); + vartable[cfg->nameindex].name ); break; case token_hex: cfg->menu_line = menu_line++; printf( "\thex $w.config.f %d %d \"%s\" %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname ); + vartable[cfg->nameindex].name ); break; case token_int: cfg->menu_line = menu_line++; printf( "\tint $w.config.f %d %d \"%s\" %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname ); + vartable[cfg->nameindex].name ); break; case token_string: cfg->menu_line = menu_line++; printf( "\tistring $w.config.f %d %d \"%s\" %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname ); + vartable[cfg->nameindex].name ); break; case token_tristate: cfg->menu_line = menu_line++; printf( "\ttristate $w.config.f %d %d \"%s\" %s\n", cfg->menu_number, cfg->menu_line, cfg->label, - cfg->optionname ); + vartable[cfg->nameindex].name ); break; } } @@ -875,36 +1287,21 @@ } /* - * The top level menu also needs an update function. When we exit a + * The top level menu also needs an update function. When we update a * submenu, we may need to disable one or more of the submenus on * the top level menu, and this procedure will ensure that things are * correct. */ - clear_globalflags( scfg ); - printf( "proc update_mainmenu {w} {\n" ); - for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) + clear_globalflags(); + printf( "proc update_mainmenu {} {\n" ); + for ( imenu = 1; imenu <= tot_menu_num; imenu++ ) { - if ( cfg->token == token_mainmenu_option && cfg->cond != NULL ) - generate_if( cfg, cfg->cond, cfg->menu_number, cfg->menu_line ); + if ( menu_first[imenu]->cond != NULL && menu_first[imenu]->menu_number == 0 ) + generate_if( menu_first[imenu], menu_first[imenu]->cond, imenu, -1 ); } printf( "}\n\n\n" ); -#if 0 - /* - * Generate code to set the variables that are "defined". - */ - for ( cfg = config; cfg != NULL; cfg = cfg->next ) - { - if ( cfg->token == token_define_bool ) - { - if ( cfg->cond != NULL ) - generate_if( cfg, cfg->cond, menu_num, cfg->menu_line ); - else - printf( "\twrite_define %s %s\n", cfg->optionname, cfg->value ); - } - } - #endif - + clear_globalflags(); /* * Generate code to load the default settings into the variables. * The script in tail.tk will attempt to load .config, @@ -919,27 +1316,51 @@ case token_bool: case token_choice_item: + case token_dep_bool: case token_dep_tristate: + case token_dep_mbool: case token_tristate: - printf( "set %s 0\n", cfg->optionname ); + if ( ! vartable[cfg->nameindex].global_written ) + { + printf( "set %s 0\n", vartable[cfg->nameindex].name ); + vartable[cfg->nameindex].global_written = 1; + } break; case token_choice_header: - printf( "set %s \"(not set)\"\n", cfg->optionname ); + printf( "set tmpvar_%d \"(not set)\"\n", -(cfg->nameindex) ); break; case token_hex: case token_int: - printf( "set %s %s\n", cfg->optionname, cfg->value ? cfg->value : "0"); + if ( ! vartable[cfg->nameindex].global_written ) + { + printf( "set %s %s\n", vartable[cfg->nameindex].name, cfg->value ? cfg->value : "0" ); + vartable[cfg->nameindex].global_written = 1; + } break; case token_string: - printf( "set %s \"%s\"\n", cfg->optionname, cfg->value ? cfg->value : ""); + if ( ! vartable[cfg->nameindex].global_written ) + { + printf( "set %s \"%s\"\n", vartable[cfg->nameindex].name, cfg->value ); + vartable[cfg->nameindex].global_written = 1; + } break; } } /* + * Define to an empty value all other variables (which are never defined) + */ + for ( i = 1; i <= max_varnum; i++ ) + { + if ( ! vartable[i].global_written + && strncmp( vartable[i].name, "CONSTANT_", 9 ) ) + printf( "set %s 4\n", vartable[i].name ); + } + + /* * Generate a function to write all of the variables to a file. */ printf( "proc writeconfig {file1 file2} {\n" ); @@ -956,7 +1377,7 @@ printf( "\tputs $autocfg \" */\"\n" ); printf( "\tputs $autocfg \"#define AUTOCONF_INCLUDED\"\n" ); - clear_globalflags( scfg ); + clear_globalflags(); for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) { switch ( cfg->token ) @@ -968,7 +1389,13 @@ case token_choice_header: case token_comment: case token_define_bool: + case token_define_hex: + case token_define_int: + case token_define_string: + case token_define_tristate: + case token_dep_bool: case token_dep_tristate: + case token_dep_mbool: case token_hex: case token_int: case token_string: @@ -996,7 +1423,8 @@ cfg1 = cfg1->next ) { printf( "\tglobal %s; set %s 0\n", - cfg1->optionname, cfg1->optionname ); + vartable[cfg1->nameindex].name, + vartable[cfg1->nameindex].name ); } } } @@ -1007,41 +1435,22 @@ { if ( cfg->token == token_choice_header ) { - printf( "\tglobal %s\n", cfg->optionname ); + printf( "\tglobal tmpvar_%d\n", -(cfg->nameindex) ); + printf("\tset tmpvar_%d \"%s\"\n", -(cfg->nameindex), cfg->value); for ( cfg1 = cfg->next; cfg1 != NULL && cfg1->token == token_choice_item; cfg1 = cfg1->next ) { - printf( "\tglobal %s\n", cfg1->optionname ); - printf( "\tif { $%s == 1 } then { set %s \"%s\" }\n", - cfg1->optionname, cfg->optionname, cfg1->label ); + printf( "\tglobal %s\n", vartable[cfg1->nameindex].name ); + printf( "\tif { $%s == 1 } then { set tmpvar_%d \"%s\" }\n", + vartable[cfg1->nameindex].name, + -(cfg->nameindex), cfg1->label ); } } } printf( "}\n\n\n" ); - printf( "proc update_define { } {\n" ); - clear_globalflags( scfg ); - for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) - { - if ( cfg->token == token_define_bool ) - { - cfg->global_written = 1; - printf( "\tglobal %s\n", cfg->optionname ); - } - } - - for ( cfg = scfg; cfg != NULL; cfg = cfg->next ) - { - if( cfg->token == token_define_bool ) - { - if ( cfg->cond == NULL ) - printf( "\tset %s %s\n", cfg->optionname, cfg->value ); - else - generate_if( cfg, cfg->cond, -1, 0 ); - } - } - printf( "}\n\n\n" ); + generate_update_var( scfg, 0 ); /* * That's it. We are done. The output of this file will have header.tk diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/tkparse.c linux.16p3/scripts/tkparse.c --- linux.vanilla/scripts/tkparse.c Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/tkparse.c Wed Apr 19 14:05:06 2000 @@ -29,6 +29,17 @@ * 23 January 1999, Michael Elizabeth Chastain, * - Remove bug-compatible code. * + * 07 July 1999, Andrzej M. Krzysztofowicz, + * - Submenus implemented, + * - plenty of option updating/displaying fixes, + * - dep_bool, define_hex, define_int, define_string, define_tristate and + * undef implemented, + * - dep_tristate fixed to support multiple dependencies, + * - handling of variables with an empty value implemented, + * - value checking for int and hex fields, + * - more checking during condition parsing; choice variables are treated as + * all others now, + * * TO DO: * - xconfig is at the end of its life cycle. Contact if * you are interested in working on the replacement. @@ -51,8 +62,6 @@ int my_strcmp( const char * s1, const char * s2 ) { return strcmp( s1, s2 ); } #define strcmp my_strcmp - - /* * Report a syntax error. */ @@ -65,6 +74,30 @@ /* + * Find index of a specyfic variable in the symbol table. + * Create a new entry if it does not exist yet. + */ +#define VARTABLE_SIZE 2048 +struct variable vartable[VARTABLE_SIZE]; +int max_varnum = 0; + +int get_varnum( char * name ) +{ + int i; + + for ( i = 1; i <= max_varnum; i++ ) + if ( strcmp( vartable[i].name, name ) == 0 ) + return i; + if (max_varnum > VARTABLE_SIZE-1) + syntax_error( "Too many variables defined." ); + vartable[++max_varnum].name = malloc( strlen( name )+1 ); + strcpy( vartable[max_varnum].name, name ); + return max_varnum; +} + + + +/* * Get a string. */ static const char * get_string( const char * pnt, char ** label ) @@ -138,6 +171,7 @@ } + /* * Tokenize an 'if' statement condition. */ @@ -145,6 +179,7 @@ { struct condition * list; struct condition * last; + struct condition * prev; /* eat the open bracket */ while ( *pnt == ' ' || *pnt == '\t' ) @@ -170,30 +205,53 @@ cond = malloc( sizeof(*cond) ); memset( cond, 0, sizeof(*cond) ); if ( last == NULL ) - { list = last = cond; } + { list = last = cond; prev = NULL; } else - { last->next = cond; last = cond; } + { prev = last; last->next = cond; last = cond; } /* determine the token value */ if ( *pnt == '-' && pnt[1] == 'a' ) - { cond->op = op_and; pnt += 2; continue; } + { + if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) ) + syntax_error( "incorrect argument" ); + cond->op = op_and; pnt += 2; continue; + } if ( *pnt == '-' && pnt[1] == 'o' ) - { cond->op = op_or; pnt += 2; continue; } + { + if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) ) + syntax_error( "incorrect argument" ); + cond->op = op_or; pnt += 2; continue; + } if ( *pnt == '!' && pnt[1] == '=' ) - { cond->op = op_neq; pnt += 2; continue; } + { + if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) ) + syntax_error( "incorrect argument" ); + cond->op = op_neq; pnt += 2; continue; + } if ( *pnt == '=' ) - { cond->op = op_eq; pnt += 1; continue; } + { + if ( ! prev || ( prev->op != op_variable && prev->op != op_constant ) ) + syntax_error( "incorrect argument" ); + cond->op = op_eq; pnt += 1; continue; + } if ( *pnt == '!' ) - { cond->op = op_bang; pnt += 1; continue; } + { + if ( prev && ( prev->op != op_and && prev->op != op_or + && prev->op != op_bang ) ) + syntax_error( "incorrect argument" ); + cond->op = op_bang; pnt += 1; continue; + } if ( *pnt == '"' ) { const char * word; + if ( prev && ( prev->op == op_variable || prev->op == op_constant ) ) + syntax_error( "incorrect argument" ); /* advance to the word */ pnt++; if ( *pnt == '$' ) @@ -217,7 +275,15 @@ char * str = malloc( pnt - word + 1 ); memcpy( str, word, pnt - word ); str [pnt - word] = '\0'; - cond->str = str; + if ( cond->op == op_variable ) + { + cond->nameindex = get_varnum( str ); + free( str ); + } + else /* op_constant */ + { + cond->str = str; + } } pnt++; @@ -241,6 +307,7 @@ for ( ; ; ) { struct kconfig * cfg; + char * buffer = malloc( 64 ); /* skip whitespace */ while ( *pnt == ' ' || *pnt == '\t' ) @@ -262,7 +329,8 @@ pnt = get_string( pnt, &cfg->label ); while ( *pnt == ' ' || *pnt == '\t' ) pnt++; - pnt = get_string( pnt, &cfg->optionname ); + pnt = get_string( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); } return pnt; @@ -270,8 +338,6 @@ - - /* * Tokenize one line. */ @@ -280,6 +346,8 @@ static struct kconfig * last_menuoption = NULL; enum e_token token; struct kconfig * cfg; + struct dependency ** dep_ptr; + char * buffer = malloc( 64 ); /* skip white space */ while ( *pnt == ' ' || *pnt == '\t' ) @@ -313,6 +381,12 @@ case 'd': match_token( token_define_bool, "define_bool" ); + match_token( token_define_hex, "define_hex" ); + match_token( token_define_int, "define_int" ); + match_token( token_define_string, "define_string" ); + match_token( token_define_tristate, "define_tristate" ); + match_token( token_dep_bool, "dep_bool" ); + match_token( token_dep_mbool, "dep_mbool" ); match_token( token_dep_tristate, "dep_tristate" ); break; @@ -371,11 +445,13 @@ syntax_error( "bogus 'then'" ); } +#if 0 if ( token == token_unset ) { fprintf( stderr, "Ignoring 'unset' command\n" ); return; } +#endif if ( token == token_UNKNOWN ) syntax_error( "unknown command" ); @@ -404,8 +480,9 @@ case token_bool: case token_tristate: - pnt = get_qstring ( pnt, &cfg->label ); - pnt = get_string ( pnt, &cfg->optionname ); + pnt = get_qstring ( pnt, &cfg->label ); + pnt = get_string ( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); break; case token_choice_header: @@ -417,9 +494,7 @@ pnt = get_qstring ( pnt, &choice_list ); pnt = get_string ( pnt, &cfg->value ); - cfg->optionname = malloc( 32 ); - sprintf( cfg->optionname, "tmpvar_%d", choose_number++ ); - + cfg->nameindex = -(choose_number++); tokenize_choices( cfg, choice_list ); free( choice_list ); } @@ -436,56 +511,134 @@ break; case token_define_bool: - pnt = get_string( pnt, &cfg->optionname ); + case token_define_tristate: + pnt = get_string( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); while ( *pnt == ' ' || *pnt == '\t' ) pnt++; - if ( *pnt == 'n' || *pnt == 'N' ) cfg->value = "0"; - else if ( *pnt == 'y' || *pnt == 'Y' ) cfg->value = "1"; - else if ( *pnt == 'm' || *pnt == 'M' ) cfg->value = "2"; + if ( ( pnt[0] == 'Y' || pnt[0] == 'M' || pnt[0] == 'N' + || pnt[0] == 'y' || pnt[0] == 'm' || pnt[0] == 'n' ) + && ( pnt[1] == '\0' || pnt[1] == ' ' || pnt[1] == '\t' ) ) + { + if ( *pnt == 'n' || *pnt == 'N' ) cfg->value = strdup( "CONSTANT_N" ); + else if ( *pnt == 'y' || *pnt == 'Y' ) cfg->value = strdup( "CONSTANT_Y" ); + else if ( *pnt == 'm' || *pnt == 'M' ) cfg->value = strdup( "CONSTANT_M" ); + } + else if ( *pnt == '$' ) + { + pnt++; + pnt = get_string( pnt, &cfg->value ); + } else { syntax_error( "unknown define_bool value" ); } + get_varnum( cfg->value ); + break; + + case token_define_hex: + case token_define_int: + pnt = get_string( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); + pnt = get_string( pnt, &cfg->value ); break; + case token_define_string: + pnt = get_string( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); + pnt = get_qstring( pnt, &cfg->value ); + break; + + case token_dep_bool: + case token_dep_mbool: case token_dep_tristate: - pnt = get_qstring ( pnt, &cfg->label ); - pnt = get_string ( pnt, &cfg->optionname ); + pnt = get_qstring ( pnt, &cfg->label ); + pnt = get_string ( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); while ( *pnt == ' ' || *pnt == '\t' ) pnt++; - if ( ( pnt[0] == 'Y' || pnt[0] == 'M' || pnt[0] == 'N' - || pnt[0] == 'y' || pnt[0] == 'm' || pnt[0] == 'n' ) - && ( pnt[1] == '\0' || pnt[1] == ' ' || pnt[1] == '\t' ) ) - { - /* dep_tristate 'foo' CONFIG_FOO m */ - if ( pnt[0] == 'Y' || pnt[0] == 'y' ) - cfg->depend = strdup( "CONSTANT_Y" ); - else if ( pnt[0] == 'M' || pnt[0] == 'm' ) - cfg->depend = strdup( "CONSTANT_M" ); + dep_ptr = &(cfg->depend); + + do { + *dep_ptr = (struct dependency *) malloc( sizeof( struct dependency ) ); + (*dep_ptr)->next = NULL; + + if ( ( pnt[0] == 'Y' || pnt[0] == 'M' || pnt[0] == 'N' + || pnt[0] == 'y' || pnt[0] == 'm' || pnt[0] == 'n' ) + && ( pnt[1] == '\0' || pnt[1] == ' ' || pnt[1] == '\t' ) ) + { + /* dep_tristate 'foo' CONFIG_FOO m */ + if ( pnt[0] == 'Y' || pnt[0] == 'y' ) + (*dep_ptr)->name = strdup( "CONSTANT_Y" ); + else if ( pnt[0] == 'N' || pnt[0] == 'n' ) + (*dep_ptr)->name = strdup( "CONSTANT_N" ); + else + (*dep_ptr)->name = strdup( "CONSTANT_M" ); + pnt++; + get_varnum( (*dep_ptr)->name ); + } + else if ( *pnt == '$' ) + { + pnt++; + pnt = get_string( pnt, &(*dep_ptr)->name ); + get_varnum( (*dep_ptr)->name ); + } else - cfg->depend = strdup( "CONSTANT_N" ); - pnt++; - } - else if ( *pnt == '$' ) - { - pnt++; - pnt = get_string( pnt, &cfg->depend ); - } - else - { - syntax_error( "can't handle dep_tristate condition" ); - } + { + syntax_error( "can't handle dep_bool/dep_mbool/dep_tristate condition" ); + } + dep_ptr = &(*dep_ptr)->next; + while ( *pnt == ' ' || *pnt == '\t' ) + pnt++; + } while ( *pnt ); /* - * Create a conditional for this object's dependency. + * Create a conditional for this object's dependencies. */ { char fake_if [1024]; - sprintf( fake_if, "[ \"$%s\" = \"y\" -o \"$%s\" = \"m\" ]; then", - cfg->depend, cfg->depend ); - cfg->cond = tokenize_if( fake_if ); + struct dependency * dep; + struct condition ** cond_ptr; + int first = 1; + + cond_ptr = &(cfg->cond); + for ( dep = cfg->depend; dep; dep = dep->next ) + { + if ( token == token_dep_tristate + && ! strcmp( dep->name, "CONSTANT_M" ) ) + { + continue; + } + if ( first ) + { + first = 0; + } + else + { + *cond_ptr = malloc( sizeof(struct condition) ); + memset( *cond_ptr, 0, sizeof(struct condition) ); + (*cond_ptr)->op = op_and; + cond_ptr = &(*cond_ptr)->next; + } + *cond_ptr = malloc( sizeof(struct condition) ); + memset( *cond_ptr, 0, sizeof(struct condition) ); + (*cond_ptr)->op = op_lparen; + if ( token == token_dep_bool ) + sprintf( fake_if, "[ \"$%s\" = \"y\" -o \"$%s\" = \"\" ]; then", + dep->name, dep->name ); + else + sprintf( fake_if, "[ \"$%s\" = \"y\" -o \"$%s\" = \"m\" -o \"$%s\" = \"\" ]; then", + dep->name, dep->name, dep->name ); + (*cond_ptr)->next = tokenize_if( fake_if ); + while ( *cond_ptr ) + cond_ptr = &(*cond_ptr)->next; + *cond_ptr = malloc( sizeof(struct condition) ); + memset( *cond_ptr, 0, sizeof(struct condition) ); + (*cond_ptr)->op = op_rparen; + cond_ptr = &(*cond_ptr)->next; + } } break; @@ -496,15 +649,17 @@ case token_hex: case token_int: - pnt = get_qstring ( pnt, &cfg->label ); - pnt = get_string ( pnt, &cfg->optionname ); - pnt = get_string ( pnt, &cfg->value ); + pnt = get_qstring ( pnt, &cfg->label ); + pnt = get_string ( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); + pnt = get_string ( pnt, &cfg->value ); break; case token_string: - pnt = get_qstring ( pnt, &cfg->label ); - pnt = get_string ( pnt, &cfg->optionname ); - pnt = get_qstring ( pnt, &cfg->value ); + pnt = get_qstring ( pnt, &cfg->label ); + pnt = get_string ( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); + pnt = get_qstring ( pnt, &cfg->value ); break; case token_if: @@ -521,8 +676,25 @@ else pnt = get_qstring( pnt, &cfg->label ); break; - } + case token_unset: + pnt = get_string( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); + while ( *pnt == ' ' || *pnt == '\t' ) + pnt++; + while (*pnt) + { + cfg->next = (struct kconfig *) malloc( sizeof(struct kconfig) ); + memset( cfg->next, 0, sizeof(struct kconfig) ); + cfg = cfg->next; + cfg->token = token_unset; + pnt = get_string( pnt, &buffer ); + cfg->nameindex = get_varnum( buffer ); + while ( *pnt == ' ' || *pnt == '\t' ) + pnt++; + } + break; + } return; } diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/scripts/tkparse.h linux.16p3/scripts/tkparse.h --- linux.vanilla/scripts/tkparse.h Fri Apr 21 12:47:18 2000 +++ linux.16p3/scripts/tkparse.h Wed Apr 19 14:05:06 2000 @@ -14,6 +14,12 @@ token_choice_item, token_comment, token_define_bool, + token_define_hex, + token_define_int, + token_define_string, + token_define_tristate, + token_dep_bool, + token_dep_mbool, token_dep_tristate, token_else, token_endmenu, @@ -46,7 +52,8 @@ op_rparen, op_constant, op_variable, - op_kvariable, + op_true, + op_false, op_nuked }; @@ -55,21 +62,29 @@ * Some operators take strings: * * op_constant "foo" - * op_variable "$ARCH", "$CONFIG_PMAC" - * op_kvariable "$CONFIG_EXPERIMENTAL" + * op_variable "$ARCH", "$CONFIG_PMAC", "$CONFIG_EXPERIMENTAL" * * Most "$..." constructs refer to a variable which is defined somewhere - * in the script, so they become op_kvariable's instead. Note that it - * is legal to test variables which are never defined, such as variables - * that are meaningful only on other architectures. + * in the script. Note that it is legal to test variables which are never + * defined, such as variables that are meaningful only on other architectures. */ struct condition { - struct condition * next; - enum operator op; - const char * str; /* op_constant, op_variable */ - struct kconfig * cfg; /* op_kvariable */ + struct condition * next; + enum operator op; + const char * str; /* op_constant */ + int nameindex; /* op_variable */ +}; + +/* + * Dependency list for dep_bool, dep_mbool, dep_tristate + */ + +struct dependency +{ + char * name; + struct dependency * next; }; /* @@ -80,21 +95,28 @@ { struct kconfig * next; enum e_token token; - char * optionname; + int nameindex; char * label; char * value; struct condition * cond; - char * depend; /* token_dep_tristate */ + struct dependency * depend; /* token_dep_tristate */ struct kconfig * cfg_parent; /* token_choice_item */ /* used only in tkgen.c */ - char global_written; int menu_number; int menu_line; struct kconfig * menu_next; }; +struct variable +{ + char * name; + char defined; + char global_written; +}; +extern struct variable vartable[]; +extern int max_varnum; /* * Prototypes @@ -102,3 +124,4 @@ extern void fix_conditionals ( struct kconfig * scfg ); /* tkcond.c */ extern void dump_tk_script ( struct kconfig * scfg ); /* tkgen.c */ +extern int get_varnum ( char * name ); /* tkparse.c */